{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/react/index.js","webpack:///./react/features/base/redux/ReducerRegistry.js","webpack:///./react/features/base/redux/StateListenerRegistry.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./react/features/base/lib-jitsi-meet/index.js","webpack:///./react/features/analytics/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread.js","webpack:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///./node_modules/i18next/dist/esm/i18next.js","webpack:///./node_modules/i18next-xhr-backend/dist/esm/i18nextXHRBackend.js","webpack:///./react/features/base/i18n/configLanguageDetector.js","webpack:///./react/features/base/i18n/customNavigatorDetector.js","webpack:///./react/features/base/i18n/languageDetector.web.js","webpack:///./react/features/base/i18n/i18next.js","webpack:///./react/features/base/i18n/dateUtil.js","webpack:///./react/features/base/icons/svg/add.svg","webpack:///./react/features/base/icons/svg/arrow_back.svg","webpack:///./react/features/base/icons/svg/arrow_down.svg","webpack:///./react/features/base/icons/svg/arrow_down_large.svg","webpack:///./react/features/base/icons/svg/arrow-down-small.svg","webpack:///./react/features/base/icons/svg/icon-arrow-down-wide.svg","webpack:///./react/features/base/icons/svg/arrow_up.svg","webpack:///./react/features/base/icons/svg/icon-arrow-up-wide.svg","webpack:///./react/features/base/icons/svg/arrow-left.svg","webpack:///./react/features/base/icons/svg/visibility-off.svg","webpack:///./react/features/base/icons/svg/volume.svg","webpack:///./react/features/base/icons/svg/calendar-plus.svg","webpack:///./react/features/base/icons/svg/plus-circle.svg","webpack:///./react/features/base/icons/svg/camera.svg","webpack:///./react/features/base/icons/svg/camera-disabled.svg","webpack:///./react/features/base/icons/svg/camera-empty.svg","webpack:///./react/features/base/icons/svg/camera-empty-disabled.svg","webpack:///./react/features/base/icons/svg/camera-refresh.svg","webpack:///./react/features/base/icons/svg/cancel.svg","webpack:///./react/features/base/icons/svg/chat.svg","webpack:///./react/features/base/icons/svg/chat-unread.svg","webpack:///./react/features/base/icons/svg/check.svg","webpack:///./react/features/base/icons/svg/close.svg","webpack:///./react/features/base/icons/svg/close-circle.svg","webpack:///./react/features/base/icons/svg/close-x.svg","webpack:///./react/features/base/icons/svg/closed_caption.svg","webpack:///./react/features/base/icons/svg/close-small.svg","webpack:///./react/features/base/icons/svg/code-block.svg","webpack:///./react/features/base/icons/svg/gsm-bars.svg","webpack:///./react/features/base/icons/svg/ninja.svg","webpack:///./react/features/base/icons/svg/copy.svg","webpack:///./react/features/base/icons/svg/crown.svg","webpack:///./react/features/base/icons/svg/headset.svg","webpack:///./react/features/base/icons/svg/document.svg","webpack:///./react/features/base/icons/svg/dominant-speaker.svg","webpack:///./react/features/base/icons/svg/download.svg","webpack:///./react/features/base/icons/svg/drag-handle.svg","webpack:///./react/features/base/icons/svg/e2ee.svg","webpack:///./react/features/base/icons/svg/edit.svg","webpack:///./react/features/base/icons/svg/envelope.svg","webpack:///./react/features/base/icons/svg/event_note.svg","webpack:///./react/features/base/icons/svg/exclamation.svg","webpack:///./react/features/base/icons/svg/exclamation-solid.svg","webpack:///./react/features/base/icons/svg/exit-full-screen.svg","webpack:///./react/features/base/icons/svg/feedback.svg","webpack:///./react/features/base/icons/svg/full-screen.svg","webpack:///./react/features/base/icons/svg/google.svg","webpack:///./react/features/base/icons/svg/hangup.svg","webpack:///./react/features/base/icons/svg/help.svg","webpack:///./react/features/base/icons/svg/horizontal-points.svg","webpack:///./react/features/base/icons/svg/info.svg","webpack:///./react/features/base/icons/svg/user-plus.svg","webpack:///./react/features/base/icons/svg/kick.svg","webpack:///./react/features/base/icons/svg/live-streaming.svg","webpack:///./react/features/base/icons/svg/menu.svg","webpack:///./react/features/base/icons/svg/menu-down.svg","webpack:///./react/features/base/icons/svg/thumb-menu.svg","webpack:///./react/features/base/icons/svg/menu-up.svg","webpack:///./react/features/base/icons/svg/message.svg","webpack:///./react/features/base/icons/svg/meter.svg","webpack:///./react/features/base/icons/svg/mic-blocked.svg","webpack:///./react/features/base/icons/svg/mic-disabled.svg","webpack:///./react/features/base/icons/svg/microphone.svg","webpack:///./react/features/base/icons/svg/microphone-empty.svg","webpack:///./react/features/base/icons/svg/microphone-empty-slash.svg","webpack:///./react/features/base/icons/svg/microphone-hollow.svg","webpack:///./react/features/base/icons/svg/star.svg","webpack:///./react/features/base/icons/svg/mute-everyone.svg","webpack:///./react/features/base/icons/svg/mute-everyone-else.svg","webpack:///./react/features/base/icons/svg/mute-video-everyone.svg","webpack:///./react/features/base/icons/svg/mute-video-everyone-else.svg","webpack:///./react/features/base/icons/svg/open_in_new.svg","webpack:///./react/features/base/icons/svg/office365.svg","webpack:///./react/features/base/icons/svg/participants.svg","webpack:///./react/features/base/icons/svg/phone.svg","webpack:///./react/features/base/icons/svg/enlarge.svg","webpack:///./react/features/base/icons/svg/paper-plane.svg","webpack:///./react/features/base/icons/svg/presentation.svg","webpack:///./react/features/base/icons/svg/raised-hand.svg","webpack:///./react/features/base/icons/svg/raised-hand-hollow.svg","webpack:///./react/features/base/icons/svg/rec.svg","webpack:///./react/features/base/icons/svg/play.svg","webpack:///./react/features/base/icons/svg/stop.svg","webpack:///./react/features/base/icons/svg/reply.svg","webpack:///./react/features/base/icons/svg/security-locked.svg","webpack:///./react/features/base/icons/svg/security-off.svg","webpack:///./react/features/base/icons/svg/security-on.svg","webpack:///./react/features/base/icons/svg/search.svg","webpack:///./react/features/base/icons/svg/settings.svg","webpack:///./react/features/base/icons/svg/share.svg","webpack:///./react/features/base/icons/svg/share-audio.svg","webpack:///./react/features/base/icons/svg/share-desktop.svg","webpack:///./react/features/base/icons/svg/share-doc.svg","webpack:///./react/features/base/icons/svg/shared-video.svg","webpack:///./react/features/base/icons/svg/smile.svg","webpack:///./react/features/base/icons/svg/stop-audio-share.svg","webpack:///./react/features/base/icons/svg/switch-camera.svg","webpack:///./react/features/base/icons/svg/tiles-many.svg","webpack:///./react/features/base/icons/svg/camera-take-picture.svg","webpack:///./react/features/base/icons/svg/trash.svg","webpack:///./react/features/base/icons/svg/video-off.svg","webpack:///./react/features/base/icons/svg/AUD.svg","webpack:///./react/features/base/icons/svg/HD.svg","webpack:///./react/features/base/icons/svg/LD.svg","webpack:///./react/features/base/icons/svg/SD.svg","webpack:///./react/features/base/icons/svg/user-groups.svg","webpack:///./react/features/base/icons/svg/virtual-background.svg","webpack:///./react/features/base/icons/svg/volume-empty.svg","webpack:///./react/features/base/icons/svg/volume-off.svg","webpack:///./react/features/base/icons/svg/warning.svg","webpack:///./react/features/base/icons/svg/wifi-1.svg","webpack:///./react/features/base/icons/svg/wifi-2.svg","webpack:///./react/features/base/icons/svg/wifi-3.svg","webpack:///./react/features/base/icons/svg/yahoo.svg","webpack:///./react/features/base/icons/svg/sip.svg","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/@emotion/sheet/dist/sheet.browser.esm.js","webpack:///./node_modules/@emotion/stylis/dist/stylis.browser.esm.js","webpack:///./node_modules/@emotion/cache/dist/cache.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/emotion-element-57a3a7a3.browser.esm.js","webpack:///./node_modules/@emotion/css/dist/css.browser.esm.js","webpack:///./node_modules/@emotion/core/dist/core.browser.esm.js","webpack:///./react/features/base/media/components/web/AudioTrack.js","webpack:///./react/features/base/media/components/AbstractVideoTrack.js","webpack:///./react/features/base/media/components/web/VideoTrack.js","webpack:///./react/features/base/conference/index.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./react/features/base/dialog/components/AbstractDialog.js","webpack:///./node_modules/react-uid/dist/es2015/context.js","webpack:///./node_modules/react-uid/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/react-uid/dist/es2015/UIDComponent.js","webpack:///./node_modules/react-uid/dist/es2015/Control.js","webpack:///./node_modules/@atlaskit/ds-lib/dist/esm/utils/noop.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/blanket/dist/esm/blanket.js","webpack:///./node_modules/@atlaskit/blanket/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/shared-variables.js","webpack:///./node_modules/@emotion/styled-base/node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","webpack:///./node_modules/@emotion/styled-base/dist/styled-base.browser.esm.js","webpack:///./node_modules/@emotion/styled/dist/styled.browser.esm.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/es2019/shared-variables.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/es2019/styled/Modal.js","webpack:///./react/features/base/dialog/components/web/ThemedDialog.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/react-transition-group/esm/config.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/react-transition-group/esm/TransitionGroupContext.js","webpack:///./node_modules/@atlaskit/modal-dialog/node_modules/react-transition-group/esm/Transition.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Animation.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/styled/Content.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Footer.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Header.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Content.js","webpack:///./node_modules/use-callback-ref/dist/es2015/useMergeRef.js","webpack:///./node_modules/use-callback-ref/dist/es2015/useRef.js","webpack:///./node_modules/use-callback-ref/dist/es2015/assignRef.js","webpack:///./node_modules/react-focus-lock/dist/es2015/FocusGuard.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/use-sidecar/dist/es2015/medium.js","webpack:///./node_modules/react-focus-lock/dist/es2015/medium.js","webpack:///./node_modules/react-focus-lock/dist/es2015/Lock.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/constants.js","webpack:///./node_modules/react-clientside-effect/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///./node_modules/react-clientside-effect/lib/index.es.js","webpack:///./node_modules/react-clientside-effect/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/react-clientside-effect/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/array.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/all-affected.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/focusInside.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/correctFocus.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/firstFocus.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/is.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/solver.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabOrder.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabUtils.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabbables.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/DOMutils.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/utils/parenting.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/focusMerge.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/setFocus.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/index.js","webpack:///./node_modules/react-focus-lock/dist/es2015/util.js","webpack:///./node_modules/react-focus-lock/dist/es2015/Trap.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/focusIsHidden.js","webpack:///./node_modules/react-focus-lock/node_modules/focus-lock/dist/es2015/focusables.js","webpack:///./node_modules/react-focus-lock/dist/es2015/Combination.js","webpack:///./node_modules/react-focus-lock/dist/es2015/index.js","webpack:///./node_modules/react-focus-lock/dist/es2015/MoveFocusInside.js","webpack:///./react/features/base/util/react-focus-lock-wrapper.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/FocusLock.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Positioner.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/Modal.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/ModalTransition.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/StackConsumer.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/esm/components/ModalWrapper.js","webpack:///./node_modules/@atlaskit/modal-dialog/dist/es2019/styled/Content.js","webpack:///./react/features/base/dialog/components/web/ModalHeader.js","webpack:///./react/features/base/dialog/components/web/StatelessDialog.js","webpack:///./react/features/base/dialog/components/web/Dialog.js","webpack:///./react/features/base/dialog/components/AbstractDialogContainer.js","webpack:///./react/features/base/dialog/components/web/DialogContainer.js","webpack:///./react/features/base/dialog/logger.js","webpack:///./react/features/base/dialog/components/web/DialogWithTabs.js","webpack:///./react/features/base/dialog/components/DialogContent.js","webpack:///./node_modules/styled-components/dist/styled-components.browser.esm.js","webpack:///./react/features/base/tracks/index.js","webpack:///./react/features/base/util/timeoutPromise.js","webpack:///./react/features/base/util/httpUtils.js","webpack:///./react/features/base/util/loadScript.web.js","webpack:///./react/features/base/util/openURLInBrowser.web.js","webpack:///./react/features/base/util/uri.js","webpack:///./react/features/base/util/strings.web.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./react/features/notifications/index.js","webpack:///./react/features/base/logging/functions.js","webpack:///./react/features/base/react/index.js","webpack:///./react/features/base/settings/index.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./react/features/video-layout/logger.js","webpack:///./react/features/video-layout/components/TileViewButton.js","webpack:///./react/features/base/toolbox/components/AbstractToolboxItem.js","webpack:///./react/features/base/toolbox/components/ToolboxItem.web.js","webpack:///./react/features/base/toolbox/components/AbstractButton.js","webpack:///./react/features/base/toolbox/components/AbstractAudioMuteButton.js","webpack:///./react/features/base/toolbox/components/AbstractHangupButton.js","webpack:///./react/features/base/toolbox/components/AbstractVideoMuteButton.js","webpack:///./react/features/base/toolbox/components/BetaTag.js","webpack:///./react/features/base/toolbox/components/web/OverflowMenuItem.js","webpack:///./react/features/base/toolbox/components/web/ToolboxButtonWithIcon.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/@babel/runtime/helpers/extends.js","webpack:///./react/features/base/devices/index.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/prop-types/index.js","webpack:///./react/features/filmstrip/constants.js","webpack:///./node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js","webpack:///./react/features/base/conference/actionTypes.js","webpack:///./react/features/base/app/logger.js","webpack:///./react/features/base/app/components/BaseApp.js","webpack:///./react/features/base/app/actions.js","webpack:///./react/features/base/app/functions.js","webpack:///./node_modules/react-redux/es/components/Context.js","webpack:///./node_modules/react-redux/es/utils/batch.js","webpack:///./node_modules/react-redux/es/utils/Subscription.js","webpack:///./node_modules/react-redux/es/components/Provider.js","webpack:///./node_modules/react-redux/es/components/connectAdvanced.js","webpack:///./node_modules/react-redux/es/utils/shallowEqual.js","webpack:///./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack:///./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack:///./node_modules/react-redux/es/connect/mapStateToProps.js","webpack:///./node_modules/react-redux/es/connect/mergeProps.js","webpack:///./node_modules/react-redux/es/connect/selectorFactory.js","webpack:///./node_modules/react-redux/es/connect/connect.js","webpack:///./node_modules/react-redux/es/hooks/useReduxContext.js","webpack:///./node_modules/react-redux/es/hooks/useDispatch.js","webpack:///./node_modules/react-redux/es/hooks/useStore.js","webpack:///./node_modules/react-redux/es/hooks/useSelector.js","webpack:///./node_modules/react-redux/es/index.js","webpack:///./node_modules/moment/moment.js","webpack:///./react/features/base/environment/utils.js","webpack:///./react/features/base/config/index.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./react/features/base/media/constants.js","webpack:///./react/features/base/sounds/actions.js","webpack:///./react/features/base/sounds/components/SoundCollection.js","webpack:///./react/features/base/participants/actionTypes.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./react/features/base/participants/preloadImage.web.js","webpack:///./react/features/base/participants/functions.js","webpack:///./react/features/base/connection/index.js","webpack:///./react/features/remote-control/constants.js","webpack:///./react/features/base/flags/constants.js","webpack:///./react/features/base/lib-jitsi-meet/_.web.js","webpack:///./react/features/app/logger.js","webpack:///./react/features/app/actions.js","webpack:///./react/features/base/tracks/actionTypes.js","webpack:///./react/features/jaas/functions.js","webpack:///./react/features/recording/constants.js","webpack:///./node_modules/jitsi-meet-logger/lib/index.js","webpack:///./react/features/prejoin/functions.js","webpack:///./react/features/participants-pane/constants.js","webpack:///./service/UI/UIEvents.js","webpack:///./react/features/invite/constants.js","webpack:///./react/features/base/config/interfaceConfigWhitelist.js","webpack:///./react/features/base/config/logger.js","webpack:///./react/features/base/config/functions.any.js","webpack:///./react/features/base/config/functions.web.js","webpack:///./modules/UI/videolayout/VideoLayout.js","webpack:///./react/features/invite/functions.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./react/features/toolbox/actions.native.js","webpack:///./react/features/toolbox/actions.web.js","webpack:///./node_modules/@atlaskit/item/dist/esm/util/theme.js","webpack:///./react/features/base/tooltip/components/TooltipWrapper.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./react/features/chat/actions.web.js","webpack:///./react/features/prejoin/actionTypes.js","webpack:///./react/features/prejoin/logger.js","webpack:///./react/features/prejoin/actions.js","webpack:///./react/features/lobby/actions.any.js","webpack:///./react/features/lobby/actions.web.js","webpack:///./react/features/video-quality/constants.js","webpack:///./react/features/toolbox/actionTypes.js","webpack:///./react/features/recording/functions.js","webpack:///./react/features/base/tracks/functions.js","webpack:///./react/features/base/tracks/loadEffects.web.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/react-dom/index.js","webpack:///./react/features/toolbox/functions.web.js","webpack:///./react/features/chat/constants.js","webpack:///./react/features/virtual-background/constants.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./react/features/base/devices/actionTypes.js","webpack:///./react/features/base/styles/index.js","webpack:///./react/features/google-api/googleApi.web.js","webpack:///./react/features/google-api/actions.js","webpack:///./react/features/google-api/components/AbstractGoogleSignInButton.js","webpack:///./react/features/google-api/components/GoogleSignInButton.web.js","webpack:///./react/features/av-moderation/actionTypes.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./react/features/base/conference/functions.js","webpack:///./react/features/shared-video/constants.js","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./react/features/remote-control/keycodes.js","webpack:///./react/features/remote-control/functions.js","webpack:///./react/features/settings/functions.js","webpack:///./react/features/participants-pane/functions.js","webpack:///./react/features/filmstrip/actions.native.js","webpack:///./react/features/filmstrip/actions.web.js","webpack:///./react/features/av-moderation/actions.js","webpack:///./react/features/filmstrip/actionTypes.js","webpack:///./react/features/calendar-sync/actionTypes.js","webpack:///./react/features/invite/index.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./react/features/base/participants/constants.js","webpack:///./react/features/chat/actionTypes.js","webpack:///./react/features/reactions/actionTypes.js","webpack:///./react/features/remote-control/actionTypes.js","webpack:///./react/features/remote-control/logger.js","webpack:///./modules/API/constants.js","webpack:///./react/features/calendar-sync/actions.any.js","webpack:///./react/features/calendar-sync/actions.web.js","webpack:///./react/features/notifications/constants.js","webpack:///./react/features/base/media/actionTypes.js","webpack:///./react/features/invite/actionTypes.js","webpack:///./node_modules/@atlaskit/item/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./react/features/base/dialog/actions.js","webpack:///./react/features/av-moderation/functions.js","webpack:///./react/features/base/connection/actionTypes.js","webpack:///./react/features/local-recording/logger.js","webpack:///./react/features/local-recording/recording/RecordingAdapter.js","webpack:///./react/features/local-recording/recording/OggAdapter.js","webpack:///./react/features/local-recording/recording/AbstractAudioContextAdapter.js","webpack:///./react/features/local-recording/recording/WavAdapter.js","webpack:///./react/features/local-recording/recording/flac/FlacAdapter.js","webpack:///./react/features/local-recording/recording/flac/messageTypes.js","webpack:///./react/features/local-recording/session/SessionManager.js","webpack:///./react/features/local-recording/controller/RecordingController.js","webpack:///./react/features/local-recording/recording/Utils.js","webpack:///./react/features/base/premeeting/components/web/ActionButton.js","webpack:///./react/features/base/premeeting/components/web/InputField.js","webpack:///./react/features/base/premeeting/constants.js","webpack:///./react/features/base/premeeting/functions.js","webpack:///./react/features/base/premeeting/components/web/ConnectionStatus.js","webpack:///./react/features/base/premeeting/components/web/CopyMeetingUrl.js","webpack:///./react/features/base/premeeting/components/web/Preview.js","webpack:///./react/features/base/premeeting/components/web/PreMeetingScreen.js","webpack:///./react/features/base/premeeting/components/web/ToggleButton.js","webpack:///./react/features/video-menu/actions.web.js","webpack:///./node_modules/react-i18next/dist/es/context.js","webpack:///./node_modules/react-i18next/dist/es/utils.js","webpack:///./node_modules/react-i18next/dist/es/useTranslation.js","webpack:///./node_modules/react-i18next/dist/es/withTranslation.js","webpack:///./node_modules/react-i18next/dist/es/I18nextProvider.js","webpack:///./react/features/base/avatar/components/AbstractStatelessAvatar.js","webpack:///./react/features/base/avatar/components/web/StatelessAvatar.js","webpack:///./react/features/base/avatar/functions.js","webpack:///./react/features/base/avatar/components/Avatar.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./react/features/remote-control/actions.js","webpack:///./react/features/e2ee/actions.js","webpack:///./node_modules/@babel/runtime/helpers/objectSpread.js","webpack:///./react/features/base/sounds/actionTypes.js","webpack:///./react/features/base/devices/functions.js","webpack:///./react/features/authentication/logger.js","webpack:///./react/features/authentication/actions.any.js","webpack:///./react/features/authentication/actions.web.js","webpack:///./node_modules/@hapi/bourne/lib/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///./react/features/notifications/actions.js","webpack:///./react/features/base/react/components/AbstractContainer.js","webpack:///./react/features/base/react/components/web/Container.js","webpack:///./react/features/settings/components/web/LogoutDialog.js","webpack:///./react/features/settings/components/web/SettingsButton.js","webpack:///./react/features/settings/logger.js","webpack:///./react/features/settings/components/web/CalendarTab.js","webpack:///./react/features/settings/components/web/MoreTab.js","webpack:///./react/features/settings/components/web/ProfileTab.js","webpack:///./react/features/settings/actions.js","webpack:///./react/features/settings/components/web/SoundsTab.js","webpack:///./react/features/settings/components/web/SettingsDialog.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsHeader.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsEntry.js","webpack:///./react/features/settings/components/web/audio/Meter.js","webpack:///./react/features/settings/components/web/audio/MicrophoneEntry.js","webpack:///./react/features/settings/components/web/audio/TestButton.js","webpack:///./react/features/settings/components/web/audio/SpeakerEntry.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsContent.js","webpack:///./react/features/settings/components/web/audio/AudioSettingsPopup.js","webpack:///./react/features/settings/components/web/video/VideoSettingsContent.js","webpack:///./react/features/settings/components/web/video/VideoSettingsPopup.js","webpack:///./react/features/base/config/actionTypes.js","webpack:///./react/features/google-api/constants.js","webpack:///./react/features/presence-status/constants.js","webpack:///./react/features/presence-status/components/PresenceLabel.js","webpack:///./react/features/presence-status/functions.js","webpack:///./react/features/authentication/actionTypes.js","webpack:///./react/features/base/participants/logger.js","webpack:///./react/features/base/participants/actions.js","webpack:///(webpack)/buildin/global.js","webpack:///./react/features/jaas/constants.js","webpack:///./react/features/filmstrip/components/web/AudioMutedIndicator.js","webpack:///./react/features/filmstrip/components/web/DominantSpeakerIndicator.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/react-window/dist/index.esm.js","webpack:///./react/features/filmstrip/components/web/AudioTracksContainer.js","webpack:///./react/features/audio-level-indicator/components/AudioLevelIndicator.js","webpack:///./react/features/filmstrip/logger.js","webpack:///./react/features/filmstrip/components/web/Thumbnail.js","webpack:///./react/features/filmstrip/components/web/ThumbnailWrapper.js","webpack:///./react/features/filmstrip/components/web/Filmstrip.js","webpack:///./react/features/filmstrip/components/web/ModeratorIndicator.js","webpack:///./react/features/filmstrip/components/AbstractRaisedHandIndicator.js","webpack:///./react/features/filmstrip/components/web/RaisedHandIndicator.js","webpack:///./react/features/filmstrip/components/web/ScreenShareIndicator.js","webpack:///./react/features/filmstrip/components/web/VideoMutedIndicator.js","webpack:///./react/features/filmstrip/components/web/StatusIndicators.js","webpack:///./react/features/display-name/actions.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./react/features/video-quality/logger.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///./react/features/virtual-background/logger.js","webpack:///./react/features/video-layout/functions.js","webpack:///./react/features/settings/constants.js","webpack:///./react/features/shared-video/actions.any.js","webpack:///./react/features/recording/logger.js","webpack:///./react/features/recording/actions.any.js","webpack:///./react/features/recording/actions.web.js","webpack:///./react/features/recording/actionTypes.js","webpack:///./react/features/base/app/actionTypes.js","webpack:///./react/features/base/label/components/AbstractLabel.js","webpack:///./react/features/base/label/components/Label.web.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./react/features/base/environment/environment.js","webpack:///./react/features/base/lib-jitsi-meet/actionTypes.js","webpack:///./react/features/base/react/Platform.web.js","webpack:///./react/features/subtitles/actionTypes.js","webpack:///./react/features/calendar-sync/constants.js","webpack:///./react/features/reactions/actions.any.js","webpack:///./react/features/authentication/components/web/WaitForOwnerDialog.js","webpack:///./react/features/authentication/components/web/LoginDialog.js","webpack:///./react/features/calendar-sync/components/AddMeetingUrlButton.web.js","webpack:///./react/features/calendar-sync/components/JoinButton.web.js","webpack:///./react/features/calendar-sync/components/CalendarListContent.web.js","webpack:///./react/features/calendar-sync/components/CalendarList.web.js","webpack:///./react/features/calendar-sync/components/MicrosoftSignInButton.web.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/AtlaskitThemeProvider.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/index.js","webpack:///./react/features/prejoin/index.js","webpack:///./react/features/lobby/actionTypes.js","webpack:///./node_modules/process/browser.js","webpack:///./react/features/virtual-background/functions.js","webpack:///./node_modules/redux/es/redux.js","webpack:///./react/features/app/functions.web.js","webpack:///./react/features/video-layout/actionTypes.js","webpack:///./react/features/filmstrip/functions.web.js","webpack:///./react/features/base/conference/actions.js","webpack:///./react/features/reactions/constants.js","webpack:///./react/features/screen-share/index.js","webpack:///./react/features/calendar-sync/functions.any.js","webpack:///./react/features/calendar-sync/web/googleCalendar.js","webpack:///./react/features/calendar-sync/web/microsoftCalendar.js","webpack:///./react/features/calendar-sync/functions.web.js","webpack:///./node_modules/react-popper/lib/esm/utils.js","webpack:///./node_modules/@atlaskit/icon/cjs/components/Icon.js","webpack:///./react/features/base/i18n/functions.js","webpack:///./react/features/subtitles/components/AbstractCaptions.js","webpack:///./react/features/subtitles/components/Captions.web.js","webpack:///./react/features/subtitles/components/AbstractClosedCaptionButton.js","webpack:///./react/features/subtitles/components/ClosedCaptionButton.web.js","webpack:///./react/features/invite/actions.any.js","webpack:///./react/features/videosipgw/actions.js","webpack:///./react/features/base/lib-jitsi-meet/functions.any.js","webpack:///./react/features/base/lib-jitsi-meet/functions.web.js","webpack:///./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack:///./modules/UI/util/UIUtil.js","webpack:///./react/features/invite/logger.js","webpack:///./react/features/e2ee/actionTypes.js","webpack:///./react/features/notifications/actionTypes.js","webpack:///./react/features/base/devices/logger.js","webpack:///./react/features/shared-video/actionTypes.js","webpack:///./react/features/base/tracks/logger.js","webpack:///./node_modules/uuid/index.js","webpack:///./react/features/base/responsive-ui/constants.js","webpack:///./node_modules/@atlaskit/icon/glyph/warning.js","webpack:///./react/features/etherpad/actionTypes.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/useTrackedRef.js","webpack:///./react/features/large-video/actionTypes.js","webpack:///./react/features/overlay/components/web/OverlayFrame.js","webpack:///./react/features/overlay/logger.js","webpack:///./react/features/overlay/components/web/ReloadButton.js","webpack:///./react/features/overlay/components/AbstractPageReloadOverlay.js","webpack:///./react/features/overlay/components/web/PageReloadOverlay.js","webpack:///./react/features/overlay/components/web/AbstractSuspendedOverlay.js","webpack:///./react/features/overlay/components/web/SuspendedOverlay.js","webpack:///./react/features/overlay/components/web/AbstractUserMediaPermissionsOverlay.js","webpack:///./react/features/overlay/components/web/UserMediaPermissionsOverlay.js","webpack:///./react/features/overlay/components/web/AbstractSlowGUMOverlay.js","webpack:///./react/features/overlay/components/web/SlowGUMOverlay.js","webpack:///./react/features/overlay/functions.js","webpack:///./react/features/overlay/overlays.web.js","webpack:///./react/features/overlay/components/OverlayContainer.js","webpack:///./react/features/etherpad/components/SharedDocumentButton.js","webpack:///./react/features/etherpad/functions.js","webpack:///./react/features/base/settings/actionTypes.js","webpack:///./react/features/dynamic-branding/functions.js","webpack:///./react/features/virtual-background/actions.js","webpack:///./react/features/video-menu/components/web/VideoMenuButton.js","webpack:///./react/features/video-menu/components/web/ConnectionStatusButton.js","webpack:///./react/features/video-menu/components/AbstractGrantModeratorButton.js","webpack:///./react/features/video-menu/components/web/GrantModeratorButton.js","webpack:///./react/features/video-menu/components/AbstractGrantModeratorDialog.js","webpack:///./react/features/video-menu/components/web/GrantModeratorDialog.js","webpack:///./react/features/video-menu/components/AbstractKickButton.js","webpack:///./react/features/video-menu/components/web/KickButton.js","webpack:///./react/features/video-menu/components/AbstractKickRemoteParticipantDialog.js","webpack:///./react/features/video-menu/components/web/KickRemoteParticipantDialog.js","webpack:///./react/features/video-menu/components/AbstractMuteButton.js","webpack:///./react/features/video-menu/components/web/MuteButton.js","webpack:///./react/features/video-menu/components/AbstractMuteVideoButton.js","webpack:///./react/features/video-menu/components/web/MuteVideoButton.js","webpack:///./react/features/video-menu/components/AbstractMuteEveryoneDialog.js","webpack:///./react/features/video-menu/components/web/MuteEveryoneDialog.js","webpack:///./react/features/video-menu/components/AbstractMuteEveryonesVideoDialog.js","webpack:///./react/features/video-menu/components/web/MuteEveryonesVideoDialog.js","webpack:///./react/features/video-menu/components/AbstractMuteEveryoneElseButton.js","webpack:///./react/features/video-menu/components/web/MuteEveryoneElseButton.js","webpack:///./react/features/video-menu/components/AbstractMuteEveryoneElsesVideoButton.js","webpack:///./react/features/video-menu/components/web/MuteEveryoneElsesVideoButton.js","webpack:///./react/features/video-menu/components/web/PrivateMessageMenuButton.js","webpack:///./react/features/video-menu/components/web/RemoteControlButton.js","webpack:///./react/features/video-menu/components/web/VideoMenu.js","webpack:///./react/features/video-menu/components/web/RemoteVideoMenuTriggerButton.js","webpack:///./react/features/video-menu/components/web/FlipLocalVideoButton.js","webpack:///./react/features/video-menu/components/web/LocalVideoMenuTriggerButton.js","webpack:///./react/features/video-menu/components/web/VolumeSlider.js","webpack:///./react/features/video-menu/constants.js","webpack:///./react/features/video-layout/actions.js","webpack:///./react/features/power-monitor/actionTypes.js","webpack:///./react/features/screen-share/actionTypes.js","webpack:///./react/features/large-video/actions.web.js","webpack:///./node_modules/use-memo-one/dist/use-memo-one.esm.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/events/AnalyticsEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/events/UIAnalyticsEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/useAnalyticsEvents.js","webpack:///./react/features/base/testing/components/TestConnectionInfo.js","webpack:///./node_modules/@jitsi/js-utils/jitsi-local-storage/index.js","webpack:///./react/features/base/conference/constants.js","webpack:///./react/features/feedback/actionTypes.js","webpack:///./react/features/local-recording/actionTypes.js","webpack:///./react/features/feedback/components/FeedbackButton.web.js","webpack:///./node_modules/@atlaskit/field-text-area/dist/esm/styled/TextArea.js","webpack:///./node_modules/@atlaskit/field-text-area/dist/esm/FieldTextAreaStateless.js","webpack:///./react/features/feedback/components/FeedbackDialog.web.js","webpack:///./react/features/feedback/actions.js","webpack:///./react/features/feedback/logger.js","webpack:///./react/features/feedback/functions.js","webpack:///./react/features/dropbox/functions.web.js","webpack:///./react/features/dropbox/actions.js","webpack:///./react/features/dropbox/logger.js","webpack:///./react/features/dropbox/functions.any.js","webpack:///./node_modules/@emotion/hash/dist/hash.browser.esm.js","webpack:///./node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack:///./node_modules/@emotion/serialize/dist/serialize.browser.esm.js","webpack:///./react/features/base/audio-only/logger.js","webpack:///./react/features/base/audio-only/actions.js","webpack:///./react/features/reactions/logger.js","webpack:///./react/features/reactions/functions.any.js","webpack:///./node_modules/@emotion/utils/dist/utils.browser.esm.js","webpack:///./react/features/recording/index.js","webpack:///./modules/UI/videolayout/Filmstrip.js","webpack:///./react/features/participants-pane/actionTypes.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/colors.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/css.js","webpack:///./react/features/google-api/actionTypes.js","webpack:///./modules/UI/util/MessageHandler.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./modules/transport/index.js","webpack:///./react/features/video-quality/actions.js","webpack:///./react/features/screen-share/components/ShareScreenWarningDialog.js","webpack:///./react/features/screen-share/actions.js","webpack:///./node_modules/events/events.js","webpack:///./react/features/base/known-domains/index.js","webpack:///./react/features/base/media/functions.js","webpack:///./react/features/base/devices/actions.js","webpack:///./react/features/base/testing/functions.js","webpack:///./react/features/video-quality/actionTypes.js","webpack:///./node_modules/react-redux/node_modules/invariant/browser.js","webpack:///./react/features/base/media/actions.js","webpack:///./react/features/base/media/logger.js","webpack:///./react/features/base/conference/logger.js","webpack:///./react/features/connection-indicator/components/web/ConnectionIndicator.js","webpack:///./react/features/base/redux/logger.js","webpack:///./react/features/authentication/functions.js","webpack:///./modules/UI/videolayout/VideoContainer.js","webpack:///./node_modules/exenv/index.js","webpack:///./react/features/base/util/parseURLParams.js","webpack:///./react/features/base/jwt/actionTypes.js","webpack:///./react/features/base/audio-only/actionTypes.js","webpack:///./react/features/base/config/constants.js","webpack:///./react/features/subtitles/actions.js","webpack:///./node_modules/@atlaskit/icon/glyph/chevron-down.js","webpack:///./node_modules/@atlaskit/icon/glyph/error.js","webpack:///./react/features/shared-video/functions.js","webpack:///./react/features/base/dialog/actionTypes.js","webpack:///./react/features/base/jwt/index.js","webpack:///./react/features/screen-share/functions.js","webpack:///./react/features/settings/actionTypes.js","webpack:///./react/features/chat/index.js","webpack:///./react/features/etherpad/actions.js","webpack:///./react/features/stream-effects/rnnoise/RnnoiseProcessor.js","webpack:///./react/features/stream-effects/rnnoise/index.js","webpack:///./react/features/conference/functions.any.js","webpack:///./react/features/conference/functions.web.js","webpack:///./node_modules/@jitsi/js-utils/transport/PostMessageTransportBackend.js","webpack:///./node_modules/@jitsi/js-utils/transport/Transport.js","webpack:///./node_modules/@jitsi/js-utils/transport/constants.js","webpack:///./react/features/jaas/components/web/PremiumFeatureDialog.js","webpack:///./react/features/jaas/actions.web.js","webpack:///./node_modules/@jitsi/js-utils/random/randomUtil.js","webpack:///./node_modules/@jitsi/js-utils/random/roomNameGenerator.js","webpack:///./react/features/base/tracks/actions.js","webpack:///./react/features/virtual-background/actionTypes.js","webpack:///./react/features/toolbox/components/AudioMuteButton.js","webpack:///./react/features/toolbox/components/web/AudioSettingsButton.js","webpack:///./react/features/toolbox/components/VideoMuteButton.js","webpack:///./react/features/toolbox/components/web/VideoSettingsButton.js","webpack:///./react/features/toolbox/components/AbstractToolbarButton.js","webpack:///./react/features/toolbox/components/web/ToolbarButton.js","webpack:///./react/features/embed-meeting/components/EmbedMeetingButton.js","webpack:///./react/features/reactions/components/web/ReactionButton.js","webpack:///./react/features/reactions/components/web/ReactionEmoji.js","webpack:///./react/features/reactions/actions.web.js","webpack:///./react/features/reactions/components/web/ReactionsMenu.js","webpack:///./react/features/reactions/functions.web.js","webpack:///./react/features/reactions/components/web/ReactionsMenuPopup.js","webpack:///./react/features/reactions/components/web/ReactionsMenuButton.js","webpack:///./react/features/security/components/security-dialog/SecurityDialogButton.js","webpack:///./react/features/security/actions.js","webpack:///./react/features/toolbox/constants.js","webpack:///./react/features/toolbox/components/DownloadButton.js","webpack:///./react/features/toolbox/components/HangupButton.js","webpack:///./react/features/toolbox/components/HelpButton.js","webpack:///./react/features/toolbox/components/MuteEveryoneButton.js","webpack:///./react/features/toolbox/components/MuteEveryonesVideoButton.js","webpack:///./react/features/toolbox/components/web/FullscreenButton.js","webpack:///./react/features/toolbox/components/web/Drawer.js","webpack:///./react/features/toolbox/components/web/DrawerPortal.js","webpack:///./react/features/toolbox/components/web/OverflowMenuButton.js","webpack:///./react/features/toolbox/components/web/ProfileButtonAvatar.js","webpack:///./react/features/toolbox/components/web/ProfileButton.js","webpack:///./react/features/toolbox/components/web/RaiseHandButton.js","webpack:///./react/features/toolbox/components/web/Separator.js","webpack:///./react/features/toolbox/components/web/ShareDesktopButton.js","webpack:///./react/features/toolbox/components/web/ToggleCameraButton.js","webpack:///./react/features/toolbox/components/web/Toolbox.js","webpack:///./react/features/analytics/logger.js","webpack:///./react/features/analytics/handlers/AbstractHandler.js","webpack:///./react/features/analytics/handlers/AmplitudeHandler.js","webpack:///./react/features/analytics/handlers/MatomoHandler.js","webpack:///./react/features/analytics/functions.js","webpack:///./react/features/overlay/actionTypes.js","webpack:///./react/features/dynamic-branding/actionTypes.js","webpack:///./react/features/shared-video/components/web/AbstractVideoManager.js","webpack:///./react/features/room-lock/index.js","webpack:///./react/features/base/redux/functions.js","webpack:///./react/features/notifications/functions.js","webpack:///./react/features/local-recording/actions.js","webpack:///./react/features/display-name/components/web/DisplayName.js","webpack:///./react/features/display-name/components/AbstractDisplayNamePrompt.js","webpack:///./react/features/display-name/components/web/DisplayNamePrompt.js","webpack:///./react/features/display-name/components/web/DisplayNameBadge.js","webpack:///./react/features/display-name/components/web/DominantSpeakerName.js","webpack:///./react/features/base/styles/functions.any.js","webpack:///./react/features/base/styles/functions.web.js","webpack:///./react/features/room-lock/components/PasswordRequiredPrompt.web.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./react/features/video-layout/constants.js","webpack:///./modules/util/helpers.js","webpack:///./react/features/videosipgw/actionTypes.js","webpack:///./modules/keyboardshortcut/keyboardshortcut.js","webpack:///./react/features/connection-indicator/statsEmitter.js","webpack:///./react/features/video-menu/index.js","webpack:///./react/features/large-video/components/LargeVideo.web.js","webpack:///./react/features/large-video/components/LargeVideoBackground.web.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./react/features/base/util/helpers.js","webpack:///./react/features/base/known-domains/actionTypes.js","webpack:///./react/features/base/flags/actionTypes.js","webpack:///./react/features/base/media/components/web/Video.js","webpack:///./react/features/base/color-scheme/actionTypes.js","webpack:///./react/features/base/jwt/functions.js","webpack:///./react/features/embed-meeting/components/EmbedMeetingDialog.js","webpack:///./react/features/device-selection/functions.js","webpack:///./react/features/chat/components/PrivateMessageButton.js","webpack:///./react/features/chat/actions.any.js","webpack:///./react/features/room-lock/actions.js","webpack:///./react/features/base/lastn/actionTypes.js","webpack:///./react/features/base/lastn/functions.js","webpack:///./react/features/chat/components/AbstractChat.js","webpack:///./react/features/chat/components/web/ChatDialogHeader.js","webpack:///./react/features/chat/components/web/ChatDialog.js","webpack:///./node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","webpack:///./node_modules/use-latest/dist/use-latest.esm.js","webpack:///./node_modules/use-composed-ref/dist/use-composed-ref.esm.js","webpack:///./node_modules/react-textarea-autosize/dist/react-textarea-autosize.browser.esm.js","webpack:///./node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./react/features/chat/smileys.js","webpack:///./react/features/chat/components/web/SmileysPanel.js","webpack:///./react/features/chat/components/web/ChatInput.js","webpack:///./react/features/chat/components/web/KeyboardAvoider.js","webpack:///./react/features/chat/components/web/DisplayNameForm.js","webpack:///./react/features/chat/components/AbstractMessageContainer.js","webpack:///./react/features/chat/components/AbstractChatMessage.js","webpack:///./react/features/chat/components/web/ChatMessage.js","webpack:///./react/features/chat/components/web/ChatMessageGroup.js","webpack:///./react/features/chat/components/web/MessageContainer.js","webpack:///./react/features/chat/components/AbstractMessageRecipient.js","webpack:///./react/features/chat/components/web/MessageRecipient.js","webpack:///./react/features/chat/components/web/Chat.js","webpack:///./react/features/chat/components/web/ChatCounter.js","webpack:///./react/features/chat/components/web/ChatButton.js","webpack:///./react/features/chat/components/AbstractChatPrivacyDialog.js","webpack:///./react/features/chat/components/web/ChatPrivacyDialog.js","webpack:///./react/features/base/net-info/constants.js","webpack:///./connection.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/durations.js","webpack:///./react/features/jaas/actionTypes.js","webpack:///./react/features/power-monitor/actions.js","webpack:///./react/features/base/media/components/Video.web.js","webpack:///./react/features/follow-me/index.js","webpack:///./react/features/video-quality/functions.js","webpack:///./react/features/speaker-stats/components/TimeElapsed.js","webpack:///./react/features/speaker-stats/components/SpeakerStatsItem.js","webpack:///./react/features/speaker-stats/components/SpeakerStatsLabels.js","webpack:///./react/features/speaker-stats/components/SpeakerStats.js","webpack:///./react/features/speaker-stats/components/SpeakerStatsButton.js","webpack:///./react/features/video-quality/components/VideoQualityButton.web.js","webpack:///./react/features/video-quality/components/VideoQualitySlider.web.js","webpack:///./react/features/video-quality/components/VideoQualityDialog.web.js","webpack:///./react/features/video-quality/components/AbstractVideoQualityLabel.js","webpack:///./react/features/video-quality/components/VideoQualityLabel.web.js","webpack:///./react/features/connection-stats/components/ConnectionStatsTable.js","webpack:///./react/features/connection-indicator/components/web/ConnectionIndicatorContent.js","webpack:///./react/features/connection-indicator/actions.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./react/features/base/popover/components/Popover.web.js","webpack:///./react/features/base/net-info/selectors.js","webpack:///./react/features/base/lib-jitsi-meet/actions.js","webpack:///./react/features/base/settings/functions.any.js","webpack:///./react/features/base/settings/functions.web.js","webpack:///./node_modules/@atlaskit/analytics-next-stable-react-context/dist/esm/context.js","webpack:///./node_modules/@atlaskit/analytics-next-stable-react-context/dist/esm/index.js","webpack:///./modules/UI/authentication/AuthHandler.js","webpack:///./node_modules/@atlaskit/field-base/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./react/features/connection-indicator/components/AbstractConnectionIndicator.js","webpack:///./react/features/remote-control/index.js","webpack:///./react/features/device-selection/logger.js","webpack:///./react/features/device-selection/actions.js","webpack:///./react/features/device-selection/components/AudioInputPreview.js","webpack:///./react/features/base/media/components/Audio.web.js","webpack:///./react/features/device-selection/components/AudioOutputPreview.js","webpack:///./react/features/device-selection/components/DeviceSelector.web.js","webpack:///./react/features/device-selection/components/VideoInputPreview.js","webpack:///./react/features/device-selection/components/DeviceSelection.js","webpack:///./node_modules/react-is/index.js","webpack:///./react/features/analytics/AnalyticsEvents.js","webpack:///./react/features/base/settings/actions.js","webpack:///./react/features/base/known-domains/actions.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./react/features/base/connection/functions.js","webpack:///./react/features/etherpad/constants.js","webpack:///./react/features/room-lock/constants.js","webpack:///./react/features/embed-meeting/components/EmbedMeetingTrigger.js","webpack:///./react/features/invite/_utils.js","webpack:///./react/features/invite/components/add-people-dialog/web/DialInNumber.js","webpack:///./react/features/invite/components/add-people-dialog/web/DialInSection.js","webpack:///./react/features/invite/components/add-people-dialog/web/InviteByEmailSection.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/IconForType/styledIconForType.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/IconForType/index.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/InlineMessage/styledInlineMessage.js","webpack:///./node_modules/@atlaskit/inline-message/dist/esm/components/InlineMessage/index.js","webpack:///./react/features/invite/components/add-people-dialog/AbstractAddPeopleDialog.js","webpack:///./react/features/invite/components/add-people-dialog/web/InviteContactsForm.js","webpack:///./react/features/invite/components/add-people-dialog/web/InviteContactsSection.js","webpack:///./react/features/invite/components/add-people-dialog/web/LiveStreamSection.js","webpack:///./react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js","webpack:///./react/features/invite/components/dial-in-summary/web/ConferenceID.js","webpack:///./react/features/invite/components/dial-in-summary/web/NumbersList.js","webpack:///./react/features/invite/components/dial-in-summary/web/DialInSummary.js","webpack:///./react/features/invite/components/callee-info/CalleeInfo.js","webpack:///./react/features/invite/components/callee-info/CalleeInfoContainer.js","webpack:///./react/features/lobby/components/AbstractKnockingParticipantList.js","webpack:///./react/features/lobby/components/web/KnockingParticipantList.js","webpack:///./react/features/lobby/components/web/LobbySection.js","webpack:///./react/features/lobby/components/AbstractLobbyScreen.js","webpack:///./react/features/lobby/components/web/LobbyScreen.js","webpack:///./react/features/base/connection/logger.js","webpack:///./react/features/base/connection/actions.native.js","webpack:///./react/features/base/connection/actions.web.js","webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./react/features/av-moderation/constants.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/curves.js","webpack:///./node_modules/react-scrolllock/dist/index.js","webpack:///./node_modules/jwt-decode/lib/index.js","webpack:///./modules/UI/UIErrors.js","webpack:///./react/features/calendar-sync/logger.js","webpack:///./react/features/chat/components/web/TouchmoveHack.js","webpack:///./react/features/lobby/index.js","webpack:///./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///./react/features/participants-pane/actions.any.js","webpack:///./node_modules/react-scrolllock/dist/utils.js","webpack:///./node_modules/@jitsi/js-utils/avatar/index.js","webpack:///./react/features/base/redux/MiddlewareRegistry.js","webpack:///./react/features/base/redux/PersistenceRegistry.js","webpack:///./react/features/base/settings/constants.js","webpack:///./react/features/base/config/actions.js","webpack:///./react/features/base/config/getRoomName.js","webpack:///./react/features/base/flags/functions.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/elevation.js","webpack:///./react/features/base/dialog/functions.js","webpack:///./react/features/base/dialog/components/web/AbstractDialogTab.js","webpack:///./react/features/base/connection/constants.js","webpack:///./react/features/overlay/actions.js","webpack:///./react/features/base/jwt/actions.js","webpack:///./react/features/base/jwt/constants.js","webpack:///./react/features/display-name/functions.js","webpack:///./react/features/follow-me/functions.js","webpack:///./react/features/video-menu/actions.any.js","webpack:///./react/features/large-video/actions.any.js","webpack:///./react/features/video-menu/components/web/MuteRemoteParticipantDialog.js","webpack:///./react/features/video-menu/components/web/MuteRemoteParticipantsVideoDialog.js","webpack:///./node_modules/react-emoji-render/data/asciiAliases.js","webpack:///./react/features/participants-pane/components/ParticipantsPaneButton.js","webpack:///./react/features/base/lastn/actions.js","webpack:///./node_modules/@material-ui/styles/esm/getThemeProps/getThemeProps.js","webpack:///./node_modules/@material-ui/styles/esm/withStyles/withStyles.js","webpack:///./node_modules/@material-ui/core/esm/styles/withStyles.js","webpack:///./react/features/recording/components/AbstractRecordingLabel.js","webpack:///./react/features/recording/components/web/RecordingLabel.js","webpack:///./react/features/recording/components/web/RecordingLimitNotificationDescription.js","webpack:///./react/features/recording/components/LiveStream/AbstractLiveStreamButton.js","webpack:///./react/features/recording/components/LiveStream/web/LiveStreamButton.js","webpack:///./react/features/recording/components/LiveStream/AbstractStartLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/AbstractStreamKeyForm.js","webpack:///./react/features/recording/components/LiveStream/web/StreamKeyForm.js","webpack:///./react/features/recording/components/LiveStream/constants.js","webpack:///./react/features/recording/components/LiveStream/web/StreamKeyPicker.js","webpack:///./react/features/recording/components/LiveStream/web/StartLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/AbstractStopLiveStreamDialog.js","webpack:///./react/features/recording/components/LiveStream/web/StopLiveStreamDialog.js","webpack:///./react/features/recording/components/Recording/AbstractRecordButton.js","webpack:///./react/features/recording/components/Recording/web/RecordButton.js","webpack:///./react/features/recording/components/Recording/AbstractStartRecordingDialog.js","webpack:///./react/features/recording/components/Recording/StartRecordingDialogContent.js","webpack:///./react/features/recording/components/Recording/styles.web.js","webpack:///./react/features/recording/components/Recording/web/StartRecordingDialog.js","webpack:///./react/features/recording/components/Recording/AbstractStopRecordingDialog.js","webpack:///./react/features/recording/components/Recording/web/StopRecordingDialog.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/theme.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/expander.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/flag-actions.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/entering/slide-in.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/flag-group.js","webpack:///./node_modules/@atlaskit/flag/dist/esm/flag.js","webpack:///./react/features/notifications/components/AbstractNotification.js","webpack:///./react/features/notifications/components/web/Notification.js","webpack:///./react/features/notifications/components/AbstractNotificationsContainer.js","webpack:///./react/features/notifications/components/web/NotificationsContainer.js","webpack:///./react/features/prejoin/components/Label.js","webpack:///./react/features/prejoin/components/dialogs/CallingDialog.js","webpack:///./react/features/prejoin/utils.js","webpack:///./react/features/prejoin/components/dialogs/DialInDialog.js","webpack:///./react/features/prejoin/components/country-picker/CountryRow.js","webpack:///./react/features/prejoin/components/country-picker/CountryDropdown.js","webpack:///./react/features/prejoin/components/country-picker/CountrySelector.js","webpack:///./react/features/prejoin/components/country-picker/CountryPicker.js","webpack:///./react/features/prejoin/components/dialogs/DialOutDialog.js","webpack:///./react/features/prejoin/components/dialogs/JoinByPhoneDialog.js","webpack:///./react/features/prejoin/components/preview/DeviceStatus.js","webpack:///./react/features/prejoin/components/Prejoin.js","webpack:///./react/features/shared-video/components/web/VideoManager.js","webpack:///./node_modules/react-youtube/dist/index.esm.js","webpack:///./react/features/shared-video/components/web/YoutubeVideoManager.js","webpack:///./react/features/shared-video/components/web/SharedVideo.js","webpack:///./react/features/shared-video/components/web/SharedVideoButton.js","webpack:///./react/features/shared-video/components/AbstractSharedVideoDialog.js","webpack:///./react/features/shared-video/components/web/SharedVideoDialog.js","webpack:///./react/features/base/styles/components/styles/BoxModel.js","webpack:///./react/features/base/styles/components/styles/ColorPalette.js","webpack:///./react/features/local-recording/components/LocalRecordingInfoDialog.js","webpack:///./react/features/local-recording/components/LocalRecordingButton.web.js","webpack:///./react/features/local-recording/components/LocalRecordingLabel.web.js","webpack:///./react/features/e2ee/components/E2EESection.js","webpack:///./react/features/e2ee/components/E2EELabel.js","webpack:///./react/features/e2ee/components/AbstractE2EELabel.js","webpack:///./react/features/screen-share/components/ShareAudioButton.js","webpack:///./react/features/screen-share/components/ShareAudioDialog.js","webpack:///./react/features/base/icons/components/Icon.js","webpack:///./react/features/remote-control/components/RemoteControlAuthorizationDialog.js","webpack:///./react/features/virtual-background/components/VirtualBackgroundPreview.js","webpack:///./react/features/virtual-background/components/VirtualBackgroundDialog.js","webpack:///./react/features/base/config/configWhitelist.js","webpack:///./react/features/base/config/extraConfigWhitelist.js","webpack:///./react/features/base/media/components/AbstractAudio.js","webpack:///./react/features/base/media/components/web/Audio.js","webpack:///./node_modules/bowser/es5.js","webpack:///./node_modules/js-md5/src/md5.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/accessibility.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/usePlatformLeafEventHandler.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/useAnalyticsContext.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/get-is-only-single-icon.js","webpack:///./react/features/large-video/functions.js","webpack:///./node_modules/react-popper/lib/esm/Manager.js","webpack:///./node_modules/raf-schd/esm/index.js","webpack:///./react/features/jaas/logger.js","webpack:///./react/features/dropbox/actionTypes.js","webpack:///./react/features/base/util/downloadJSON.js","webpack:///./node_modules/@material-ui/styles/esm/useTheme/ThemeContext.js","webpack:///./node_modules/@material-ui/styles/esm/ThemeProvider/nested.js","webpack:///./node_modules/@material-ui/core/esm/styles/defaultTheme.js","webpack:///./react/features/base/buttons/CopyButton.js","webpack:///./react/features/invite/components/add-people-dialog/web/CopyMeetingLinkSection.js","webpack:///./react/features/keyboard-shortcuts/actionTypes.js","webpack:///./react/features/video-menu/components/AbstractMuteRemoteParticipantDialog.js","webpack:///./react/features/video-menu/components/AbstractMuteRemoteParticipantsVideoDialog.js","webpack:///./modules/UI/videolayout/LargeContainer.js","webpack:///./node_modules/react-emoji-render/lib/index.js","webpack:///./react/features/chat/functions.js","webpack:///./react/features/local-recording/index.js","webpack:///./react/features/lobby/functions.js","webpack:///./react/features/screenshot-capture/actionTypes.js","webpack:///./react/features/keyboard-shortcuts/components/KeyboardShortcutsButton.web.js","webpack:///./react/features/keyboard-shortcuts/actions.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/theme.js","webpack:///./node_modules/@compiled/react/dist/browser/runtime/style-cache.js","webpack:///./node_modules/@compiled/react/dist/browser/runtime/sheet.js","webpack:///./node_modules/@compiled/react/dist/browser/runtime/style.js","webpack:///./node_modules/@compiled/react/dist/browser/runtime/ax.js","webpack:///./node_modules/@compiled/react/dist/browser/runtime/css-custom-property.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/Container.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/Content.js","webpack:///./node_modules/@atlaskit/lozenge/dist/esm/Lozenge/index.js","webpack:///./react/features/keyboard-shortcuts/components/KeyboardShortcutsDialog.web.js","webpack:///./react/features/security/components/security-dialog/web/PasswordForm.js","webpack:///./react/features/security/components/security-dialog/web/PasswordSection.js","webpack:///./react/features/security/components/security-dialog/web/SecurityDialog.js","webpack:///./react/features/stream-effects/screenshot-capture/worker.js","webpack:///./react/features/stream-effects/screenshot-capture/ScreenshotCaptureEffect.js","webpack:///./react/features/stream-effects/screenshot-capture/constants.js","webpack:///./react/features/stream-effects/screenshot-capture/index.js","webpack:///./react/features/base/color-scheme/defaultScheme.js","webpack:///./react/features/base/color-scheme/ColorSchemeRegistry.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/timer-hooks.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/use-layout-effect.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/entering/staggered-entrance.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/use-unique-id.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/entering/keyframes-motion.js","webpack:///./react/features/stream-effects/virtual-background/TimerWorker.js","webpack:///./react/features/stream-effects/virtual-background/JitsiStreamBackgroundEffect.js","webpack:///./react/features/stream-effects/virtual-background/index.js","webpack:///./react/features/lobby/constants.js","webpack:///./react/features/notifications/components/web/NotificationButton.js","webpack:///./react/features/notifications/components/web/NotificationWithParticipants.js","webpack:///./react/features/virtual-background/components/VideoBackgroundButton.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/block-events.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/button-base.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/use-auto-focus.js","webpack:///./react/features/video-quality/reducer.js","webpack:///./node_modules/dropbox/dist/Dropbox-sdk.min.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/common.js","webpack:///./node_modules/zxcvbn/lib/scoring.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/react-emoji-render/data/aliases.js","webpack:///./node_modules/redux/node_modules/symbol-observable/es/index.js","webpack:///./node_modules/stylis/stylis.js","webpack:///./node_modules/styled-components/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./modules/devices/mediaDeviceHelper.js","webpack:///./node_modules/react-addons-text-content/dist/react-addons-text-content.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/index.js","webpack:///./modules/UI/videolayout/LargeVideoManager.js","webpack:///./react/features/stream-effects/audio-mixer/AudioMixerEffect.js","webpack:///./node_modules/rtcstats/node_modules/js-md5/src/md5.js","webpack:///./react/features/screenshot-capture/logger.js","webpack:///./react/features/screenshot-capture/actions.js","webpack:///./node_modules/object-assign/index.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/jitsi-meet-logger/lib/Logger.js","webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/bind-event-listener/dist/bind.js","webpack:///./node_modules/react-scrolllock/dist/TouchScrollable.js","webpack:///./node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./react/features/base/react/functions.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/GraphRequest.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/ResponseHandler.js","webpack:///./react/features/dynamic-branding/actions.js","webpack:///./node_modules/lodash.flatten/index.js","webpack:///./node_modules/react-emoji-render/lib/aliasRegex.js","webpack:///./modules/API/API.js","webpack:///./node_modules/zxcvbn/lib/adjacency_graphs.js","webpack:///./react/features/base/react/components/web/BaseIndicator.js","webpack:///./react/features/base/react/components/web/Button.js","webpack:///./react/features/base/react/components/web/Image.js","webpack:///./react/features/base/react/components/web/Linkify.js","webpack:///./react/features/base/react/components/web/Text.js","webpack:///./react/features/base/react/components/web/MeetingsList.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Stateless.js","webpack:///./node_modules/@atlaskit/tag-group/dist/esm/TagGroup/index.js","webpack:///./node_modules/@atlaskit/tag-group/dist/esm/TagGroup/styles.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/entering/exiting-persistence.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/use-force-render.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/accessibility.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/timer-hooks.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/use-layout-effect.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/entering/shrink-out.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/use-element-ref.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/durations.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/motion/dist/esm/utils/curves.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/getTheme.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/themed.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/colors.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/theme.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/shared/base.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/shared/styles.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/shared/before.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/shared/content.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/shared/utils.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/removable/styles.js","webpack:///./node_modules/@atlaskit/tag/dist/esm/tag/internal/removable/index.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/useCallbackWithAnalytics.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Trigger.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/internal/appearances.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Trigger.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/Footer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Footer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/internal/sharedFunctions.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/NoMatch.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/InitialLoading.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/styled/GroupsContainer.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Groups.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Options.js","webpack:///./node_modules/@atlaskit/multi-select/dist/esm/components/Stateless.js","webpack:///./react/features/base/react/logger.js","webpack:///./react/features/base/react/components/web/InlineDialogFailure.js","webpack:///./react/features/base/react/components/web/MultiSelectAutocomplete.js","webpack:///./react/features/base/react/components/web/NavigateSectionListItem.js","webpack:///./react/features/base/react/components/web/NavigateSectionListSectionHeader.js","webpack:///./react/features/base/react/components/web/SectionList.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/internal/colors.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/internal/styles.js","webpack:///./node_modules/@atlaskit/toggle/dist/esm/toggle.js","webpack:///./react/features/base/react/components/web/Switch.js","webpack:///./react/features/base/react/components/web/Watermarks.js","webpack:///./react/features/base/react/components/AbstractPage.js","webpack:///./react/features/base/react/components/NavigateSectionList.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/dist/esm/components/utils.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/dist/esm/components/styles.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/dist/esm/components/icon.js","webpack:///./node_modules/@jitsi/js-utils/node_modules/js-md5/src/md5.js","webpack:///./node_modules/redux/node_modules/symbol-observable/es/ponyfill.js","webpack:///./node_modules/clipboard-copy/index.js","webpack:///./conference.js","webpack:///./node_modules/amplitude-js/amplitude.umd.js","webpack:///./node_modules/html-parse-stringify2/index.js","webpack:///./node_modules/redux-thunk/lib/index.js","webpack:///./node_modules/i18next-browser-languagedetector/index.js","webpack:///./node_modules/pixelmatch/index.js","webpack:///./react/features/stream-effects/virtual-background/vendor/tflite/tflite.js","webpack:///./react/features/stream-effects/virtual-background/vendor/tflite/tflite-simd.js","webpack:///./node_modules/styled-components/node_modules/fbjs/lib/hyphenateStyleName.js","webpack:///./node_modules/stylis-rule-sheet/index.js","webpack:///./node_modules/@babel/runtime/helpers/get.js","webpack:///./node_modules/@atlaskit/icon/glyph/cross.js","webpack:///./node_modules/@atlaskit/icon/glyph/chevron-up.js","webpack:///./node_modules/@atlaskit/icon/glyph/editor/info.js","webpack:///./node_modules/bind-event-listener/dist/index.js","webpack:///./node_modules/react-fast-compare/index.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/react-linkify/dist/index.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/glyph/checkbox.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/icon/glyph/radio.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/components/AnalyticsContext/index.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/components/AnalyticsContext/ModernAnalyticsContext.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/components/AnalyticsContext/LegacyAnalyticsContext.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/react-node-resolver/lib/index.js","webpack:///./node_modules/warning/warning.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/glyph/editor/close.js","webpack:///./node_modules/@atlaskit/icon/glyph/editor/done.js","webpack:///./node_modules/@atlaskit/icon/glyph/editor/close.js","webpack:///./node_modules/react-uid/dist/es2015/uid.js","webpack:///./modules/UI/authentication/LoginDialog.js","webpack:///./modules/recorder/Recorder.js","webpack:///./modules/util/TaskQueue.js","webpack:///./node_modules/rnnoise-wasm/dist/index.js","webpack:///./node_modules/@atlaskit/icon/glyph/star-filled.js","webpack:///./node_modules/@atlaskit/icon/glyph/star.js","webpack:///./react/features/power-monitor/index.js","webpack:///./node_modules/@jitsi/js-utils/transport/postis.js","webpack:///./node_modules/array-find/find.js","webpack:///./node_modules/@atlaskit/icon/glyph/check-circle.js","webpack:///./node_modules/@atlaskit/icon/glyph/info.js","webpack:///./node_modules/windows-iana/dist/index.js","webpack:///./modules/UI/audio_levels/AudioLevels.js","webpack:///./node_modules/react-youtube/node_modules/fast-deep-equal/index.js","webpack:///./node_modules/youtube-player/dist/index.js","webpack:///./modules/UI/UI.js","webpack:///./modules/UI/etherpad/Etherpad.js","webpack:///./node_modules/jquery-i18next/index.js","webpack:///./node_modules/zxcvbn/lib/main.js","webpack:///./node_modules/@material-ui/core/esm/styles/createBreakpoints.js","webpack:///./node_modules/@material-ui/core/esm/styles/createMixins.js","webpack:///./node_modules/@material-ui/utils/esm/formatMuiErrorMessage.js","webpack:///./node_modules/@material-ui/core/esm/colors/common.js","webpack:///./node_modules/@material-ui/core/esm/colors/grey.js","webpack:///./node_modules/@material-ui/core/esm/colors/indigo.js","webpack:///./node_modules/@material-ui/core/esm/colors/pink.js","webpack:///./node_modules/@material-ui/core/esm/colors/red.js","webpack:///./node_modules/@material-ui/core/esm/colors/orange.js","webpack:///./node_modules/@material-ui/core/esm/colors/blue.js","webpack:///./node_modules/@material-ui/core/esm/colors/green.js","webpack:///./node_modules/@material-ui/core/esm/styles/colorManipulator.js","webpack:///./node_modules/@material-ui/core/esm/styles/createPalette.js","webpack:///./node_modules/@material-ui/core/esm/styles/createTypography.js","webpack:///./node_modules/@material-ui/core/esm/styles/shadows.js","webpack:///./node_modules/@material-ui/core/esm/styles/shape.js","webpack:///./node_modules/@material-ui/system/esm/merge.js","webpack:///./node_modules/@material-ui/system/esm/breakpoints.js","webpack:///./node_modules/@material-ui/system/esm/spacing.js","webpack:///./node_modules/@material-ui/system/esm/memoize.js","webpack:///./node_modules/@material-ui/core/esm/styles/createSpacing.js","webpack:///./node_modules/@material-ui/core/esm/styles/transitions.js","webpack:///./node_modules/@material-ui/core/esm/styles/zIndex.js","webpack:///./node_modules/@material-ui/core/esm/styles/createMuiTheme.js","webpack:///./react/features/desktop-picker/logger.js","webpack:///./react/features/desktop-picker/components/DesktopSourcePreview.js","webpack:///./react/features/desktop-picker/components/DesktopPickerPane.js","webpack:///./react/features/desktop-picker/components/DesktopPicker.js","webpack:///./react/features/desktop-picker/functions.js","webpack:///./react/features/desktop-picker/actions.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/styled/WidthConstrainer.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/util/contextNamespace.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemClickManager.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemFocusManager.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/util/keys.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/context/DropdownItemSelectionCache.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/DropdownMenuStateless.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/theme.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/Content.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/ValidationElement.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/FieldBaseStateless.js","webpack:///./react/features/stream-effects/presenter/TimeWorker.js","webpack:///./react/features/stream-effects/presenter/JitsiStreamPresenterEffect.js","webpack:///./react/features/stream-effects/presenter/index.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/entering/exiting-persistence.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/utils/use-force-render.js","webpack:///./node_modules/jquery/dist/jquery.min.js-exposed?09e6","webpack:///./node_modules/jquery/dist/jquery.min.js-exposed","webpack:///./node_modules/jquery/dist/jquery.min.js","webpack:///./node_modules/olm/olm.js","webpack:///./node_modules/focus-visible/dist/focus-visible.min.js","webpack:///./node_modules/react/cjs/react.production.min.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.min.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/jitsi-meet-logger/lib/LogCollector.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/html-parse-stringify2/lib/parse.js","webpack:///./node_modules/html-parse-stringify2/lib/parse-tag.js","webpack:///./node_modules/void-elements/index.js","webpack:///./node_modules/html-parse-stringify2/lib/stringify.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/index.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/utils.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/cookie.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/querystring.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/localStorage.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/navigator.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/htmlTag.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/path.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/subdomain.js","webpack:///./node_modules/moment-duration-format/lib/moment-duration-format.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/es.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/fr-ca.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/he.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/ja.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.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/nb.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/oc-lnc.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/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/wasm-check/dist/wasm-check.min.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/styled-components/node_modules/fbjs/lib/hyphenate.js","webpack:///./node_modules/@babel/runtime/helpers/inheritsLoose.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/superPropBase.js","webpack:///./node_modules/@atlaskit/icon/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/@atlaskit/icon/cjs/constants.js","webpack:///./node_modules/bind-event-listener/dist/bind-all.js","webpack:///./node_modules/react-linkify/dist/components/Linkify.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultComponentDecorator.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultHrefDecorator.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultMatchDecorator.js","webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/react-linkify/dist/decorators/defaultTextDecorator.js","webpack:///./node_modules/react-scrolllock/dist/ScrollLock.js","webpack:///./node_modules/react-scrolllock/dist/withLockSheet.js","webpack:///./node_modules/react-scrolllock/dist/withTouchListeners.js","webpack:///./node_modules/react-node-resolver/lib/NodeResolver.js","webpack:///./node_modules/jwt-decode/lib/base64_url_decode.js","webpack:///./node_modules/jwt-decode/lib/atob.js","webpack:///./node_modules/es6-promise/dist/es6-promise.js","webpack:///./node_modules/isomorphic-fetch/fetch-npm-browserify.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/RequestMethod.js","webpack:///./node_modules/@microsoft/microsoft-graph-client/lib/src/GraphHelper.js","webpack:///./node_modules/windows-iana/dist/enums.js","webpack:///./node_modules/windows-iana/dist/time-zone-map.js","webpack:///./node_modules/sister/src/sister.js","webpack:///./node_modules/youtube-player/dist/loadYouTubeIframeApi.js","webpack:///./node_modules/load-script/index.js","webpack:///./node_modules/youtube-player/dist/YouTubePlayer.js","webpack:///./node_modules/debug/src/browser.js","webpack:///./node_modules/debug/src/debug.js","webpack:///./node_modules/ms/index.js","webpack:///./node_modules/youtube-player/dist/functionNames.js","webpack:///./node_modules/youtube-player/dist/eventNames.js","webpack:///./node_modules/youtube-player/dist/FunctionStateMap.js","webpack:///./node_modules/youtube-player/dist/constants/PlayerStates.js","webpack:///./node_modules/react-emoji-render/lib/renderer.js","webpack:///./node_modules/classnames/index.js","webpack:///./node_modules/string-replace-to-array/string-replace-to-array.js","webpack:///./node_modules/invariant/browser.js","webpack:///./node_modules/lodash.isstring/index.js","webpack:///./node_modules/emoji-regex/index.js","webpack:///./node_modules/react-emoji-render/lib/asciiRegex.js","webpack:///./node_modules/react-emoji-render/lib/utils.js","webpack:///./node_modules/react-emoji-render/lib/normalizeProtocol.js","webpack:///./node_modules/react-emoji-render/lib/unicodeToCodepoint.js","webpack:///./node_modules/jquery-i18next/dist/commonjs/index.js","webpack:///./node_modules/zxcvbn/lib/matching.js","webpack:///./node_modules/zxcvbn/lib/frequency_lists.js","webpack:///./node_modules/zxcvbn/lib/time_estimates.js","webpack:///./node_modules/zxcvbn/lib/feedback.js","webpack:///./logging_config.js","webpack:///./react/features/base/jitsi-local-storage/logger.js","webpack:///./react/features/base/jitsi-local-storage/setup.web.js","webpack:///./modules/translation/translation.js","webpack:///./node_modules/@material-ui/styles/esm/ThemeProvider/ThemeProvider.js","webpack:///./react/features/base/ui/Tokens.js","webpack:///./react/features/base/ui/utils.js","webpack:///./react/features/base/ui/components/BaseTheme.web.js","webpack:///./react/features/base/ui/functions.web.js","webpack:///./react/features/base/ui/components/JitsiThemeProvider.web.js","webpack:///./react/features/chrome-extension-banner/logger.js","webpack:///./react/features/chrome-extension-banner/components/ChromeExtensionBanner.web.js","webpack:///./react/features/app/components/AbstractApp.js","webpack:///./react/features/authentication/middleware.web.js","webpack:///./react/features/av-moderation/middleware.js","webpack:///./react/features/base/devices/middleware.js","webpack:///./react/features/e2ee/logger.js","webpack:///./react/features/e2ee/middleware.js","webpack:///./react/features/e2ee/constants.js","webpack:///./react/features/e2ee/sounds.js","webpack:///./react/features/external-api/subscriber.js","webpack:///./react/features/external-api/middleware.js","webpack:///./react/features/keyboard-shortcuts/middleware.js","webpack:///./react/features/local-recording/middleware.js","webpack:///./react/features/no-audio-signal/actions.js","webpack:///./react/features/no-audio-signal/actionTypes.js","webpack:///./react/features/no-audio-signal/components/DialInLink.js","webpack:///./react/features/no-audio-signal/middleware.js","webpack:///./react/features/no-audio-signal/constants.js","webpack:///./react/features/no-audio-signal/sounds.js","webpack:///./react/features/noise-detection/actions.js","webpack:///./react/features/noise-detection/actionTypes.js","webpack:///./react/features/noise-detection/middleware.js","webpack:///./react/features/noise-detection/constants.js","webpack:///./react/features/noise-detection/sounds.js","webpack:///./react/features/old-client-notification/components/OldElectronAPPNotificationDescription.js","webpack:///./react/features/old-client-notification/middleware.js","webpack:///./react/features/old-client-notification/functions.js","webpack:///./react/features/power-monitor/middleware.js","webpack:///./react/features/prejoin/middleware.js","webpack:///./react/features/remote-control/subscriber.js","webpack:///./react/features/remote-control/middleware.js","webpack:///./react/features/screen-share/logger.js","webpack:///./react/features/screen-share/middleware.js","webpack:///./react/features/shared-video/actions.web.js","webpack:///./react/features/shared-video/middleware.any.js","webpack:///./react/features/shared-video/middleware.web.js","webpack:///./react/features/talk-while-muted/actions.js","webpack:///./react/features/talk-while-muted/actionTypes.js","webpack:///./react/features/talk-while-muted/middleware.js","webpack:///./react/features/talk-while-muted/constants.js","webpack:///./react/features/talk-while-muted/sounds.js","webpack:///./react/features/virtual-background/middleware.js","webpack:///./react/features/analytics/middleware.js","webpack:///./react/features/analytics/actionTypes.js","webpack:///./react/features/base/net-info/actionTypes.js","webpack:///./react/features/base/conference/middleware.any.js","webpack:///./react/features/base/conference/middleware.web.js","webpack:///./react/features/base/config/middleware.js","webpack:///./react/features/base/jwt/logger.js","webpack:///./react/features/base/jwt/middleware.js","webpack:///./react/features/base/known-domains/middleware.js","webpack:///./react/features/base/lastn/logger.js","webpack:///./react/features/base/lastn/middleware.js","webpack:///./react/features/mobile/background/actionTypes.js","webpack:///./react/features/base/logging/actions.js","webpack:///./react/features/base/logging/actionTypes.js","webpack:///./react/features/base/lib-jitsi-meet/middleware.js","webpack:///./react/features/base/logging/ExternalApiLogTransport.js","webpack:///./react/features/base/logging/JitsiMeetInMemoryLogStorage.js","webpack:///./react/features/base/logging/JitsiMeetLogStorage.js","webpack:///./react/features/base/logging/middleware.js","webpack:///./react/features/base/media/reducer.js","webpack:///./react/features/base/media/middleware.js","webpack:///./react/features/base/net-info/NetworkInfoService.web.js","webpack:///./react/features/base/net-info/events.js","webpack:///./react/features/base/net-info/actions.js","webpack:///./react/features/base/net-info/logger.js","webpack:///./react/features/base/net-info/middleware.js","webpack:///./react/features/base/participants/middleware.js","webpack:///./react/features/base/participants/sounds.js","webpack:///./react/features/base/redux/middleware.js","webpack:///./react/features/base/responsive-ui/actions.js","webpack:///./react/features/base/responsive-ui/actionTypes.js","webpack:///./react/features/base/responsive-ui/middleware.web.js","webpack:///./react/features/base/settings/middleware.js","webpack:///./react/features/base/sounds/logger.js","webpack:///./react/features/base/sounds/middleware.js","webpack:///./react/features/base/testing/logger.js","webpack:///./react/features/base/testing/middleware.js","webpack:///./react/features/base/testing/actions.js","webpack:///./react/features/base/testing/actionTypes.js","webpack:///./react/features/base/tracks/middleware.js","webpack:///./react/features/base/tracks/subscriber.js","webpack:///./react/features/base/user-interaction/middleware.js","webpack:///./react/features/base/user-interaction/actionTypes.js","webpack:///./react/features/calendar-sync/middleware.js","webpack:///./react/features/base/modal/actions.js","webpack:///./react/features/base/modal/actionTypes.js","webpack:///./react/features/base/modal/components/index.web.js","webpack:///./react/features/chat/middleware.js","webpack:///./react/features/chat/sounds.js","webpack:///./react/features/conference/middleware.js","webpack:///./react/features/conference/actions.web.js","webpack:///./react/features/connection-indicator/middleware.js","webpack:///./react/features/deep-linking/actions.js","webpack:///./react/features/deep-linking/actionTypes.js","webpack:///./react/features/deep-linking/constants.js","webpack:///./react/features/deep-linking/components/DeepLinkingDesktopPage.web.js","webpack:///./react/features/deep-linking/components/DeepLinkingMobilePage.web.js","webpack:///./react/features/deep-linking/renderPromotionalFooter.js","webpack:///./react/features/deep-linking/components/NoMobileApp.web.js","webpack:///./react/features/deep-linking/openDesktopApp.js","webpack:///./react/features/deep-linking/functions.js","webpack:///./react/features/deep-linking/middleware.js","webpack:///./react/features/device-selection/middleware.js","webpack:///./react/features/display-name/middleware.js","webpack:///./react/features/etherpad/middleware.js","webpack:///./react/features/filmstrip/subscriber.web.js","webpack:///./react/features/filmstrip/middleware.web.js","webpack:///./react/features/follow-me/actions.js","webpack:///./react/features/follow-me/actionTypes.js","webpack:///./react/features/follow-me/logger.js","webpack:///./react/features/follow-me/subscriber.js","webpack:///./react/features/follow-me/constants.js","webpack:///./react/features/follow-me/middleware.js","webpack:///./react/features/invite/sounds.js","webpack:///./react/features/invite/middleware.any.js","webpack:///./react/features/invite/middleware.web.js","webpack:///./react/features/jaas/middleware.web.js","webpack:///./react/features/large-video/logger.js","webpack:///./react/features/large-video/subscriber.web.js","webpack:///./react/features/large-video/middleware.js","webpack:///./react/features/lobby/middleware.js","webpack:///./react/features/notifications/middleware.js","webpack:///./react/features/overlay/middleware.js","webpack:///./react/features/reactions/middleware.js","webpack:///./react/features/recent-list/functions.web.js","webpack:///./react/features/recent-list/middleware.js","webpack:///./react/features/recent-list/actions.js","webpack:///./react/features/recent-list/actionTypes.js","webpack:///./react/features/recording/middleware.js","webpack:///./react/features/recording/sounds.js","webpack:///./react/features/rejoin/middleware.js","webpack:///./react/features/room-lock/logger.js","webpack:///./react/features/room-lock/middleware.js","webpack:///./node_modules/rtcstats/node_modules/@jitsi/js-utils/browser-detection/browsers.js","webpack:///./node_modules/rtcstats/node_modules/@jitsi/js-utils/browser-detection/BrowserDetection.js","webpack:///./node_modules/rtcstats/node_modules/@jitsi/js-utils/jitsi-local-storage/index.js","webpack:///./node_modules/rtcstats/rtcstats.js","webpack:///./node_modules/rtcstats/trace-ws.js","webpack:///./react/features/rtcstats/logger.js","webpack:///./react/features/rtcstats/RTCStats.js","webpack:///./react/features/rtcstats/functions.js","webpack:///./react/features/rtcstats/middleware.js","webpack:///./react/features/subtitles/logger.js","webpack:///./react/features/subtitles/middleware.js","webpack:///./react/features/toolbox/middleware.js","webpack:///./react/features/transcribing/actions.js","webpack:///./react/features/transcribing/actionTypes.js","webpack:///./react/features/transcribing/middleware.js","webpack:///./react/features/video-layout/middleware.any.js","webpack:///./react/features/video-layout/subscriber.js","webpack:///./react/features/video-layout/middleware.web.js","webpack:///./react/features/video-quality/subscriber.js","webpack:///./react/features/video-quality/selector.js","webpack:///./react/features/video-quality/middleware.js","webpack:///./react/features/videosipgw/logger.js","webpack:///./react/features/videosipgw/middleware.js","webpack:///./react/features/av-moderation/components/AudioModerationNotifications.js","webpack:///./react/features/participants-pane/components/web/styled.js","webpack:///./react/features/participants-pane/components/web/InviteButton.js","webpack:///./react/features/participants-pane/components/web/RaisedHandIndicator.js","webpack:///./react/features/participants-pane/components/web/ParticipantItem.js","webpack:///./react/features/participants-pane/components/web/LobbyParticipantItem.js","webpack:///./react/features/participants-pane/components/web/LobbyParticipantList.js","webpack:///./react/features/participants-pane/components/web/MeetingParticipantContextMenu.js","webpack:///./react/features/participants-pane/components/AskToUnmuteButton.js","webpack:///./react/features/participants-pane/components/ParticipantQuickAction.js","webpack:///./react/features/participants-pane/components/web/MeetingParticipantItem.js","webpack:///./react/features/participants-pane/components/web/MeetingParticipantList.js","webpack:///./react/features/participants-pane/components/FooterContextMenu.js","webpack:///./react/features/participants-pane/components/web/ParticipantsPane.js","webpack:///./react/features/conference/components/AbstractConference.js","webpack:///./react/features/transcribing/components/TranscribingLabel.web.js","webpack:///./react/features/transcribing/components/AbstractTranscribingLabel.js","webpack:///./react/features/conference/components/ConferenceTimer.js","webpack:///./react/features/conference/components/web/ConferenceTimerDisplay.js","webpack:///./react/features/conference/components/web/ParticipantsCount.js","webpack:///./react/features/conference/components/web/ConferenceInfo.js","webpack:///./react/features/conference/components/web/Notice.js","webpack:///./react/features/conference/components/web/Conference.js","webpack:///./react/features/base/util/isInsecureRoomName.js","webpack:///./react/features/conference/components/AbstractInsecureRoomNameLabel.js","webpack:///./react/features/conference/components/web/InsecureRoomNameLabel.js","webpack:///./react/features/conference/components/web/InviteMore.js","webpack:///./react/features/unsupported-browser/components/UnsupportedDesktopBrowser.js","webpack:///./react/features/unsupported-browser/components/browserLinks.js","webpack:///./react/features/recent-list/components/styles.web.js","webpack:///./react/features/recent-list/components/AbstractRecentList.js","webpack:///./react/features/recent-list/components/RecentList.web.js","webpack:///./react/features/welcome/components/AbstractWelcomePage.js","webpack:///./react/features/welcome/components/Tab.js","webpack:///./react/features/welcome/components/Tabs.js","webpack:///./react/features/welcome/components/WelcomePage.web.js","webpack:///./react/features/app/getRouteToRender.js","webpack:///./react/features/welcome/functions.js","webpack:///./react/features/welcome/components/BlankPage.web.js","webpack:///./react/features/app/middleware.js","webpack:///./react/features/av-moderation/reducer.js","webpack:///./react/features/base/devices/reducer.js","webpack:///./react/features/e2ee/reducer.js","webpack:///./react/features/feedback/reducer.js","webpack:///./react/features/local-recording/reducer.js","webpack:///./react/features/no-audio-signal/reducer.js","webpack:///./react/features/noise-detection/reducer.js","webpack:///./react/features/participants-pane/reducer.js","webpack:///./react/features/power-monitor/reducer.js","webpack:///./react/features/prejoin/reducer.js","webpack:///./react/features/remote-control/reducer.js","webpack:///./react/features/screen-share/reducer.js","webpack:///./react/features/screenshot-capture/reducer.js","webpack:///./react/features/shared-video/reducer.web.js","webpack:///./react/features/talk-while-muted/reducer.js","webpack:///./react/features/virtual-background/reducer.js","webpack:///./react/features/analytics/reducer.js","webpack:///./react/features/authentication/reducer.js","webpack:///./react/features/base/app/reducer.js","webpack:///./react/features/base/audio-only/reducer.js","webpack:///./react/features/base/color-scheme/reducer.js","webpack:///./react/features/base/conference/reducer.js","webpack:///./react/features/base/config/reducer.js","webpack:///./react/features/base/connection/reducer.js","webpack:///./react/features/base/dialog/reducer.js","webpack:///./react/features/base/flags/reducer.js","webpack:///./react/features/base/jwt/reducer.js","webpack:///./react/features/base/known-domains/reducer.js","webpack:///./react/features/base/lastn/reducer.js","webpack:///./react/features/base/lib-jitsi-meet/reducer.js","webpack:///./react/features/base/logging/reducer.js","webpack:///./react/features/base/modal/reducer.js","webpack:///./react/features/base/net-info/reducer.js","webpack:///./react/features/base/participants/reducer.js","webpack:///./react/features/base/responsive-ui/reducer.js","webpack:///./react/features/base/settings/reducer.js","webpack:///./react/features/base/sounds/reducer.js","webpack:///./react/features/base/testing/reducer.js","webpack:///./react/features/base/tracks/reducer.js","webpack:///./react/features/base/user-interaction/reducer.js","webpack:///./react/features/calendar-sync/reducer.js","webpack:///./react/features/chat/reducer.js","webpack:///./react/features/deep-linking/reducer.js","webpack:///./react/features/dropbox/reducer.js","webpack:///./react/features/dynamic-branding/reducer.js","webpack:///./react/features/etherpad/reducer.js","webpack:///./react/features/filmstrip/reducer.js","webpack:///./react/features/follow-me/reducer.js","webpack:///./react/features/google-api/reducer.js","webpack:///./react/features/invite/reducer.js","webpack:///./react/features/jaas/reducer.js","webpack:///./react/features/large-video/reducer.js","webpack:///./react/features/lobby/reducer.js","webpack:///./react/features/notifications/reducer.js","webpack:///./react/features/overlay/reducer.js","webpack:///./react/features/reactions/reducer.js","webpack:///./react/features/recent-list/logger.js","webpack:///./react/features/recent-list/reducer.js","webpack:///./react/features/recording/reducer.js","webpack:///./react/features/settings/reducer.js","webpack:///./react/features/subtitles/reducer.js","webpack:///./react/features/toolbox/reducer.js","webpack:///./react/features/transcribing/reducer.js","webpack:///./react/features/video-layout/reducer.js","webpack:///./react/features/videosipgw/reducer.js","webpack:///./react/features/welcome/reducer.js","webpack:///./react/features/welcome/actionTypes.js","webpack:///./react/features/prejoin/components/PrejoinApp.js","webpack:///./react/index.web.js","webpack:///./react/features/app/components/App.web.js","webpack:///./app.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/dist/esm/components/utils.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/dist/esm/components/styles.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/icon/dist/esm/components/icon.js","webpack:///./node_modules/is-in-browser/dist/module.js","webpack:///./node_modules/tiny-warning/dist/tiny-warning.esm.js","webpack:///./node_modules/jss/dist/jss.esm.js","webpack:///./node_modules/@material-ui/styles/esm/mergeClasses/mergeClasses.js","webpack:///./node_modules/@material-ui/styles/esm/makeStyles/multiKeyStore.js","webpack:///./node_modules/@material-ui/styles/esm/createGenerateClassName/createGenerateClassName.js","webpack:///./node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js","webpack:///./node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js","webpack:///./node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js","webpack:///./node_modules/hyphenate-style-name/index.js","webpack:///./node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js","webpack:///./node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js","webpack:///./node_modules/css-vendor/dist/css-vendor.esm.js","webpack:///./node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js","webpack:///./node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js","webpack:///./node_modules/@material-ui/styles/esm/jssPreset/jssPreset.js","webpack:///./node_modules/@material-ui/styles/esm/StylesProvider/StylesProvider.js","webpack:///./node_modules/@material-ui/styles/esm/makeStyles/indexCounter.js","webpack:///./node_modules/@material-ui/styles/esm/getStylesCreator/getStylesCreator.js","webpack:///./node_modules/@material-ui/styles/esm/getStylesCreator/noopTheme.js","webpack:///./node_modules/@material-ui/styles/esm/makeStyles/makeStyles.js","webpack:///./node_modules/@atlaskit/motion/dist/esm/entering/fade-in.js","webpack:///./node_modules/@atlaskit/button/dist/esm/button.js","webpack:///./node_modules/@atlaskit/droplist/node_modules/@atlaskit/theme/dist/esm/utils/math.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/utils/createAndFireEvent.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hocs/withAnalyticsContext.js","webpack:///./node_modules/@atlaskit/button/dist/esm/button-group.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/FieldBase.js","webpack:///./node_modules/@material-ui/core/esm/styles/makeStyles.js","webpack:///./node_modules/@material-ui/utils/esm/deepmerge.js","webpack:///./node_modules/@material-ui/styles/esm/useTheme/useTheme.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/DropdownMenu.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack:///./node_modules/@popperjs/core/lib/enums.js","webpack:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack:///./node_modules/@popperjs/core/lib/createPopper.js","webpack:///./node_modules/@popperjs/core/lib/utils/debounce.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack:///./node_modules/@popperjs/core/lib/utils/math.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/within.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack:///./node_modules/@popperjs/core/lib/popper.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack:///./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack:///./node_modules/react-popper/lib/esm/usePopper.js","webpack:///./node_modules/react-popper/lib/esm/Popper.js","webpack:///./node_modules/@atlaskit/popper/dist/esm/Popper.js","webpack:///./node_modules/@atlaskit/item/dist/esm/util/getDisplayName.js","webpack:///./node_modules/@atlaskit/item/dist/esm/util/safeContextCall.js","webpack:///./node_modules/@atlaskit/item/dist/esm/util/contextNamespace.js","webpack:///./node_modules/@atlaskit/item/dist/esm/components/hoc/withItemClick.js","webpack:///./node_modules/@atlaskit/item/dist/esm/components/hoc/withItemFocus.js","webpack:///./node_modules/@atlaskit/item/dist/esm/styled/Item.js","webpack:///./node_modules/@atlaskit/item/dist/esm/styled/ItemParts.js","webpack:///./node_modules/@atlaskit/item/dist/esm/components/Item.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/item/DropdownItem.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/utils/portal-dom-utils.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/constants.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/components/internal-portal.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/hooks/use-is-subsequent-render.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/utils/portal-custom-event.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/internal/hooks/use-portal-event.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/portal/dist/esm/portal.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/internal/colors.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/internal/styles.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabContent.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/NavLine.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabItem.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/TabsNavigation.js","webpack:///./node_modules/@atlaskit/tabs/dist/esm/components/Tabs.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/usePlatformLeafSyntheticEventHandler.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/internal/shared-schedule.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/internal/tooltip-manager.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/TooltipPrimitive.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/TooltipContainer.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/Tooltip.js","webpack:///./node_modules/@atlaskit/tooltip/dist/esm/utilities.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/internal/ScrollBlock.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/internal/helpers.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/styledContentContainer.js","webpack:///./node_modules/@atlaskit/layer/dist/esm/components/Layer.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Droplist.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/theme/item-theme.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Droplist.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/internal/styles.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/internal/label.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/internal/label-text.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/internal/required-indicator.js","webpack:///./node_modules/@atlaskit/checkbox/dist/esm/checkbox.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Item.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/utils/index.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Element.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Item.js","webpack:///./node_modules/react-popper/lib/esm/Reference.js","webpack:///./node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/styled.js","webpack:///./node_modules/@atlaskit/inline-dialog/dist/esm/InlineDialog/index.js","webpack:///./node_modules/@atlaskit/button/dist/esm/shared/loading-spinner.js","webpack:///./node_modules/@atlaskit/button/dist/esm/custom-theme-button/theme.js","webpack:///./node_modules/@atlaskit/button/dist/esm/custom-theme-button/custom-theme-button.js","webpack:///./node_modules/@atlaskit/item/dist/esm/styled/ItemGroup.js","webpack:///./node_modules/@atlaskit/item/dist/esm/components/ItemGroup.js","webpack:///./node_modules/@atlaskit/dropdown-menu/dist/esm/components/group/DropdownItemGroup.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/constants.js","webpack:///./node_modules/@atlaskit/spinner/dist/esm/spinner.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hooks/usePatchedProps.js","webpack:///./node_modules/@atlaskit/analytics-next/dist/esm/hocs/withAnalyticsEvents.js","webpack:///./node_modules/@atlaskit/field-text/dist/esm/styled/Input.js","webpack:///./node_modules/@atlaskit/field-text/dist/esm/FieldTextStateless.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/styled/Label.js","webpack:///./node_modules/@atlaskit/field-base/dist/esm/components/Label.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/styled/Group.js","webpack:///./node_modules/@atlaskit/droplist/dist/esm/components/Group.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/components/Theme.js","webpack:///./node_modules/@atlaskit/tag/node_modules/@atlaskit/theme/dist/esm/utils/createTheme.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","constructor","this","_elements","combineReducers","additional","register","reducer","Set","_listener","prevSelections","store","selectorListener","_selectorListeners","prevSelection","selection","selector","getState","useDeepEquals","options","deepEquals","equals","set","listener","e","logger","error","add","subscribe","size","Map","R50","R75","R100","R200","R300","R400","R500","Y50","Y75","Y100","Y200","Y300","Y400","Y500","G50","G75","G100","G200","G300","G400","G500","B50","B75","B100","B200","B300","B400","B500","P50","P75","P100","P200","P300","P400","P500","T50","T75","T100","T200","T300","T400","T500","N0","N10","N20","N30","N40","N50","N60","N70","N80","N90","N100","N200","N300","N400","N500","N600","N700","N800","N900","N10A","N20A","N30A","N40A","N50A","N60A","N70A","N80A","N90A","N100A","N200A","N300A","N400A","N500A","N600A","N700A","N800A","DN900","DN800","DN700","DN600","DN500","DN400","DN300","DN200","DN100","DN90","DN80","DN70","DN60","DN50","DN40","DN30","DN20","DN10","DN0","DN800A","DN700A","DN600A","DN500A","DN400A","DN300A","DN200A","DN100A","DN90A","DN80A","DN70A","DN60A","DN50A","DN40A","DN30A","DN20A","DN10A","background","light","dark","backgroundActive","backgroundHover","backgroundOnLayer","text","textHover","textActive","subtleText","placeholderText","heading","subtleHeading","codeBlock","link","linkHover","linkActive","linkOutline","primary","blue","teal","purple","red","yellow","green","skeleton","analytics","JitsiMeetJS","browser","util","JitsiConferenceErrors","errors","conference","JitsiConferenceEvents","events","JitsiConnectionErrors","connection","JitsiConnectionEvents","JitsiConnectionQualityEvents","connectionQuality","JitsiE2ePingEvents","detection","e2eping","JitsiMediaDevicesEvents","mediaDevices","JitsiParticipantConnectionStatus","constants","participantConnectionStatus","JitsiRecordingConstants","recording","JitsiSIPVideoGWStatus","sipVideoGW","JitsiTrackErrors","track","JitsiTrackEvents","_objectSpread","target","arguments","length","source","ownKeys","keys","getOwnPropertySymbols","concat","filter","sym","getOwnPropertyDescriptor","forEach","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","assertThisInitialized","_getPrototypeOf","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","_inherits","subClass","superClass","writable","configurable","consoleLogger","type","log","args","output","warn","_console","console","apply","baseLogger","Logger","concreteLogger","undefined","init","prefix","debug","bool","_len","Array","_key","forward","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","EventEmitter","observers","_this","split","event","push","_this2","index","indexOf","splice","cloned","observer","_cloned","defer","res","rej","promise","Promise","resolve","reject","makeString","copy","a","getLastOfPath","path","Empty","cleanKey","replace","canNotTraverseDeeper","stack","shift","obj","k","setPath","newValue","_getLastOfPath","getPath","_getLastOfPath3","deepExtend","overwrite","prop","String","regexEscape","str","_entityMap","data","_EventEmitter","ResourceStore","defaultNS","keySeparator","lng","silent","addNamespaces","emit","resources","toString","addResource","deep","pack","hasResourceBundle","removeNamespaces","getResource","compatibilityAPI","postProcessor","processors","addPostProcessor","handle","translator","processor","process","Translator","services","language","interpolation","resolved","nsSeparator","namespaces","parts","join","overloadTranslationOptionHandler","isArray","_this$extractFromKey","extractFromKey","namespace","appendNamespaceToCIMode","toLowerCase","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","copy$$1","newKeyToUse","deepKey","translate","extendTranslation","usedDefault","isValidLookup","defaultValue","count","suffix","pluralResolver","getSuffix","updateMissing","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","missingKeyHandler","backendConnector","saveMissing","needsPluralHandling","saveMissingPlurals","getPluralFormsOfKey","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","parse","usedLng","usedNS","skipInterpolation","interpolator","defaultVariables","interpolate","nest","reset","postProcess","postProcessorNames","applyPostProcessor","found","_this4","extracted","fallbackNS","needsContextHandling","context","codes","code","pluralSuffix","possibleKey","finalKey","finalKeys","addLookupKeys","contextSeparator","pop","returnNull","returnEmptyString","resourceStore","capitalize","string","charAt","toUpperCase","slice","LanguageUtil","whitelist","formatLanguageCode","specialCases","lowerCaseLng","map","part","cleanCode","load","nonExplicitWhitelist","getLanguagePartFromCode","fallbacks","getScriptPartFromCode","fallbackCode","fallbackCodes","addCode","isWhitelisted","fc","sets","nr","_rulesPluralsTypes","1","Number","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","createRules","rules","numbers","plurals","PluralResolver","rule","getRule","ret","idx","noAbs","Math","abs","simplifyPluralSuffix","returnSuffix","prepend","compatibilityJSON","Interpolator","format","escapeValue","iOpts","escape","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","maxReplaces","resetRegExp","regexpStr","regexp","RegExp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","nestingRegexp","match","replaces","regexSafe","val","handleFormat","trim","f","missingInterpolationHandler","exec","lastIndex","temp","clonedOptions","handleHasOptions","inheritedOptions","optionsString","JSON","Connector","backend","state","queue","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","err","_name$split","_name$split2","addResourceBundle","q","_getLastOfPath2","arr","what","remove","done","fcName","tried","wait","setTimeout","read","queueLoad","loadOne","prepareLoading","_this5","_name$split3","_name$split4","fallbackValue","isUpdate","initImmediate","preload","pluralSeparator","partialBundledLanguages","tDescription","_format","transformOptions","noop","I18n","external","isInitialized","isClone","createClassOnDemand","ClassOrObject","lu","on","languageDetector","storeApi","_this2$store","deferred","changeLanguage","append","setLng","cacheUserLanguage","loadResources","async","detect","fixedT","opts","rest","_this$translator","_this$translator2","exists","_this6","preloaded","newLngs","_this7","mergedOptions","clone","membersToCopy","each","defaults","addQueryString","url","params","queryString","encodeURIComponent","paramName","ajax","cache","Date","queryStringParams","x","XMLHttpRequest","ActiveXObject","open","crossDomain","setRequestHeader","withCredentials","overrideMimeType","h","customHeaders","onreadystatechange","readyState","responseText","getDefaults","loadPath","addPath","allowMultiLoading","Backend","loadUrl","xhr","status","payload","Function","lookup","config","defaultLanguage","navigator","userLanguage","normalizeLanguage","lang","variant","order","interfaceConfig","LANG_DETECTION","customNavigatorDetector","configLanguageDetector","BrowserLanguageDetector","caches","lookupLocalStorage","lookupQuerystring","addDetector","LANGUAGES","LANGUAGES_RESOURCES","DEFAULT_LANGUAGE","react","useSuspense","i18next","use","product","I18nextXHRBackend","COUNTRIES_RESOURCES","MAIN_RESOURCES","require","getLocalizedDateFormatter","dateOrTimeStamp","moment","locale","i18nLocale","supportedLocale","localeResult","currentLocaleRegexp","locales","find","_getSupportedLocale","getLocalizedDurationFormatter","duration","_path","_extends","assign","props","createElement","viewBox","fill","clipRule","fillRule","_rect","_rect2","_rect3","_rect4","_rect5","_rect6","_rect7","_rect8","width","height","rx","_g","_defs","clipPath","id","_path3","stroke","strokeWidth","x1","y1","x2","y2","gradientUnits","stopColor","offset","strokeLinecap","strokeLinejoin","className","opacity","StyleSheet","isSpeedy","speedy","tags","ctr","nonce","container","before","_proto","insert","_tag","tag","document","setAttribute","appendChild","createTextNode","createStyleElement","nextSibling","insertBefore","sheet","styleSheets","ownerNode","sheetForTag","isImportRule","charCodeAt","insertRule","cssRules","flush","parentNode","removeChild","W","X","ia","b","Z","v","F","P","substring","w","L","ja","ka","test","aa","G","ba","la","ma","R","na","ea","oa","H","g","A","S","B","U","D","z","M","y","C","K","u","I","J","N","ca","O","da","fa","Y","E","ha","Q","T","toSheet","block","Sheet","current","ruleSheet","content","selectors","parents","line","column","depth","at","delimiter","stylisOptions","stylis","inserted","head","_insert","nodes","querySelectorAll","node","getAttribute","stylisPlugins","serialized","shouldCache","styles","registered","EmotionCacheContext","HTMLElement","ThemeContext","Provider","func","render","ref","Consumer","typePropName","createEmotionProps","newProps","theme","cssProp","css","registeredStyles","Emotion","argsLength","createElementArgArray","insertable","anim","classnames","len","cls","arg","toAdd","merge","rawClassName","ClassNames","cx","ele","children","AudioTrack","Component","super","_setRef","_play","componentDidMount","_attachTrack","audioTrack","_ref","_muted","_volume","volume","muted","componentWillUnmount","_detachTrack","shouldComponentUpdate","nextProps","jitsiTrack","currentVolume","nextVolume","isNaN","currentMuted","nextMuted","autoPlay","attach","clearTimeout","_playTimeout","detach","retries","play","then","sendAnalytics","createAudioPlaySuccessEvent","info","createAudioPlayErrorEvent","audioElement","connect","ownProps","participantsVolume","startSilent","participantId","AbstractVideoTrack","_onVideoPlaying","videoTrack","_falsy2null","waitForVideoStarted","shouldRenderVideoTrack","videoStarted","stream","getOriginalStream","zoomEnabled","videoType","Video","mirror","onPlaying","onPress","zOrder","dispatch","trackVideoStarted","VideoTrack","_noAutoPlayVideo","style","eventHandlers","onVideoPlaying","testingConfig","testing","noAutoPlayVideo","ReferenceError","AbstractDialog","_onCancel","_onSubmit","_onSubmitFulfilled","_onSubmitRejected","_mounted","_hide","hideDialog","cancelDisabled","onCancel","okDisabled","onSubmit","setState","submitting","createSource","uid","counter","getId","getPrefix","extendStatics","prefixId","_super","UID","quartz","idSource","item","__","__extends","_a","_b","UIDReset","UIDConsumer","THEME_MODES","getTheme","__ATLASKIT_THEME__","includes","themed","modesOrVariant","variantModes","variantProp","variants","modes","_createTheme","defaultGetTokens","emptyThemeFn","getTokens","useTheme","themeProps","tokens","Fragment","themeFn","valueFn","mixedFn","createTheme","enumerableOnly","symbols","analyticsAttributes","componentName","packageName","packageVersion","baseStyle","position","bottom","left","right","top","pointerEvents","zIndex","canClickThroughStyle","invisible","backgroundStyle","backgroundColor","_ref$canClickThrough","canClickThrough","_ref$isTinted","isTinted","_ref$onBlanketClicked","onBlanketClicked","testId","analyticsContext","onBlanketClickedWithAnalytics","usePlatformLeafEventHandler","getOwnPropertyDescriptors","defineProperties","fn","action","analyticsData","onClick","role","displayName","WIDTH_ENUM","values","widths","small","medium","large","reactPropsRegex","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","newStyled","createStyled","identifierName","shouldForwardProp","targetClassName","label","__emotion_forwardProp","propName","isReal","__emotion_real","baseTag","__emotion_base","defaultShouldForwardProp","shouldUseAs","__emotion_styles","raw","Styled","finalTag","as","classInterpolations","mergedProps","finalShouldForwardProp","innerRef","defaultProps","withComponent","nextTag","nextOptions","tagName","dialogWidth","widthName","widthValue","FillScreen","div","scrollDistance","modal","positionBaseStyles","positionBaseResponsiveStyles","PositionerAbsolute","PositionerRelative","PositionerFixed","isChromeless","dialogBgColor","boxShadow","heightValue","dialogHeight","ThemedDialog","aria-modal","createContext","_React$Component","Transition","initialStatus","appear","isMounting","enter","appearStatus","in","unmountOnExit","mountOnEnter","nextCallback","getDerivedStateFromProps","prevState","updateStatus","componentDidUpdate","prevProps","nextStatus","cancelNextCallback","getTimeouts","exit","timeout","mounting","performEnter","performExit","appearing","_ref2","nodeRef","findDOMNode","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","onExit","onExiting","onExited","cancel","nextState","setNextCallback","active","handler","doesNotHaveTimeoutOrListener","addEndListener","_ref3","maybeNextCallback","_this$props","childProps","TransitionGroupContext","cloneElement","Children","only","contextType","propTypes","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","hasEntered","_ref$stackIndex","stackIndex","unadjustedStatus","adjustedStatus","fadeBaseStyles","transition","slideBaseStyles","transform","verticalOffset","slideTransitionStyles","entering","entered","exiting","exited","fade","slide","_templateObject10","_templateObject9","_templateObject8","_templateObject7","_templateObject6","_templateObject5","_templateObject4","_templateObject3","_templateObject2","_templateObject","modalPadding","keylineColor","wrapperStyles","Header","header","showKeyline","Title","h4","TitleText","span","isHeadingMultiline","iconColor","danger","warning","appearance","shouldScroll","Footer","footer","Actions","ActionItem","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","result","Super","NewTarget","ModalFooter","actions","component","onClose","Icon","ModalHeader","mergeRefs","refs","Content","showFooterKeyline","showHeaderKeyline","showContentFocus","tabbableElements","scrollContainer","_this$scrollContainer","scrollTop","scrollHeight","clientHeight","escapeIsHeldDown","shouldCloseOnEscapePress","_this$props$stackInde","isEscapeKeyPressed","_isMounted","onStackChange","addEventListener","handleKeyDown","handleKeyUp","capturedScrollContainer","window","determineKeylines","body","components","Body","handleStackChange","removeEventListener","_this$props2","DeprecatedBody","headingId","_this$state","_components$Container","Container","touchRef","tabIndex","getScrollContainer","autoFocus","useMergeRefs","initialValue","assignRef","facade","last","hiddenGuard","padding","overflow","ItoI","innerCreateMedium","middleware","buffer","assigned","Error","useMedium","assignSyncMedium","cb","cbs","assignMedium","pendingQueue","executeQueue","cycle","createMedium","mediumFocus","currentTarget","mediumBlur","mediumEffect","mediumSidecar","ssr","createSidecarMedium","emptyArray","parentRef","_extends2","_React$useState","realObserved","setObserved","observed","isActive","originalFocusedElement","disabled","noFocusGuards","persistentFocus","crossFrame","group","allowTextSelection","whiteList","_props$shards","shards","_props$as","_props$lockProps","lockProps","containerProps","SideCar","sideCar","shouldReturnFocus","returnFocus","onActivationCallback","onActivation","onDeactivationCallback","onDeactivation","activeElement","allowDefer","Boolean","focus","focusOptions","onFocus","onBlur","setObserveNode","newObserved","hasLeadingGuards","hasTailingGuards","mergedRef","reducePropsToState","handleStateChangeOnClient","WrappedComponent","mountedInstances","emitChange","SideEffect","_PureComponent","peek","getDisplayName","toArray","asArray","getTopParent","getAllAffectedNodes","reduce","acc","currentNode","contained","j","compareDocumentPosition","Node","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_CONTAINS","_","has","filterNested","focusInsideIframe","topNode","some","focusInside","dataset","focusGuard","contains","isRadio","correctNode","el","checked","findSelectedRadio","pickFirstFocus","pickFocusable","isVisibleCached","visibilityCache","cached","checkParent","nodeType","DOCUMENT_NODE","computedStyle","getComputedStyle","getPropertyValue","DOCUMENT_FRAGMENT_NODE","host","isVisibleUncached","isGuard","isNotAGuard","isDefined","newFocus","innerNodes","outerNodes","lastNode","cnt","firstFocus","lastFocus","isOnGuard","resultSet","activeIndex","lastNodeInside","indexDiff","firstNodeIndex","lastNodeIndex","correctedNodes","correctedIndexDiff","returnFirstNode","returnLastNode","tabSort","tabDiff","orderByTabIndex","filterNegative","keepGuards","sort","queryTabbables","queryGuardTabbables","getFocusables","withGuards","parent","filterFocusable","notHiddenInput","getTabbableNodes","topNodes","getAllTabbableNodes","parentAutofocusables","parentFocus","getParents","getCommonParent","nodeA","nodeB","parentsA","parentsB","currentParent","getTopCommonParent","baseActiveElement","leftEntry","rightEntries","activeElements","leftEntries","topCommon","entry","subEntry","common","getFocusMerge","entries","commonParent","anyFocusable","innerElements","srcNodes","dstNodes","remap","autoFocusables","orderedInnerElements","entity","newId","autoFocusable","allParentAutofocusables","autofocus","guardCount","lockDisabled","focusable","contentWindow","deferAction","setImmediate","lastActiveTrap","lastActiveFocus","lastPortaledElement","focusWasOutsideWindow","defaultWhitelist","autoGuard","startIndex","end","step","allNodes","lastGuard","guard","focusAutoGuard","lockItem","extractRef","element","_lastActiveTrap","workingNode","portaledElement","workingArea","focusWhitelisted","blur","newActiveElement","focusedIndex","removeAttribute","onTrap","stopPropagation","preventDefault","observerNode","onWindowBlur","moveFocusInside","propsList","_ref5","traps","trap","lastTrap","sameTrap","_ref6","FocusLockCombination","MoveFocusInside","observedRef","isDisabled","enabled","car","forwardProps","FocusLock","isEnabled","elem","scrollBehavior","PositionComponent","getScrollDistance","pageYOffset","documentElement","Modal","dialogNode","isExiting","scrollTo","pageXOffset","shouldCloseOnOverlayClick","handleWindowScroll","isBlanketHidden","isOpen","onCloseComplete","onOpenComplete","isBackground","handleOverlayClick","createAndFireEventOnAtlaskit","createAndFireEvent","withAnalyticsContext","withAnalyticsEvents","actionSubject","attributes","_React$createContext","child","currentChildren","previousChildren","ModalTransitionConsumer","stackConsumers","StackConsumer","update","updateFn","ModalWrapper","naturalStackIndex","onModalClosed","TitleIcon","IconSymbol","ErrorIcon","WarningIcon","titleIconWrapperStyles","React","_onKeyPress","hideCloseIconButton","data-testid","ariaLabel","onKeyPress","src","IconClose","StatelessDialog","_onDialogDismissed","_renderFooter","_setDialogElement","customHeader","identity","titleString","titleKey","i18n","onDialogDismissed","propsFromModalFooter","buttons","_renderOKButton","_renderCancelButton","disableFooter","isModal","disableBlanketClickDismiss","hideCancelButton","cancelKey","submitDisabled","form","okKey","_dialogElement","defaultPrevented","disableEnter","AbstractDialogContainer","_renderDialogContent","_component","_reducedUI","reducedUI","_componentProps","stateFeaturesBaseDialog","componentProps","_rawDialog","rawDialog","ModalTransition","getLogger","DialogWithTabs","selectedTab","defaultTab","tabStates","tabs","tab","_onTabSelected","_onTabStateChange","closeDialog","cssClassName","_renderTabs","_getTabProps","tabId","tabConfiguration","currentTabState","propsUpdateFunction","_renderTab","Tabs","onSelect","selected","TabComponent","mountCallback","onMount","onTabStateChange","submit","_typeof","iterator","classCallCheck","createClass","descriptor","protoProps","staticProps","inherits","objectWithoutProperties","possibleConstructorReturn","isPlainObject","StyledComponentsError","_Error","interpolations","flatten","chunks","executionContext","ruleSet","chunk","styledComponentId","nextChunk","isValidElement","elementName","objToCss","prevKey","COMMENT_REGEX","stylisSplitter","global","cascade","keyframe","compress","semicolon","parsingRules","returnRulesPlugin","parsedRules","parseRulesPlugin","stringifyRules","flatCSS","splitByRules","isStyledComponent","consolidateStreamedStyles","getAlphabeticChar","fromCharCode","generateAlphabeticName","floor","interleave","strings","EMPTY_ARRAY","freeze","EMPTY_OBJECT","SC_ATTR","env","CONTEXT_KEY","IS_BROWSER","SC_COMPONENT_ID","extractComps","maybeCSS","existingComponents","componentId","matchIndex","nextComp","cssFromDOM","getNonce","addNameForId","names","resetIdNames","hasNameForId","stringifyNames","safeInsertRule","cssRule","maxIndex","makeTextMarker","addUpUntilIndex","sizes","totalUpToIndex","wrapAsHtmlTag","additionalAttrs","wrapAsElement","_props","dangerouslySetInnerHTML","__html","getIdsFromMarkersFactory","markers","makeServerTagInternal","namesArg","markersArg","insertMarker","prev","cssForId","namesClone","cloneNames","markersClone","getIds","insertRules","removeRules","marker","sealed","styleTag","toElement","toHTML","makeTag","tagEl","forceServer","getImportRuleTag","makeStyleTag","extractImport","usedImportRuleTag","cssText","insertIndex","injectedRules","importRules","cssRulesSize","mayHaveImport","removalIndex","lowerBound","deleteRule","deleteRules","makeSpeedyTag","SPLIT_REGEX","MAX_SIZE","_StyleSheetManager$ch","sheetRunningId","master","importRuleTag","firstTag","tagMap","rehydratedNames","ignoreRehydratedNames","capacity","clones","rehydrate","els","isStreamed","nodesSize","elNames","elNamesSize","textContent","extractedSize","rehydrationTag","immediateRehydration","called","_extracted$i","_i","makeRehydrationTag","max","_j","ids","newTag","sealAllTags","lastEl","getTagForId","hasId","deferredInject","inject","toReactElements","StyleSheetManager","_Component","getChildContext","sheetInstance","componentWillMount","childContextTypes","oneOfType","instanceOf","ServerStyleSheet","isRequired","masterSheet","closed","complete","collectStyles","getStyleTags","getStyleElement","interleaveWithNodeStream","readableStream","determineTheme","fallbackTheme","isDefaultTheme","escapeRegex","dashesAtEnds","getComponentName","isTag","ATTRIBUTE_REGEX","isCustomAttribute","_contextShape","_ThemeProvider$contex","CHANNEL","CHANNEL_NEXT","CONTEXT_CHANNEL_SHAPE","shape","unsubscribe","contextShape","_babelHelpers$extends","ThemeProvider","unsubscribeToOuterId","initialState","listeners","outerContext","outerTheme","broadcast","publish","currentId","unsubID","subscriber","unsubscribeId","componentWillReceiveProps","passedTheme","contextTypes","STATIC_EXECUTION_CONTEXT","modifiedContextShape","identifiers","BaseStyledComponent","_temp","attrs","generatedClassName","unsubscribeFromContext","buildExecutionContext","attr","hasInInheritanceChain","generateAndInjectStyles","_constructor","componentStyle","styleSheet","warnTooManyClasses","isStatic","styledContext","nextTheme","_generatedClassName","_constructor2","isTargetTag","baseProps","propsForElement","murmurhash","areStylesCacheable","isHMREnabled","hot","domElements","replaceWhitespace","withTheme","Component$$1","isStatelessFunctionalComponent","shouldSetInnerRef","WithTheme","themeProp","oldState","__DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS","ComponentStyle","nameGenerator","generateRuleHash","isStaticRules","placeholder","lastClassName","generateName","_ComponentStyle","constructWithOptions","componentConstructor","templateFunction","withConfig","_constructWithOptions","StyledComponent","createStyledComponent","_options$isClass","isClass","_options$displayName","generateDisplayName","_options$componentId","_displayName","parentComponentId","generateId","_options$ParentCompon","ParentComponent","extendingRules","_ParentComponent","previousComponentId","optionsToCopy","newComponentId","newOptions","rulesFromOptions","newRules","extend","_StyledComponent","keyframes","stringify","_keyframes","injectGlobal","hash","_injectGlobal","styled","styledComponent","domElement","_styled","timeoutPromise","timeoutID","reason","doGetJSON","retry","fetchPromise","fetch","response","jsonify","json","ok","catch","loadScript","ScriptUtil","openURLInBrowser","openInNewTab","APP_LINK_SCHEME","URI_PROTOCOL_PATTERN","_fixURIStringScheme","uri","regex","protocol","startsWith","getBackendSafePath","getBackendSafeRoomName","room","decodeURIComponent","normalize","getLocationContextRoot","pathname","contextRootEndIndex","lastIndexOf","_objectToURLParamsArray","parseStandardURIString","_standardURIToString","authority","userinfoEndIndex","portBeginIndex","port","hostname","hashBeginIndex","search","parseURIString","pathPart","_fixPathPart","contextRoot","tenant","thiz","safeDecodeURIComponent","toURLString","URL","href","tmp","serverURL","scheme","endsWith","domain","roomName","jwt","urlPrefix","urlParamsArray","urlParamsString","urlObjectToString","addHashParamsToURL","hashParamsToAdd","parseURLParams","getDecodedURI","decodeURI","DEFAULT_THEME_MODE","borderRadius","gridSize","fontSize","fontFamily","codeFontFamily","layers","card","dialog","navigation","layer","blanket","flag","spotlight","tooltip","DEFAULT_OPTS","DEFAULT_RN_OPTS","disableCallerInfo","_getLogger","once","default","setGlobalOptions","setGlobalLogOptions","removeGlobalTransport","removeGlobalLogTransport","addGlobalTransport","LogTransport","addGlobalLogTransport","_defineProperties","TileViewButton","AbstractButton","IconTileView","_handleClick","_tileViewEnabled","createToolbarEvent","setTileView","_isToggled","getFeatureFlag","TILE_VIEW_ENABLED","visible","shouldDisplayTileView","AbstractToolboxItem","_onClick","_maybeTranslateAttribute","accessibilityLabel","_renderItem","showLabel","tooltipPosition","ToolboxItem","elementAfter","toggled","elementType","useTooltip","_renderIcon","customClass","icon","iconComponent","defaultDisabledButtonStyles","iconStyle","labelStyle","underlayColor","_getElementAfter","_getIcon","toggledIcon","_getLabel","toggledLabel","_getStyles","disabledStyles","toggledStyles","buttonStyles","_isDisabled","combineStyles","_getTooltip","afterClick","AbstractAudioMuteButton","IconMicrophoneEmpty","IconMicrophoneEmptySlash","_setAudioMuted","_isAudioMuted","audioMuted","AbstractHangupButton","IconHangup","_doHangup","AbstractVideoMuteButton","IconCameraEmpty","IconCameraEmptyDisabled","_setVideoMuted","_isVideoMuted","videoMuted","BetaTag","OverflowMenuItem","iconId","aria-disabled","aria-label","_renderText","textElement","ToolboxButtonWithIcon","iconDisabled","iconTooltip","onIconClick","onIconKeyDown","ariaHasPopup","ariaControls","ariaExpanded","iconProps","onKeyDown","containerId","BoxModel","margin","TILE_ASPECT_RATIO","SQUARE_TILE_ASPECT_RATIO","DISPLAY_DRAWER_THRESHOLD","SINGLE_COLUMN_BREAKPOINT","TWO_COLUMN_BREAKPOINT","ASPECT_RATIO_BREAKPOINT","DEFAULT_MAX_COLUMNS","ABSOLUTE_MAX_COLUMNS","VIDEO_TEST_EVENTS","DISPLAY_VIDEO","DISPLAY_AVATAR","DISPLAY_BLACKNESS_WITH_NAME","DISPLAY_VIDEO_WITH_NAME","DISPLAY_AVATAR_WITH_NAME","DISPLAY_MODE_TO_CLASS_NAME","DISPLAY_MODE_TO_STRING","TILE_VERTICAL_MARGIN","TILE_HORIZONTAL_MARGIN","TOOLBAR_HEIGHT","TOOLBAR_HEIGHT_MOBILE","STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER","STAGE_VIEW_THUMBNAIL_VERTICAL_BORDER","SCROLL_SIZE","VERTICAL_FILMSTRIP_VERTICAL_MARGIN","VERTICAL_FILMSTRIP_MIN_HORIZONTAL_MARGIN","HORIZONTAL_FILMSTRIP_MARGIN","SHOW_TOOLBAR_CONTEXT_MENU_AFTER","AUTH_STATUS_CHANGED","CONFERENCE_FAILED","CONFERENCE_JOINED","CONFERENCE_LEFT","CONFERENCE_SUBJECT_CHANGED","CONFERENCE_TIMESTAMP_CHANGED","CONFERENCE_UNIQUE_ID_SET","CONFERENCE_WILL_JOIN","CONFERENCE_WILL_LEAVE","DATA_CHANNEL_OPENED","KICKED_OUT","LOCK_STATE_CHANGED","P2P_STATUS_CHANGED","SEND_TONES","SET_FOLLOW_ME","SET_PASSWORD","SET_PASSWORD_FAILED","SET_PENDING_SUBJECT_CHANGE","SET_ROOM","SET_START_MUTED_POLICY","BaseApp","route","_init","_initStorage","_createStore","app","APP","API","APP_WILL_MOUNT","APP_WILL_UNMOUNT","jitsiLocalStorage","getItem","_createMainElement","_createExtraElement","_renderDialogContainer","ReducerRegistry","devToolsExtension","MiddlewareRegistry","applyMiddleware","Thunk","compose","createStore","PersistenceRegistry","getPersistedState","StateListenerRegistry","_navigate","isEqual","location","getAppProp","stateful","toState","ReactReduxContext","nullListeners","notify","createListenerCollection","batch","next","clear","isSubscribed","Subscription","parentSub","handleChangeWrapper","addNestedSub","trySubscribe","notifyNestedSubs","onStateChange","tryUnsubscribe","notifySubscribers","subscription","previousState","Context","any","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","initStateUpdates","useIsomorphicLayoutEffect","connectAdvanced","selectorFactory","_ref2$getDisplayName","_ref2$methodName","methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","shouldHandleStateChanges","_ref2$storeKey","storeKey","_ref2$withRef","withRef","_ref2$forwardRef","forwardRef","_ref2$context","connectOptions","wrappedComponentName","selectorFactoryOptions","pure","usePureOnlyMemo","ConnectFunction","_useMemo","forwardedRef","wrapperProps","propsContext","ContextToUse","contextValue","didStoreComeFromProps","didStoreComeFromContext","childPropsSelector","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","previousStateUpdateResult","forceComponentUpdateDispatch","lastChildProps","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","actualChildProps","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","renderedWrappedComponent","Connect","memo","forwarded","hasOwn","is","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","mapDispatchToProps","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","nextStateProps","statePropsChanged","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","useReduxContext","useDispatch","refEquality","useSelector","equalityFn","selectedState","_useReduxContext","contextSub","forceRender","latestSubscriptionCallbackError","latestSelector","latestSelectedState","errorMessage","message","newSelectedState","newBatch","hookCallback","hooks","input","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","valueOf","createUTC","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","updateInProgress","copyConfig","to","from","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","isFunction","mergeConfigs","parentConfig","childConfig","Locale","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","array","mom","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","matched","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","parseTwoDigitYear","parseInt","getSetYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","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","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","weekdayStr","parsedInput","getDay","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","setUTCMinutes","getUTCMinutes","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","weekYear","weekdayOverflow","curWeek","GG","createLocal","_week","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromStringAndArray","createFromInputFallback","configFromString","dayOrDate","minute","second","millisecond","configFromObject","configFromInput","isUTC","createFromConfig","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","addSubtract","isAdding","invalid","subtract","isString","isMomentInput","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","properties","isMomentInputObject","isCalendarSpec","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","toObject","toDate","toISOString","keepOffset","inspect","zone","isLocal","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","_eras","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","factory","isMobileBrowser","Platform","OS","isIosMobileBrowser","checkChromeExtensionsInstalled","extensionInstalledFunction","img","Image","onload","onerror","isExtensionInstalled","all","chromeExtensionsInfo","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","root","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseTrim","trimmedEndIndex","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","maxLength","Infinity","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","isIterateeCall","iterable","createCaseFirst","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","lt","lte","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","toPairs","toPairsIn","camelCase","word","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","multiply","multiplier","multiplicand","minuend","subtrahend","after","castArray","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","reDelimiters","evaluate","sourceURL","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","CAMERA_FACING_MODE","ENVIRONMENT","USER","MEDIA_TYPE","AUDIO","PRESENTER","VIDEO","VIDEO_MUTISM_AUTHORITY","AUDIO_ONLY","BACKGROUND","VIDEO_TYPE","CAMERA","DESKTOP","playSound","soundId","PLAY_SOUND","registerSound","soundName","REGISTER_SOUND","stopSound","STOP_SOUND","unregisterSound","UNREGISTER_SOUND","SoundCollection","sounds","sound","_sounds","Audio","setRef","loop","_addAudioElement","_removeAudioElement","_ADD_AUDIO_ELEMENT","_REMOVE_AUDIO_ELEMENT","DOMINANT_SPEAKER_CHANGED","GRANT_MODERATOR","KICK_PARTICIPANT","MUTE_REMOTE_PARTICIPANT","PARTICIPANT_DISPLAY_NAME_CHANGED","PARTICIPANT_ID_CHANGED","PARTICIPANT_ROLE_CHANGED","PARTICIPANT_JOINED","PARTICIPANT_KICKED","PARTICIPANT_LEFT","PARTICIPANT_UPDATED","PIN_PARTICIPANT","HIDDEN_PARTICIPANT_JOINED","HIDDEN_PARTICIPANT_LEFT","SET_LOADABLE_AVATAR_URL","LOCAL_PARTICIPANT_RAISE_HAND","objectWithoutPropertiesLoose","excluded","sourceSymbolKeys","preloadImage","isIconUrl","image","referrerPolicy","AVATAR_QUEUE","AVATAR_CHECKED_URLS","AVATAR_CHECKER_FUNCTIONS","participant","isJigasi","JIGASI_PARTICIPANT_ICON","avatarURL","email","gravatarBaseURL","getGravatarURL","getFirstLoadableAvatarUrl","createDeferred","fullPromise","finalUrl","_getFirstLoadableAvatarUrl","getLocalParticipant","getNormalizedDisplayName","MAX_DISPLAY_NAME_LENGTH","getParticipantById","remote","getParticipantByIdOrUndefined","participantID","getParticipantCount","fakeParticipants","getFakeParticipants","getParticipantCountWithFake","getParticipantDisplayName","DEFAULT_LOCAL_DISPLAY_NAME","DEFAULT_REMOTE_DISPLAY_NAME","getParticipantPresenceStatus","participantById","presence","haveParticipantWithScreenSharingFeature","getRemoteParticipants","getPinnedParticipant","pinnedParticipant","isParticipantModerator","PARTICIPANT_ROLE","MODERATOR","getDominantSpeakerParticipant","dominantSpeaker","isEveryoneModerator","everyoneIsModerator","isLocalParticipantModerator","REMOTE_CONTROL_MESSAGE_NAME","DISCO_REMOTE_CONTROL_FEATURE","EVENTS","mousemove","mousedown","mouseup","mousedblclick","mousescroll","keydown","keyup","permissions","stop","supported","REQUESTS","PERMISSIONS_ACTIONS","request","grant","deny","AUDIO_MUTE_BUTTON_ENABLED","CHAT_ENABLED","HELP_BUTTON_ENABLED","INVITE_ENABLED","LOBBY_MODE_ENABLED","MEETING_PASSWORD_ENABLED","NOTIFICATIONS_ENABLED","SECURITY_OPTIONS_ENABLED","SERVER_URL_CHANGE_ENABLED","VIDEO_MUTE_BUTTON_ENABLED","WELCOME_PAGE_ENABLED","appNavigate","defaultLocation","getDefaultURL","locationURL","disconnect","clearNotifications","configWillLoad","baseURL","restoreConfig","loadConfig","storeConfig","loadConfigError","createFakeConfig","setLocationURL","setConfig","setRoom","createDesiredLocalTracks","redirectToStaticPage","hashParam","windowLocation","newPathname","reloadNow","setFatalError","newURL","addTrackStateToURL","reloadWithStoredParams","tracks","isVideoMuted","isLocalCameraTrackMuted","isAudioMuted","isLocalTrackMuted","oldSearchString","maybeRedirectToWelcomePage","enableClosePage","isVpaasMeeting","sessionStorage","setItem","SHOW_PROMOTIONAL_CLOSE_PAGE","API_ID","feedbackSubmitted","showThankYou","showNotification","titleArguments","appName","getName","enableWelcomePage","newLocationURL","SET_NO_SRC_DATA_NOTIFICATION_UID","TOGGLE_SCREENSHARING","TRACK_ADDED","TRACK_CREATE_CANCELED","TRACK_CREATE_ERROR","TRACK_NO_DATA_FROM_SOURCE","TRACK_REMOVED","TRACK_STOPPED","TRACK_UPDATED","TRACK_WILL_CREATE","TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT","extractVpaasTenantFromPath","VPAAS_TENANT_PREFIX","getVpaasTenant","sendGetDetailsRequest","appId","baseUrl","fullUrl","headers","isFeatureDisabled","feature","disabledFeatures","getJaasJWT","jaasTokenUrl","sendGetJWTRequest","LIVE_STREAMING_OFF_SOUND_ID","LIVE_STREAMING_ON_SOUND_ID","RECORDING_OFF_SOUND_ID","RECORDING_ON_SOUND_ID","RECORDING_TYPES","JITSI_REC_SERVICE","DROPBOX","RECORDING_STATUS_PRIORITIES","OFF","PENDING","ON","LogCollector","idLoggers","loggers","curLevel","levels","TRACE","transport","transports","setLogLevelById","level","setLevel","setLogLevel","isJoinByPhoneButtonVisible","getDialOutUrl","getDialOutStatusUrl","isDeviceStatusVisible","isVideoMutedByUser","isDisplayNameRequired","requireDisplayName","isPrejoinSkipped","userSelectedSkipPrejoin","getDeviceStatusText","deviceStatusText","getDeviceStatusType","deviceStatusType","getDialOutConferenceUrl","getRoomName","hosts","muc","getDialOutCountry","dialOutCountry","getDialOutNumber","dialOutNumber","getDialOutStatus","dialOutStatus","getFullDialOutNumber","dialCode","getRawError","rawError","isJoinByPhoneDialogVisible","showJoinByPhoneDialog","isPrejoinPageEnabled","prejoinPageEnabled","enableForcedReload","skipPrejoinOnReload","isPrejoinPageVisible","showPrejoin","shouldAutoKnock","iAmRecorder","iAmSipGateway","knocking","REDUCER_KEY","ACTION_TRIGGER","HOVER","PERMANENT","MEDIA_STATE","MUTED","FORCE_MUTED","UNMUTED","NONE","QUICK_ACTION_BUTTON","MUTE","ASK_TO_UNMUTE","color","NICKNAME_CHANGED","EMAIL_CHANGED","AUDIO_MUTED","VIDEO_MUTED","ETHERPAD_CLICKED","TOGGLE_FULLSCREEN","FULLSCREEN_TOGGLED","AUTH_CLICKED","TOGGLE_AUDIO_ONLY","TOGGLE_FILMSTRIP","HANGUP","LOGOUT","VIDEO_DEVICE_CHANGED","AUDIO_DEVICE_CHANGED","SIDE_TOOLBAR_CONTAINER_TOGGLED","LOCAL_RAISE_HAND_CHANGED","OUTGOING_CALL_EXPIRED_SOUND_ID","OUTGOING_CALL_REJECTED_SOUND_ID","OUTGOING_CALL_RINGING_SOUND_ID","OUTGOING_CALL_START_SOUND_ID","SIP_ADDRESS_REGEX","INVITE_TYPES","PHONE","ROOM","SIP","VIDEO_ROOM","bosh","clientNode","p2p","getMeetingRegion","deploymentInfo","region","getRecordingSharingUrl","recordingSharingUrl","getWhitelistedJSON","configName","configJSON","INTERFACE_CONFIG_WHITELIST","CONFIG_WHITELIST","_CONFIG_STORE_PREFIX","Bourne","removeItem","setConfigFromURLParams","loggingConfig","param","configObj","oldValue","overrideConfigJSON","_cleanupConfig","guestDialOutStatusUrl","guestDialOutUrl","getReplaceParticipant","replaceParticipant","getToolbarButtons","toolbarButtons","TOOLBAR_BUTTONS","isToolbarButtonEnabled","buttonName","__filename","largeVideo","VideoLayout","onLocalFlipXChanged","localFlipX","onLocalFlipXChange","_resetLargeVideo","initLargeVideo","LargeVideoManager","updateContainerSize","setAudioLevel","updateLargeVideoAudioLevel","updateVideoMutedForNoTracks","getTracksByMediaType","_updateLargeVideoIfDisplayed","getRemoteVideoType","isFakeParticipant","getTrackByMediaTypeAndParticipant","getPinnedId","onParticipantConnectionStatusChanged","isLocalId","onLastNEndpointsChanged","endpointsLeavingLastN","endpointsEnteringLastN","resizeVideoArea","resize","changeUserAvatar","avatarUrl","isCurrentlyOnLarge","updateAvatar","isLargeVideoVisible","isLargeContainerTypeVisible","VIDEO_CONTAINER_TYPE","getCurrentlyOnLargeContainer","getCurrentContainer","updateLargeVideo","forceUpdate","currentContainer","currentContainerType","getCurrentContainerType","isOnLarge","videoStream","isVideoContainer","getStreamID","addLargeVideoContainer","addContainer","removeLargeVideoContainer","removeContainer","showLargeVideoContainer","show","containerTypeToShow","pinnedId","showContainer","getLargeVideoID","getLargeVideo","getLargeVideoWrapper","$wrapper","refreshLayout","destroy","force","onResize","getDialInConferenceID","mucURL","conferenceIDURL","getDialInNumbers","getDigitsOnly","getInviteResultsForQuery","query","dialOutAuthUrl","addPeopleEnabled","dialOutEnabled","peopleSearchQueryTypes","peopleSearchUrl","sipInviteEnabled","peopleSearchPromise","serviceUrl","queryTypes","queryTypesString","searchDirectory","phoneNumberPromise","hasCountryCode","regexString","PHONE_NUMBER_REGEX","isPhoneNumberRegex","digits","isMaybeAPhoneNumber","numberToVerify","dialNumber","$","getJSON","checkDialNumber","allow","country","phone","peopleResults","phoneResults","results","allowed","originalEntry","showCountryCodeReminder","isASipAddress","address","getInviteTextiOS","phoneNumber","dialIn","inviteUrl","getInviteURL","localParticipant","localParticipantName","inviteURL","_decodeRoomURI","invite","shouldDisplayDialIn","conferenceID","didUrl","getDialInfoPageURL","silentUrl","getInviteText","currentLiveStreamingSession","getActiveSession","STREAM","liveStreamViewURL","getInviteTypeCounts","inviteItems","inviteTypeCounts","invitePeopleAndChatRooms","inviteServiceUrl","isAddPeopleEnabled","isDialOutEnabled","isSIPCallingSupported","isSipInviteEnabled","sipInviteUrl","features","getShareInfoText","useHtml","roomUrl","includeDialInfo","infoText","numbersPromise","dialInConfCodeUrl","dialInNumbersUrl","_getDefaultPhoneNumber","defaultDialInNumber","dialInfoPageUrl","didPageUrl","conferenceName","numbersEnabled","hasMultipleNumbers","dialInNumbers","defaultNumber","formattedNumber","firstRegion","getConferenceId","getDefaultDialInNumber","executeDialOutRequest","reqId","executeDialOutStatusRequest","sharingFeatures","embed","isSharingEnabled","sharingFeature","SHARING_FEATURES","inviteSipEndpoints","roomPassword","callParams","callUrlInfo","callName","passcode","sipClientParams","sipAddress","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","clearToolboxTimeout","CLEAR_TOOLBOX_TIMEOUT","setOverflowMenuVisible","SET_OVERFLOW_MENU_VISIBLE","setToolbarHovered","hovered","SET_TOOLBAR_HOVERED","setToolboxEnabled","SET_TOOLBOX_ENABLED","setToolboxTimeout","timeoutMS","SET_TOOLBOX_TIMEOUT","setToolboxVisible","SET_TOOLBOX_VISIBLE","dockToolbox","dock","showToolbox","hideToolbox","fullScreenChanged","fullScreen","FULL_SCREEN_CHANGED","alwaysVisible","calleeInfoVisible","querySelector","setFullScreen","SET_FULL_SCREEN","SET_TOOLBOX_TIMEOUT_MS","setToolboxTimeoutMS","TOOLBAR_TIMEOUT","setOverflowDrawer","displayAsDrawer","SET_OVERFLOW_DRAWER","themeNamespace","compactSmallFontSize","compactLineHeight","defaultTheme","afterItemSpacing","beforeItemSpacing","outline","secondaryText","hover","dragging","isValidCssValue","getThemeStyle","maybeTheme","parentKey","themeWithKeys","TooltipWrapper","Tooltip","openChat","OPEN_CHAT","toggleChat","closeChat","PREJOIN_START_CONFERENCE","PREJOIN_INITIALIZED","SET_DEVICE_STATUS","SET_SKIP_PREJOIN","SET_SKIP_PREJOIN_RELOAD","SET_PREJOIN_DISPLAY_NAME_REQUIRED","SET_DIALOUT_COUNTRY","SET_DIALOUT_NUMBER","SET_DIALOUT_STATUS","SET_JOIN_BY_PHONE_DIALOG_VISIBLITY","SET_PRECALL_TEST_RESULTS","SET_PREJOIN_DEVICE_ERRORS","SET_PREJOIN_PAGE_VISIBILITY","dialOutStatusToKeyMap","INITIATED","RINGING","DIAL_OUT_STATUS","pollForStatus","onSuccess","onFail","showErrorNotification","dialOut","uuid","v4","conferenceUrl","countryCode","notification","messageKey","initPrejoin","trackAdded","joinConference","joinConferenceWithoutAudio","getLocalAudioTrack","replaceLocalTrack","makePrecallTest","conferenceOptions","precallTest","execute","openDialInPage","dialInPage","replaceAudioTrackById","deviceId","newTrack","createLocalTrack","oldTrack","setDeviceStatusWarning","replaceVideoTrackById","wasVideoMuted","createLocalTracksF","cameraDeviceId","devices","getLocalVideoTrack","mute","setDeviceStatusOk","setDialOutCountry","setPrejoinDisplayNameRequired","setDialOutNumber","setSkipPrejoin","setSkipPrejoinOnReload","setJoinByPhoneDialogVisiblity","setPrejoinPageVisibility","toggleLobbyMode","getCurrentConference","enableLobby","disableLobby","cancelKnocking","notifyReadyToClose","hideLobbyScreen","LobbyScreen","joinWithPassword","password","setPassword","knockingParticipantLeft","KNOCKING_PARTICIPANT_LEFT","openLobbyScreen","openDialog","participantIsKnockingOrUpdated","KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED","setKnockingParticipantApproval","approved","lobbyApproveAccess","lobbyDenyAccess","admitMultiple","participants","approveKnockingParticipant","rejectKnockingParticipant","setLobbyModeEnabled","SET_LOBBY_MODE_ENABLED","setPasswordJoinFailed","failed","SET_PASSWORD_JOIN_FAILED","startKnocking","membersOnly","conferenceWillJoin","sendLocalParticipant","joinLobby","SET_KNOCKING_STATE","DEFAULT_LAST_N","VIDEO_QUALITY_LEVELS","ULTRA","HIGH","STANDARD","LOW","CFG_LVL_TO_APP_QUALITY_LVL","SET_TOOLBOX_ALWAYS_VISIBLE","TOGGLE_TOOLBOX_VISIBLE","sessionDatas","statusConstants","sessionData","getRecordingDurationEstimation","getSessionById","getRecordingLink","recordingSessionId","isSavingRecordingOnDropbox","isDropboxEnabled","selectedRecordingService","getSessionStatusToShow","recordingSessions","session","getResourceId","recorder","getTrackState","isParticipantMediaMuted","mediaType","isRemoteTrackMuted","isParticipantAudioMuted","isParticipantVideoMuted","createLocalPresenterTrack","desktopHeight","constraints","video","aspectRatio","ideal","createLocalTracks","micDeviceId","desktopSharingSourceDevice","desktopSharingSources","firePermissionPromptIsShownEvent","fireSlowPromiseEvent","getUserSelectedCameraDeviceId","getUserSelectedMicDeviceId","desktopSharingFrameRate","firefox_fake_device","resolution","virtualBackground","backgroundPromise","backgroundEffectEnabled","createVirtualBackgroundEffect","screenshotCapturePromise","capturesEnabled","createScreenshotCaptureEffect","loadEffects","effectsArray","effects","effect","createPrejoinTracks","initialDevices","requestedVideo","startAudioOnly","startWithAudioMuted","startWithVideoMuted","tryCreateLocalTracks","setAudioMuted","audioAndVideoError","audioOnlyError","videoOnlyError","getLocalTrack","includePending","getLocalTracks","getLocalVideoType","getLocalJitsiVideoTrack","getLocalJitsiAudioTrack","getTrackByJitsiTrack","presenterTrack","isLocalVideoTrackDesktop","isUserInteractionRequiredForUnmute","interacted","setTrackMuted","isMuted","TRACK_IS_DISPOSED","isToggleCameraEnabled","videoInput","availableDevices","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","getToolboxHeight","toolbox","getElementById","isButtonEnabled","isToolboxVisible","audioSettingsVisible","videoSettingsVisible","isAudioSettingsButtonDisabled","hasAvailableDevices","isVideoSettingsButtonDisabled","isVideoMuteButtonDisabled","CHAT_VIEW_MODAL_ID","CHAT_SIZE","INCOMING_MSG_SOUND_ID","MESSAGE_TYPE_ERROR","MESSAGE_TYPE_LOCAL","MESSAGE_TYPE_REMOTE","SMALL_WIDTH_THRESHOLD","VIRTUAL_BACKGROUND_TYPE","IMAGE","DESKTOP_SHARE","BLUR","NOTIFY_CAMERA_ERROR","NOTIFY_MIC_ERROR","SET_AUDIO_INPUT_DEVICE","SET_VIDEO_INPUT_DEVICE","UPDATE_DEVICE_LIST","ADD_PENDING_DEVICE_REQUEST","REMOVE_PENDING_DEVICE_REQUESTS","CHECK_AND_NOTIFY_FOR_NEW_DEVICE","DEVICE_PERMISSIONS_CHANGED","googleClientLoadPromise","googleApi","globalGoogleApi","_getGoogleApiClient","getCurrentUserProfile","isSignedIn","auth2","getAuthInstance","currentUser","getBasicProfile","initializeClient","clientId","enableYoutube","enableCalendar","api","scope","GOOGLE_SCOPE_YOUTUBE","GOOGLE_SCOPE_CALENDAR","client","discoveryDocs","DISCOVERY_DOCS","scriptTag","requestAvailableYouTubeBroadcasts","API_URL_LIVE_BROADCASTS","requestLiveStreamsForYouTubeBroadcast","boundStreamID","API_URL_BROADCAST_STREAMS","showAccountSelection","signIn","signInIfNotSignedIn","signOut","_convertCalendarEntry","calendarId","description","endDate","dateTime","startDate","title","summary","_getConferenceDataVideoUri","conferenceData","parameters","addOnParameters","conferenceSolutionType","videoEntry","entryPoints","entryPointType","_getCalendarEntries","fetchStartDays","fetchEndDays","calendarList","list","promises","items","en","accessRole","setDate","resultItem","_updateCalendarEntry","newDescription","patch","gapi","getCalendarEntries","loadGoogleAPI","liveStreamingEnabled","enableCalendarIntegration","googleApiApplicationClientID","googleAPIState","GOOGLE_API_STATES","NEEDS_LOADING","setGoogleAPIState","LOADED","SIGNED_IN","broadcasts","parsedBroadcasts","contentDetails","boundStreamId","lifeCycleStatus","snippet","streamKey","cdn","ingestionInfo","streamName","selectedBoundStreamID","googleResponse","SET_GOOGLE_API_STATE","updateProfile","profile","SET_GOOGLE_API_PROFILE","profileEmail","getEmail","updateCalendarEvent","AbstractGoogleSignInButton","alt","signedIn","DISABLE_MODERATION","DISMISS_PENDING_PARTICIPANT","ENABLE_MODERATION","REQUEST_DISABLE_MODERATION","REQUEST_ENABLE_MODERATION","LOCAL_PARTICIPANT_APPROVED","LOCAL_PARTICIPANT_MODERATION_NOTIFICATION","PARTICIPANT_APPROVED","PARTICIPANT_PENDING_AUDIO","getConferenceState","_addLocalTracksToConference","localTracks","conferenceLocalTracks","addTrack","_reportError","commonUserJoinedHandling","user","isHidden","hiddenParticipantJoined","isReplacing","participantJoined","botType","getBotType","connectionStatus","getConnectionStatus","getStatus","getRole","commonUserLeftHandling","hiddenParticipantLeft","isReplaced","participantLeft","forEachConference","JITSI_CONFERENCE_URL_KEY","myUserId","getConferenceName","callee","callDisplayName","pendingSubjectChange","subject","safeStartCase","getConferenceNameForTitle","getConferenceTimestamp","conferenceTimestamp","joining","leaving","passwordRequired","_handleParticipantError","isRoomValid","_removeLocalTracksFromConference","removeTrack","sendCommand","AVATAR_URL_COMMAND","EMAIL_COMMAND","setLocalParticipantProperty","setDisplayName","defaultSharedVideoLink","VIDEO_PLAYER_PARTICIPANT_NAME","YOUTUBE_PLAYER_PARTICIPANT_NAME","SHARED_VIDEO","PLAYBACK_STATUSES","PLAYING","PAUSED","STOPPED","_assertThisInitialized","KEYS","keyCodeToKey","27","32","33","34","35","36","37","38","39","40","42","44","45","46","59","61","91","92","93","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","124","173","186","187","188","189","190","191","192","219","220","221","222","224","229","keyCode","isRemoteControlEnabled","disableRemoteControl","isDesktopSharingEnabled","sendRemoteControlEndpointMessage","sendEndpointMessage","onRemoteControlAPIEvent","enableReceiver","stopReceiver","getRemoteConrolEventCaptureArea","getKey","which","keyboardEventToKey","getModifiers","modifiers","shiftKey","ctrlKey","altKey","metaKey","getMoreTabProps","framerate","captureFrameRate","SS_DEFAULT_FRAME_RATE","followMeEnabled","startAudioMutedPolicy","startVideoMutedPolicy","followMeActive","isFollowMeActive","configuredTabs","SETTINGS_SECTIONS","showModeratorSettings","currentFramerate","currentLanguage","desktopShareFramerates","SS_SUPPORTED_FRAMERATES","showLanguageSettings","showPrejoinSettings","showPrejoinPage","startAudioMuted","startVideoMuted","getProfileTabProps","authEnabled","authLogin","getSoundsTabProps","soundsIncomingMessage","soundsParticipantJoined","soundsParticipantLeft","soundsTalkWhileMuted","createLocalVideoTracks","createLocalAudioTracks","hasError","getAudioSettingsVisibility","getVideoSettingsVisibility","classList","findStyledAncestor","parentElement","isForceMuted","isEnabledFromState","isLocalParticipantApprovedFromState","isParticipantApproved","getParticipantAudioMediaState","getFloatStyleProperty","getComputedOuterHeight","offsetHeight","getParticipantsPaneOpen","getQuickActionButtonType","shouldRenderInviteButton","disableInviteFunctions","setFilmstripEnabled","SET_FILMSTRIP_ENABLED","setFilmstripVisible","SET_FILMSTRIP_VISIBLE","setTileViewDimensions","dimensions","clientWidth","disableResponsiveTiles","calculateThumbnailSizeForTileView","columns","rows","thumbnailsTotalHeight","hasScroll","filmstripWidth","filmstripHeight","SET_TILE_VIEW_DIMENSIONS","gridDimensions","thumbnailSize","setVerticalViewDimensions","thumbnails","calculateThumbnailSizeForVerticalView","SET_VERTICAL_VIEW_DIMENSIONS","remoteVideosContainer","setHorizontalViewDimensions","calculateThumbnailSizeForHorizontalView","SET_HORIZONTAL_VIEW_DIMENSIONS","clickOnVideo","nThParticipant","pinned","pinParticipant","setVolume","SET_VOLUME","setVisibleRemoteParticipants","endIndex","SET_VISIBLE_REMOTE_PARTICIPANTS","approveParticipant","avModerationApprove","disableModeration","actor","dismissPendingAudioParticipant","dismissPendingParticipant","enableModeration","requestDisableModeration","requestEnableModeration","localParticipantApproved","showModeratedNotification","participantPendingAudio","participantApproved","CLEAR_CALENDAR_INTEGRATION","REFRESH_CALENDAR","SET_CALENDAR_AUTHORIZATION","SET_CALENDAR_ERROR","SET_CALENDAR_EVENTS","SET_CALENDAR_INTEGRATION","SET_CALENDAR_AUTH_STATE","SET_CALENDAR_PROFILE_EMAIL","SET_LOADING_CALENDAR_EVENTS","arrayWithoutHoles","iterableToArray","nonIterableSpread","IconPhone","LOCAL_PARTICIPANT_DEFAULT_ID","PARTICIPANT_JOINED_SOUND_ID","PARTICIPANT_LEFT_SOUND_ID","PARTICIPANT","ADD_MESSAGE","CLEAR_MESSAGES","CLOSE_CHAT","SEND_MESSAGE","SET_PRIVATE_MESSAGE_RECIPIENT","TOGGLE_REACTIONS_VISIBLE","ADD_REACTION_BUFFER","FLUSH_REACTION_BUFFER","ADD_REACTION_MESSAGE","SET_REACTION_QUEUE","SEND_REACTIONS","PUSH_REACTIONS","CAPTURE_EVENTS","REMOTE_CONTROL_ACTIVE","SET_RECEIVER_TRANSPORT","SET_RECEIVER_ENABLED","SET_CONTROLLER","SET_CONTROLLED_PARTICIPANT","SET_REQUESTED_PARTICIPANT","jitsi_meet_external_api_id","ENDPOINT_TEXT_MESSAGE_NAME","ENDPOINT_REACTION_NAME","refreshCalendar","forcePermission","isInteractive","setCalendarAuthorization","authorization","setCalendarEvents","bootstrapCalendarIntegration","isCalendarEnabled","integrationReady","integrationType","integrationToLoad","_getCalendarIntegration","_isSignedIn","setIntegrationReady","clearCalendarIntegration","setCalendarAPIAuthState","newState","msAuthState","setCalendarError","setLoadingCalendarEvents","isLoadingEvents","calendarType","integration","createCalendarConnectedEvent","newRoomName","generateRoomWithoutSeparator","roomURL","eventIx","newEvent","getCurrentEmail","newEmail","NOTIFICATION_TIMEOUT","NOTIFICATION_TYPE","ERROR","INFO","NORMAL","SUCCESS","WARNING","NOTIFICATION_TYPE_PRIORITIES","SET_AUDIO_MUTED","SET_AUDIO_AVAILABLE","SET_CAMERA_FACING_MODE","SET_VIDEO_AVAILABLE","SET_VIDEO_MUTED","STORE_VIDEO_TRANSFORM","TOGGLE_CAMERA_FACING_MODE","ADD_PENDING_INVITE_REQUEST","BEGIN_ADD_PEOPLE","REMOVE_PENDING_INVITE_REQUESTS","SET_CALLEE_INFO_VISIBLE","HIDE_ADD_PEOPLE_DIALOG","UPDATE_DIAL_IN_NUMBERS_FAILED","UPDATE_DIAL_IN_NUMBERS_SUCCESS","fontSizeSmall","HIDE_DIALOG","OPEN_DIALOG","toggleDialog","isDialogOpen","audioModerationEnabled","videoModerationEnabled","isSupported","isAVModerationSupported","audioUnmuteApproved","videoUnmuteApproved","MEDIA_TYPE_TO_WHITELIST_STORE_KEY","isParticipantPending","MEDIA_TYPE_TO_PENDING_STORE_KEY","getParticipantsAskingToAudioUnmute","pendingAudio","shouldShowModeratedNotification","CONNECTION_DISCONNECTED","CONNECTION_ESTABLISHED","CONNECTION_FAILED","CONNECTION_WILL_CONNECT","SET_LOCATION_URL","SHOW_CONNECTION_INFO","RecordingAdapter","exportRecordedData","setMuted","setMicDevice","_getAudioStream","mediaStream","OggAdapter","_initPromise","_initialize","_mediaRecorder","onstop","_recordedData","shouldEnable","_stream","getAudioTracks","MediaRecorder","ondataavailable","_saveMediaData","AbstractAudioContextAdapter","_audioContext","AudioContext","_sampleRate","sampleRate","_initializeAudioContext","_audioSource","createMediaStreamSource","_audioProcessingNode","createScriptProcessor","onaudioprocess","_connectAudioGraph","destination","_disconnectAudioGraph","_replaceMic","newStream","newSource","WavAdapter","_onAudioProcess","_wavBuffers","_wavLength","_exportMonoWAV","_isInitialized","_createWavHeader","dataLength","writeUTFBytes","setUint32","setUint16","channelLeft","inputBuffer","getChannelData","Float32Array","buffers","setUint8","inputBuffers","sampleCount","bufferCount","setInt16","floatTo16BitPCM","Blob","FlacAdapter","_onWorkerMessage","_encoder","_stopPromiseResolver","postMessage","command","_loadWebWorker","_initWorkerPromiseResolver","onmessage","bps","buf","terminate","Worker","exception1","exception2","highPrecisionTime","performance","timing","navigationStart","SessionEventType","SESSION_STARTED","SEGMENT_STARTED","SEGMENT_ENDED","sessionManager","_loadMetadata","dataStr","dataObject","_sessionsMetadata","_saveMetadata","createSession","sessionToken","timestamp","getSessions","sessionTokens","thisSession","newSessionInfo","segments","getSegments","removeSession","_constructSegments","beginSegment","getCurrentSegmentIndex","endSegment","sessionStartTime","currentSegment","gapBefore","lastSegment","currentEvent","RECORDING_FORMATS","ControllerState","IDLE","STARTING","RECORDING","STOPPING","FAILED","recordingController","registerEvents","getParticipantsStats","_onStartCommand","_onStopCommand","_onPingCommand","_doStartRecording","_doStopRecording","_updateStats","_switchToNewSession","_registered","_conference","addCommandListener","isModerator","sendCommandOnce","delegate","_onStateChanged","_onNotify","_onWarning","startRecording","removeCommand","_getRandomToken","stopRecording","_currentSessionToken","downloadRecordedData","_adapters","blob","fileName","base64Url","createObjectURL","download","click","downloadBlob","_micDeviceId","_state","_isMuted","switchFormat","newFormat","getLocalStats","currentSessionToken","isRecording","recordedBytes","recordedLength","members","getParticipants","member","recordingStats","getProperty","isSelf","localId","_changeState","messageParams","_createRecordingAdapter","ActionButton","hasOptions","OptionsIcon","IconArrowDown","onOptionsClick","ariaPressed","ariaDropDownLabel","onKeyPressHandler","useCallback","onOptionsKeyPressHandler","aria-haspopup","aria-pressed","InputField","PureComponent","focused","_onBlur","_onChange","_onFocus","_onKeyDown","autoComplete","onChange","placeHolder","evt","getFieldValue","CONNECTION_TYPE","LOSS_AUDIO_THRESHOLDS","LOSS_VIDEO_THRESHOLDS","THROUGHPUT_AUDIO_THRESHOLDS","THROUGHPUT_VIDEO_THRESHOLDS","_getLevel","descending","getConnectionData","precallTestResults","mediaConnectivity","fractionalLoss","throughput","loss","connectionType","connectionDetails","_getConnectionDataFromTestResults","CONNECTION_TYPE_MAP","connectionClass","IconWifi1Bar","connectionText","IconWifi2Bars","IconWifi3Bars","showDetails","toggleDetails","useState","arrowClassName","detailsText","detailsClassName","onToggleDetails","onKeyPressToggleDetails","aria-level","aria-hidden","ariaDescribedBy","IconArrowDownSmall","CopyMeetingUrl","CopyMeetingLinkSection","enableAutomaticUrlCopy","customizationReady","getCurrentConferenceUrl","_enableAutomaticUrlCopy","flipVideo","PreMeetingScreen","showAvatar","showConferenceInfo","showCopyUrlButton","visibleButtons","showSharingButton","dynamicColor","checkBlurSupport","skipPrejoinButton","ToggleButton","isToggled","aria-checked","IconCheck","htmlFor","renderConnectionStatus","showConnectionInfo","i18nInstance","hasUsedI18nextProvider","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transKeepBasicHtmlNodesFor","I18nContext","getHasUsedI18nextProvider","ReportNamespaces","usedNamespaces","getI18n","alreadyWarned","warnOnce","loadNamespaces","initialized","off","hasLoadedNamespace","lastLng","loadNotPending","loadState","useTranslation","i18nFromProps","i18nFromContext","defaultNSFromContext","reportNamespaces","retNotReady","ready","i18nOptions","_props$useSuspense","addUsedNamespaces","initializedStoreOnce","getT","getFixedT","nsMode","_useState","_useState2","setT","isMounted","boundReset","withTranslation","I18nextWithTranslation","_useTranslation","_useTranslation2","passDownProps","tReady","I18nextProvider","AbstractStatelessAvatar","_isIcon","iconProp","StatelessAvatar","initials","_getAvatarClassName","_getBadgeClassName","_getAvatarStyle","onError","onAvatarLoadError","xmlns","xmlnsXlink","dominantBaseline","textAnchor","defaultAvatar","AVATAR_COLORS","Avatar","avatarFailed","_onAvatarLoadError","_customAvatarBackgrounds","_initialsBase","_loadableAvatarUrl","colorBase","avatarProps","effectiveURL","initialsBasis","getInitials","customAvatarBackgrounds","hasCustomAvatarBackgronds","colorsBase","colorIndex","nameHash","codePointAt","getAvatarColor","_participant","avatarBackgrounds","loadableAvatarUrl","_objectWithoutPropertiesLoose","sourceKeys","permissionsReplyListener","receiverEndpointMessageListener","stopListener","setRemoteControlActive","oldActive","requestRemoteControl","userId","requestedParticipant","controller","descriptionKey","permissionGranted","controlled","stopEvent","stopController","handleRemoteControlStoppedEvent","ENDPOINT_MESSAGE_RECEIVED","resume","clearRequest","descriptionArguments","processPermissionRequestReply","notifyRemoteParty","pause","setReceiverTransport","receiver","addFeature","sendEvent","RemoteControlAuthorizationDialog","openRemoteControlAuthorizationDialog","endpointMessageReceived","disableReceiver","removeFeature","dontNotifyLocalParty","dontNotifyRemoteParty","sendStartRequest","sourceId","sendRequest","isScreenSharing","sourceType","toggleScreenSharing","mouseClicked","button","keyPressed","area","isCapturingEvents","keyboardshortcut","enable","pageX","pageY","mouseMoved","dblclick","contextmenu","onwheel","deltaX","deltaY","mouseScrolled","toggleE2EE","TOGGLE_E2EE","setEveryoneEnabledE2EE","everyoneEnabledE2EE","SET_EVERYONE_ENABLED_E2EE","setEveryoneSupportE2EE","everyoneSupportE2EE","SET_EVERYONE_SUPPORT_E2EE","webrtcKindToJitsiKindTranslator","audioinput","audiooutput","videoinput","areDeviceLabelsInitialized","_localTracksInitialized","getAudioOutputDeviceId","getAudioOutputDevice","getDefaultDeviceId","kind","kindToSearch","defaultDevice","matchingDevice","groupId","getDeviceIdByLabel","device","getDeviceLabelById","getDevicesFromURL","urlParams","audioOutput","audioInput","groupDevicesByKind","formatDeviceLabel","formattedLabel","ix","getAudioInputDeviceData","getAudioOutputDeviceData","getVideoDeviceIds","setAudioOutputDeviceId","userSelection","newLabel","isDeviceChangeAvailable","setAudioOutputDevice","newSettings","audioOutputDeviceId","userSelectedAudioOutputDeviceId","userSelectedAudioOutputDeviceLabel","updateSettings","authenticateAndUpgradeRole","onLoginSuccessful","_upgradeRoleFinished","thenableWithCancel","UPGRADE_ROLE_STARTED","authenticationError","connectionError","progressOrError","progress","UPGRADE_ROLE_FINISHED","openWaitForOwnerDialog","WaitForOwnerDialog","stopWaitForOwner","STOP_WAIT_FOR_OWNER","waitForOwner","WAIT_FOR_OWNER","checkIfCanJoin","timeoutMs","openLoginDialog","LoginDialog","cancelLogin","CANCEL_LOGIN","cancelWaitForOwner","hideLoginDialog","openAuthDialog","onAuthNow","internals","firstOptions","reviver","protoAction","scan","SyntaxError","safeParse","ignoreError","_objectWithoutProperties","CLEAR_NOTIFICATIONS","hideNotification","HIDE_NOTIFICATION","setNotificationsEnabled","SET_NOTIFICATIONS_ENABLED","notifications","SHOW_NOTIFICATION","showWarningNotification","joinedParticipantsNames","_throttledNotifyParticipantConnected","joinedParticipantsCount","notificationProps","showParticipantJoinedNotification","AbstractContainer","_render","touchFeedback","filteredProps","_style","getFixedPlatformStyle","onLogout","SettingsButton","IconSettings","SETTINGS_TABS","DEVICES","openSettingsDialog","CalendarTab","loading","_onClickDisconnect","_onClickGoogle","_onClickMicrosoft","_renderLoadingState","_isConnectedToCalendar","_renderSignOutState","_renderSignInState","_attemptSignIn","CALENDAR_TYPE","GOOGLE","MICROSOFT","isCompleting","_appName","_enableGoogleIntegration","_enableMicrosoftIntegration","_profileEmail","calendarState","microsoftApiApplicationClientID","calendarEnabled","APP_NAME","MoreTab","AbstractDialogTab","isFramerateSelectOpen","isLanguageSelectOpen","_onFramerateDropdownOpenChange","_onFramerateItemSelect","_onLanguageDropdownOpenChange","_onLanguageItemSelect","_onStartAudioMutedChanged","_onStartVideoMutedChanged","_onFollowMeEnabledChanged","_onShowPrejoinPageChanged","_onKeyboardShortcutEnableChanged","_renderSettingsLeft","_renderSettingsRight","frameRate","keyboardShortcut","keyboardShortcutEnable","_renderFramerateSelect","frameRateItems","DropdownItem","data-framerate","TouchmoveHack","DropdownMenu","onOpenChange","shouldFitContainer","trigger","triggerButtonProps","triggerType","DropdownItemGroup","_renderKeyboardShortcutCheckbox","isChecked","getEnabled","_renderLanguageSelect","languageItems","data-language","_renderModeratorSettings","_renderPrejoinScreenSettings","ProfileTab","_onAuthToggle","_onDisplayNameChange","_onEmailChange","FieldTextStateless","_renderAuth","createProfilePanelButtonEvent","UI","emitEvent","UIEvents","LogoutDialog","SoundsTab","SettingsDialog","_closeDialog","_tabs","defaultTabIdx","showDeviceSettings","moreTabProps","showProfileSettings","disableProfile","showCalendarSettings","showSoundsSettings","DeviceSelection","getAvailableDevices","getDeviceSelectionDialogProps","tabState","selectedAudioInputId","selectedAudioOutputId","selectedVideoInputId","submitDeviceSelectionTab","PROFILE","submitProfileTab","CALENDAR","SOUNDS","submitSoundsTab","MORE","submitMoreTab","AudioSettingsHeader","IconComponent","AudioSettingsEntry","labelId","isSelected","IconExclamationSolid","ownClassName","IconMeter","MicrophoneEntry","_updateLevel","num","_startListening","TRACK_AUDIO_LEVEL_CHANGED","_stopListening","listHeaderId","deviceTextId","labelledby","aria-labelledby","aria-posinset","aria-setsize","Meter","TestButton","SpeakerEntry","audioRef","createRef","_onTestButtonClick","setSinkId","transformDefaultDeviceLabel","AudioSettingsContent","_onMicrophoneEntryClick","_onSpeakerEntryClick","_onEscClick","_audioContentRef","audioTracks","microphoneDevices","display","setAudioInputDevice","_renderMicrophoneEntry","currentMicDeviceId","microphoneHeaderId","_renderSpeakerEntry","currentOutputDeviceId","speakerHeaderId","isWebKitBased","_disposeTracks","_componentWasUnmounted","dispose","_setTracks","outputDevices","IconMicrophoneHollow","IconVolumeEmpty","toggleAudioSettings","setAudioInputDeviceAndUpdateSettings","setAudioOutputDeviceAction","popupPlacement","SMALL_MOBILE_WIDTH","getCurrentMicDeviceId","getCurrentOutputDeviceId","InlineDialog","placement","VideoSettingsContent","_videoContentRef","trackData","videoDeviceIds","_onEntryClick","setVideoInputDevice","toggleVideoSettings","_renderPreviewEntry","currentCameraDeviceId","getTrackLabel","playsinline","setVideoInputDeviceAndUpdateSettings","getCurrentCameraDeviceId","currentState","setFollowMe","setStartMutedPolicy","setScreenshareFramerate","changeLocalDisplayName","changeLocalEmail","SET_AUDIO_SETTINGS_VISIBILITY","setAudioSettingsVisibility","SET_VIDEO_SETTINGS_VISIBILITY","setVideoSettingsVisibility","CONFIG_WILL_LOAD","LOAD_CONFIG_ERROR","SET_CONFIG","UPDATE_CONFIG","OVERWRITE_CONFIG","NOT_AVAILABLE","INVITED","CALLING","CONNECTED_USER","REJECTED","EXPIRED","STATUS_TO_I18N_KEY","PresenceLabel","_getPresenceText","_presence","i18nKey","DISABLE_PRESENCE_STATUS","defaultPresence","dominantSpeakerChanged","grantModerator","kickParticipant","localParticipantConnectionStatusChanged","participantConnectionStatusChanged","localParticipantIdChanged","localParticipantJoined","localParticipantLeft","localParticipantRoleChanged","participantRoleChanged","muteRemoteParticipant","stateFeaturesBaseConference","updateRemoteParticipantFeatures","jitsiParticipant","getFeatures","supportsRemoteControl","participantPresenceChanged","participantUpdated","participantToUpdate","participantMutedUs","isAudio","isAudioTrack","participantDisplayName","participantKicked","kicker","kicked","setLoadableAvatarUrl","raiseHand","STATUSES","ACTIVE","BLOCKED","FEATURES","INBOUND_CALL","OUTBOUND_CALL","SIP_INBOUND_CALL","SIP_OUTBOUND_CALL","STREAMING","TRANSCRIPTION","JAAS_UPGRADE_URL","AudioMutedIndicator","IconMicDisabled","iconSize","tooltipKey","DominantSpeakerIndicator","IconDominantSpeaker","iconClassName","safeIsNaN","areInputsEqual","newInputs","lastInputs","resultFn","lastResult","calledOnce","newArgs","cancelTimeout","cancelAnimationFrame","requestTimeout","requestAnimationFrame","tick","cachedRTLResult","getRTLOffsetType","recalculate","outerDiv","outerStyle","innerDiv","innerStyle","scrollLeft","defaultItemKey","columnIndex","rowIndex","createGridComponent","_class","getColumnOffset","getColumnStartIndexForOffset","getColumnStopIndexForStartIndex","getColumnWidth","getEstimatedTotalHeight","getEstimatedTotalWidth","getOffsetForColumnAndAlignment","getOffsetForRowAndAlignment","getRowHeight","getRowOffset","getRowStartIndexForOffset","getRowStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","Grid","_instanceProps","_resetIsScrollingTimeoutId","_outerRef","isScrolling","horizontalScrollDirection","initialScrollLeft","initialScrollTop","scrollUpdateWasRequested","verticalScrollDirection","_callOnItemsRendered","overscanColumnStartIndex","overscanColumnStopIndex","overscanRowStartIndex","overscanRowStopIndex","visibleColumnStartIndex","visibleColumnStopIndex","visibleRowStartIndex","visibleRowStopIndex","onItemsRendered","_callOnScroll","onScroll","_getItemStyle","columnWidth","rowHeight","itemStyleCache","_getItemStyleCache","isRtl","___","_onScroll","_event$currentTarget","scrollWidth","calculatedScrollLeft","calculatedScrollTop","_resetIsScrollingDebounced","_outerRefSetter","outerRef","_resetIsScrolling","validateSharedProps","scrollToItem","_ref4","_ref4$align","align","columnCount","rowCount","scrollbarSize","offsetWidth","getScrollbarSize","estimatedTotalHeight","horizontalScrollbarSize","verticalScrollbarSize","_this$props3","_callPropsCallbacks","_this$state2","_this$props4","innerElementType","innerTagName","itemData","_this$props4$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getHorizontalR","_getHorizontalRangeToRender","columnStartIndex","columnStopIndex","_this$_getVerticalRan","_getVerticalRangeToRender","rowStartIndex","rowStopIndex","_rowIndex","_columnIndex","estimatedTotalWidth","WebkitOverflowScrolling","willChange","_this$props5","_this$_getHorizontalR2","_overscanColumnStartIndex","_overscanColumnStopIndex","_visibleColumnStartIndex","_visibleColumnStopIndex","_this$_getVerticalRan2","_overscanRowStartIndex","_overscanRowStopIndex","_visibleRowStartIndex","_visibleRowStopIndex","_this$state3","_horizontalScrollDirection","_scrollLeft","_scrollTop","_scrollUpdateWasRequested","_verticalScrollDirection","_this$props6","overscanColumnCount","overscanColumnsCount","overscanCount","_this$state4","overscanCountResolved","stopIndex","overscanBackward","overscanForward","_this$props7","overscanRowCount","overscanRowsCount","_this$state5","defaultItemKey$1","createListComponent","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","List","scrollDirection","scrollOffset","initialScrollOffset","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","itemSize","layout","isHorizontal","offsetHorizontal","_onScrollHorizontal","_onScrollVertical","_event$currentTarget2","validateSharedProps$1","itemCount","_this$_getRangeToRend","_getRangeToRender","_index","estimatedTotalSize","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_scrollDirection","_scrollOffset","FixedSizeGrid","_ref7","instanceProps","lastColumnOffset","maxOffset","minOffset","middleOffset","_ref8","lastRowOffset","_ref9","_ref10","numVisibleColumns","_ref11","_ref12","numVisibleRows","_ref13","FixedSizeList","lastItemOffset","numVisibleItems","shallowDiffers","attribute","_attribute","prevStyle","prevRest","nextStyle","nextRest","areEqual","_tracks","remoteAudioTracks","CENTER_DOT_INDEX","AUDIO_LEVEL_DOTS","AudioLevelIndicator","audioLevel","passedAudioLevel","stretchedAudioLevel","audioLevelDots","distanceFromCenter","audioLevelFromCenter","cappedOpacity","Thumbnail","canPlayEventReceived","isHovered","displayMode","computeDisplayMode","getDisplayModeInput","timeoutHandle","videoMenuTriggerRef","_setInstance","_updateAudioLevel","_onCanPlay","_onVolumeChange","_onMouseEnter","_onMouseLeave","_onTestingEvent","_onTouchStart","_onTouchEnd","_onTouchMove","_showPopupMenu","_listenForAudioUpdates","_onDisplayModeChanged","_audioTrack","_stopListeningForAudioUpdates","displayModeString","_maybeSendScreenSharingIssueEvents","_currentLayout","_isAudioOnly","_isScreenSharing","tileViewActive","LAYOUTS","TILE_VIEW","createScreenSharingIssueEvent","_videoTrack","newDisplayMode","_isCurrentlyOnLargeVideo","_isVideoPlayable","isCurrentlyOnLargeVideo","isAudioOnly","isVideoPlayable","isRemoteParticipant","videoStreamMuted","_height","_isHidden","_width","horizontalOffset","thumbnail","avatar","avatarSize","minHeight","minWidth","showContextMenu","_renderFakeParticipant","_isMobile","containerClassName","_getContainerClassName","onMouseEnter","onMouseLeave","_renderAvatar","_renderTopIndicators","_connectionIndicatorAutoHideEnabled","_connectionIndicatorDisabled","_isDominantSpeakerDisabled","_indicatorIconSize","_participantCountMoreThan2","showConnectionIndicator","showDominantSpeaker","statsPopoverPosition","VERTICAL_FILMSTRIP_VIEW","enableStatsDisplay","_renderLocalParticipant","_defaultLocalDisplayName","_disableLocalVideoFlip","_localFlipX","_disableProfile","videoTrackClassName","onTouchEnd","onTouchMove","onTouchStart","allowEditing","displayNameSuffix","elementID","getRef","_isTestModeEnabled","jitsiVideoTrack","updateLastTrackVideoMediaEvent","_renderRemoteParticipant","_startSilent","onVolumeChange","videoTrackId","videoEventListeners","onCanPlay","videoElementStyle","initialVolumeValue","getCurrentLayout","disableLocalVideoFlip","INDICATOR_FONT_SIZES","HORIZONTAL_FILMSTRIP_VIEW","horizontalViewDimensions","verticalViewDimensions","tileViewDimensions","CONNECTION_INDICATOR_AUTO_HIDE_ENABLED","CONNECTION_INDICATOR_DISABLED","DISABLE_DOMINANT_SPEAKER_INDICATOR","isTestModeEnabled","ThumbnailWrapper","_participantID","_horizontalOffset","remoteParticipants","remoteParticipantsLength","thumbnailWidth","partialLastRowParticipantsNumber","Filmstrip","_onShortcutToggleFilmstrip","_onToolbarToggleFilmstrip","_onTabIn","_gridItemKey","_listItemKey","_onGridItemsRendered","_onListItemsRendered","registerShortcut","unregisterShortcut","filmstripStyle","maxWidth","FILM_STRIP_MAX_HEIGHT","toolbar","_isFilmstripButtonEnabled","_renderToggleButton","_className","_videosClassName","_renderRemoteParticipants","_isToolboxVisible","_visible","_remoteParticipants","_remoteParticipantsLength","_columns","_filmstripHeight","_filmstripWidth","_rows","_thumbnailHeight","_thumbnailWidth","isNotOverflowing","_doToggleFilmstrip","createShortcutEvent","IconMenuDown","IconMenuUp","aria-expanded","reduceHeight","remoteVideosVisible","shouldRemoteVideosBeVisible","shiftRight","tileViewThumbnailSize","availableSpace","filmstripPadding","paddingValue","collapseTileView","videosClassName","_thumbnailSize","remoteFilmstripHeight","remoteFilmstripWidth","ModeratorIndicator","IconModerator","AbstractRaisedHandIndicator","_raisedHand","_renderIndicator","raisedHand","IconRaisedHand","ScreenShareIndicator","IconShareDesktop","VideoMutedIndicator","IconCameraDisabled","StatusIndicators","_showAudioMutedIndicator","_showModeratorIndicator","_showScreenShareIndicator","_showVideoMutedIndicator","DISABLE_FOCUS_INDICATOR","openDisplayNamePrompt","onPostSubmit","DisplayNamePrompt","_createClass","getAutoPinSetting","AUTO_PIN_LATEST_SCREEN_SHARE","VERTICAL_FILMSTRIP","getTileViewGridDimensions","maxColumns","configuredMax","TILE_VIEW_MAX_COLUMNS","getMaxColumnCount","numberOfParticipants","columnsToMaintainASquare","sqrt","minVisibleRows","participantCount","tileViewEnabledFeatureFlag","disableTileView","tileViewEnabled","editing","isVideoPlaying","updateAutoPinnedParticipant","screenShares","remoteScreenShares","share","latestScreenShareParticipantId","isLayoutTileView","resetSharedVideoStatus","RESET_SHARED_VIDEO_STATUS","setSharedVideoStatus","videoUrl","ownerId","SET_SHARED_VIDEO_STATUS","stopSharedVideo","playSharedVideo","toggleSharedVideo","SharedVideoDialog","clearRecordingSessions","CLEAR_RECORDING_SESSIONS","hidePendingRecordingNotification","streamType","pendingNotificationUids","pendingNotificationUid","_setPendingRecordingNotificationUid","showPendingRecordingNotification","dialogProps","isDismissAllowed","showRecordingError","showStoppedRecordingNotification","participantName","showStartedRecordingNotification","initiator","sessionId","initiatorId","customActionNameKey","iAmRecordingInitiator","customActionHandler","copyText","updateRecordingSessionData","RECORDING_SESSION_UPDATED","getError","getID","getInitiator","getLiveStreamViewURL","getMode","terminator","getTerminator","setSelectedRecordingService","SET_SELECTED_RECORDING_SERVICE","SET_PENDING_RECORDING_NOTIFICATION_UID","showRecordingLimitNotification","isLiveStreaming","SET_STREAM_KEY","Label","AbstractLabel","labelClassName","DEFAULT_OPTIMAL_BROWSERS","DEFAULT_UNSUPPORTED_BROWSERS","browserNameToCheck","chrome","isChrome","chromium","isChromiumBased","electron","isElectron","firefox","isFirefox","nwjs","isNWJS","opera","isOpera","safari","isSafari","isBrowsersOptimal","browserName","OPTIMAL_BROWSERS","isWindows","isSuboptimalBrowser","_isCurrentBrowserInList","isSupportedBrowser","UNSUPPORTED_BROWSERS","isWebRtcSupported","isSupportedMobileBrowser","checkFunction","LIB_DID_DISPOSE","LIB_DID_INIT","LIB_INIT_ERROR","LIB_WILL_DISPOSE","LIB_WILL_INIT","userAgent","maxTouchPoints","platform","Version","REMOVE_TRANSCRIPT_MESSAGE","UPDATE_TRANSCRIPT_MESSAGE","TOGGLE_REQUESTING_SUBTITLES","ERRORS","AUTH_FAILED","GOOGLE_APP_MISCONFIGURED","FETCH_END_DAYS","FETCH_START_DAYS","MAX_LIST_LENGTH","setReactionQueue","removeReaction","reaction","sendReactions","addReactionToBuffer","flushReactionBuffer","addReactionsToChat","pushReactions","reactions","_onCancelWaitForOwner","_onIAmHost","cancelButton","onclick","_room","translateToHTML","authRequired","username","loginStarted","_onCancelLogin","_onLogin","_configHosts","configHosts","jid","toJid","renderMessage","_connecting","connecting","_error","_progress","messageOptions","PASSWORD_REQUIRED","credentials","reduxConnect","authenticateAndUpgradeRoleError","AddMeetingUrlButton","IconAdd","eventId","createCalendarClickedEvent","JoinButton","CalendarListContent","_onJoinPress","_onPress","_toDisplayableItem","createCalendarSelectedEvent","listEmptyComponent","_eventList","meetings","analyticsEventName","CalendarList","AbstractPage","_getRenderListEmptyComponent","_onOpenSettings","_onKeyPressOpenSettings","_onRefreshEvents","_getErrorMessage","_calendarError","errorMessageKey","showRefreshButton","showSettingsButton","_hasIntegrationSelected","_hasLoadedEvents","invertColor","provider","PROVIDER_NAME","IconPlusCalendar","MicrosoftSignInButton","getStylesheetResetCSS","buildThemeState","LegacyReset","colors","AtlaskitThemeProvider","hasAtlaskitThemeProvider","canUseDOM","stylesheet","innerHTML","newThemeState","Theme","getThemeMode","AtlasKitThemeProvider","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","runClearTimeout","Item","nextTick","argv","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","cwd","chdir","umask","filterSupport","canvas","ctx","getContext","toDataURL","reader","FileReader","onloadend","readAsDataURL","blobToData","resizeImage","base64image","drawImage","localTrackStopped","desktopTrack","currentLocalTrack","noneOptions","backgroundType","selectedThumbnail","LOCAL_TRACK_STOPPED","toggleBackgroundEffect","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","observable","outerSubscribe","observeState","getUndefinedStateErrorMessage","actionType","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","_defineProperty","_objectSpread2","middlewares","_dispatch","middlewareAPI","getServerURL","SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED","SET_TILE_VIEW","isFilmstripVisible","disable1On1Mode","isPlayable","LOCAL_THUMBNAIL_RATIO","REMOTE_THUMBNAIL_RATIO","horizontalMargin","availableWidth","viewWidth","initialHeight","aspectRatioHeight","noScrollHeight","scrollInitialWidth","scrollAspectRatioHeight","getVerticalFilmstripVisibleAreaWidth","filmstripMaxWidth","innerWidth","adjustedIsVideoPlayable","authStatusChanged","conferenceFailed","recoverable","conferenceJoined","conferenceLeft","conferenceSubjectChanged","conferenceTimestampChanged","conferenceUniqueIdSet","_conferenceWillJoin","conferenceWillLeave","createConference","nick","initJitsiConference","applicationName","getWiFiStatsMethod","getJitsiMeetGlobalNS","getWiFiStats","confID","siteID","statisticsDisplayName","enableDisplayNameInStats","statisticsId","enableEmailInStats","JITSI_CONNECTION_CONFERENCE_KEY","CONFERENCE_ERROR","SUBJECT_CHANGED","CONFERENCE_CREATED_TIMESTAMP","KICKED","kickedOut","lockStateChanged","STARTED_MUTED","isStartAudioMuted","isStartVideoMuted","createStartMutedConfigurationEvent","setVideoMuted","getType","trackRemoved","TRACK_MUTE_CHANGED","participantThatMutedUs","DISPLAY_NAME_CHANGED","PARTICIPANT_CONN_STATUS_CHANGED","USER_JOINED","USER_LEFT","USER_ROLE_CHANGED","USER_STATUS_CHANGED","BOT_TYPE_CHANGED","_addConferenceListeners","dataChannelOpened","locked","onStartMutedPolicyChanged","p2pStatusChanged","sendTones","tones","lock","audio","setSubject","REACTIONS","like","emoji","shortcutChar","clap","laugh","surprised","boo","party","_isDisplayableCalendarEntry","allDay","attendees","_updateCalendarEntries","knownDomains","entryMap","_parseCalendarEntry","md5","hex","toTimeString","existingEntry","_checkPattern","positivePattern","negativePattern","positiveRegExp","positiveMatch","urlRegExp","schemeRegExp","fieldsToSearch","notes","_getURLFromEvent","googleCalendarApi","MS_API_CONFIGURATION","origin","popupAuthWindow","microsoftCalendarApi","accessToken","Client","authProvider","getEventsPromises","ianaTimeZone","Intl","DateTimeFormat","resolvedOptions","timeZone","windowsTimeZone","findWindows","select","orderby","requestCalendarEvents","formatCalendarEntry","userSigninName","signInDeferred","guids","authState","generateGuid","authNonce","authUrl","getAuthUrl","screen","windowCloseCheck","setInterval","handleAuth","clearInterval","close","getParamsFromHash","tokenParts","tokenInfo","idToken","id_token","bytes","base64js","toByteArray","str_","byte","b64utoutf8","aud","iss","tid","notBefore","nbf","expires","exp","access_token","userDisplayName","userDomainType","preferred_username","getValidatedTokenParts","tokenExpires","isExpired","refreshAuthUrl","iframe","signInPromise","bodyPreview","Uint16Array","crypto","getRandomValues","s4","authParams","expiresIn","expires_in","expireDate","_fetchCalendarEntries","maybePromptForPermission","unwrapArray","safeInvoke","fromEntries","tslib_1","react_1","__importDefault","styled_components_1","uuid_1","colors_1","constants_1","getSize","IconWrapper","templateObject_1","__makeTemplateObject","primaryColor","secondaryColor","svgStr","Glyph","glyph","dangerouslySetGlyph","glyphProps","__assign","AbstractCaptions","_requestingSubtitles","_transcripts","paragraphs","_renderParagraph","_renderSubtitlesContainer","_abstractMapStateToProps","transcripts","_transcriptMessages","transcriptMessage","final","stable","unstable","_constructTranscripts","isTileView","largeVideoParticipant","getLargeVideoParticipant","_isLifted","AbstractClosedCaptionButton","maybeShowPremiumFeatureDialog","toggleRequestingSubtitles","transcribingEnabled","isTranscribing","IconClosedCaption","beginAddPeople","hideAddPeopleDialog","invitees","showCalleeInfo","participantsCount","setCalleeInfoVisible","failedInvitees","allInvitePromises","invitesLeftToSend","callFlowsEnabled","inviteServiceCallFlowsUrl","phoneInvitePromises","numberToInvite","dial","invitee","usersAndRooms","peopleInvitePromise","vrooms","rooms","SIP_GW_INVITE_ROOMS","inviteVideoRooms","sipEndpoints","updateDialInNumbers","numbersFetched","sipUri","initialCalleeInfo","removePendingInviteRequests","additionalOptions","jitsiLocalTrack","isAnalyticsEnabled","disableThirdPartyRequests","isFatalJitsiConferenceError","FOCUS_DISCONNECTED","FOCUS_LEFT","ICE_FAILED","OFFER_ANSWER_FAILED","VIDEOBRIDGE_NOT_AVAILABLE","isFatalJitsiConnectionError","CONNECTION_DROPPED_ERROR","OTHER_ERROR","SERVER_ERROR","_inheritsLoose","UIUtil","escapeHtml","unsafeText","html","prependChild","newChild","firstChild","childNodes","redirect","isFullScreen","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","msFullscreenElement","isVisible","offsetParent","SET_DISABLE_BUTTON","v1","ASPECT_RATIO_NARROW","ASPECT_RATIO_WIDE","_react","_interopRequireDefault","_Icon","_default","SET_DOCUMENT_EDITING_STATUS","SET_DOCUMENT_URL","TOGGLE_DOCUMENT_EDITING","useTrackedRef","SELECT_LARGE_VIDEO_PARTICIPANT","UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION","UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT","OverlayFrame","isLightOverlay","ReloadButton","_reloadNow","textKey","AbstractPageReloadOverlay","fatalError","needsRenderWeb","conferenceError","configError","timeoutSeconds","randomInt","isNetworkFailure","timeLeft","sendApplicationLog","createPageReloadScheduledEvent","_interval","_renderButton","_renderProgressBar","timeRemaining","percentageComplete","aria-describedby","AbstractSuspendedOverlay","suspendDetected","AbstractUserMediaPermissionsOverlay","isMediaPermissionPromptVisible","_renderPolicyLogo","policyLogoSrc","POLICY_LOGO","AbstractSlowGUMOverlay","isSlowGUMOverlayVisible","getOverlayToRender","overlay","PageReloadOverlay","SuspendedOverlay","UserMediaPermissionsOverlay","SlowGUMOverlay","needsRender","OverlayContainer","SharedDocumentButton","IconShareDoc","_editing","toggleDocument","documentUrl","ETHERPAD_OPTIONS","showControls","showChat","showLineNumbers","useMonospaceFont","getSharedDocumentUrl","URLSearchParams","SETTINGS_UPDATED","extractFqnFromPath","getDynamicBrandingUrl","dynamicBrandingUrl","brandingDataUrl","fqn","isDynamicBrandingDataLoaded","backgroundEnabled","SET_VIRTUAL_BACKGROUND","virtualSource","blurValue","setVirtualBackground","setEffect","BACKGROUND_ENABLED","VideoMenuButton","buttonText","displayClass","linkClassName","IconInfo","AbstractGrantModeratorButton","IconCrown","GrantModeratorDialog","targetParticipant","AbstractGrantModeratorDialog","createRemoteVideoMenuButtonEvent","AbstractKickButton","IconCloseCircle","KickRemoteParticipantDialog","IconKick","AbstractKickRemoteParticipantDialog","AbstractMuteButton","MuteRemoteParticipantDialog","_audioTrackMuted","muteConfig","translationKey","muteClassName","AbstractMuteVideoButton","IconVideoOff","MuteRemoteParticipantsVideoDialog","_videoTrackMuted","AbstractMuteEveryoneDialog","AbstractMuteRemoteParticipantDialog","exclude","muteAllParticipants","muteLocal","whom","AbstractMuteEveryonesVideoDialog","AbstractMuteRemoteParticipantsVideoDialog","AbstractMuteEveryoneElseButton","IconMuteEveryone","MuteEveryoneDialog","IconMuteEveryoneElse","AbstractMuteEveryoneElsesVideoButton","IconMuteVideoEveryone","MuteEveryonesVideoDialog","IconMuteVideoEveryoneElse","PrivateMessageMenuButton","_hidden","IconMessage","DISABLE_PRIVATE_MESSAGES","REMOTE_CONTROL_MENU_STATES","RemoteControlButton","remoteControlState","IconRemoteControlStart","IconRemoteControlStop","VideoMenu","RemoteVideoMenuTriggerButton","popoverRef","_onPopoverClose","showDialog","_showConnectionInfo","_participantDisplayName","ConnectionIndicatorContent","_renderRemoteVideoMenu","onPopoverClose","overflowDrawer","_overflowDrawer","_menuPosition","IconMenuThumb","_disableKick","_disableRemoteMute","_disableGrantModerator","_isModerator","_remoteControlState","onRemoteControlToggle","remoteVideoMenu","disableRemoteMute","disableKick","disableGrantModerator","_isRemoteControlSessionActive","remoteControlSessionStatus","_supportsRemoteControl","activeParticipant","FlipLocalVideoButton","LocalVideoMenuTriggerButton","_localParticipantId","_showLocalVideoFlipButton","currentLayout","VolumeSlider","volumeLevel","IconVolume","aria-valuemax","aria-valuemin","aria-valuenow","setRemoteParticipantsWithScreenShare","participantIds","toggleTileView","SUSPEND_DETECTED","SET_TRANSPORT","SET_SCREEN_AUDIO_SHARE_STATE","SET_SCREENSHARE_CAPTURE_FRAME_RATE","captureLargeVideoScreenshot","participantTrack","videoElement","getVideoTracks","getSettings","getConstraints","canvasElement","dataURL","clearRect","resizeLargeVideo","largeVideoContainer","updateLastLargeVideoMediaEvent","useMemoOne","getResult","inputs","isFirstRun","committed","useCallbackOne","_AnalyticsEvent","UIAnalyticsEvent","hasFired","handlers","channel","AnalyticsEvent","useAnalyticsEvents","useAnalyticsContext","createAnalyticsEvent","getAtlaskitAnalyticsContext","getAtlaskitAnalyticsEventHandlers","TestConnectionInfo","_onStatsUpdated","stats","bitrate","upload","statsEmitter","subscribeToClientStats","_localUserId","unsubscribeToClientStats","_testMode","accessible","_conferenceConnectionState","_conferenceJoinedState","_localUserRole","connectionState","DummyLocalStorage","_storage","keyName","keyValue","serialize","JitsiLocalStorage","localStorage","_localStorageDisabled","ignore","isLocalStorageDisabled","dontEmitChangedEvent","localStorageContent","CANCEL_FEEDBACK","SUBMIT_FEEDBACK_ERROR","SUBMIT_FEEDBACK_SUCCESS","LOCAL_RECORDING_ENGAGED","LOCAL_RECORDING_UNENGAGED","LOCAL_RECORDING_STATS_UPDATE","FeedbackButton","IconFeedback","openFeedbackDialog","getPlaceholderColor","textarea","isMonospaced","minimumRows","enableResize","Wrapper","FieldTextAreaStateless","invalidMessage","isInvalid","isLabelHidden","isReadOnly","isSpellCheckEnabled","required","isValidationHidden","isCompact","isFitContainerWidthEnabled","readOnly","spellCheck","scoreAnimationClass","ENABLE_FEEDBACK_ANIMATION","SCORES","FeedbackDialog","_message","_score","mousedOverScore","_scoreClickConfigurations","_onScoreSelect","_onKeyPres","_onMouseOver","_onScoreMouseOver","_onMessageChange","_onScoreContainerMouseLeave","createFeedbackOpenEvent","notifyFeedbackPromptDisplayed","scoreToDisplayAsSelected","scoreIcons","isFilled","onMouseOver","scoreToSubmit","cancelFeedback","submitFeedback","maybeOpenFeedbackDialog","feedbackPercentage","FEEDBACK_REQUEST_IN_PROGRESS","submitted","isCallstatsEnabled","sendJaasFeedbackMetadata","feedback","jaasFeedbackMetadataURL","meetingFqn","feedbackData","rating","comments","sendFeedbackToJaaSRequest","sendFeedback","_authorizeDropbox","appKey","redirectURI","windowName","gloabalNS","oauthCallbacks","popup","authorize","Dropbox","getAuthenticationUrl","returnUrl","usersGetCurrentAccount","account","display_name","getSpaceUsage","usersGetSpaceUsage","space","allocation","used","allocated","dropbox","authorizeDropbox","updateDropboxToken","UPDATE_DROPBOX_TOKEN","getDropboxData","userName","spaceLeft","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","orphans","tabSize","widows","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","cursor","handleInterpolation","couldBeSelectorInterpolation","interpolated","createStringFromObject","previousCursor","labelPattern","stringMode","setAudioOnly","audioOnly","ensureVideoTrack","createAudioOnlyChangedEvent","SET_AUDIO_ONLY","getReactionsQueue","getReactionMessageFromBuffer","getReactionsWithId","sendReactionsWebhook","webhookProxyUrl","reqBody","getRegisteredStyles","classNames","insertStyles","isStringTag","getFilmstripHeight","outerHeight","getVerticalFilmstripWidth","PARTICIPANTS_PANE_CLOSE","PARTICIPANTS_PANE_OPEN","focusSelected","subtle","boxShadowColor","heights","none","lineHeights","singleIconPadding","verticalAlign","innerMargin","getColor","getColors","getCss","spacing","isOnlySingleIcon","baseColors","alignItems","borderWidth","boxSizing","fontStyle","textAlign","textDecoration","whiteSpace","justifyContent","transitionDuration","border","getIconStyle","alignSelf","userSelect","getContentStyle","textOverflow","getFadingCss","hasOverlay","overlayCss","messageHandler","OK","CANCEL","_getFormattedTitleString","$titleString","addClass","_getDialogClasses","box","prompt","defaultButton","openCenteredPopup","onPopupClosed","screenX","screenY","innerHeight","pollTimer","showError","showWarning","participantNotification","displayNameKey","messageArguments","postisOptions","getJitsiMeetTransport","Transport","PostMessageTransportBackend","setExternalTransportBackend","externalTransportBackend","setBackend","setPreferredVideoQuality","preferredVideoQuality","SET_PREFERRED_VIDEO_QUALITY","setMaxReceiverVideoQuality","maxReceiverVideoQuality","SET_MAX_RECEIVER_VIDEO_QUALITY","setVideoQuality","frameHeight","ShareScreenWarningDialog","_onStopSharing","toggleScreensharing","_isAudioScreenShareWarning","description1","description2","header1","header2","stopSharing","setScreenAudioShareState","isSharingAudio","startAudioScreenShareFlow","audioOnlySharing","isAudioOnlySharing","isScreenVideoShared","ShareMediaWarningDialog","shouldHideShareAudioHelper","ShareAudioDialog","startScreenShareFlow","ReflectOwnKeys","ReflectApply","NumberIsNaN","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","existing","newListener","unshift","warned","emitter","onceWrapper","fired","wrapFn","_onceWrap","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","RangeError","setMaxListeners","getMaxListeners","doError","er","originalListener","spliceOne","rawListeners","eventNames","START_WITH_AUDIO_VIDEO_MUTED_SOURCES","_isVideoMutedByAuthority","videoMutismAuthority","getStartWithAudioMuted","getStartWithVideoMuted","DEVICE_TYPE_TO_SETTINGS_KEYS","currentDeviceId","userSelectedDeviceId","userSelectedDeviceLabel","addPendingDeviceRequest","configureInitialDevices","deviceLabels","updateSettingsPromise","responseCallback","settingsTranslationMap","getUserSelectedOutputDeviceId","ex","isDeviceListAvailable","enumerateDevices","updateDeviceList","notifyCameraError","notifyMicError","removePendingDeviceRequests","deviceLabel","userSelectedMicDeviceId","userSelectedMicDeviceLabel","userSelectedCameraDeviceId","userSelectedCameraDeviceLabel","checkAndNotifyForNewDevice","newDevices","oldDevices","devicePermissionsChanged","testMode","isLargeVideoReceived","largeVideoParticipantId","lastMediaEvent","isRemoteVideoReceived","condition","argIndex","framesToPop","setAudioAvailable","available","ensureTrack","setCameraFacingMode","cameraFacingMode","setVideoAvailable","toggleCameraFacingMode","QUALITY_TO_WIDTH","colorClass","percent","INDICATOR_DISPLAY_THRESHOLD","tip","ConnectionIndicator","AbstractConnectionIndicator","autoHideTimeout","showIndicator","rootClassNames","_getVisibilityClass","indicatorContainerClassNames","_getConnectionColorClass","inheritedStats","disablePopover","_connectionStatus","INACTIVE","INTERRUPTED","_getDisplayConfiguration","IconConnectionInactive","iconWidth","emptyIconWrapperClassName","IconConnectionActive","isTokenAuthEnabled","tokenAuthUrl","getTokenAuthUrl","AuthUtil","containerEvents","getCameraVideoPosition","videoWidth","videoHeight","videoSpaceWidth","videoSpaceHeight","horizontalIndent","verticalIndent","VideoContainer","LargeContainer","resizeContainer","_backgroundOrientation","_hideBackground","avatarDisplayed","$avatar","$remoteConnectionMessage","$remotePresenceMessage","$wrapperParent","avatarHeight","$video","onplaying","_resizeListeners","onresize","_onResize","addResizeListener","getStreamSize","_getVideoSize","containerWidth","containerHeight","availableHeight","computeDesktopVideoSize","computeCameraVideoSize","videoLayoutFit","videoSpaceRatio","maxZoomCoefficient","MAXIMUM_ZOOMING_COEFFICIENT","maxHeight","VIDEO_LAYOUT_FIT","getVideoPosition","containerWidthToUse","positionRemoteStatusMessages","_positionParticipantStatus","$element","$avatarImage","parentHeight","animate","ORIENTATION","LANDSCAPE","PORTRAIT","_updateBackground","removeResizeListener","delete","setStream","userID","flipX","setLocalFlipX","notifyLargeVideoVisibilityChanged","fadeTo","hide","stayOnStage","DISABLE_VIDEO_BACKGROUND","ReactDOM","hidden","orientationFit","ExecutionEnvironment","canUseWorkers","canUseEventListeners","attachEvent","canUseViewport","blacklist","dontParse","paramStr","paramParts","firstParam","decoded","reportError","SET_JWT","removeTranscriptMessage","transcriptMessageID","updateTranscriptMessage","newTranscriptMessage","ChevronDownIcon","getYoutubeId","isSharingStatus","videoPlaying","isScreenAudioShared","isScreenAudioSupported","localVideo","getVideoType","setDocumentEditingState","setDocumentUrl","RnnoiseProcessor","wasmInterface","_wasmInterface","_wasmPcmInput","_malloc","RNNOISE_SAMPLE_LENGTH","_wasmPcmOutput","_free","_wasmPcmInputF32Index","_context","_rnnoise_create","_releaseWasmResources","_copyPCMSampleToWasmBuffer","pcmSample","HEAPF32","_convertTo16BitPCM","f32Array","_rnnoise_destroy","getSampleLength","getRequiredPCMFrequency","_destroyed","calculateAudioFrameVAD","pcmFrame","pcmFrameLength","_rnnoise_process_frame","rnnoiseModule","createRnnoiseProcessor","rnnoiseWasmInit","mod","shouldDisplayNotifications","isAnyOverlayVisible","areThereNotifications","maybeShowSuboptimalExperienceNotification","recommendedBrowserPageLink","getConferenceOptions","createVADProcessor","callStatsID","callStatsSecret","DEFAULT_POSTIS_OPTIONS","opener","postis","Postis","_receiveCallback","listen","setReceiveCallback","_requestID","_responseHandlers","_unprocessedMessages","_disposeBackend","_backend","_onMessageReceived","eventName","listenersForEvent","isProcessed","PremiumFeatureDialog","_onSubmitValue","getCustomerDetails","jaasActuatorUrl","SET_DETAILS","setCustomerDetails","randomElement","CATEGORIES","_ADJECTIVE_","_ADVERB_","_PLURALNOUN_","_VERB_","PATTERNS","_hasTemplate","desiredTypes","_disposeAndRemoveTracks","availableTypes","createTypes","createLocalTracksA","gumProcess","facingMode","canceled","_trackCreateCanceled","_onCreateLocalTracksRejected","destroyLocalTracks","logError","_cancelGUMProcesses","showNoDataFromSourceVideoError","notificationInfo","isReceivingData","notificationAction","trackNoDataFromSourceNotificationInfoChanged","replaceTrack","isVideoTrack","createTrackMutedEvent","replaceStoredTracks","trackMutedChanged","TRACK_VIDEOTYPE_CHANGED","trackVideoTypeChanged","noDataFromSourceNotificationInfo","setNoSrcDataNotificationUid","NO_DATA_FROM_SOURCE","noDataFromSource","getParticipantId","_shouldMirror","permissionDenied","trackType","getCameraFacingMode","toggleCamera","currentFacingMode","useVideoStream","targetFacingMode","newVideoTrack","AudioMuteButton","_onKeyboardShortcut","_audioMuted","AUDIO_MUTE","ACTION_SHORTCUT_TRIGGERED","_disabled","AudioSettingsButton","onAudioOptionsClick","hasPermissions","settingsDisabled","isMultipleAudioInputSupported","IconArrowUp","VideoMuteButton","_videoDisabled","_videoMuted","VIDEO_MUTE","_audioOnly","_videoMediaType","enabledFlag","VideoSettingsButton","_isIconDisabled","hasVideoTrack","onVideoOptionsClick","AbstractToolbarButton","ToolbarButton","EmbedMeetingButton","IconCodeBlock","EmbedMeetingDialog","ReactionButton","ReactionEmoji","toggleReactionsMenuVisibility","ReactionsMenu","_onToolbarToggleRaiseHand","_getReactionButtons","_dockToolbox","_doToggleRaiseHand","_localParticipantID","newRaisedStatus","notifyRaiseHandUpdated","modifierKey","createReactionMenuEvent","_participantCount","overflowMenu","getReactionsMenuVisibility","ReactionsMenuPopup","reactionsQueue","SecurityDialogButton","IconSecurityOff","IconSecurityOn","_locked","SecurityDialog","hideLobbyButton","lobbyEnabled","lobby","isLobbySupported","enabledLobbyModeFlag","enabledMeetingPassFlag","THRESHOLDS","DownloadButton","IconDownload","_downloadAppsUrl","downloadAppsUrl","deploymentUrls","HangupButton","_hangup","HelpButton","IconHelp","_userDocumentationURL","userDocumentationURL","MuteEveryoneButton","localParticipantId","MuteEveryonesVideoButton","FullscreenButton","IconExitFullScreen","IconFullScreen","handleClick","_fullScreen","Drawer","handleInsideClick","handleOutsideClick","DrawerPortal","portalTarget","portalDiv","useEffect","createPortal","OverflowMenuButton","_onCloseDialog","_onToggleDialogVisibility","showMobileReactions","_renderToolbarButton","aria-controls","IconHorizontalPoints","onVisibilityChange","ProfileButtonAvatar","_localParticipant","ProfileButton","_unclickable","RaiseHandButton","ShareDesktopButton","_desktopSharingDisabledTooltipKey","_desktopSharingEnabled","_screensharing","desktopSharingEnabled","enableFeaturesBasedOnToken","desktopSharingDisabledTooltipKey","ToggleCameraButton","IconCameraRefresh","Toolbox","_onMouseOut","_onSetOverflowVisible","_onShortcutToggleChat","_onShortcutToggleFullScreen","_onShortcutToggleParticipantsPane","_onShortcutToggleRaiseHand","_onShortcutToggleScreenshare","_onShortcutToggleVideoQuality","_onToolbarToggleParticipantsPane","_onToolbarOpenVideoQuality","_onToolbarToggleChat","_onToolbarToggleFullScreen","_onToolbarToggleScreenshare","_onShortcutToggleTileView","_onEscKey","_toolbarButtons","_reactionsEnabled","character","helpDescription","shortcut","_overflowMenuVisible","_dialog","letter","_chatOpen","_visibleButtons","_renderToolboxContent","_closeOverflowMenuIfOpen","_doOpenVideoQuality","VideoQualityDialog","_doToggleChat","_doToggleFullScreen","_doToggleScreenshare","_backgroundType","_localVideo","_virtualSource","_doToggleVideoQuality","_doToggleTileView","_getAllButtons","_feedbackConfigured","_screenSharing","microphone","camera","_isProfileVisible","chat","ChatButton","desktop","_showDesktopSharingButton","raisehand","ReactionsMenuButton","ParticipantsPaneButton","tileview","videoQuality","VideoQualityButton","fullscreen","security","cc","ClosedCaptionButton","RecordButton","localRecording","LocalRecordingButton","muteEveryone","muteVideoEveryone","livestreaming","LiveStreamButton","shareVideo","SharedVideoButton","shareAudio","_showAudioSharingButton","ShareAudioButton","etherpad","VideoBackgroundButton","speakerStats","SpeakerStatsButton","shortcuts","KeyboardShortcutsButton","_isEmbedMeetingVisible","help","_getVisibleButtons","_clientWidth","isHangupVisible","sliceIndex","filtered","mainMenuButtons","overflowMenuButtons","getSelection","_participantsPaneOpen","closeParticipantsPane","openParticipantsPane","_isVpaasMeeting","_isProfileDisabled","onMouseOut","Separator","showSeparator","overflowMenuVisible","enableReactions","AbstractHandler","_enabled","_whiteListedEvents","whiteListedEvents","_blackListedEvents","blackListedEvents","_extractName","_shouldIgnore","AmplitudeHandler","amplitudeAPPKey","_host","amplitudeOptions","includeReferrer","_getInstance","setUserId","amplitude","getInstance","setUserProperties","userProps","logEvent","getIdentityProps","getSessionId","MatomoHandler","_userProperties","matomoEndpoint","matomoSiteID","_initMatomo","_paq","getElementsByTagName","_extractValue","visitScope","matomoEvent","globalNS","getAmplitudeIdentity","amplitudeIdentityProps","resetAnalytics","createHandlers","analyticsHandlers","analyticsConfig","scriptURLs","googleAnalyticsTrackingId","handlerConstructorOptions","envType","subproduct","environment","matomo","externalHandlers","Handler","_loadHandlers","initAnalytics","server","permanentProperties","getAppName","websocket","externalApi","inIframe","_inIframe","addPermanentProperties","setConferenceName","setAnalyticsHandlers","bannerCfg","chromeExtensionBanner","extensionsInstalled","hasChromeExtension","ext","MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED","TOGGLE_SLOW_GUM_OVERLAY","SET_FATAL_ERROR","SET_DYNAMIC_BRANDING_DATA","SET_DYNAMIC_BRANDING_FAILED","SET_DYNAMIC_BRANDING_READY","AbstractVideoManager","throttledFireUpdateSharedVideoEvent","fireUpdateSharedVideoEvent","_sharedVideoPlayer","processUpdatedProps","_videoUrl","createEvent","_status","_time","_isOwner","playerTime","newTime","previousTime","seek","getPlaybackStatus","unMute","_stopSharedVideo","_displayWarning","onPlay","smartAudioMute","onPause","getVolume","fireUpdatePlayingVideoEvent","_ownerId","_setSharedVideoStatus","isSharedVideoVolumeOn","_isLocalAudioMuted","_muteLocal","_mapStateToProps","_mapDispatchToProps","_set","copyOnWrite","joinLeaveNotificationsDisabled","DISABLE_JOIN_LEAVE_NOTIFICATIONS","localRecordingEngaged","startTime","recordingEngagedAt","localRecordingUnengaged","statsUpdate","DisplayName","editDisplayNameValue","isEditing","_nameInput","_onStartEditing","_setNameInputRef","previousProps","_nameToDisplay","appendSuffix","_configuredDisplayName","AbstractDisplayNamePrompt","_onSetDisplayName","useStyles","makeStyles","badge","palette","text01","DisplayNameBadge","classes","badgeContainer","withPixelLineHeight","typography","bodyShortRegularLarge","marginBottom","containerElevated","DominantSpeakerName","nameToDisplay","selectedId","toolboxVisible","HEX_LONG_COLOR_FORMAT","HEX_SHORT_COLOR_FORMAT","RGB_COLOR_FORMAT","styleTypeToObject","st","flatStyle","styleElement","getRGBAFormat","alpha","_getAlphaInHex","PasswordRequiredPrompt","_onPasswordChanged","_renderBody","_cancelPasswordRequiredPrompt","createTaskQueue","TaskQueue","SIP_GW_AVAILABILITY_CHANGED","_shortcuts","_shortcutsHelp","_focusedElementsSelector","KeyboardShortcut","_initGlobalShortcuts","onkeyup","_getKeyboardKey","function","onkeydown","focusedElement","isLocalAudioMuted","PRESSED","muteAudio","KeyboardShortcutsDialog","shortcutDescriptions","shortcutAttr","_addShortcutToHelp","shortcutDescriptionKey","RELEASED","SpeakerStats","subscribers","startListeningForStats","LOCAL_STATS_UPDATED","REMOTE_STATS_UPDATED","_emitStatsUpdate","E2E_RTT_CHANGED","e2eRtt","filteredSubscribers","localUserId","allUserFramerates","allUserResolutions","allUserCodecs","codec","modifiedLocalStats","framerateUserIds","resolutionUserIds","codecUserIds","remoteUserStats","LargeVideo","_fetchCustomBrandingData","_isChatOpen","_getCustomSyles","playsInline","DISABLE_TRANSCRIPTION_SUBTITLES","_customBackgroundColor","_customBackgroundImageUrl","DEFAULT_BACKGROUND","_backgroundAlpha","alphaColor","setColorAlpha","backgroundImage","backgroundSize","fetchCustomBrandingData","backgroundImageUrl","isChatOpen","backgroundAlpha","LargeVideoBackground","_setCanvasEl","_updateCanvas","_shouldDisplayTileView","_setUpdateCanvasInterval","wasCanvasUpdating","shouldCanvasUpdating","_clearCanvas","_clearUpdateCanvasInterval","_canvasEl","_updateCanvasInterval","canvasHeight","canvasWidth","cavnasContext","heightScaledToFit","widthScaledToFit","normalizeArray","allowAboveRoot","up","xs","resolvedPath","resolvedAbsolute","isAbsolute","trailingSlash","relative","fromParts","toParts","samePartsLength","outputParts","sep","dirname","hasRoot","matchedSlash","basename","extname","startDot","startPart","preDotState","assignIfDefined","nextKey","textToCopy","clipboardCopy","MATCH_OPERATOR_REGEXP","escapeRegexp","getBaseUrl","parseShorthandColor","ADD_KNOWN_DOMAINS","UPDATE_FLAGS","_videoElement","_setVideoElement","SET_COLOR_SCHEME","parseJWTFromURLParams","getJwtName","isValidUnixTimestamp","validateJwt","currentTimestamp","jwtDecode","sub","kid","MEET_FEATURES","featureValue","getEmbedCode","displayedText","textOnCopySuccess","textOnHover","isMobileSafari","disableAudioInputChange","disableDeviceChange","hasAudioPermission","hasVideoPermission","hideAudioInputPreview","isCollectingLocalStats","hideAudioOutputSelect","hideVideoInputPreview","hideVideoOutputSelect","processExternalDeviceRequest","deviceType","deviceDescriptions","currentlyUsedDeviceIds","PrivateMessageButton","IconReply","reply","addMessage","messageDetails","clearMessages","sendMessage","ignorePrivacy","setPrivateMessageRecipient","_openPasswordRequiredPrompt","SET_LAST_N","getLastNForQualityLevel","qualityLevel","channelLastN","lastN","videoQualityLevels","validateLastNLimits","lastNLimits","sortedMapping","orderedLimits","n1","n2","limitLastN","selectedLimit","participantsN","AbstractChat","_onSendMessage","ChatDialog","updateRef","libRef","userRef","prevUserRef","HIDDEN_TEXTAREA_STYLE","visibility","forceHiddenStyles","setProperty","hiddenTextarea","SIZING_STYLE","isIE","currentStyle","cacheMeasurements","maxRows","minRows","_ref$onChange","_ref$onHeightChange","onHeightChange","latestListener","isControlled","heightRef","measurementsCacheRef","resizeTextarea","nodeSizingData","sizingStyle","borderRightWidth","borderLeftWidth","paddingRight","paddingLeft","paddingSize","paddingBottom","paddingTop","borderSize","borderBottomWidth","borderTopWidth","getSizingData","_calculateNodeHeight","sizingData","getHeight","calculateNodeHeight","smileys","smiley1","smiley2","smiley3","smiley4","smiley5","smiley6","smiley7","smiley8","smiley9","smiley10","smiley11","smiley12","smiley13","smiley14","smiley15","smiley16","smiley17","smiley18","smiley19","smiley20","SmileysPanel","onSmileySelect","smileyItems","smileyKey","onlyEmojiClassName","aria-orientation","ChatInput","showSmileysPanel","_textArea","_onDetectSubmit","_onSmileySelect","_onSubmitMessage","_onToggleSmileysPanel","_onEscHandler","_onToggleSmileysPanelKeyPress","_onSubmitMessageKeyPress","_setTextAreaRef","smileysPanelClassName","IconSmile","IconPlane","_focus","trimmed","onSend","smileyText","textAreaElement","Avoider","elementHeight","KeyboardAvoider","setElementHeight","storedHeight","setStoredHeight","handleViewportResize","visualViewport","DisplayNameForm","AbstractMessageContainer","_getMessagesGroupedBySender","messagesCount","messages","groups","currentGroupParticipantId","currentGrouping","AbstractChatMessage","_getFormattedTimestamp","_getMessageText","messageType","_getPrivateNoticeMessage","recipient","processedMessage","privateMessage","showDisplayName","_renderDisplayName","_renderPrivateNotice","showTimestamp","_renderTimestamp","ChatMessageGroup","MessageContainer","_isScrolledToBottom","_messageListRef","_messagesListEndRef","_onChatScroll","maybeUpdateBottomScroll","scrollToBottom","withAnimation","scrollIntoView","behavior","AbstractMessageRecipient","privateMessageRecipient","_privateMessageRecipient","_onRemovePrivateMessageRecipient","IconCancelSelection","_isModal","_isOpen","_messages","_showNamePrompt","_isExited","_messageContainerRef","_renderPanelContent","_onChatInputResize","_onToggleChat","_scrollMessageContainerToBottom","_renderChat","_renderChatHeader","ComponentToRender","ChatCounter","_count","getUnreadCount","IconChat","AbstractChatPrivacyDialog","_onSendGroupMessage","_onSendPrivateMessage","_onSetMessageRecipient","STORE_NAME","connectionConfig","setJWT","websocketKeepAliveUrl","JitsiConnection","handleConnectionEstablished","handleConnectionFailed","connectionEstablished","connectionFailedHandler","connectionFailed","DISPLAY_NAME_REQUIRED","checkForAttachParametersAndConnect","XMPPAttachInfo","attachOptions","openConnection","usernameOverride","passwordOverride","redirectToTokenAuthService","requestAuth","mediumDurationMs","durationStep","largeDurationMs","setTransport","findNearestQualityLevel","getReceiverVideoQualityLevel","heightToLevel","selectedLevel","levelThreshold","validateMinHeightForQualityLvl","minHeightForQualityLvl","levelsSorted","configQuality","appQuality","TimeElapsed","_getMinutesCount","_getSecondsCount","timeElapsed","hourPassed","_createTimeDisplay","minutesPassed","secondsPassed","countNounKey","countType","SpeakerStatsItem","rowDisplayClass","hasLeft","speakerStatusClass","isDominantSpeaker","dominantSpeakerTime","SpeakerStatsLabels","getSpeakerStats","_updateInterval","_createStatsItem","statsModel","getTotalDominantSpeakerTime","isLocalStats","meString","_localDisplayName","IconPresentation","VIDEO_QUALITY_TO_ICON","IconVideoQualityHD","IconVideoQualitySD","IconVideoQualityLD","_videoQuality","videoQualityLevel","IconVideoQualityAudioOnly","quality","VideoQualitySlider","_enableAudioOnly","_enableHighDefinition","_enableLowDefinition","_enableStandardDefinition","_enableUltraHighDefinition","_onSliderChange","_sliderOptions","activeSliderOption","_mapCurrentQualityToSliderValue","onMouseUp","_createLabels","activeLabelIndex","labelsCount","maxWidthOfLabel","sliderOption","_setPreferredVideoQuality","_sendrecvVideoQuality","audioOnlyOption","_channelLastN","setLastN","_p2p","AbstractVideoQualityLabel","RESOLUTION_TO_TRANSLATION_KEY","RESOLUTIONS","videoTrackOnLargeVideo","translationKeys","highestMatchingResolution","knownResolution","labelKey","_mapResolutionToTranslationsKeys","_labelKey","_tooltipKey","VIDEO_QUALITY_LABEL_DISABLED","labelContent","ConnectionStatsTable","isLocalVideo","enableSaveLogs","disableShowMoreStats","_renderStatistics","_renderSaveLogs","_renderShowMoreLink","shouldShowMore","_renderAdditionalStats","_renderBandwidth","_renderTransport","_renderRegion","_renderAudioSsrc","_renderVideoSsrc","_renderParticipantId","bandwidth","_renderBitrate","audioSsrc","videoSsrc","_renderCodecs","codecString","ssrc","_renderConnectionSummary","connectionSummary","_renderE2eRtt","serverRegion","_renderBridgeCount","bridgeCount","_renderFrameRate","frameRateString","_renderPacketLoss","packetLoss","packetLossTableData","_renderResolution","maxEnabledResolution","resolutionString","onSaveLogs","onShowMore","isRemoteVideo","localIP","localPort","remoteIP","remotePort","transportType","ip","getIP","localip","getPort","isP2P","isTURN","localCandidateType","remoteCandidateType","additionalData","_renderTransportTableRow","getStringFromArray","showMoreStats","_onToggleShowMore","_audioSsrc","_getConnectionStatusTip","_disableShowMoreStats","_enableSaveLogs","_isLocalVideo","_onSaveLogs","_videoSsrc","tipKey","firstVideoTrack","firstAudioTrack","getSsrcByTrack","logs","getLogs","downloadJSON","_toConsumableArray","arrayLikeToArray","iter","DIALOG_TO_PADDING_POSITION","_mapPositionToPaddingClass","Popover","_onHideDialog","_onShowDialog","_drawerContainerRef","_renderContent","onPopoverOpen","isOnline","disposeLib","initLib","enableAnalyticsLogging","externalStorage","setNetworkInfo","libInitError","propertyName","DEFAULT_SERVER_URL","_getUserSelectedDeviceId","matchRegex","replacement","candidate","strippedDeviceLabel","foundMatchBasedOnLabel","strippedCandidateLabel","hideShareAudioHelper","getDeviceIdByType","getDeviceId","handleCallIntegrationChange","handleCrashReportingChange","externalAuthWindow","doExternalAuth","lockPassword","isJoined","getUrl","jwtToken","_getConferenceOptions","moderator","authenticate","unregister","errCode","initJWTTokenListener","getExternalAuthUrl","showExternalAuthDialog","isExternalAuthEnabled","logout","requireAuth","newPercentageState","newStats","_updateIndicatorAutoHide","CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT","createDeviceChangedEvent","AudioInputPreview","audioMeterFill","AudioOutputPreview","_audioElement","_audioElementReady","_setAudioSink","DeviceSelector","_onSelect","_createDropdownItem","hasPermission","_renderNoPermission","_renderNoDevices","defaultSelected","selectedDeviceId","_createDropdown","_createDropdownTrigger","triggerText","data-deviceid","VideoInputPreview","previewAudioTrack","previewVideoTrack","previewVideoTrackError","_unMounted","_createAudioInputTrack","_createVideoInputTrack","_disposeAudioInputPreview","_disposeVideoInputPreview","aria-live","_renderSelectors","_renderSelector","deviceSelectorProps","configurations","ACTION_PINNED","ACTION_UNPINNED","ACTION_SHORTCUT_PRESSED","ACTION_SHORTCUT_RELEASED","createApiEvent","createConnectionEvent","createRecentClickedEvent","createChromeExtensionBannerEvent","installPressed","createRecentSelectedEvent","createDeepLinkingPageEvent","createE2EEEvent","createInviteDialogEvent","createNetworkInfoEvent","networkType","createOfferAnswerFailedEvent","createPinnedEvent","objectType","objectId","createRecordingDialogEvent","dialogName","createLiveStreamingDialogEvent","createLocalTracksDurationEvent","createRecordingEvent","createRejoinedEvent","lastConferenceDuration","timeSinceLeft","createRemoteMuteConfirmedEvent","createRTCStatsTraceCloseEvent","closeEvent","createScreenSharingEvent","createSharedVideoEvent","actionSubjectId","createStartAudioOnlyEvent","createStartSilentEvent","audioMute","videoMute","createSyncTrackStateEvent","createWelcomePageEvent","addKnownDomains","currentUrl","stateOrGetState","isInviteURLReady","inviteDomain","urlWithoutParams","getURLWithoutParams","brandingRoomAlias","getURLWithoutParamsNormalized","authdomain","SHARE_DOCUMENT_VIEW_ID","LOCKED_LOCALLY","LOCKED_REMOTELY","openEmbedDialog","_formatConferenceIDPin","conferenceIDStr","partLen","DialInNumber","_onCopyText","_onCopyTextKeyPress","IconCopy","_conferenceID","_dialInfoPageUrl","_hasMultipleNumbers","rel","inviteSubject","inviteText","inviteTextiOS","setIsActive","encodedInviteSubject","encodedInviteText","encodedInviteTextiOS","encodedDefaultEmailText","PROVIDER_MAPPING","IconEmail","IconGoogle","IconOutlook","IconYahoo","renderEmailIcons","itemSpacing","typesMapping","connectivity","confirmation","getBaseColor","getHoverColor","SelectedIconForType","_typesMapping$type","SelectedIcon","getFocusColor","Root","ButtonContents","getTitleColor","getTextColor","Text","InlineMessage","AbstractAddPeopleDialog","_query","_getDisplayName","_invite","inviteAllowed","_isAddDisabled","addToCallInProgress","_callFlowsEnabled","erroredInviteTypeCounts","addToCallError","invitedCount","_addPeopleEnabled","_dialOutAuthUrl","_dialOutEnabled","_jwt","_peopleSearchQueryTypes","_peopleSearchUrl","_sipInviteEnabled","footerTextEnabled","_footerTextEnabled","_isVpaas","_onClearItems","_onClearItemsKeyPress","_onItemSelected","_onSelectionChange","_onSubmitKeyPress","_parseQueryResults","_setMultiSelectElement","_renderFooterText","_resourceClient","makeQuery","parseResults","_translations","_multiselect","setSelectedItems","footerText","isMultiSelectDisabled","computedPlaceholder","_renderErrorMessage","loadingMessage","noMatchesFound","onItemSelected","onSelectionChange","resourceClient","shouldFocus","showSupportLink","_renderFormActions","selectedItems","unsentInviteIDs","user_id","itemsToSelect","_getAvatar","users","userDisplayItems","tagAvatar","elemAvatar","elemBefore","filterValues","telephoneIcon","_renderTelephoneIcon","numberDisplayItems","sipDisplayItems","sip","supportString","supportLink","SUPPORT_URL","supportLinkContent","isClicked","setIsClicked","setIsHovered","updateNumbers","inviteAppName","hideInviteContacts","_dialIn","_embedMeetingVisible","_dialInVisible","_urlSharingVisible","_emailSharingVisible","_invitationText","_invitationTextiOS","_inviteAppName","_inviteContactsVisible","ENABLE_DIAL_OUT","_inviteUrl","_liveStreamViewURL","_phoneNumber","ConferenceID","NumbersList","_renderWithCountries","numbersMapping","hasFlags","resultNumbers","countryName","numbersArray","formattedNumbers","_renderFlag","_renderNumbersList","_renderNumbersTollFreeList","IconSip","numbersListItems","_renderNumberLink","tollNumbersListItems","tollFree","clickableNumbers","DialInSummary","_onGetNumbersSuccess","_onGetConferenceIDSuccess","_setErrorMessage","getNumbers","_getNumbers","_getConferenceID","contents","URLSuffix","CalleeInfo","_callee","aClassName","CalleeInfoContainer","_calleeInfoVisible","AbstractKnockingParticipantList","_onRespondToParticipant","approve","knockingParticipants","getLobbyState","_participants","NotificationWithParticipants","approveButtonText","onApprove","onReject","rejectButtonText","testIdPrefix","LobbySection","_lobbyEnabled","_onToggleLobby","onValueChange","SCREEN_STATES","AbstractLobbyScreen","_participantName","_participantEmail","passwordJoinFailed","screenState","_onAskToJoin","_onChangeDisplayName","_onChangeEmail","_onChangePassword","_onEnableEdit","_onJoinWithPassword","_onSwitchToKnockMode","_onSwitchToPasswordMode","_passwordJoinFailed","_getScreenTitleKey","passwordPrompt","_knocking","_renderJoining","_renderParticipantInfo","_renderParticipantForm","_renderPasswordForm","_renderStandardButtons","_renderPasswordJoinButtons","inviteEnabledFlag","_meetingName","_participantId","_renderPassword","connectionDisconnected","timeEstablished","notifyConferenceLeft","requestFeedback","hangup","reactIs","REACT_STATICS","getDefaultProps","getDerivedStateFromError","mixins","KNOWN_STATICS","caller","MEMO_STATICS","compare","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","inheritedComponent","targetStatics","sourceStatics","_arrayLikeToArray","easeInOut","easeOut","easeIn","_ScrollLock","_TouchScrollable","TouchScrollable","base64_url_decode","InvalidTokenError","AUDIO_ONLY_SCREEN_SHARE_NO_TRACK","touchMoveElementRef","useRef","handleTouchMove","stopImmediatePropagation","_slicedToArray","_arr","_n","_e","_s","pipe","listenerOptions","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","_exenv","camelToKebab","getPadding","scrollbarWidth","getWindowHeight","getDocumentHeight","injectStyles","insertStyleTag","capture","passive","pipeFns","fns","filteredPersistedState","subtreeName","persistedSubtree","_getPersistedSubtree","_defaultStates","persistedState","_getFilteredState","persistState","_checksum","_calculateChecksum","__DEV__","filteredState","checksum","defaultState","_getFilteredSubtree","subtree","subtreeConfig","filteredSubtree","persistedKey","subtreeDefaults","_mergeDefaults","updateConfig","overwriteConfig","e200","_dialogStyles","ColorSchemeRegistry","change","JITSI_CONNECTION_URL_KEY","mediaPermissionPromptVisibilityChanged","toggleSlowGUMOverlay","muteRemote","selectParticipantInLargeVideo","_electLastVisibleRemoteVideo","_electParticipantInLargeVideo","latestScreenshareParticipantId","updateKnownLargeVideoResolution","angry","blush","broken_heart","confused","cry","frowning","heart","imp","innocent","joy","kissing","laughing","neutral_face","open_mouth","rage","smile","smiley","smiling_imp","sob","stuck_out_tongue","sunglasses","sweat","sweat_smile","unamused","wink","IconParticipants","getThemeProps","stylesOrCreator","_options$withTheme","stylesOptions","classNamePrefix","WithStyles","more","AbstractRecordingLabel","staleLabel","_updateStaleStatus","_renderLabel","_getLabelKey","FILE","oldProps","withStyles","ui03","iconError","recordingLimit","_limit","appURL","_appURL","AbstractLiveStreamButton","IconLiveStreaming","_tooltip","_isLiveStreamRunning","StopLiveStreamDialog","StartLiveStreamDialog","abstractProps","AbstractStartLiveStreamDialog","errorType","_onStreamKeyChange","_setStateIfMounted","_streamKey","selectedBroadcastID","selectedBroadcast","broadcastId","streamId","AbstractStreamKeyForm","showValidationError","_validateStreamKey","helpURL","LIVE_STREAMING_HELP_LINK","_debouncedUpdateValidationErrorVisibility","_updateValidationErrorVisibility","_onInputChange","newShowValidationError","trimmedKey","_onOpenHelp","_onOpenHelpKeyPress","StreamKeyPicker","isDropdownOpen","_onDropdownOpenChange","dropdownItems","data-streamid","DropdownMenuStateless","onItemActivated","_formatBroadcasts","dropdownEvent","onBroadcastSelected","_googleAPIState","_googleProfileEmail","_googleApiApplicationClientID","_onGetYouTubeBroadcasts","_onInitializeGoogleApi","_onGoogleSignIn","_onRequestGoogleSignIn","_onYouTubeBroadcastIDSelected","_renderYouTubePanel","_parseErrorFromResponse","firstError","googleContent","helpText","_getGoogleErrorMessageToDisplay","AbstractStopLiveStreamDialog","_session","AbstractRecordButton","IconToggleRecording","_isRecordingRunning","StopRecordingDialog","StartRecordingDialog","fileRecordingsEnabled","AbstractStartRecordingDialog","_onSelectedRecordingServiceChanged","_onSharingSettingChanged","_fileRecordingsServiceEnabled","_areIntegrationsEnabled","isTokenValid","isValidating","sharingEnabled","_token","_onTokenUpdated","_isDropboxEnabled","_appKey","_autoCaptionOnRecord","appData","StartRecordingDialogContent","_onSignIn","_onSignOut","_onDropboxSwitchChange","_onRecordingServiceSwitchChange","_styles","_renderNoIntegrationsContent","_renderIntegrationsContent","_renderFileSharingContent","fileRecordingsServiceSharingEnabled","isVpaas","onSharingSettingChanged","sharingSetting","topBorderContainer","recordingIcon","switch","trackColor","false","ColorPalette","lightGrey","fileRecordingsServiceEnabled","integrationsEnabled","switchContent","_renderSpinner","_renderSignOut","signButton","loggedIn","autoCaptionOnRecord","_fileRecordingsServiceSharingEnabled","isOkDisabled","AbstractStopRecordingDialog","_fileRecordingSession","flagBackgroundColor","normal","success","getFlagBackgroundColor","flagBorderColor","flagTextColor","getFlagTextColor","flagShadowColor","flagFocusRingColor","getFlagFocusRingColor","actionBackground","actionColor","getActionBackground","getActionColor","isExpanded","separatorWidth","defaultAppearanceTranslate","_props$appearance","_props$actions","linkComponent","isBold","animateOpacity","enterFrom","exitTo","_ref2$fade","_ref2$duration","_ref2$animationTiming","animationTimingFunction","enteringAnimation","exitingAnimation","flagWidth","flagBottom","flagLeft","FlagGroupContext","dismissAllowed","baseStyles","_props$label","_props$labelTag","labelTag","LabelTag","onDismissed","firstFlagId","flagAnimationTime","doubleGridSize","headerHeight","_props$onFocus","_props$onBlur","_useFlagGroup","_useFlagGroup$onDismi","setIsExpanded","onDismissedAnalytics","renderToggleOrDismissButton","ButtonIcon","buttonLabel","buttonAction","buttonTestId","handleMouseDown","autoDismissProps","OptionalDismissButton","textColour","onMouseDown","AbstractNotification","_onDismissed","_getDescription","descriptionArray","_getDescriptionKey","ICON_COLOR","hideErrorSupportLink","_mapAppearanceToButtons","_renderDescription","_mapAppearanceToIcon","_onOpenSupportLink","secIconColor","AbstractNotificationsContainer","_notificationDismissTimeout","_manageDismissTimeout","_notifications","autoDismissTimeout","_clearNotificationDismissTimeout","ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT","_iAmSipGateway","_renderFlags","containerClass","countries","countriesByCodeMap","codesByNumbersMap","onBack","onPrimaryButtonClick","onSmallTextClick","onTextButtonClick","passCode","flagClassName","getCountryCodeFromPhone","IconArrowLeft","CountryRow","onEntryClick","CountryDropdown","CountrySelector","PREFIX_REG","CountryPicker","inputRef","_onDropdownClose","_onCountrySelectorClick","textWithDialCode","JoinByPhoneDialog","isCalling","showDialOut","showDialIn","_dialOut","_showDialInDialog","_showDialOutDialog","fetchConferenceDetails","dialInNumber","DialInDialog","dialOutAction","joinConferenceWithoutAudioAction","openDialInPageAction","iconMap","IconExclamation","Prejoin","showJoinByPhoneButtons","_showDialog","_onJoinButtonClick","_onToggleButtonClick","_onOptionsClick","_setName","_onJoinConferenceWithoutAudioKeyPress","_showDialogKeyPress","_onJoinKeyPress","showErrorOnJoin","buttonIsToggled","hasJoinByPhoneButton","showCameraPreview","showJoinActions","_renderSkipPrejoinButton","IconVolumeOff","deviceStatusVisible","showSkipPrejoin","joinConferenceAction","setJoinByPhoneDialogVisiblityAction","setSkipPrejoinAction","isInviteButtonEnabled","VideoManager","playerRef","player","paused","currentTime","getPlayerOptions","videoId","controls","onTimeUpdate","filterResetOptions","playerVars","autoplay","YouTube","onReady","PlayerState","ENDED","onEnd","onPlaybackRateChange","onPlaybackQualityChange","playerOpts","internalPlayer","onPlayerReady","onPlayerError","onPlayerStateChange","onPlayerPlaybackRateChange","onPlayerPlaybackQualityChange","createPlayer","getIframe","startSeconds","endSeconds","loadVideoById","cueVideoById","stopVideo","shouldUpdatePlayer","updatePlayer","shouldResetPlayer","resetPlayer","prevVars","vars","shouldUpdateVideo","updateVideo","refContainer","UNSTARTED","BUFFERING","CUED","objectOf","YoutubeVideoManager","isPlayerAPILoaded","playerState","getPlayerState","getCurrentTime","seekTo","playVideo","pauseVideo","SharedVideo","getDimensions","filmstripVisible","getManager","isOwner","IconShareVideo","_doToggleSharedVideo","_sharingVideo","sharedVideoBtnDisabled","sharedVideoStatus","AbstractSharedVideoDialog","_onSetVideoLink","youtubeId","linkValue","appBackground","black","blackBlue","blueHighlight","buttonUnderlay","darkGrey","darkBackground","overflowMenuItemUnderlay","transparent","white","LocalRecordingInfoDialog","durationString","_timer","_prevState","nowTime","_getDuration","_renderModeratorControls","_renderDurationAndFormat","encodingFormat","isEngaged","_renderStats","_renderStatsHeader","_renderStatsLine","lineKey","statusClass","_onStop","_onStart","LocalRecording","IconRec","LocalRecordingLabel","E2EESection","expand","_onExpand","_onExpandKeyPress","_onToggle","_everyoneSupportE2EE","E2EELabel","_showLabel","IconE2EE","IconShareAudio","IconStopAudioShare","_isAudioOnlySharing","_onContinue","_onSelectHideShareAudioHelper","_shouldHideShareAudioHelper","DEFAULT_COLOR","DEFAULT_SIZE","ariaDisabled","styleColor","styleSize","restStyle","calculatedColor","calculatedSize","_getAdditionalMessage","_sourceType","VirtualBackgroundPreview","_stopStream","_currentCameraDeviceId","_applyBackgroundEffect","_loadVideoPreview","video-preview-container","images","VirtualBackgroundDialog","_virtualBackground","_selectedThumbnail","_jitsiTrack","initialOptions","setOptions","localImages","storedImages","setStoredImages","setLoading","uploadImageButton","activeDesktopVideo","initialVirtualBackground","deleteStoredImage","imageId","deleteStoredImageKeyPress","enableBlur","enableBlurKeyPress","enableSlideBlur","enableSlideBlurKeyPress","shareDesktop","isCancelled","SCREENSHARING_USER_CANCELED","shareDesktopKeyPress","removeBackground","removeBackgroundKeyPress","setUploadedImageBackground","setImageBackground","uploadImage","imageFile","files","uuId","uploadImageKeyPress","setImageBackgroundKeyPress","setUploadedImageBackgroundKeyPress","applyVirtualBackground","cancelVirtualBackground","IconPlusCircle","accept","data-imageid","IconCloseSmall","AbstractAudio","setAudioElementImpl","_audioElementImpl","sinkId","_onCanPlayThrough","onCanPlayThrough","_maybeSetAudioElementImpl","_audioFileLoaded","getFirstMatch","getSecondMatch","matchAndReturnConst","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","getVersionPrecision","compareVersions","getBrowserAlias","BROWSER_ALIASES_MAP","getBrowserTypeByAlias","BROWSER_MAP","ENGINE_MAP","OS_MAP","PLATFORMS_MAP","Bada","BlackBerry","Chrome","Chromium","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","android","bada","blackberry","epiphany","generic","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tablet","mobile","tv","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","90","getParser","_ua","parsedResult","getUA","parseBrowser","describe","getBrowser","getBrowserName","getBrowserVersion","getOS","os","parseOS","getOSName","getOSVersion","getPlatform","parsePlatform","getPlatformType","getEngine","engine","parseEngine","getEngineName","satisfies","isOS","isPlatform","isBrowser","compareVersion","isEngine","versionName","94","vendor","95","WINDOW","JS_MD5_NO_WINDOW","WEB_WORKER","NODE_JS","JS_MD5_NO_NODE_JS","COMMON_JS","JS_MD5_NO_COMMON_JS","AMD","ARRAY_BUFFER","JS_MD5_NO_ARRAY_BUFFER","HEX_CHARS","EXTRA","SHIFT","OUTPUT_TYPES","BASE64_ENCODE_CHAR","blocks","buffer8","Uint32Array","JS_MD5_NO_ARRAY_BUFFER_IS_VIEW","isView","createOutputMethod","outputType","Md5","createMethod","nodeWrap","eval","nodeMethod","createHash","digest","sharedMemory","h0","h1","h2","h3","finalized","hashed","notString","lastByteIndex","finalize","bc","base64","v2","v3","base64Str","_unsupportedIterableToArray","minLen","isReducedMotion","matchMedia","prefersReducedMotion","animation","dataRef","fnRef","analyticsEvent","fire","getIsOnlySingleIcon","iconBefore","iconAfter","ManagerReferenceNodeContext","ManagerReferenceNodeSetterContext","Manager","referenceNode","setReferenceNode","hasUnmounted","handleSetReferenceNode","frameId","wrapperFn","filename","downloadurl","dispatchEvent","MouseEvent","bubbles","cancelable","hasSymbol","CopyButton","onHoverIn","onHoverOut","OPEN_KEYBOARD_SHORTCUTS_DIALOG","_renderer","Twemoji","Emojione","EmojioneV4","_react2","_propTypes2","_renderer2","svg","emojione","oneOf","EMOTICON_REGEXP_ARRAY","lastReadMessage","escapedValues","asciiEmojies","emojiAsciiAliases","SET_SCREENSHOT_CAPTURE","IconDeviceDocument","defaultBackgroundColor","inprogress","moved","new","removed","defaultTextColor","boldBackgroundColor","boldTextColor","textColor","ssrStyles","styleBucketOrdering","styleBucketsInHead","pseudosMap","ited","us","ive","bucketName","currentBucketIndex","nextBucketFromCache","nextBucket","lazyAddStyleBucketToHead","getStyleBucketName","ax","atomicGroups","atomic","cssCustomPropertyValue","BORDER_RADIUS","HORIZONTAL_SPACING","Lozenge","themeTokens","_renderShortcutsListItem","keyboardKey","PasswordForm","enteredPassword","editEnabled","_onEnteredPasswordChange","_onPasswordSubmit","_renderPasswordField","digitPattern","placeHolderText","passwordNumberOfDigits","canEditPassword","passwordEditEnabled","setPasswordEditEnabled","formRef","onPasswordSubmit","onTogglePasswordEditState","onPasswordSave","onPasswordRemove","onPasswordCopy","onTogglePasswordEditStateKeyPressHandler","onPasswordSaveKeyPressHandler","onPasswordRemoveKeyPressHandler","onPasswordCopyKeyPressHandler","setPass","e2eeSupported","roomPasswordNumberOfDigits","showE2ee","_canEditPassword","_password","_passwordNumberOfDigits","_showE2ee","timerWorkerScript","ScreenshotCaptureEffect","_currentCanvas","_currentCanvasContext","_handleWorkerAction","_initScreenshotCapture","_streamWorker","startEffect","_streamHeight","_streamWidth","srcObject","stopEffect","storedCanvasContext","getImageData","_storedImageData","timeMs","_handleScreenshot","_shouldProcessScreenshot","nbPixels","diffPixels","pixelmatch","getMeetingUniqueId","getJid","MediaStreamTrack","errorText","localMsgBackground","privateMsgBackground","privateMsgNotice","remoteMsgBackground","replyBorder","replyIcon","inviteButtonBackground","onVideoText","buttonBackground","statusBar","statusBarContent","activeParticipantHighlight","activeParticipantTint","buttonToggled","buttonToggledBorder","_schemedStyles","schemedStyle","_applyColorScheme","_styleTemplates","styleValue","_getColor","colorDefinition","colorScheme","defaultScheme","_defaultTheme","getHookDeps","cleanup","timeoutId","StaggeredEntranceContext","isReady","identifier","indentifier","isPaused","onFinishMotion","onFinish","_ref$duration","staggered","_useExitingPersistenc","onExitFinished","hasAnimationStyles","setHasAnimationStyles","animationName","animationDelay","animationFillMode","animationDuration","animationPlayState","JitsiStreamBackgroundEffect","_options","_virtualImage","crossOrigin","_virtualVideo","_model","_segmentationPixelCount","_onMaskFrameTimer","_outputCanvasElement","_inputVideoElement","_renderMask","runPostProcessing","_outputCanvasCtx","globalCompositeOperation","save","scale","_segmentationMaskCanvas","restore","runInference","_runInference","outputMemoryOffset","_getOutputMemoryOffset","person","backgroundExp","personExp","_segmentationMask","_segmentationMaskCtx","putImageData","resizeSource","_maskFrameTimerWorker","imageData","inputMemoryOffset","_getInputMemoryOffset","ImageData","onloadeddata","captureStream","models","segmentationDimensions","model96","model144","tflite","wasmCheck","simd","createTFLiteSIMDModule","createTFLiteModule","modelBufferOffset","_getModelBufferMemoryOffset","modelResponse","HEAPU8","_loadModel","HIDDEN_EMAILS","NotificationButton","IconVirtualBackground","_isBackgroundEnabled","abort","onKey","onMouseDownCapture","onMouseUpCapture","onKeyDownCapture","onKeyUpCapture","onTouchStartCapture","onTouchEndCapture","onPointerDownCapture","onPointerUpCapture","onClickCapture","doNotBlock","noPointerEventsOnChildrenCss","buttonCss","_props$spacing","_props$autoFocus","_props$isDisabled","_props$tabIndex","_props$type","_props$onMouseDown","providedOnMouseDown","_props$onClick","providedOnClick","_props$component","ourRef","initialAutoFocus","useAutoFocus","fadeCss","DEFAULT_STATE","persistedPrefferedVideoQuality","configuredMap","convertedMap","_setConfig","WorkerGlobalScope","return","LN2","isEncoding","write","readUInt16BE","SlowBuffer","alloc","INSPECT_MAX_BYTES","kMaxLength","TYPED_ARRAY_SUPPORT","foo","species","poolSize","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","subarray","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","clientSecret","selectUser","selectAdmin","getClientId","getClientSecret","getRpcRequest","getDownloadRequest","getUploadRequest","getAccessToken","rpcRequest","Authorization","downloadRequest","fileBlob","fileBinary","uploadRequest","DropboxTeam","__webpack_amd_options__","webpackPolyfill","oDataQueryNames","DEFAULT_VERSION","GRAPH_BASE_URL","PACKAGE_VERSION","adjacency_graphs","calc_average_degree","scoring","graph","average","neighbors","nCk","log10","log2","factorial","most_guessable_match_sequence","_exclude_additive","bruteforce_update","guesses","len1","len2","make_bruteforce_match","matches_by_j","optimal","optimal_l","optimal_match_sequence","ref1","unwind","m1","m2","pi","competing_g","competing_l","estimate_guesses","last_m","results1","candidate_g","candidate_l","guesses_log10","sequence","min_guesses","bruteforce","bruteforce_guesses","dictionary","dictionary_guesses","spatial","spatial_guesses","repeat_guesses","sequence_guesses","regex_guesses","date_guesses","POSITIVE_INFINITY","MAX_VALUE","MIN_SUBMATCH_GUESSES_SINGLE_CHAR","MIN_SUBMATCH_GUESSES_MULTI_CHAR","base_guesses","repeat_count","first_chr","ascending","MIN_YEAR_SPACE","REFERENCE_YEAR","char_class_bases","year_space","alpha_lower","alpha_upper","alphanumeric","regex_name","regex_match","KEYBOARD_AVERAGE_DEGREE","qwerty","KEYPAD_AVERAGE_DEGREE","keypad","KEYBOARD_STARTING_POSITIONS","KEYPAD_STARTING_POSITIONS","ref2","ref3","shifted_variations","turns","shifted_count","reversed_variations","rank","uppercase_variations","l33t_variations","reversed","START_UPPER","END_UPPER","ALL_UPPER","ALL_LOWER","variations","chrs","possibilities","subbed","unsubbed","l33t","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","encodeChunk","grinning_face","grinning_face_with_big_eyes","grinning_face_with_smiling_eyes","beaming_face_with_smiling_eyes","grinning_squinting_face","grinning_face_with_sweat","rolling_on_the_floor_laughing","face_with_tears_of_joy","slightly_smiling_face","upside_down_face","winking_face","smiling_face_with_smiling_eyes","smiling_face_with_halo","smiling_face_with_hearts","smiling_face_with_heart_eyes","star_struck","face_blowing_a_kiss","kissing_face","smiling_face","kissing_face_with_closed_eyes","kissing_face_with_smiling_eyes","face_savoring_food","face_with_tongue","winking_face_with_tongue","zany_face","squinting_face_with_tongue","money_mouth_face","hugging_face","face_with_hand_over_mouth","shushing_face","thinking_face","zipper_mouth_face","face_with_raised_eyebrow","expressionless_face","face_without_mouth","smirking_face","unamused_face","face_with_rolling_eyes","grimacing_face","lying_face","relieved_face","pensive_face","sleepy_face","drooling_face","sleeping_face","face_with_medical_mask","face_with_thermometer","face_with_head_bandage","nauseated_face","face_vomiting","sneezing_face","hot_face","cold_face","woozy_face","dizzy_face","exploding_head","cowboy_hat_face","partying_face","smiling_face_with_sunglasses","nerd_face","face_with_monocle","confused_face","worried_face","slightly_frowning_face","frowning_face","face_with_open_mouth","hushed_face","astonished_face","flushed_face","pleading_face","frowning_face_with_open_mouth","anguished_face","fearful_face","anxious_face_with_sweat","sad_but_relieved_face","crying_face","loudly_crying_face","face_screaming_in_fear","confounded_face","persevering_face","disappointed_face","downcast_face_with_sweat","weary_face","tired_face","yawning_face","face_with_steam_from_nose","pouting_face","angry_face","face_with_symbols_on_mouth","smiling_face_with_horns","angry_face_with_horns","skull","skull_and_crossbones","pile_of_poo","clown_face","ogre","goblin","ghost","alien","alien_monster","robot","grinning_cat","grinning_cat_with_smiling_eyes","cat_with_tears_of_joy","smiling_cat_with_heart_eyes","cat_with_wry_smile","kissing_cat","weary_cat","crying_cat","pouting_cat","see_no_evil_monkey","hear_no_evil_monkey","speak_no_evil_monkey","kiss_mark","love_letter","heart_with_arrow","heart_with_ribbon","sparkling_heart","growing_heart","beating_heart","revolving_hearts","two_hearts","heart_decoration","heart_exclamation","red_heart","orange_heart","yellow_heart","green_heart","blue_heart","purple_heart","brown_heart","black_heart","white_heart","hundred_points","anger_symbol","collision","dizzy","sweat_droplets","dashing_away","hole","bomb","speech_balloon","eye_in_speech_bubble","left_speech_bubble","right_anger_bubble","thought_balloon","zzz","waving_hand","raised_back_of_hand","hand_with_fingers_splayed","raised_hand","vulcan_salute","ok_hand","pinching_hand","victory_hand","crossed_fingers","love_you_gesture","sign_of_the_horns","call_me_hand","backhand_index_pointing_left","backhand_index_pointing_right","backhand_index_pointing_up","middle_finger","backhand_index_pointing_down","index_pointing_up","thumbs_up","thumbs_down","raised_fist","oncoming_fist","left_facing_fist","right_facing_fist","clapping_hands","raising_hands","open_hands","palms_up_together","handshake","folded_hands","writing_hand","nail_polish","selfie","flexed_biceps","mechanical_arm","mechanical_leg","leg","foot","ear","ear_with_hearing_aid","nose","brain","tooth","bone","eyes","eye","tongue","mouth","baby","boy","girl","person_blond_hair","man","man_beard","man_red_hair","man_curly_hair","man_white_hair","man_bald","woman","woman_red_hair","person_red_hair","woman_curly_hair","person_curly_hair","woman_white_hair","person_white_hair","woman_bald","person_bald","woman_blond_hair","man_blond_hair","older_person","old_man","old_woman","person_frowning","man_frowning","woman_frowning","person_pouting","man_pouting","woman_pouting","person_gesturing_no","man_gesturing_no","woman_gesturing_no","person_gesturing_ok","man_gesturing_ok","woman_gesturing_ok","person_tipping_hand","man_tipping_hand","woman_tipping_hand","person_raising_hand","man_raising_hand","woman_raising_hand","deaf_person","deaf_man","deaf_woman","person_bowing","man_bowing","woman_bowing","person_facepalming","man_facepalming","woman_facepalming","person_shrugging","man_shrugging","woman_shrugging","health_worker","man_health_worker","woman_health_worker","student","man_student","woman_student","teacher","man_teacher","woman_teacher","judge","man_judge","woman_judge","farmer","man_farmer","woman_farmer","cook","man_cook","woman_cook","mechanic","man_mechanic","woman_mechanic","factory_worker","man_factory_worker","woman_factory_worker","office_worker","man_office_worker","woman_office_worker","scientist","man_scientist","woman_scientist","technologist","man_technologist","woman_technologist","singer","man_singer","woman_singer","artist","man_artist","woman_artist","pilot","man_pilot","woman_pilot","astronaut","man_astronaut","woman_astronaut","firefighter","man_firefighter","woman_firefighter","police_officer","man_police_officer","woman_police_officer","detective","man_detective","woman_detective","man_guard","woman_guard","construction_worker","man_construction_worker","woman_construction_worker","prince","princess","person_wearing_turban","man_wearing_turban","woman_wearing_turban","man_with_skullcap","woman_with_headscarf","man_in_tuxedo","bride_with_veil","pregnant_woman","breast_feeding","baby_angel","santa_claus","mrs_claus","superhero","man_superhero","woman_superhero","supervillain","man_supervillain","woman_supervillain","mage","man_mage","woman_mage","fairy","man_fairy","woman_fairy","vampire","man_vampire","woman_vampire","merperson","merman","mermaid","elf","man_elf","woman_elf","genie","man_genie","woman_genie","zombie","man_zombie","woman_zombie","person_getting_massage","man_getting_massage","woman_getting_massage","person_getting_haircut","man_getting_haircut","woman_getting_haircut","person_walking","man_walking","woman_walking","person_standing","man_standing","woman_standing","person_kneeling","man_kneeling","woman_kneeling","person_with_probing_cane","man_with_probing_cane","woman_with_probing_cane","person_in_motorized_wheelchair","man_in_motorized_wheelchair","woman_in_motorized_wheelchair","person_in_manual_wheelchair","man_in_manual_wheelchair","woman_in_manual_wheelchair","person_running","man_running","woman_running","woman_dancing","man_dancing","man_in_suit_levitating","people_with_bunny_ears","men_with_bunny_ears","women_with_bunny_ears","person_in_steamy_room","man_in_steamy_room","woman_in_steamy_room","person_climbing","man_climbing","woman_climbing","person_fencing","horse_racing","skier","snowboarder","person_golfing","man_golfing","woman_golfing","person_surfing","man_surfing","woman_surfing","person_rowing_boat","man_rowing_boat","woman_rowing_boat","person_swimming","man_swimming","woman_swimming","person_bouncing_ball","man_bouncing_ball","woman_bouncing_ball","person_lifting_weights","man_lifting_weights","woman_lifting_weights","person_biking","man_biking","woman_biking","person_mountain_biking","man_mountain_biking","woman_mountain_biking","person_cartwheeling","man_cartwheeling","woman_cartwheeling","people_wrestling","men_wrestling","women_wrestling","person_playing_water_polo","man_playing_water_polo","woman_playing_water_polo","person_playing_handball","man_playing_handball","woman_playing_handball","person_juggling","man_juggling","woman_juggling","person_in_lotus_position","man_in_lotus_position","woman_in_lotus_position","person_taking_bath","person_in_bed","people_holding_hands","women_holding_hands","woman_and_man_holding_hands","men_holding_hands","kiss","kiss_woman_man","kiss_man_man","kiss_woman_woman","couple_with_heart","couple_with_heart_woman_man","couple_with_heart_man_man","couple_with_heart_woman_woman","family","family_man_woman_boy","family_man_woman_girl","family_man_woman_girl_boy","family_man_woman_boy_boy","family_man_woman_girl_girl","family_man_man_boy","family_man_man_girl","family_man_man_girl_boy","family_man_man_boy_boy","family_man_man_girl_girl","family_woman_woman_boy","family_woman_woman_girl","family_woman_woman_girl_boy","family_woman_woman_boy_boy","family_woman_woman_girl_girl","family_man_boy","family_man_boy_boy","family_man_girl","family_man_girl_boy","family_man_girl_girl","family_woman_boy","family_woman_boy_boy","family_woman_girl","family_woman_girl_boy","family_woman_girl_girl","speaking_head","bust_in_silhouette","busts_in_silhouette","footprints","monkey_face","monkey","gorilla","orangutan","dog_face","dog","guide_dog","service_dog","poodle","wolf","fox","raccoon","cat_face","cat","lion","tiger_face","tiger","leopard","horse_face","horse","unicorn","zebra","deer","cow_face","ox","water_buffalo","cow","pig_face","pig","boar","pig_nose","ram","ewe","goat","camel","two_hump_camel","llama","giraffe","elephant","rhinoceros","hippopotamus","mouse_face","mouse","rat","hamster","rabbit_face","rabbit","chipmunk","hedgehog","bat","bear","koala","panda","sloth","otter","skunk","kangaroo","badger","paw_prints","turkey","chicken","rooster","hatching_chick","baby_chick","front_facing_baby_chick","bird","penguin","dove","eagle","duck","swan","owl","flamingo","peacock","parrot","frog","crocodile","turtle","lizard","snake","dragon_face","dragon","sauropod","t_rex","spouting_whale","whale","dolphin","fish","tropical_fish","blowfish","shark","octopus","spiral_shell","snail","butterfly","bug","ant","honeybee","lady_beetle","cricket","spider","spider_web","scorpion","mosquito","microbe","bouquet","cherry_blossom","white_flower","rosette","rose","wilted_flower","hibiscus","sunflower","blossom","tulip","seedling","evergreen_tree","deciduous_tree","palm_tree","cactus","sheaf_of_rice","herb","shamrock","four_leaf_clover","maple_leaf","fallen_leaf","leaf_fluttering_in_wind","grapes","melon","watermelon","tangerine","lemon","banana","pineapple","mango","red_apple","green_apple","pear","peach","cherries","strawberry","kiwi_fruit","tomato","coconut","avocado","eggplant","potato","carrot","ear_of_corn","hot_pepper","cucumber","leafy_green","broccoli","garlic","onion","mushroom","peanuts","chestnut","bread","croissant","baguette_bread","pretzel","bagel","pancakes","waffle","cheese_wedge","meat_on_bone","poultry_leg","cut_of_meat","bacon","hamburger","french_fries","pizza","hot_dog","sandwich","taco","burrito","stuffed_flatbread","falafel","egg","cooking","shallow_pan_of_food","pot_of_food","bowl_with_spoon","green_salad","popcorn","butter","salt","canned_food","bento_box","rice_cracker","rice_ball","cooked_rice","curry_rice","steaming_bowl","spaghetti","roasted_sweet_potato","oden","sushi","fried_shrimp","fish_cake_with_swirl","moon_cake","dango","dumpling","fortune_cookie","takeout_box","crab","lobster","shrimp","squid","oyster","soft_ice_cream","shaved_ice","ice_cream","doughnut","cookie","birthday_cake","shortcake","cupcake","pie","chocolate_bar","candy","lollipop","custard","honey_pot","baby_bottle","glass_of_milk","hot_beverage","teacup_without_handle","sake","bottle_with_popping_cork","wine_glass","cocktail_glass","tropical_drink","beer_mug","clinking_beer_mugs","clinking_glasses","tumbler_glass","cup_with_straw","beverage_box","mate","ice","chopsticks","fork_and_knife_with_plate","fork_and_knife","spoon","kitchen_knife","amphora","globe_showing_europe_africa","globe_showing_americas","globe_showing_asia_australia","globe_with_meridians","world_map","map_of_japan","compass","snow_capped_mountain","mountain","volcano","mount_fuji","camping","beach_with_umbrella","desert","desert_island","national_park","stadium","classical_building","building_construction","brick","houses","derelict_house","house","house_with_garden","office_building","japanese_post_office","post_office","hospital","bank","hotel","love_hotel","convenience_store","school","department_store","japanese_castle","castle","wedding","tokyo_tower","statue_of_liberty","church","mosque","hindu_temple","synagogue","shinto_shrine","kaaba","fountain","tent","foggy","night_with_stars","cityscape","sunrise_over_mountains","sunrise","cityscape_at_dusk","sunset","bridge_at_night","hot_springs","carousel_horse","ferris_wheel","roller_coaster","barber_pole","circus_tent","locomotive","railway_car","high_speed_train","bullet_train","train","metro","light_rail","station","tram","monorail","mountain_railway","tram_car","bus","oncoming_bus","trolleybus","minibus","ambulance","fire_engine","police_car","oncoming_police_car","taxi","oncoming_taxi","automobile","oncoming_automobile","sport_utility_vehicle","delivery_truck","articulated_lorry","tractor","racing_car","motorcycle","motor_scooter","manual_wheelchair","motorized_wheelchair","auto_rickshaw","bicycle","kick_scooter","skateboard","bus_stop","motorway","railway_track","oil_drum","fuel_pump","police_car_light","horizontal_traffic_light","vertical_traffic_light","stop_sign","construction","sailboat","canoe","speedboat","passenger_ship","ferry","motor_boat","ship","airplane","small_airplane","airplane_departure","airplane_arrival","parachute","seat","helicopter","suspension_railway","mountain_cableway","aerial_tramway","satellite","rocket","flying_saucer","bellhop_bell","luggage","hourglass_done","hourglass_not_done","watch","alarm_clock","stopwatch","timer_clock","mantelpiece_clock","twelve_o_clock","twelve_thirty","one_o_clock","one_thirty","two_o_clock","two_thirty","three_o_clock","three_thirty","four_o_clock","four_thirty","five_o_clock","five_thirty","six_o_clock","six_thirty","seven_o_clock","seven_thirty","eight_o_clock","eight_thirty","nine_o_clock","nine_thirty","ten_o_clock","ten_thirty","eleven_o_clock","eleven_thirty","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","crescent_moon","new_moon_face","first_quarter_moon_face","last_quarter_moon_face","thermometer","sun","full_moon_face","sun_with_face","ringed_planet","star","glowing_star","shooting_star","milky_way","cloud","sun_behind_cloud","cloud_with_lightning_and_rain","sun_behind_small_cloud","sun_behind_large_cloud","sun_behind_rain_cloud","cloud_with_rain","cloud_with_snow","cloud_with_lightning","tornado","fog","wind_face","cyclone","rainbow","closed_umbrella","umbrella","umbrella_with_rain_drops","umbrella_on_ground","high_voltage","snowflake","snowman","snowman_without_snow","comet","droplet","water_wave","jack_o_lantern","christmas_tree","fireworks","sparkler","firecracker","sparkles","balloon","party_popper","confetti_ball","tanabata_tree","pine_decoration","japanese_dolls","carp_streamer","wind_chime","moon_viewing_ceremony","red_envelope","ribbon","wrapped_gift","reminder_ribbon","admission_tickets","ticket","military_medal","trophy","sports_medal","soccer_ball","baseball","softball","basketball","volleyball","american_football","rugby_football","tennis","flying_disc","bowling","cricket_game","field_hockey","ice_hockey","lacrosse","ping_pong","badminton","boxing_glove","martial_arts_uniform","goal_net","flag_in_hole","ice_skate","fishing_pole","diving_mask","running_shirt","skis","sled","curling_stone","direct_hit","yo_yo","kite","pool_8_ball","crystal_ball","nazar_amulet","video_game","joystick","slot_machine","game_die","puzzle_piece","teddy_bear","spade_suit","heart_suit","diamond_suit","club_suit","chess_pawn","joker","mahjong_red_dragon","flower_playing_cards","performing_arts","framed_picture","artist_palette","thread","yarn","glasses","goggles","lab_coat","safety_vest","necktie","t_shirt","jeans","scarf","gloves","coat","socks","dress","kimono","sari","one_piece_swimsuit","briefs","shorts","bikini","woman_s_clothes","purse","handbag","clutch_bag","shopping_bags","backpack","man_s_shoe","running_shoe","hiking_boot","flat_shoe","high_heeled_shoe","woman_s_sandal","ballet_shoes","woman_s_boot","crown","woman_s_hat","top_hat","graduation_cap","billed_cap","rescue_worker_s_helmet","prayer_beads","lipstick","ring","gem_stone","muted_speaker","speaker_low_volume","speaker_medium_volume","speaker_high_volume","loudspeaker","megaphone","postal_horn","bell","bell_with_slash","musical_score","musical_note","musical_notes","studio_microphone","level_slider","control_knobs","headphone","radio","saxophone","guitar","musical_keyboard","trumpet","violin","banjo","drum","mobile_phone","mobile_phone_with_arrow","telephone","telephone_receiver","pager","fax_machine","battery","electric_plug","laptop","desktop_computer","printer","keyboard","computer_mouse","trackball","computer_disk","floppy_disk","optical_disk","dvd","abacus","movie_camera","film_frames","film_projector","clapper_board","television","camera_with_flash","video_camera","videocassette","magnifying_glass_tilted_left","magnifying_glass_tilted_right","candle","light_bulb","flashlight","red_paper_lantern","diya_lamp","notebook_with_decorative_cover","closed_book","open_book","green_book","blue_book","orange_book","books","notebook","ledger","page_with_curl","scroll","page_facing_up","newspaper","rolled_up_newspaper","bookmark_tabs","bookmark","money_bag","yen_banknote","dollar_banknote","euro_banknote","pound_banknote","money_with_wings","credit_card","receipt","chart_increasing_with_yen","currency_exchange","heavy_dollar_sign","envelope","e_mail","incoming_envelope","envelope_with_arrow","outbox_tray","inbox_tray","package","closed_mailbox_with_raised_flag","closed_mailbox_with_lowered_flag","open_mailbox_with_raised_flag","open_mailbox_with_lowered_flag","postbox","ballot_box_with_ballot","pencil","black_nib","fountain_pen","pen","paintbrush","crayon","briefcase","file_folder","open_file_folder","card_index_dividers","tear_off_calendar","spiral_notepad","spiral_calendar","card_index","chart_increasing","chart_decreasing","bar_chart","clipboard","pushpin","round_pushpin","paperclip","linked_paperclips","straight_ruler","triangular_ruler","scissors","card_file_box","file_cabinet","wastebasket","unlocked","locked_with_pen","locked_with_key","old_key","hammer","axe","hammer_and_pick","hammer_and_wrench","dagger","crossed_swords","pistol","bow_and_arrow","shield","wrench","nut_and_bolt","gear","balance_scale","probing_cane","chains","magnet","alembic","test_tube","petri_dish","dna","microscope","telescope","satellite_antenna","syringe","drop_of_blood","pill","adhesive_bandage","stethoscope","door","bed","couch_and_lamp","chair","toilet","shower","bathtub","razor","lotion_bottle","safety_pin","broom","basket","roll_of_paper","soap","sponge","fire_extinguisher","shopping_cart","cigarette","coffin","funeral_urn","moai","atm_sign","litter_in_bin_sign","potable_water","wheelchair_symbol","men_s_room","women_s_room","restroom","baby_symbol","water_closet","passport_control","customs","baggage_claim","left_luggage","children_crossing","no_entry","prohibited","no_bicycles","no_smoking","no_littering","non_potable_water","no_pedestrians","no_mobile_phones","no_one_under_eighteen","radioactive","biohazard","up_arrow","up_right_arrow","right_arrow","down_right_arrow","down_arrow","down_left_arrow","left_arrow","up_left_arrow","up_down_arrow","left_right_arrow","right_arrow_curving_left","left_arrow_curving_right","right_arrow_curving_up","right_arrow_curving_down","clockwise_vertical_arrows","counterclockwise_arrows_button","back_arrow","end_arrow","on_arrow","soon_arrow","top_arrow","place_of_worship","atom_symbol","om","star_of_david","wheel_of_dharma","yin_yang","latin_cross","orthodox_cross","star_and_crescent","peace_symbol","menorah","dotted_six_pointed_star","aries","taurus","gemini","cancer","leo","virgo","libra","scorpio","sagittarius","capricorn","aquarius","pisces","ophiuchus","shuffle_tracks_button","repeat_button","repeat_single_button","play_button","fast_forward_button","next_track_button","play_or_pause_button","reverse_button","fast_reverse_button","last_track_button","upwards_button","fast_up_button","downwards_button","fast_down_button","pause_button","stop_button","record_button","eject_button","cinema","dim_button","bright_button","antenna_bars","vibration_mode","mobile_phone_off","female_sign","male_sign","medical_symbol","infinity","recycling_symbol","fleur_de_lis","trident_emblem","name_badge","japanese_symbol_for_beginner","hollow_red_circle","check_mark_button","check_box_with_check","check_mark","multiplication_sign","cross_mark","cross_mark_button","plus_sign","minus_sign","division_sign","curly_loop","double_curly_loop","part_alternation_mark","eight_spoked_asterisk","eight_pointed_star","sparkle","double_exclamation_mark","exclamation_question_mark","question_mark","white_question_mark","white_exclamation_mark","exclamation_mark","wavy_dash","copyright","trade_mark","keycap_","keycap_0","keycap_1","keycap_2","keycap_3","keycap_4","keycap_5","keycap_6","keycap_7","keycap_8","keycap_9","keycap_10","input_latin_uppercase","input_latin_lowercase","input_numbers","input_symbols","input_latin_letters","a_button","ab_button","b_button","cl_button","cool_button","free_button","information","id_button","circled_m","new_button","ng_button","o_button","ok_button","p_button","sos_button","up_button","vs_button","japanese_here_button","japanese_service_charge_button","japanese_monthly_amount_button","japanese_not_free_of_charge_button","japanese_reserved_button","japanese_bargain_button","japanese_discount_button","japanese_free_of_charge_button","japanese_prohibited_button","japanese_acceptable_button","japanese_application_button","japanese_passing_grade_button","japanese_vacancy_button","japanese_congratulations_button","japanese_secret_button","japanese_open_for_business_button","japanese_no_vacancy_button","red_circle","orange_circle","yellow_circle","green_circle","blue_circle","purple_circle","brown_circle","black_circle","white_circle","red_square","orange_square","yellow_square","green_square","blue_square","purple_square","brown_square","black_large_square","white_large_square","black_medium_square","white_medium_square","black_medium_small_square","white_medium_small_square","black_small_square","white_small_square","large_orange_diamond","large_blue_diamond","small_orange_diamond","small_blue_diamond","red_triangle_pointed_up","red_triangle_pointed_down","diamond_with_a_dot","radio_button","white_square_button","black_square_button","chequered_flag","triangular_flag","crossed_flags","black_flag","white_flag","rainbow_flag","pirate_flag","flag_ascension_island","flag_andorra","flag_united_arab_emirates","flag_afghanistan","flag_antigua_barbuda","flag_anguilla","flag_albania","flag_armenia","flag_angola","flag_antarctica","flag_argentina","flag_american_samoa","flag_austria","flag_australia","flag_aruba","flag_land_islands","flag_azerbaijan","flag_bosnia_herzegovina","flag_barbados","flag_bangladesh","flag_belgium","flag_burkina_faso","flag_bulgaria","flag_bahrain","flag_burundi","flag_benin","flag_st_barth_lemy","flag_bermuda","flag_brunei","flag_bolivia","flag_caribbean_netherlands","flag_brazil","flag_bahamas","flag_bhutan","flag_bouvet_island","flag_botswana","flag_belarus","flag_belize","flag_canada","flag_cocos_islands","flag_congo_kinshasa","flag_central_african_republic","flag_congo_brazzaville","flag_switzerland","flag_c_te_d_ivoire","flag_cook_islands","flag_chile","flag_cameroon","flag_china","flag_colombia","flag_clipperton_island","flag_costa_rica","flag_cuba","flag_cape_verde","flag_cura_ao","flag_christmas_island","flag_cyprus","flag_czechia","flag_germany","flag_diego_garcia","flag_djibouti","flag_denmark","flag_dominica","flag_dominican_republic","flag_algeria","flag_ceuta_melilla","flag_ecuador","flag_estonia","flag_egypt","flag_western_sahara","flag_eritrea","flag_spain","flag_ethiopia","flag_european_union","flag_finland","flag_fiji","flag_falkland_islands","flag_micronesia","flag_faroe_islands","flag_france","flag_gabon","flag_united_kingdom","flag_grenada","flag_georgia","flag_french_guiana","flag_guernsey","flag_ghana","flag_gibraltar","flag_greenland","flag_gambia","flag_guinea","flag_guadeloupe","flag_equatorial_guinea","flag_greece","flag_south_georgia_south_sandwich_islands","flag_guatemala","flag_guam","flag_guinea_bissau","flag_guyana","flag_hong_kong_sar_china","flag_heard_mcdonald_islands","flag_honduras","flag_croatia","flag_haiti","flag_hungary","flag_canary_islands","flag_indonesia","flag_ireland","flag_israel","flag_isle_of_man","flag_india","flag_british_indian_ocean_territory","flag_iraq","flag_iran","flag_iceland","flag_italy","flag_jersey","flag_jamaica","flag_jordan","flag_japan","flag_kenya","flag_kyrgyzstan","flag_cambodia","flag_kiribati","flag_comoros","flag_st_kitts_nevis","flag_north_korea","flag_south_korea","flag_kuwait","flag_cayman_islands","flag_kazakhstan","flag_laos","flag_lebanon","flag_st_lucia","flag_liechtenstein","flag_sri_lanka","flag_liberia","flag_lesotho","flag_lithuania","flag_luxembourg","flag_latvia","flag_libya","flag_morocco","flag_monaco","flag_moldova","flag_montenegro","flag_st_martin","flag_madagascar","flag_marshall_islands","flag_north_macedonia","flag_mali","flag_myanmar","flag_mongolia","flag_macao_sar_china","flag_northern_mariana_islands","flag_martinique","flag_mauritania","flag_montserrat","flag_malta","flag_mauritius","flag_maldives","flag_malawi","flag_mexico","flag_malaysia","flag_mozambique","flag_namibia","flag_new_caledonia","flag_niger","flag_norfolk_island","flag_nigeria","flag_nicaragua","flag_netherlands","flag_norway","flag_nepal","flag_nauru","flag_niue","flag_new_zealand","flag_oman","flag_panama","flag_peru","flag_french_polynesia","flag_papua_new_guinea","flag_philippines","flag_pakistan","flag_poland","flag_st_pierre_miquelon","flag_pitcairn_islands","flag_puerto_rico","flag_palestinian_territories","flag_portugal","flag_palau","flag_paraguay","flag_qatar","flag_r_union","flag_romania","flag_serbia","flag_russia","flag_rwanda","flag_saudi_arabia","flag_solomon_islands","flag_seychelles","flag_sudan","flag_sweden","flag_singapore","flag_st_helena","flag_slovenia","flag_svalbard_jan_mayen","flag_slovakia","flag_sierra_leone","flag_san_marino","flag_senegal","flag_somalia","flag_suriname","flag_south_sudan","flag_s_o_tom_pr_ncipe","flag_el_salvador","flag_sint_maarten","flag_syria","flag_eswatini","flag_tristan_da_cunha","flag_turks_caicos_islands","flag_chad","flag_french_southern_territories","flag_togo","flag_thailand","flag_tajikistan","flag_tokelau","flag_timor_leste","flag_turkmenistan","flag_tunisia","flag_tonga","flag_turkey","flag_trinidad_tobago","flag_tuvalu","flag_taiwan","flag_tanzania","flag_ukraine","flag_uganda","flag_u_s_outlying_islands","flag_united_nations","flag_united_states","flag_uruguay","flag_uzbekistan","flag_vatican_city","flag_st_vincent_grenadines","flag_venezuela","flag_british_virgin_islands","flag_u_s_virgin_islands","flag_vietnam","flag_vanuatu","flag_wallis_futuna","flag_samoa","flag_kosovo","flag_yemen","flag_mayotte","flag_south_africa","flag_zambia","flag_zimbabwe","flag_england","flag_scotland","flag_wales","grinning","grin","satisfied","rofl","smiling_face_with_three_hearts","heart_eyes","kissing_heart","relaxed","kissing_closed_eyes","kissing_smiling_eyes","yum","stuck_out_tongue_winking_eye","stuck_out_tongue_closed_eyes","hugs","hand_over_mouth","thinking","raised_eyebrow","expressionless","no_mouth","smirk","roll_eyes","grimacing","relieved","pensive","sleepy","sleeping","mask","vomiting_face","monocle_face","worried","hushed","astonished","flushed","anguished","fearful","cold_sweat","disappointed_relieved","scream","confounded","persevere","disappointed","weary","triumph","pout","cursing_face","hankey","poop","shit","japanese_ogre","japanese_goblin","space_invader","smiley_cat","smile_cat","joy_cat","heart_eyes_cat","smirk_cat","scream_cat","crying_cat_face","see_no_evil","hear_no_evil","speak_no_evil","cupid","gift_heart","heartpulse","heartbeat","heavy_heart_exclamation","anger","boom","sweat_drops","dash","eye_speech_bubble","wave","raised_hand_with_fingers_splayed","hand","metal","point_left","point_right","point_up_2","fu","point_down","point_up","thumbsup","thumbsdown","fist_raised","fist","fist_oncoming","facepunch","punch","fist_left","fist_right","raised_hands","pray","nail_care","muscle","lips","adult","blond_haired_person","bearded_person","red_haired_man","curly_haired_man","white_haired_man","bald_man","red_haired_woman","curly_haired_woman","white_haired_woman","bald_woman","blond_haired_woman","blonde_woman","blond_haired_man","older_adult","older_man","older_woman","frowning_person","frowning_man","frowning_woman","pouting_man","pouting_woman","no_good","no_good_man","ng_man","no_good_woman","ng_woman","ok_person","ok_man","ok_woman","tipping_hand_person","information_desk_person","tipping_hand_man","sassy_man","tipping_hand_woman","sassy_woman","raising_hand","raising_hand_man","raising_hand_woman","bow","bowing_man","bowing_woman","facepalm","shrug","cop","policeman","policewoman","male_detective","female_detective","guardsman","guardswoman","construction_worker_man","construction_worker_woman","person_with_turban","man_with_turban","woman_with_turban","man_with_gua_pi_mao","angel","santa","superhero_man","superhero_woman","supervillain_man","supervillain_woman","mage_man","mage_woman","fairy_man","fairy_woman","vampire_man","vampire_woman","elf_man","elf_woman","genie_man","genie_woman","zombie_man","zombie_woman","massage","massage_man","massage_woman","haircut","haircut_man","haircut_woman","walking","walking_man","walking_woman","standing_person","standing_man","standing_woman","kneeling_person","kneeling_man","kneeling_woman","runner","running","running_man","running_woman","dancer","business_suit_levitating","dancers","dancing_men","dancing_women","sauna_person","sauna_man","sauna_woman","climbing","climbing_man","climbing_woman","golfing","golfing_man","golfing_woman","surfer","surfing_man","surfing_woman","rowboat","rowing_man","rowing_woman","swimmer","swimming_man","swimming_woman","bouncing_ball_person","bouncing_ball_man","basketball_man","bouncing_ball_woman","basketball_woman","weight_lifting","weight_lifting_man","weight_lifting_woman","bicyclist","biking_man","biking_woman","mountain_bicyclist","mountain_biking_man","mountain_biking_woman","cartwheeling","wrestling","water_polo","handball_person","juggling_person","lotus_position","lotus_position_man","lotus_position_woman","bath","sleeping_bed","two_women_holding_hands","couple","two_men_holding_hands","couplekiss","couplekiss_man_woman","couplekiss_man_man","couplekiss_woman_woman","dog2","fox_face","cat2","tiger2","racehorse","cow2","pig2","sheep","dromedary_camel","mouse2","rabbit2","panda_face","feet","hatched_chick","whale2","flipper","shell","bee","beetle","ear_of_rice","leaves","orange","mandarin","apple","corn","cheese","fries","hotdog","fried_egg","stew","bento","rice","ramen","sweet_potato","fish_cake","icecream","birthday","cake","milk_glass","coffee","tea","champagne","cocktail","beer","beers","ice_cube","plate_with_cutlery","hocho","knife","earth_africa","earth_americas","earth_asia","japan","mountain_snow","beach_umbrella","bricks","office","european_post_office","european_castle","city_sunset","city_sunrise","hotsprings","barber","steam_locomotive","bullettrain_side","bullettrain_front","train2","red_car","blue_car","truck","bike","busstop","fuelpump","rotating_light","traffic_light","boat","flight_departure","flight_arrival","artificial_satellite","hourglass","hourglass_flowing_sand","clock12","clock1230","clock1","clock130","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","clock10","clock1030","clock11","clock1130","moon","new_moon_with_face","first_quarter_moon_with_face","last_quarter_moon_with_face","sunny","full_moon_with_face","star2","stars","partly_sunny","open_umbrella","parasol_on_ground","zap","snowman_with_snow","ocean","tada","bamboo","dolls","rice_scene","gift","tickets","medal_military","medal_sports","soccer","football","golf","fishing_pole_and_fish","running_shirt_with_sash","ski","dart","jigsaw","spades","hearts","diamonds","clubs","black_joker","mahjong","art","eyeglasses","dark_sunglasses","shirt","tshirt","swim_brief","womans_clothes","pouch","shopping","school_satchel","mans_shoe","shoe","athletic_shoe","high_heel","sandal","boot","womans_hat","tophat","mortar_board","rescue_worker_helmet","gem","speaker","loud_sound","mega","no_bell","headphones","iphone","calling","fax","computer","minidisc","cd","film_strip","clapper","camera_flash","vhs","mag","mag_right","bulb","izakaya_lantern","lantern","book","newspaper_roll","moneybag","yen","dollar","euro","pound","chart","mailbox","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","ballot_box","pencil2","chart_with_upwards_trend","chart_with_downwards_trend","paperclips","unlock","lock_with_ink_pen","closed_lock_with_key","gun","smoking","moyai","atm","put_litter_in_its_place","wheelchair","mens","womens","wc","no_entry_sign","do_not_litter","underage","arrow_up","arrow_upper_right","arrow_right","arrow_lower_right","arrow_down","arrow_lower_left","arrow_left","arrow_upper_left","arrow_up_down","leftwards_arrow_with_hook","arrow_right_hook","arrow_heading_up","arrow_heading_down","arrows_clockwise","arrows_counterclockwise","back","soon","six_pointed_star","scorpius","twisted_rightwards_arrows","repeat_one","arrow_forward","fast_forward","arrow_backward","rewind","previous_track_button","arrow_up_small","arrow_double_up","arrow_down_small","arrow_double_down","low_brightness","high_brightness","signal_strength","recycle","trident","beginner","white_check_mark","ballot_box_with_check","heavy_check_mark","heavy_multiplication_x","negative_squared_cross_mark","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","eight_pointed_black_star","bangbang","interrobang","question","grey_question","grey_exclamation","exclamation","heavy_exclamation_mark","tm","asterisk","zero","one","two","three","four","five","six","seven","eight","nine","keycap_ten","capital_abcd","abcd","abc","ab","cl","cool","free","information_source","ng","o2","parking","sos","vs","koko","sa","u6708","u6709","u6307","ideograph_advantage","u5272","u7121","u7981","u7533","u5408","u7a7a","congratulations","secret","u55b6","u6e80","large_blue_circle","small_red_triangle","small_red_triangle_down","diamond_shape_with_a_dot_inside","checkered_flag","triangular_flag_on_post","ascension_island","andorra","united_arab_emirates","afghanistan","antigua_barbuda","anguilla","albania","armenia","angola","antarctica","argentina","american_samoa","austria","australia","aruba","aland_islands","azerbaijan","bosnia_herzegovina","barbados","bangladesh","belgium","burkina_faso","bulgaria","bahrain","burundi","benin","st_barthelemy","bermuda","brunei","bolivia","caribbean_netherlands","brazil","bahamas","bhutan","bouvet_island","botswana","belarus","belize","canada","cocos_islands","congo_kinshasa","central_african_republic","congo_brazzaville","switzerland","cote_divoire","cook_islands","chile","cameroon","cn","colombia","clipperton_island","costa_rica","cuba","cape_verde","curacao","christmas_island","cyprus","czech_republic","de","diego_garcia","djibouti","denmark","dominica","dominican_republic","algeria","ceuta_melilla","ecuador","estonia","egypt","western_sahara","eritrea","es","ethiopia","eu","european_union","finland","fiji","falkland_islands","micronesia","faroe_islands","fr","gabon","gb","uk","grenada","georgia","french_guiana","guernsey","ghana","gibraltar","greenland","gambia","guinea","guadeloupe","equatorial_guinea","greece","south_georgia_south_sandwich_islands","guatemala","guam","guinea_bissau","guyana","hong_kong","heard_mcdonald_islands","honduras","croatia","haiti","hungary","canary_islands","indonesia","ireland","israel","isle_of_man","india","british_indian_ocean_territory","iraq","iran","iceland","it","jersey","jamaica","jordan","jp","kenya","kyrgyzstan","cambodia","kiribati","comoros","st_kitts_nevis","north_korea","kr","kuwait","cayman_islands","kazakhstan","laos","lebanon","st_lucia","liechtenstein","sri_lanka","liberia","lesotho","lithuania","luxembourg","latvia","libya","morocco","monaco","moldova","montenegro","st_martin","madagascar","marshall_islands","macedonia","mali","myanmar","mongolia","macau","northern_mariana_islands","martinique","mauritania","montserrat","malta","mauritius","maldives","malawi","mexico","malaysia","mozambique","namibia","new_caledonia","niger","norfolk_island","nigeria","nicaragua","netherlands","norway","nepal","nauru","niue","new_zealand","oman","panama","peru","french_polynesia","papua_new_guinea","philippines","pakistan","poland","st_pierre_miquelon","pitcairn_islands","puerto_rico","palestinian_territories","portugal","palau","paraguay","qatar","reunion","romania","serbia","ru","rwanda","saudi_arabia","solomon_islands","seychelles","sudan","sweden","singapore","st_helena","slovenia","svalbard_jan_mayen","slovakia","sierra_leone","san_marino","senegal","somalia","suriname","south_sudan","sao_tome_principe","el_salvador","sint_maarten","syria","swaziland","tristan_da_cunha","turks_caicos_islands","chad","french_southern_territories","togo","thailand","tajikistan","tokelau","timor_leste","turkmenistan","tunisia","tonga","tr","trinidad_tobago","tuvalu","taiwan","tanzania","ukraine","uganda","us_outlying_islands","united_nations","uruguay","uzbekistan","vatican_city","st_vincent_grenadines","venezuela","british_virgin_islands","us_virgin_islands","vietnam","vanuatu","wallis_futuna","samoa","kosovo","yemen","mayotte","south_africa","zambia","zimbabwe","england","scotland","wales","hundred_points_symbol","input_symbol_for_numbers","keycap_star","mahjong_tile_red_dragon","playing_card_black_joker","negative_squared_ab","squared_cl","squared_cool","squared_free","squared_id","squared_new","squared_ng","squared_ok","squared_sos","squared_up_with_exclamation_mark","squared_vs","ad","ae","af","ag","ai","al","am","ao","ar","au","aw","åland_islands","az","bb","bd","be","bf","bg","bh","bi","bj","bm","bn","bo","br","bs","bt","bw","by","bz","cd_flag","cf","cg","ch","ci","ck","cl_flag","cm","china","co","cr","cu","cv","cw","curaçao","cy","cz","czechia","germany","dj","dk","dm","do","dz","ec","ee","eg","spain","et","fi","fj","fo","france","ga","united_kingdom","gd","ge","gf","gh","gi","gm","gn","gp","gq","gr","gu","gw","gy","hk","hong_kong_sar_china","hn","hr","ht","hu","id_flag","il","iq","ir","italy","jm","jo","ke","kg","kh","ki","km","kp","south_korea","kw","ky","kz","lb","li","lk","lr","ls","lv","ly","md","me","mg","mk","ml","mn","mo","macao_sar_china","mp","mq","mr","mt","mv","mw","mx","my","nc","ne","ni","nl","no","np","nu","nz","pa","pe","pg","ph","pk","pl","pr","ps","pt","pw","py","qa","re","réunion","ro","rs","russia","rw","sa_flag","sb","sc","sd","se","sg","si","sk","sl","sm","sn","so","sr","sv","sy","sz","eswatini","tc","tf","tg","tj","tl","tm_flag","tn","tt","tv_flag","tz","ua","ug","united_states","uy","uz","vc","ve","vg","vi","vn","vu","ye","za","zm","zw","squared_katakana_koko","circled_ideograph_advantage","circled_ideograph_accept","sunset_over_buildings","earth_globe_americas","new_moon_symbol","waxing_crescent_moon_symbol","first_quarter_moon_symbol","waxing_gibbous_moon_symbol","full_moon_symbol","waning_gibbous_moon_symbol","last_quarter_moon_symbol","waning_crescent_moon_symbol","mostly_sunny","barely_sunny","partly_sunny_rain","rain_cloud","snow_cloud","lightning","wind_blowing_face","ear_of_maize","aubergine","slice_of_pizza","curry_and_rice","fish_cake_with_swirl_design","sake_bottle_and_cup","knife_fork_plate","sparkling_wine","wrapped_present","father_christmas","firework_sparkler","medal","billiards","multiple_musical_notes","tennis_racquet_and_ball","ski_and_ski_boot","basketball_and_hoop","sports_decoration","weight_lifter","golfer","racing_motorcycle","cricket_bat_and_ball","field_hockey_stick_and_ball","ice_hockey_stick_and_puck","table_tennis_paddle_and_ball","table_tennis","house_buildings","derelict_house_building","house_building","automated_teller_machine","waving_white_flag","waving_black_flag","badminton_racquet_and_shuttlecock","badminton_racket_and_shuttlecock","bow_arrow","archery","jar","vase","bactrian_camel","frog_face","hamster_face","wolf_face","bear_face","white_up_pointing_backhand_index","white_down_pointing_backhand_index","white_left_pointing_backhand_index","white_right_pointing_backhand_index","fisted_hand_sign","waving_hand_sign","ok_hand_sign","thumbs_up_sign","thumbs_down_sign","clapping_hands_sign","open_hands_sign","womans_sandal","womans_boots","male_farmer","male_cook","male_student","male_singer","male_artist","male_teacher","male_factory_worker","male_technologist","male_office_worker","male_mechanic","male_scientist","male_astronaut","male_firefighter","male_health_worker","male_judge","male_pilot","female_farmer","woman_famer","female_cook","female_student","female_singer","female_artist","female_teacher","female_factory_worker","female_technologist","female_office_worker","female_mechanic","female_scientist","female_astronaut","female_firefighter","female_health_worker","female_judge","female_pilot","man_and_woman_holding_hands","woman_with_bunny_ears","person_with_blond_hair","blond_hair","man_with_chinese_cap","extraterrestrial_alien","face_massage","electric_light_bulb","sleeping_symbol","collision_symbol","splashing_sweat_symbol","dash_symbol","dizzy_symbol","banknote_with_yen_sign","banknote_with_dollar_sign","banknote_with_euro_sign","banknote_with_pound_sign","chart_with_upwards_trend_and_yen_sign","personal_computer","laptop_computer","optical_disc","public_address_loudspeaker","cheering_megaphone","envelope_with_downwards_arrow_above","mobile_phone_with_rightwards_arrow_at_left","antenna_with_bars","dhikr_beads","rosary_beads","clockwise_rightwards_and_leftwards_open_circle_arrows","clockwise_rightwards_and_leftwards_open_circle_arrows_with_circled_one_overlay","clockwise_downwards_and_upwards_open_circle_arrows","anticlockwise_downwards_and_upwards_open_circle_arrows","low_brightness_symbol","high_brightness_symbol","speaker_with_cancellation_stroke","speaker_with_one_sound_wave","speaker_with_three_sound_waves","open_lock","bell_with_cancellation_stroke","link_symbol","back_with_leftwards_arrow_above","end_with_leftwards_arrow_above","on_with_exclamation_mark_with_left_right_arrow_above","soon_with_rightwards_arrow_above","top_with_upwards_arrow_above","no_one_under_eighteen_symbol","input_symbol_for_latin_capital_letters","input_symbol_for_latin_small_letters","input_symbol_for_symbols","input_symbol_for_latin_letters","electric_torch","six_pointed_star_with_middle_dot","large_red_circle","om_symbol","dove_of_peace","mecca","minaret","domed_roof","mosque_with_domed_roof_and_minaret","temple","jewish","synagogue_with_star_of_david","menorah_with_nine_branches","candelabrum","chanukiah","clock_face_one_oclock","clock_face_two_oclock","clock_face_three_oclock","clock_face_four_oclock","clock_face_five_oclock","clock_face_six_oclock","clock_face_seven_oclock","clock_face_eight_oclock","clock_face_nine_oclock","clock_face_ten_oclock","clock_face_eleven_oclock","clock_face_twelve_oclock","man_in_business_suit_levitating","sleuth_or_spy","lower_left_ballpoint_pen","lower_left_fountain_pen","lower_left_paintbrush","lower_left_crayon","reversed_hand_with_middle_finger_extended","raised_hand_with_part_between_middle_and_ring_fingers","three_button_mouse","frame_with_picture","spiral_note_pad","spiral_calendar_pad","compression","dagger_knife","speaking_head_in_silhouette","silhouette_of_japan","smiling_face_with_open_mouth","smiling_face_with_open_mouth_and_smiling_eyes","smiling_face_with_open_mouth_and_cold_sweat","face_savouring_delicious_food","face_with_cold_sweat","face_throwing_a_kiss","face_with_look_of_triumph","disappointed_but_relieved_face","face_with_open_mouth_and_cold_sweat","grinning_cat_face_with_smiling_eyes","cat_face_with_tears_of_joy","smiling_cat_face_with_open_mouth","cat_face_with_wry_smile","kissing_cat_face_with_closed_eyes","pouting_cat_face","weary_cat_face","slightly_frowning","slightly_smiling","slight_smile","upside_down","flipped_face","eye_roll","rolling_eyes","face_with_no_good_gesture","face_with_ok_gesture","woman_bow","female_bow","woman_bowing_deeply","man_bow","male_bow","man_bowing_deeply","person_bowing_deeply","happy_person_raising_one_hand","person_raising_both_hands_in_celebration","person_with_pouting_face","person_with_folded_hands","recreational_vehicle","construction_sign","police_cars_revolving_light","smoking_symbol","no_smoking_symbol","put_litter_in_its_place_symbol","do_not_litter_symbol","potable_water_symbol","pedestrian","mens_symbol","womens_symbol","sleeping_accommodation","worship_building","worship_place","religious_building","religious_place","octagonal_sign","shopping_trolley","take_off","airplane_arriving","landing","scooter","zipper_mouth","zip_it","sealed_lips","lips_sealed","money_mouth","money_face","sick","ill","thermometer_face","nerd","nerdy","think","thinker","injured","head_bandage","head_bandaged","bandaged","robot_face","bot_face","hugging","hug","the_horns","horns_sign","rock_on","heavy_metal","devil_fingers","hand_with_index_and_middle_fingers_crossed","i_love_you_hand_sign","face_with_cowboy_hat","cowboy","clown","female_facepalm","woman_facepalm","face_palm","mother_christmas","female_shrug","woman_shrug","male_shrug","man_shrug","woman_doing_cartwheel","female_doing_cartwheel","man_doing_cartwheel","male_doing_cartwheel","person_doing_cartwheel","female_juggling","male_juggling","juggling","fencer","woman_wrestlers","female_wrestlers","man_wrestlers","male_wrestlers","wrestlers","woman_water_polo","female_water_polo","man_water_polo","male_water_polo","woman_handball","female_handball","man_handball","male_handball","handball","drum_with_drumsticks","first_place_medal","second_place_medal","third_place_medal","kiwifruit","red_crab","lion_face","cute_lion","timid_lion","unicorn_face","giraffe_face","zebra_face","beard","person_with_headscarf","female_mage","male_mage","female_fairy","male_fairy","female_vampire","male_vampire","female_elf","male_elf","female_genie","male_genie","female_zombie","male_zombie","eject","black_right_pointing_double_triangle_with_vertical_bar","black_left_pointing_double_triangle_with_vertical_bar","black_right_pointing_triangle_with_double_vertical_bar","hourglass_with_flowing_sand","double_vertical_bar","black_square_for_stop","black_circle_for_record","radioactive_sign","biohazard_sign","white_frowning_face","staff_of_aesculapius","scales","high_voltage_sign","medium_white_circle","medium_black_circle","thunder_cloud_and_rain","helmet_with_white_cross","person_with_ball","white_heavy_check_mark","black_question_mark_ornament","white_question_mark_ornament","white_exclamation_mark_ornament","heavy_exclamation_mark_symbol","heavy_heart_exclamation_mark_ornament","white_medium_star","heavy_large_circle","white_smiling_face","white_up_pointing_index","heavy_black_heart","black_sun_with_rays","black_telephone","black_scissors","warning_sign","upwards_black_arrow","downwards_black_arrow","leftwards_black_arrow","black_rightwards_arrow","north_east_arrow","north_west_arrow","south_east_arrow","south_west_arrow","rightwards_arrow_with_hook","arrow_pointing_rightwards_then_curving_downwards","arrow_pointing_rightwards_then_curving_upwards","negative_squared_latin_capital_letter_p","squared_katakana_sa","circled_latin_capital_letter_m","circled_ideograph_secret","circled_ideograph_congratulation","negative_squared_latin_capital_letter_a","negative_squared_latin_capital_letter_b","negative_squared_latin_capital_letter_o","black_universal_recycling_symbol","copyright_sign","registered_sign","trade_mark_sign","black_spade_suit","black_heart_suit","black_club_suit","black_diamond_suit","regional_indicator_symbol_a","regional_indicator_symbol_letter_a","regional_indicator_symbol_b","regional_indicator_symbol_letter_b","regional_indicator_symbol_c","regional_indicator_symbol_letter_c","regional_indicator_symbol_d","regional_indicator_symbol_letter_d","regional_indicator_symbol_e","regional_indicator_symbol_letter_e","regional_indicator_symbol_f","regional_indicator_symbol_letter_f","regional_indicator_symbol_g","regional_indicator_symbol_letter_g","regional_indicator_symbol_h","regional_indicator_symbol_letter_h","regional_indicator_symbol_i","regional_indicator_symbol_letter_i","regional_indicator_symbol_j","regional_indicator_symbol_letter_j","regional_indicator_symbol_k","regional_indicator_symbol_letter_k","regional_indicator_symbol_l","regional_indicator_symbol_letter_l","regional_indicator_symbol_m","regional_indicator_symbol_letter_m","regional_indicator_symbol_n","regional_indicator_symbol_letter_n","regional_indicator_symbol_o","regional_indicator_symbol_letter_o","regional_indicator_symbol_p","regional_indicator_symbol_letter_p","regional_indicator_symbol_q","regional_indicator_symbol_letter_q","regional_indicator_symbol_r","regional_indicator_symbol_letter_r","regional_indicator_symbol_s","regional_indicator_symbol_letter_s","regional_indicator_symbol_t","regional_indicator_symbol_letter_t","regional_indicator_symbol_u","regional_indicator_symbol_letter_u","regional_indicator_symbol_v","regional_indicator_symbol_letter_v","regional_indicator_symbol_w","regional_indicator_symbol_letter_w","regional_indicator_symbol_x","regional_indicator_symbol_letter_x","regional_indicator_symbol_y","regional_indicator_symbol_letter_y","regional_indicator_symbol_z","regional_indicator_symbol_letter_z","helmet_white_cross","helmet_with_white_crosse","sleuth","private_eye","spy","hovering_man","levitating_man","splayed_hand","raised_hand_with_five_fingers_splayed","writing","exclamation_heart","zig_zag_bubble","skull_crossbones","squirrel","dove_peace","black_spider_with_eight_legs","cobweb","spider_web_in_orb_form","st_patrick","chili_pepper","spice","spicy","fork_knife_plate","mont_fuji","campsite","camping_with_tent_and_tree","breach","desert_with_cactus","desert_island_with_palm_tree","crane","building_in_construction_with_crane","multiple_houses","old_house","abandoned_house","picture_frame","painting","gallery","frame_with_picture_or_painting","highway","road","interstate","freeway","bedroom","bed_or_bedroom","couch_lamp","couch","sofa","lounge","hot_weather","temperature","thunder_cloud_rain","white_sun_small_cloud","white_sun_with_small_cloud","white_sun_behind_cloud","white_sun_behind_cloud_rain","white_sun_behind_cloud_with_rain","cloud_rain","cloud_snow","cloud_lightning","cloud_tornado","cloud_with_tornado","mother_nature","blowing_wind","planted_umbrella","umbrella_planted_on_the_ground","snowing_snowman","light_beam","blue_beam","military_decoration","military_medal_with_ribbon","awareness_ribbon","admission_ticket","golf_club","golfer_swinging_a_golf_club","man_golfer","male_golfer","male_golfing","woman_golfer","female_golfer","female_golfing","ice_skating","single_ice_skate","formula_one","f1","motorbike","keycap_asterisk","star_keycap","pc_tower","imac","candle_burning","newspaper_delivery","newspaper_rolled_up_for_delivery","ballot","ballot_bow_with_ballot","multiple_paperclips_linked_together","an_ornate_old_key","scales_of_justice","knife_weapon","funeral","casket","scouts","atom","pranava","aumkara","omkara","christian_cross","kami_no_michi","star_crescent","peace_sign","radioactive_symbol","biohazard_symbol","i_am_a_witness","red_hair","curly_hair","white_hair","bald","nullptn","formatptn","colonptn","cursorptn","transformptn","animationptn","propertiesptn","elementptn","selectorptn","andptn","escapeptn","invalidptn","keyframeptn","plcholdrptn","readonlyptn","beforeptn","afterptn","tailptn","whiteptn","pseudoptn","writingptn","supportsptn","propertyptn","selfptn","pseudofmt","dimensionptn","imgsrcptn","webkit","moz","preserve","plugins","plugged","should","unkwn","keyed","nscopealt","nscope","compile","bracket","comment","parentheses","trail","peak","atrule","pseudo","caret","eof","eol","char","flat","delimited","supports","elements","isolate","third","declare","minify","plugin","getNewAudioOutputDevice","selectedAudioOutputDeviceId","availableAudioOutputDevices","preferredAudioOutputDeviceId","getNewAudioInputDevice","localAudio","availableAudioInputDevices","selectedAudioInputDeviceId","selectedAudioInputDevice","disposed","isEnded","getNewVideoInputDevice","availableVideoInputDevices","selectedVideoInputDeviceId","selectedVideoInputDevice","getNewMediaDevicesAfterDeviceListChanged","isSharingScreen","createLocalTracksAfterDeviceListChanged","audioTrackError","videoTrackError","audioRequested","videoRequested","createAudioTrack","createVideoTrack","rootChild","rr","__export","common_1","GraphRequest_1","debugLogging","defaultVersion","clientOptions","graphClient","GraphRequest","containerType","containers","videoContainer","preferredWidth","preferredHeight","_videoAspectRatio","$container","_onVideoResolutionUpdate","_dominantSpeakerAvatarContainer","removePresenceLabel","unmountComponentAtNode","updateInProcess","newStreamData","scheduleLargeVideoUpdate","isVideoRenderable","showWatermark","overrideAndHide","updateParticipantConnStatusIndication","updatePresenceLabel","_setRemoteConnectionMessage","showRemoteConnectionMessage","widthToUse","participantsPaneWidth","getContainer","AudioLevels","presenceLabelContainer","connStatus","msgKey","msgOptions","translation","translateElement","oldContainer","currentAspectRatio","AudioMixerEffect","mixAudio","_mixAudio","sourceLocalTrack","audioStream","_originalStream","_originalTrack","getTracks","_audioMixer","createAudioMixer","addMediaStream","_mixedMediaStream","_mixedMediaTrack","hBytes","ongoingEffect","setScreenshotCapture","toggleScreenshotCaptureEffect","propIsEnumerable","test1","test2","test3","shouldUseNative","originalModule","consoleTransport","globalTransports","transportIdx","globalOptions","getCallerInfo","callerInfo","fileLocation","logPrefixes","fullLogParts","methods","DEBUG","LOG","WARN","ieee754","createBuffer","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","actual","fromString","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","foundIndex","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","typedArraySupport","_augment","thisStart","thisEnd","thisCopy","targetCopy","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","mul","targetStart","INVALID_BASE64_RE","leadSurrogate","stringtrim","base64clean","dst","rng","msCrypto","rnds8","rnds","byteToHex","bth","_utils","getScrollableArea","scrollableArea","factor","fieldParameter","es6_promise_1","ResponseHandler_1","RequestMethod_1","GraphHelper_1","_headers","urlComponents","oDataQueryParams","otherURLQueryParams","parsePath","headerKey","headerValue","rawPath","endOfHostStrPos","endOfVersionStrPos","queryStrPos","queryParams_1","queryParams_2","urlJoin","urlSegments","pre","cur","buildFullUrl","createQueryString","addCsvQueryParamater","filterStr","skipToken","responseType","_responseType","propertyValue","additionalProperties","allValues","sendRequestAndRouteResponse","Request","RequestMethod","DELETE","Headers","PATCH","GraphHelper","serializeContent","post","POST","put","PUT","del","GET","routeResponseToPromise","routeResponseToCallback","handleFetch","convertResponseType","responseValue","ResponseHandler","configureRequest","getStream","options_1","getDefaultRequestHeaders","putStream","options_2","defaultHeaders_1","SdkVersion","defaultHeaders","queryDictionaryOrString","queryStr","queryKey","queryValue","resContents","buildGraphErrorFromResponseObject","defaultGraphError","ParseError","rawErr","buildGraphErrorFromErrorObject","statusCode","requestId","errObj","innerError","allowedAliasCharacters","startOfURL","commands","audioAvailable","videoAvailable","initCommands","muteMediaType","isLobbyEnabled","onProxyConnectionEvent","toggleAudioMuted","toggleVideoMuted","toggleFilmstrip","currentFlipX","showFeedbackDialog","changeLocalAvatarUrl","dropboxToken","shouldShare","rtmpStreamKey","rtmpBroadcastID","youtubeStreamKey","youtubeBroadcastID","recordingConfig","activeSession","whitelistedConfig","isLocalVideoMuted","sharingParticipantIds","livestreamUrl","sanitizeMouseEvent","clientX","clientY","movementX","movementY","offsetX","offsetY","_sendEvent","sendProxyConnectionEvent","notifyChatUpdated","unreadCount","notifySendingChatMessage","notifyMouseEnter","notifyMouseLeave","notifyMouseMove","notifyVideoQualityChanged","notifyReceivedChatMessage","ts","notifyUserJoined","notifyUserLeft","notifyUserRoleChanged","notifyAvatarChanged","notifyEndpointTextMessageReceived","notifySharingParticipantsChanged","notifyDeviceListChanged","notifyDisplayNameChanged","formattedDisplayName","displayname","notifyEmailChanged","notifyLog","logLevel","notifyConferenceJoined","notifySuspendDetected","notifyAudioMutedStatusChanged","notifyVideoMutedStatusChanged","notifyAudioAvailabilityChanged","notifyVideoAvailabilityChanged","notifyOnStageParticipantChanged","notifyOnCameraError","notifyOnMicError","notifyFeedbackSubmitted","notifyFilmstripDisplayChanged","notifyKickedOut","notifyOnPasswordRequired","notifyScreenSharingStatusChanged","notifyDominantSpeakerChanged","notifySubjectChanged","notifyTileViewChanged","notifyLocalStorageChanged","handRaised","notifyRecordingStatusChanged","\"","dvorak","mac_keypad","BaseIndicator","iconContainerClassName","ButtonImpl","Linkify","componentDecorator","_componentDecorator","decoratedHref","decoratedText","punycode","toASCII","MeetingsList","_onDelete","onItemDelete","_onDeleteKeyPress","meeting","hideURL","rootClassName","_toDateString","_toTimeString","IconTrash","lineHeightDefault","SelectWrapper","justify","_props$alignment","alignment","flexWrap","emptyContext","ExitingContext","childrenToObj","ExitingPersistence","updateState","_ref$appear","appearFromProp","childs","exitThenEnter","childrenAsArray","childrenObj","persistedChildren","exitingChildren","defaultContextValue","currentMap","isAnyPreviousKeysMissingFromCurrent","exitingChildMountedAgain","hasAnyExitingChildMountedAgain","splicedChildren","previousMap","spliceNewElementsIntoPrevious","currentChild","frames","useLayoutEffect","elementRef","_useElementRef","_useElementRef2","setElementRef","newStyles","transitionTimingFunction","transitionProperty","textColors","standard","grey","tealLight","blueLight","greenLight","purpleLight","redLight","yellowLight","greyLight","backgroundColors","linkBackgroundColorHover","focusRingColorObj","hoverBoxShadowColorObj","focusBoxShadowColorObj","linkHoverColorObj","tagColor","getLinkBackgroundColorHover","getBackgroundColor","getThemeColors","isRemovable","chromeColors","backgroundColorHover","textColorHover","getChromeColors","chromeLinkColors","hoverBackgroundColorRemoval","hoverTextColorRemoval","hoverBackgroundColor","hoverTextColor","focusRingColor","getChromeLinkColors","buttonColors","focusBoxShadowColor","hoverBoxShadowColor","getButtonColors","linkHoverColor","contentElement","tagCss","tagHeight","maxTextWidth","maxWidthUnitless","defaultBorderRadius","defaultRoundedBorderRadius","buttonWidthUnitless","defaultMargin","gridSizeValue","defaultTextPadding","textPaddingRight","textMarginLeft","textFontSize","roundedBorderStyles","hasAfterStyles","maxTextWidthUnitless","hasBeforeStyles","marginLeft","textStyles","linkStyles","isRounded","_props$elemBefore","_props$isRemovable","_props$text","_props$color","isLink","_props$linkComponent","Link","resolvableRef","TagStatus","defaultBeforeRemoveAction","InnerRemovableTag","methodRef","payloadRef","Showing","setStatus","_props$mode","removeButtonLabel","_props$onBeforeRemove","onBeforeRemoveAction","_props$onAfterRemoveA","onAfterRemoveAction","onAfterRemoveActionWithAnalytics","pload","handleRemoveComplete","Removed","handleRemoveRequest","removingTag","Removing","showingTag","chromeContainerForLinkStyles","chromeContainerStyles","removeButton","motion","gridSizeUnitless","Expand","TriggerDiv","appearancesMap","mapAppearanceToFieldBase","Trigger","filterValue","handleItemRemove","handleOnChange","handleTriggerClick","inputRefFunction","isFocused","isLoading","tagGroupRefFunction","FieldBaseStateless","isPaddingDisabled","removeButtonText","shouldHideSeparator","filterItems","trimmedValue","selectedValues","unselectedItems","matchingValue","isMatched","getNextFocusable","indexItem","footerIsFocusable","currentItem","footerShouldBeFocused","getPrevFocusable","groupItems","firstItem","convertToGroupType","NoMatch","hasFooter","renderMessageForEmptyList","focusedItemIndex","handleItemSelect","shouldAllowCreateItem","renderedGroups","groupIndex","filteredItems","Group","itemIndex","onActivate","getAllValues","StatelessMultiSelect","_args","groupedItems","inputNode","tagGroup","tagGroupElements","isInsideTagGroup","tagInput","allFilteredItems","matchingElement","getAllVisibleItems","onNewItemCreated","isFooterFocused","handleItemCreate","handleFooterActivate","onSelected","onFilterChange","onRemoved","hasVisibleFooter","isSelectOpen","focusNextItem","focusPreviousItem","removeLatestItem","createNewItemLabel","isFirstChild","shouldFlip","handleKeyboardInteractions","multiple","Droplist","isKeyboardInteractionDisabled","isTriggerDisabled","isTriggerNotTabbable","getPlaceholder","renderFooter","InlineDialogFailure","supportLinkElem","onRetry","MultiSelectAutocomplete","_onFilterChange","_onRetry","_sendQuery","_debounce","_renderError","itemGroups","colorMap","backgroundColorChecked","backgroundColorCheckedHover","backgroundColorCheckedDisabled","backgroundColorUnchecked","backgroundColorUncheckedHover","backgroundColorUncheckedDisabled","borderColorFocus","iconColorChecked","iconColorDisabled","iconColorUnchecked","handleBackgroundColor","handleBackgroundColorChecked","handleBackgroundColorDisabled","globalGridSize","regular","getWidth","paddingUnitless","backgroundClip","getIconSize","InnerToggle","_props$defaultChecked","defaultChecked","providedOnBlur","_props$onChange","providedChange","providedFocus","_props$size","_props$name","_props$value","setChecked","handleBlur","handleFocus","handleChange","shouldChecked","controlProps","toggleStyles","Switch","_RIGHT_WATERMARK_STYLE","Watermarks","showBrandWatermark","SHOW_BRAND_WATERMARK","brandWatermarkLink","BRAND_WATERMARK_LINK","showPoweredBy","SHOW_POWERED_BY","_renderJitsiWatermark","_renderBrandWatermark","_renderPoweredBy","reactElement","_logoLink","_logoUrl","_showJitsiWatermark","logo","customizationFailed","defaultBranding","useDynamicBrandingData","logoClickUrl","logoImageUrl","isValidRoom","DEFAULT_LOGO_URL","JITSI_WATERMARK_LINK","SHOW_JITSI_WATERMARK","defaultJitsiLogoURL","themedBackground","getBackground","xlarge","iconStyles","baseHcmStyles","primaryEqualsSecondaryHcmStyles","secondaryTransparentHcmStyles","_ref$primaryColor","define","symbolObservablePonyfill","makeError","DOMException","writeText","copyClipboardApi","webkitUserSelect","removeAllRanges","selectNode","addRange","execCommand","copyExecCommand","err2","eventEmitter","_connectionPromise","_prevMutePresenterVideo","JitsiMeetScreenObtainer","openDesktopPicker","onSourceChoose","showDesktopPicker","AVATAR_URL","CUSTOM_ROLE","EMAIL","ETHERPAD","notifyTokenAuthFailed","notifyConnectionFailed","sendData","muteLocalAudio","muteLocalVideo","_replaceLocalAudioTrackQueue","_replaceLocalVideoTrackQueue","ConferenceConnector","_resolve","_reject","reconnectTimeout","_handleConferenceJoined","_onConferenceFailed","_handleConferenceFailed","_unsubscribe","NOT_ALLOWED_ERROR","AUTHENTICATION_REQUIRED","AuthHandler","RESERVATION_ERROR","notifyReservationError","GRACEFUL_SHUTDOWN","notifyGracefulShutdown","retrySec","notifyFocusDisconnected","leave","CONFERENCE_MAX_USERS","notifyMaxUsersLimitReached","INCOMPATIBLE_SERVER_VERSIONS","onDisconnected","_connectionFailedHandler","localPresenterVideo","createInitialLocalTracks","disableInitialGUM","requestedAudio","startScreenSharing","PERMISSION_PROMPT_IS_SHOWN","SLOW_GET_USER_MEDIA","_createDesktopTrack","desktopStream","screenSharingError","TIMEOUT","_displayErrorsForCreateInitialLocalTracks","_handleScreenSharingError","createInitialLocalTracksAndConnect","con","startConference","_createRoom","setAudioMuteStatus","setVideoMuteStatus","Recorder","_initDeviceList","_setLocalAudioVideoStreams","getMyUserId","showUI","maybeShowErrorDialog","useAudioStream","_createPresenterStreamEffect","muteVideo","_mutePresenterVideo","listMembersIds","listMembers","getConnectionTimes","getConnectionState","getP2PConnectionState","_startP2P","startP2PSession","_stopP2P","stopP2PSession","isConnectionInterrupted","getLocalDisplayName","generateTranslationHTML","audioLevelsMap","getPeerSSRCAudioLevel","getNumberOfParticipantsWithTracks","getStats","saveLogs","_setupListeners","enqueue","_setSharingScreen","wasSharingScreen","videoSwitchInProgress","_untoggleScreenSharing","didHaveVideo","_stopProxyConnection","enableScreenshotCapture","_mixerEffect","_desktopAudioStream","toggle","_switchToScreenSharing","_desktopSharingSourceDevice","desktopStreams","_turnScreenSharingOff","desktopVideoStream","dekstopAudioStream","createPresenterEffect","isPortrait","DESKTOP_STREAM_CAP","resizeDesktopStream","resizeDesktopForPresenter","desktopResizeConstraints","advancedConstraints","toPrecision","constraint","advanced","applyConstraints","trackHeight","streams","PERMISSION_DENIED","CONSTRAINT_FAILED","SCREENSHARING_GENERIC_ERROR","_onConferenceJoined","PARTCIPANT_FEATURES_CHANGED","addUser","updateUserStatus","newLvl","debugAudioLevels","LAST_N_ENDPOINTS_CHANGED","leavingIds","enteringIds","handleLastNEndpoints","P2P_STATUS","jitsiConference","CONNECTION_INTERRUPTED","CONNECTION_RESTORED","sender","eventData","senderInfo","_jid","_id","initEtherpad","START_MUTED_POLICY_CHANGED","allSettled","notifyInitiallyMuted","videoWasMuted","_updateVideoDeviceId","audioWasMuted","hasDefaultMicChanged","_realDeviceId","_updateAudioDeviceId","displayedUserId","onSuspendDetected","deviceChangeListener","DEVICE_LIST_CHANGED","initConference","disableShortcuts","setDeviceListChangeHandler","_onDeviceListChanged","onAvailableDevicesChanged","mediaDeviceHelper","requestedInput","setAudioOutputPromise","stopStream","newAvailDevices","newAudioDevices","oldAudioDevices","muteSyncPromises","updateAudioIconEnabled","audioMediaDevices","updateVideoIconEnabled","videoMediaDevices","requestFeedbackPromise","leaveRoomAndDisconnect","formattedEmail","formattedUrl","nickname","formattedNickname","_proxyConnection","ProxyConnectionService","jitsiConnection","convertVideoToDesktop","onConnectionClosed","onSendMessage","peerJid","onRemoteStream","processMessage","SpecialEventType","IdentifyOperation","LogLevel","Status","isBrowserEnv","fromHttpCode","Success","RateLimit","PayloadTooLarge","Invalid","Failed","Unknown","Skipped","fallbackGlobalObject","getGlobalObject","globalNamespace","__AMPLITUDE__","getGlobalAmplitudeNamespace","PREFIX","_logLevel","disable","Warn","Verbose","Constants","UTF8","utftext","c1","c2","Base64","_keyStr","encode","btoa","atob","_encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","decode","_decode","logLevels","DISABLE","_log","_truncateValue","validateProperties","propsType","keyType","validatePropertyValue","invalidValueTypes","valueType","arrayCopy","elemType","validateGroupName","groupName","groupNameType","utils","logLevelName","groupsType","expectedType","getLocation","base64Id","expirationDays","toUTCString","secure","sameSite","baseCookie","cookieName","_areCookiesEnabled","getHost","topDomain","cname","_domainSpecific","nameEq","Cookie","stored","setRaw","getRaw","windowLocalStorageAvailable","globalStorage","attrKey","addBehavior","XMLDocument","_storageOptionExists","ampLocalStorage","cookieStorage","storage","getStorage","storageOptionExists","MetadataStorage","storageKey","disableCookies","cookieDomain","writableTopDomain","disableCookieStorage","optOut","lastEventTime","identifyId","sequenceNumber","getCookieStorageKey","Identify","userPropertiesOperations","_addOperation","clearAll","setOnce","preInsert","postInsert","operation","commonjsGlobal","createCommonjsModule","safeAdd","lsw","md5cmn","md5ff","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","rstr2binl","length8","rstr2hex","str2rstrUTF8","rawMD5","rstrMD5","rawHMACMD5","bkey","ipad","opad","rstrHMACMD5","objectAssign","arrayFormat","formatter","encoderForArrayFormat","val2","XDomainRequest","xdr","ontimeout","onprogress","setHeaders","Revenue","_price","_productId","_quantity","_revenueType","_properties","setProductId","productId","setQuantity","quantity","setPrice","price","setRevenueType","revenueType","setEventProperties","eventProperties","_isValidRevenue","_toJSONObject","uaParser","undefined$1","MODEL","NAME","TYPE","VENDOR","MOBILE","TABLET","SMARTTV","extensions","mergedRegexes","str1","str2","lowerize","major","mapper","rgx","maps","oldsafari","amazon","sprint","windows","cpu","UAParser","uastring","rgxmap","getCPU","architecture","getDevice","setUA","BROWSER","MAJOR","CPU","ARCHITECTURE","DEVICE","CONSOLE","WEARABLE","EMBEDDED","ENGINE","jQuery","Zepto","parser","DEFAULT_OPTIONS","apiEndpoint","batchEvents","cookieExpiration","sameSiteCookie","cookieForceUpgrade","deferInitialization","deviceIdFromUrlParam","eventUploadPeriodMillis","eventUploadThreshold","forceHttps","includeFbclid","includeGclid","includeUtm","logAttributionCapturedEvent","savedMaxCount","saveEvents","saveParamsReferrerOncePerSession","secureCookie","sessionTimeout","trackingOptions","city","carrier","device_manufacturer","device_model","dma","ip_address","os_name","os_version","version_name","unsetParamsReferrerOnNewSession","unsentKey","unsentIdentifyKey","uploadBatchSize","AmplitudeClient","instanceName","_instanceName","_unsentEvents","_unsentIdentifys","_q","_sending","_updateScheduled","_onInit","_eventId","_identifyId","_lastEventTime","_newSession","_sequenceNumber","_sessionId","_userAgent","apiKey","opt_userId","opt_config","opt_callback","_parseConfig","Prototype","augmentedWindow","augmentedArray","prototypeJsFix","_storageSuffix","_storageSuffixV5","_oldCookiename","_unsentKey","_unsentIdentifyKey","_cookieName","_metadataStorage","hasOldCookie","hasNewCookie","_useOldCookie","hasCookie","_deferInitialization","_generateApiPropertiesTrackingConfig","_apiPropertiesTrackingOptions","tracking_options","_upgradeCookieData","_loadCookieData","_pendingReadStorage","_loadSavedUnsentEvents","storedDeviceId","_getInitialDeviceId","_unsetUTMParams","_trackParamsAndReferrer","_validateUnsentEventQueue","_saveCookieData","_sendEventsIfReady","initFromStorage","runQueuedFunctions","deleteLowerLevelDomainCookies","cookieHost","hostParts","cookieHostParts","deleteDomain","configDeviceId","_getDeviceIdFromUrlParam","_getUrlParams","userProperties","user_properties","event_properties","utmProperties","referrerProperties","gclidProperties","fbclidProperties","_initUtmData","_saveReferrer","_getReferrer","_saveGclid","_saveFbclid","attributionProperties","freeFormObjectKeys","parseValidateAndLoad","inputValue","_apiKeySet","savedUnsentEventsString","_getFromStorage","unsentEvents","_parseSavedUnsentEventsString","_setInStorage","isNewSession","onInit","nextEventId","nextIdentifyId","nextSequenceNumber","_unsentCount","sendEvents","cookieData","_loadCookieDataProps","queryParams","cookieParams","rawCookie","fetchParam","utmSource","utmMedium","utmCampaign","utmTerm","utmContent","utmData","addIfNotNull","queryName","_sendParamsReferrerUserProperties","identify","referrer","gclid","fbclid","_getReferringDomain","referrerInfo","referring_domain","serializedUnsentEvents","serializedIdentifys","unsentIdentify","setDomain","_shouldDeferCall","setGroup","groupType","_logEvent","setOptOut","setSessionId","resetSessionId","regenerateDeviceId","setDeviceId","sanitized","clearUserProperties","_convertProxyObjectToRealObject","identify_obj","groupIdentify","group_type","group_name","setVersionName","eventType","apiProperties","groupProperties","eventTime","osName","osVersion","deviceModel","device_id","event_id","session_id","event_type","_shouldTrackField","api_properties","library","sequence_number","group_properties","user_agent","_limitEventsQueued","fields","logEventWithTimestamp","logEventWithGroups","_isNumber","logRevenueV2","revenue_obj","logRevenue","special","removeEvents","maxEventId","maxIdentifyId","_removeEvents","eventQueue","maxId","filteredEvents","unsentEvent","numEvents","mergedEvents","_mergeEventsAndIdentifys","eventsToSend","uploadTime","upload_time","eventIndex","identifyIndex","noIdentifys","noEvents","setGlobalUserProperties","__VERSION__","_initializationDeferred","enableTracking","Amplitude","_instances","old","newInstance","_iq","createThunkMiddleware","extraArgument","thunk","withExtraArgument","main","img1","img2","isPixelData","a32","b32","identical","diffMask","drawGrayPixel","maxDelta","aaR","aaG","aaB","aaColor","diffR","diffG","diffB","diffColor","colorDelta","includeAA","antialiased","drawPixel","BYTES_PER_ELEMENT","x0","y0","minX","minY","maxX","maxY","zeroes","delta","hasManySiblings","yOnly","r1","g1","b1","a1","r2","g2","b2","a2","blend","rgb2y","rgb2i","rgb2q","_scriptDir","currentScript","readyPromiseResolve","readyPromiseReject","Module","moduleOverrides","arguments_","thisProgram","quit_","toThrow","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_SHELL","importScripts","read_","readAsync","readBinary","nodeFS","nodePath","scriptDirectory","locateFile","__dirname","binary","assert","ExitStatus","readbuffer","scriptArgs","quit","print","printErr","wasmBinary","noExitRuntime","wasmMemory","WebAssembly","ABORT","HEAP8","HEAP32","UTF8Decoder","TextDecoder","UTF8ArrayToString","heap","maxBytesToRead","endIdx","endPtr","u0","u1","u2","UTF8ToString","ptr","writeAsciiToMemory","dontAddNull","alignUp","updateGlobalBufferAndViews","Int8Array","Int16Array","Int32Array","Float64Array","wasmTable","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","preRun","addOnPreRun","callRuntimeCallbacks","initRuntime","preMain","exitRuntime","postRun","addOnPostRun","___wasm_call_ctors","runDependencies","runDependencyWatcher","dependenciesFulfilled","addRunDependency","removeRunDependency","RuntimeError","hasPrefix","dataURIPrefix","isDataURI","fileURIPrefix","isFileURI","_emscripten_get_now","wasmBinaryFile","getBinary","file","getBinaryPromise","createWasm","asmLibraryArg","receiveInstance","receiveInstantiatedSource","instantiateArrayBuffer","instantiate","instantiateStreaming","callbacks","_abort","dateNow","_emscripten_get_now_is_monotonic","setErrNo","___errno_location","_clock_gettime","clk_id","tp","_dlopen","_dlsym","_emscripten_memcpy_big","dest","copyWithin","_emscripten_get_heap_size","emscripten_realloc_buffer","grow","_emscripten_resize_heap","requestedSize","oldSize","cutDown","overGrownHeapSize","_emscripten_thread_sleep","msecs","ENV","getExecutableName","getEnvStrings","SYSCALLS","mappings","printChar","curr","varargs","getStr","get64","_environ_get","__environ","environ_buf","bufSize","_environ_sizes_get","penviron_count","penviron_buf_size","_exit","_fd_close","fd","_fd_seek","offset_low","offset_high","whence","newOffset","_fd_write","iov","iovcnt","pnum","_pthread_create","_pthread_join","_sysconf","maxHeapSize","calledRun","doRun","implicit","runCaller","hyphenate","msPattern","superPropBase","_get","desc","CrossIcon","ChevronUpIcon","EditorInfoIcon","bind_1","bind_all_1","hasElementType","Element","hasMap","hasSet","hasArrayBuffer","equal","$$typeof","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","extra","ucs2encode","digitToBasic","digit","adapt","numPoints","baseMinusTMin","basic","oldi","baseMinusT","inputLength","bias","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","_Linkify","_Linkify2","_base","CheckboxIcon","RadioIcon","ExportedAnalyticsContext","ContextTypes","AnalyticsContext","getAnalyticsContext","_this$context$getAtla","_this$context$getAtla2","getAnalyticsEventHandlers","timeoutDuration","longerTimeoutBrowsers","scheduled","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getParentNode","nodeName","getScrollParent","_getStyleComputedProp","overflowX","overflowY","getReferenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","rect","modifier","getBordersSize","axis","sideA","sideB","getWindowSizes","getClientRect","offsets","getBoundingClientRect","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","computeAutoPlacement","refRect","rects","sortedAreas","filteredAreas","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","check","runModifiers","ends","isDestroyed","arrowStyles","flipped","positionFixed","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","isNumeric","setStyles","isModifierRequired","requestingName","requestedName","requesting","_requesting","requested","placements","validPlacements","clockwise","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","escapeWithReference","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","jquery","Utils","PopperUtils","_NodeResolver","EditorCloseIcon","EditorDoneIcon","generateUID","_sendRecorderInfo","_queue","_currentTask","_onTaskComplete","taskFunction","_executeNext","Table","INITIAL_INITIAL_MEMORY","Memory","DYNAMICTOP_PTR","instantiateAsync","StarFilledIcon","StarIcon","readynessCheck","targetWindow","windowForEventListening","allowedOrigin","sendBuffer","listenBuffer","listenersForMethod","listenBufferForMethod","readyCheckID","CheckCircleIcon","InfoIcon","enums_1","time_zone_map_1","findIana","territory","Territory","itemName","windowsName","itemTerritory","iana","findOneIana","elementId","shadowElement","getElementsByClassName","_updateLargeVideoShadow","int","AUDIO_LEVEL_PRIMARY_COLOR","AUDIO_LEVEL_SECONDARY_COLOR","_sister2","_loadYouTubeIframeApi2","_YouTubePlayer2","youtubeIframeAPI","maybeElementId","strictState","proxyEvents","playerAPIReady","YT","Player","playerApi","promisifyPlayer","etherpadManager","UIListeners","toggleEtherpad","showToolbar","registerListeners","bindEvents","unbindEvents","etherpad_base","EtherpadManager","openSharedDocumentOnJoin","getSharedDocumentManager","reduxState","dockToolbar","refreshAvatarDisplay","stropheErrorMsg","bubbleIframeMouseMove","existingOnMouseMove","onmousemove","boundingClientRect","initMouseEvent","detail","Etherpad","frameBorder","scrolling","doc","contentDocument","getElementsByName","$iframe","fadeIn","bodyBackground","fadeOut","openEtherpad","matching","time_estimates","zxcvbn","user_inputs","attack_times","sanitized_inputs","set_user_input_dictionary","omnimatch","calc_time","estimate_attack_times","get_feedback","createBreakpoints","breakpoints","_breakpoints$values","lg","xl","_breakpoints$unit","_breakpoints$step","between","down","upperbound","createMixins","_toolbar","gutters","formatMuiErrorMessage","50","200","300","400","500","600","700","800","900","A100","A200","A400","A700","decomposeColor","hexToRgb","recomposeColor","getLuminance","rgb","hslToRgb","darken","coefficient","lighten","hint","paper","hoverOpacity","selectedOpacity","disabledBackground","disabledOpacity","focusOpacity","activatedOpacity","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","createPalette","_palette$primary","_palette$secondary","_palette$error","_palette$warning","_palette$info","_palette$success","_palette$type","_palette$contrastThre","contrastThreshold","_palette$tonalOffset","getContrastText","foreground","lumA","lumB","getContrastRatio","augmentColor","mainShade","lightShade","darkShade","contrastText","deepmerge","caseAllCaps","textTransform","createTypography","_ref$fontFamily","_ref$fontSize","_ref$fontWeightLight","fontWeightLight","_ref$fontWeightRegula","fontWeightRegular","_ref$fontWeightMedium","fontWeightMedium","_ref$fontWeightBold","fontWeightBold","_ref$htmlFontSize","htmlFontSize","allVariants","pxToRem2","pxToRem","coef","buildVariant","letterSpacing","casing","h5","h6","subtitle1","subtitle2","body1","body2","caption","overline","createShadow","defaultBreakpoints","directions","marginX","marginY","paddingX","paddingY","getCssProperties","_prop$split","_prop$split2","spacingKeys","createUnarySpacing","themeSpacing","getStyleFromPropValue","cssProperties","transformer","propValue","cssProperty","transformed","styleFromPropValue","themeBreakpoints","_themeBreakpoints","breakpoint","handleBreakpoints","filterProps","createSpacing","spacingInput","mui","argument","easing","sharp","shortest","shorter","short","complex","enteringScreen","leavingScreen","formatMs","_options$duration","durationOption","_options$easing","easingOption","_options$delay","animatedProp","getAutoHeightDuration","mobileStepper","speedDial","appBar","drawer","snackbar","_options$breakpoints","breakpointsInput","_options$mixins","mixinsInput","_options$palette","paletteInput","_options$typography","typographyInput","muiTheme","overrides","shadows","transitions","DesktopSourcePreview","_onDoubleClick","displayClasses","onDoubleClick","DesktopPickerPane","_onShareAudioCheck","onShareAudioChecked","selectedSourceId","previews","checkBox","THUMBNAIL_SIZE","TAB_LABELS","VALID_TYPES","DesktopPicker","_getValidTypes","screenShareAudio","selectedSource","_onCloseModal","_onPreviewClick","_onShareAudioChecked","_updateSources","_startPolling","_stopPolling","_getSelectedSource","_selectedTabType","_poller","capturerOptions","JitsiMeetElectron","obtainDesktopStreams","sourcesByType","_seperateSourcesByType","obtainDesktopSources","focusManagerContext","selectionCacheContext","clickManagerContext","DropdownItemClickManager","onItemClicked","itemClicked","handleItemClicked","DropdownItemFocusManager","itemId","itemNode","registeredItems","focusedItemId","matchingIndex","handleItemRegistered","_assertThisInitialize","nextItemIndex","itemFocused","handleItemFocused","registerItem","deregisterItem","handleItemDeregistered","updateItem","handleItemUpdated","handleKeyboard","itemList","DropdownItemSelectionCache","lastCacheUpdate","newGroupSelections","newSelectedItems","isItemSelected","itemsInGroup","itemSelectionsChanged","handleItemSelectionsChanged","hasItemAlreadyHadDefaultSelectedApplied","alreadyDefaultedItems","markItemAsDefaultApplied","autoFocusDropdownItems","isUsingDeprecatedAPI","domItemsList","focusFirstItem","prevProp","latestAvailable","sourceOfIsOpen","focusItem","focusedItem","isDroplistItem","thisDom","isTargetChildItem","insideTriggerContent","triggerProps","defaultButtonProps","triggerContent","triggerContainer","elemAfter","renderItems","domMenuContainer","renderGroups","dropdownListPositioned","onPositioned","menuContainer","handleClickDeprecated","isMenuFixed","shouldAllowMultilineItems","isDeprecated","deprecatedProps","handleKeyboardInteractionsDeprecated","handleKeyboardInteractionForClosed","handleOpenChange","renderTrigger","onDroplistPositioned","renderDeprecated","WidthConstrainer","renderDropdownItems","getBackgroundColorFocus","getBackgroundColorHover","getBorderColor","getBorderColorFocus","grid","lineHeightBase","lineHeightCompact","heightBase","heightCompact","horizontalPadding","getDisabledColor","ChildWrapper","paddingDisabled","getMaxWidth","ContentWrapper","SpinnerParent","ValidationElement","shouldReset","onDialogBlur","onDialogClick","onDialogFocus","onContentBlur","onContentClick","onContentFocus","onBlurCapture","onFocusCapture","JitsiStreamPresenterEffect","videoDiv","_canvas","_ctx","_desktopElement","_frameRate","_onVideoFrameTimer","_renderVideo","_desktopStream","beginPath","lineWidth","strokeStyle","_videoFrameTimerWorker","noModule","pushStack","prevObject","even","grep","odd","expando","isEmptyObject","globalEval","makeArray","inArray","guid","support","ue","V","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","needsContext","te","oe","qsa","xe","cacheLength","le","ce","fe","attrHandle","sourceIndex","he","isXML","namespaceURI","setDocument","createComment","getById","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","sortDetached","specified","uniqueSort","detectDuplicates","sortStable","getText","nodeValue","createPseudo","preFilter","lastChild","uniqueID","pseudos","setFilters","not","hasFocus","selectedIndex","checkbox","we","Te","Ce","Ee","filters","tokenize","expr","unique","isXMLDoc","escapeSelector","parseHTML","closest","prevAll","addBack","parentsUntil","nextAll","nextUntil","prevUntil","siblings","fail","Callbacks","stopOnFalse","memory","fireWith","Deferred","always","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","when","readyException","readyWait","doScroll","access","hasData","removeData","_removeData","dequeue","_queueHooks","clearQueue","composed","getRootNode","cssNumber","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","td","tbody","tfoot","colgroup","optgroup","htmlPrefilter","Se","Ae","isTrigger","delegateType","Event","triggered","bindType","origType","delegateCount","setup","teardown","removeEvent","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","handleObj","postDispatch","addProp","originalEvent","noBubble","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","changedTouches","eventPhase","charCode","pointerId","pointerType","targetTouches","touches","mouseenter","mouseleave","pointerenter","pointerleave","Ne","De","je","qe","Le","He","Oe","Pe","_evalUrl","Re","cleanData","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","Me","Ie","We","Fe","Be","pixelBoxStyles","$e","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","ze","Ue","Xe","cssProps","Ve","Ge","Ye","Qe","Je","Ke","Ze","getClientRects","cssHooks","gridArea","Tween","propHooks","fx","linear","cos","PI","nt","rt","ot","interval","ut","ct","ft","tweeners","prefilters","tweens","specialEasing","originalProperties","originalOptions","createTween","timer","Animation","tweener","unqueued","prefilter","speed","speeds","finish","timers","slideDown","slideUp","slideToggle","fadeToggle","slow","fast","checkOn","optSelected","radioValue","dt","removeAttr","attrHooks","vt","yt","removeProp","propFix","removeClass","toggleClass","hasClass","xt","valHooks","focusin","wt","parentWindow","simulate","triggerHandler","Tt","Ct","Et","parseXML","DOMParser","parseFromString","St","kt","At","Nt","Dt","serializeArray","jt","qt","Lt","Ht","Ot","Pt","Rt","Mt","It","Wt","Ft","Bt","dataTypes","$t","ajaxSettings","flatOptions","lastModified","etag","processData","contentType","accepts","xml","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","getResponseHeader","getAllResponseHeaders","mimeType","dataType","traditional","hasContent","ifModified","beforeSend","dataFilter","statusText","getScript","wrapAll","wrapInner","_t","0","1223","zt","cors","xhrFields","onabort","script","scriptAttrs","charset","scriptCharset","Ut","Xt","Vt","jsonp","jsonpCallback","createHTMLDocument","implementation","animated","setOffset","using","Height","Width","unbind","undelegate","Gt","holdReady","parseJSON","isWindow","Yt","Qt","onInitSuccess","onInitFail","olmInitPromise","olm_exports","randomBytes","OLM_OPTIONS","onRuntimeInitialized","_olm_error","PRIVATE_KEY_LENGTH","_olm_pk_private_key_length","onAbort","readFileSync","ra","va","wa","xa","ya","Aa","maximum","Ba","Ca","Da","Ea","Ga","INITIAL_MEMORY","Ha","Nb","Mb","dynCall_v","dynCall_vi","HEAP16","HEAPU16","HEAPU32","HEAPF64","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","preloadedImages","preloadedAudios","Ra","Sa","Ua","Va","table","asm","monitorRunDependencies","instantiateWasm","_olm_pk_encryption_last_error","_olm_pk_encryption_size","_olm_pk_encryption","_olm_clear_pk_encryption","_olm_pk_encryption_set_recipient_key","_olm_pk_key_length","_olm_pk_ciphertext_length","_olm_pk_mac_length","_olm_pk_encrypt_random_length","_olm_pk_encrypt","_olm_pk_decryption_last_error","_olm_pk_decryption_size","_olm_pk_decryption","_olm_clear_pk_decryption","_olm_pk_generate_key_random_length","_olm_pk_key_from_private","_olm_pk_generate_key","_olm_pickle_pk_decryption_length","_olm_pickle_pk_decryption","_olm_unpickle_pk_decryption","_olm_pk_max_plaintext_length","_olm_pk_decrypt","_olm_pk_get_private_key","_olm_pk_signing_size","_olm_pk_signing","_olm_pk_signing_last_error","_olm_clear_pk_signing","_olm_pk_signing_seed_length","_olm_pk_signing_public_key_length","_olm_pk_signing_key_from_seed","_olm_pk_signature_length","_olm_pk_sign","_olm_get_library_version","_olm_account_last_error","_olm_session_last_error","_olm_utility_last_error","_olm_account_size","_olm_session_size","_olm_utility_size","_olm_account","_olm_session","_olm_utility","_olm_clear_account","_olm_clear_session","_olm_clear_utility","_olm_pickle_account_length","_olm_pickle_session_length","_olm_pickle_account","_olm_pickle_session","_olm_unpickle_account","_olm_unpickle_session","_olm_create_account_random_length","_olm_create_account","_olm_account_identity_keys_length","_olm_account_identity_keys","_olm_account_signature_length","_olm_account_sign","_olm_account_one_time_keys_length","_olm_account_one_time_keys","_olm_account_mark_keys_as_published","_olm_account_max_number_of_one_time_keys","_olm_account_generate_one_time_keys_random_length","_olm_account_generate_one_time_keys","_olm_account_generate_fallback_key_random_length","_olm_account_generate_fallback_key","_olm_account_fallback_key_length","_olm_account_fallback_key","_olm_create_outbound_session_random_length","_olm_create_outbound_session","ta","_olm_create_inbound_session","_olm_create_inbound_session_from","_olm_session_id_length","_olm_session_id","_olm_session_has_received_message","_olm_session_describe","_olm_matches_inbound_session","_olm_matches_inbound_session_from","_olm_remove_one_time_keys","_olm_encrypt_message_type","_olm_encrypt_random_length","_olm_encrypt_message_length","Fa","_olm_encrypt","_olm_decrypt_max_plaintext_length","_olm_decrypt","_olm_sha256_length","_olm_sha256","_olm_ed25519_verify","_olm_inbound_group_session_size","_olm_inbound_group_session","_olm_clear_inbound_group_session","_olm_inbound_group_session_last_error","_olm_init_inbound_group_session","_olm_import_inbound_group_session","_olm_pickle_inbound_group_session_length","_olm_pickle_inbound_group_session","Ta","_olm_unpickle_inbound_group_session","_olm_group_decrypt_max_plaintext_length","_olm_group_decrypt","Wa","_olm_inbound_group_session_id_length","Xa","_olm_inbound_group_session_id","Ya","_olm_inbound_group_session_first_known_index","Za","_olm_inbound_group_session_is_verified","_olm_export_inbound_group_session_length","$a","_olm_export_inbound_group_session","_olm_sas_last_error","_olm_sas_size","_olm_sas","db","_olm_clear_sas","eb","_olm_create_sas_random_length","fb","_olm_create_sas","_olm_sas_pubkey_length","hb","_olm_sas_get_pubkey","ib","_olm_sas_set_their_key","jb","_olm_sas_is_their_key_set","kb","_olm_sas_generate_bytes","_olm_sas_mac_length","mb","_olm_sas_calculate_mac","nb","_olm_sas_calculate_mac_long_kdf","ob","_olm_outbound_group_session_size","pb","_olm_outbound_group_session","qb","_olm_clear_outbound_group_session","rb","_olm_outbound_group_session_last_error","_olm_pickle_outbound_group_session_length","tb","_olm_pickle_outbound_group_session","ub","_olm_unpickle_outbound_group_session","vb","_olm_init_outbound_group_session_random_length","wb","_olm_init_outbound_group_session","xb","_olm_group_encrypt_message_length","yb","_olm_group_encrypt","zb","_olm_outbound_group_session_id_length","Ab","_olm_outbound_group_session_id","Bb","_olm_outbound_group_session_message_index","Cb","_olm_outbound_group_session_key_length","Db","_olm_outbound_group_session_key","Eb","Fb","Gb","stackSave","Hb","stackRestore","Ib","stackAlloc","Jb","ALLOC_STACK","preInit","Lb","Kb","pickle","unpickle","encrypt","session_key","message_index","OutboundGroupSession","import_session","decrypt","plaintext","first_known_index","export_session","InboundGroupSession","set_recipient_key","ciphertext","mac","ephemeral","init_with_private_key","generate_key","get_private_key","init_with_seed","generate_seed","get_pubkey","set_their_key","is_their_key_set","generate_bytes","calculate_mac","calculate_mac_long_kdf","identity_keys","one_time_keys","mark_keys_as_published","max_number_of_one_time_keys","generate_one_time_keys","remove_one_time_keys","generate_fallback_key","fallback_key","create_outbound","create_inbound","create_inbound_from","has_received_message","matches_inbound","matches_inbound_from","sha256","ed25519_verify","Account","Session","Utility","PkEncryption","PkDecryption","PkSigning","SAS","get_library_version","Olm","tel","datetime","visibilityState","isContentEditable","hasAttribute","applyFocusVisiblePolyfill","CustomEvent","initCustomEvent","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","isReactComponent","isPureReactComponent","__self","__source","_owner","keyPrefix","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","lazy","_ctor","_result","useContext","useImperativeHandle","useDebugValue","useMemo","useReducer","Profiler","StrictMode","Suspense","createFactory","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propFullName","getShim","ReactPropTypes","arrayOf","exact","checkPropTypes","PropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","extractEvents","eventTypes","phasedRegistrationNames","registrationName","dependencies","_dispatchListeners","_dispatchInstances","isPersistent","release","injectEventPluginOrder","injectEventPluginsByName","stateNode","_debugOwner","_debugSource","lineNumber","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","sanitizeURL","setAttributeNS","_valueTracker","setValue","stopTracking","_wrapperState","initialChecked","xlinkHref","Ob","Pb","Qb","Rb","Sb","MSApp","execUnsafeLocalFunction","Tb","Ub","Vb","animationend","animationiteration","animationstart","transitionend","Wb","Xb","Yb","Zb","$b","ac","alternate","effectTag","memoizedState","dehydrated","gc","ic","sibling","hc","jc","kc","lc","mc","oc","pc","qc","rc","zc","blockedOn","topLevelType","eventSystemFlags","nativeEvent","Ac","Bc","Cc","Ec","Fc","unstable_runWithPriority","hydrate","containerInfo","Gc","Hc","Ic","Jc","Kc","unstable_scheduleCallback","unstable_NormalPriority","Lc","Mc","srcElement","correspondingUseElement","Nc","Oc","dispatchConfig","Pc","_targetInst","Qc","Rc","Sc","Tc","Uc","Interface","Wc","eventPool","Xc","destructor","Vc","getPooled","cancelBubble","persist","isTrusted","Yc","elapsedTime","pseudoElement","Zc","clipboardData","$c","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","144","145","ed","Alt","Control","Meta","Shift","getModifierState","hd","jd","kd","ld","nd","fromElement","od","pressure","tangentialPressure","tiltX","tiltY","twist","isPrimary","pd","dataTransfer","qd","rd","wheelDeltaX","wheelDeltaY","wheelDelta","deltaZ","deltaMode","ud","vd","wd","yd","zd","Ad","Bd","Cd","Dd","bubbled","captured","eventPriority","Ed","getEventPriority","Fd","unstable_UserBlockingPriority","Gd","Hd","Jd","Kd","targetInst","ancestors","Ld","Md","Nd","Od","Pd","Qd","Dc","Rd","Sd","xc","yc","Td","lineClamp","Ud","Vd","Wd","Xd","menuitem","keygen","meta","wbr","Yd","Zd","$d","HTMLIFrameElement","contentEditable","previousSibling","beforeInput","compositionEnd","compositionStart","compositionUpdate","detachEvent","df","ef","ff","hf","lf","jf","_isInputEventSupported","kf","mouseEnter","mouseLeave","pointerEnter","pointerLeave","mf","of","pf","qf","rf","sf","uf","vf","wf","xf","selectionStart","selectionEnd","anchorNode","anchorOffset","focusNode","focusOffset","yf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","Af","Bf","Cf","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","unstable_cancelCallback","Of","unstable_shouldYield","Pf","unstable_requestPaint","Qf","unstable_now","Rf","unstable_getCurrentPriorityLevel","Sf","unstable_ImmediatePriority","Tf","Uf","Vf","unstable_LowPriority","Wf","unstable_IdlePriority","Xf","Yf","Zf","$f","dg","fg","hg","ig","jg","og","qg","rg","childExpirationTime","firstContext","expirationTime","wg","xg","observedBits","responders","yg","zg","baseState","firstUpdate","lastUpdate","firstCapturedUpdate","lastCapturedUpdate","firstEffect","lastEffect","firstCapturedEffect","lastCapturedEffect","Ag","Bg","suspenseConfig","nextEffect","Cg","Dg","updateQueue","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Sg","_reactInternalFiber","Pg","Qg","Rg","Tg","Ug","Vg","UNSAFE_componentWillReceiveProps","Wg","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","Xg","Yg","_stringRef","Zg","$g","ah","dh","eh","fh","ih","jh","lh","mh","nh","oh","qh","memoizedProps","revealOrder","rh","responder","sh","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","lastRenderedReducer","lastRenderedState","eagerReducer","eagerState","Rh","Sh","Th","Uh","deps","Vh","Wh","Xh","Yh","Zh","$h","readContext","useResponder","useDeferredValue","useTransition","unstable_next","di","ei","pendingProps","ji","mi","oi","qi","ri","ti","ui","UNSAFE_componentWillUpdate","componentWillUpdate","wi","pendingContext","Hi","Ji","Ki","xi","retryTime","yi","fallback","unstable_avoidThisFallback","zi","Ai","isBackwards","rendering","tailExpiration","tailMode","Bi","Ci","Li","Mi","Ni","Oi","WeakSet","Pi","Si","Ri","Ti","Ui","__reactInternalSnapshotBeforeUpdate","Vi","Wi","Qi","Xi","Yi","Zi","$i","_reactRootContainer","aj","wasMultiple","cj","ej","gj","hj","ij","componentDidCatch","jj","componentStack","gk","kj","lj","mj","wj","xj","yj","zj","Aj","Bj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","lastExpiredTime","Pj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Qj","Rj","Sj","Tj","Uj","Vj","Wj","finishedWork","finishedExpirationTime","lastSuspendedTime","Xj","Yj","busyMinDurationMs","busyDelayMs","Zj","bk","pingCache","ek","fk","createElementNS","ik","firstSuspendedTime","rangeCount","focusedElem","selectionRange","jk","Dh","dc","Eh","Fh","xk","Di","Ei","Fi","xd","Gi","kk","nk","unstable_observedBits","pendingChildren","qk","rk","tk","vk","_internalRoot","wk","zk","yk","Ak","Bk","unmount","ak","Ck","unstable_renderSubtreeIntoContainer","unstable_createPortal","unstable_batchedUpdates","flushSync","Events","findFiberByHostInstance","bundleType","rendererPackageName","supportsFiber","onCommitFiberRoot","onCommitFiberUnmount","overrideHookState","overrideProps","setSuspenseHandler","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","Dk","Ek","MessageChannel","unstable_forceFrameRate","port2","port1","sortIndex","priorityLevel","unstable_wrapCallback","unstable_continueExecution","unstable_pauseExecution","unstable_getFirstCallbackNode","unstable_Profiling","logStorage","stringifyObjects","storeInterval","maxEntryLength","storeLogsIntervalID","totalLen","outputCache","someObject","formatLogMessage","prevMessage","prevMessageText","_flush","_reschedulePublishInterval","reschedule","cachedQueue","storeLogs","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","tagRE","parseTag","pushTextNode","ignoreWhitespace","byTag","inComponent","isComment","nextChar","voidElement","attrRE","voidElements","expectingValueAfterEquals","buff","attrString","rootEl","newObj","_interopRequireWildcard","_cookie2","_querystring2","_localStorage2","_navigator2","_htmlTag2","_path2","_subdomain2","Browser","detectors","lookupCookie","excludeCacheFor","lookupFromUrlIndex","lookupFromPathIndex","detector","detectionOrder","detected","detectorName","cleanedLng","cacheName","toGMTString","nameEQ","cookieMinutes","hasLocalStorageSupport","htmlTag","lookupFromSubdomainIndex","toLocaleStringWorks","toLocaleStringRoundingWorks","targets","stringIncludes","repeatZero","qty","formatNumber","userLocale","integerString","fractionString","exponentString","useToLocaleString","useGrouping","grouping","maximumSignificantDigits","minimumIntegerDigits","fractionDigits","groupingSeparator","decimalSeparator","localeStringOptions","maximumFractionDigits","minimumFractionDigits","roundingOptions","toLocaleString","integerLength","fractionLength","digitCount","digitsArray","carry","stringRound","exponent","formattedString","durationLabelCompare","durationGetLabels","labels","localeDataKey","labelType","passed","engLocale","durationLabelsStandard","SS","durationLabelsShort","durationTimeTemplates","HMS","HM","MS","durationLabelTypes","durationPluralKey","integerValue","decimalValue","pluck","durationsFormat","durations","returnMomentTypes","formattedDurations","dur","outputTypes","largest","durationFormat","isNegative","remainderMonths","momentTokens","tokenDefs","general","typeMap","tokenizer","stopTrim","_durationTimeTemplates","useLeftUnits","usePlural","forceLength","trunc","useSignificantDigits","significantDigits","significantDigitsCache","minValue","isMinValue","maxValue","isMaxValue","trimIncludes","rLarge","rSmall","rBoth","rMid","rAll","rFinal","trimLarge","trimSmall","trimMid","trimFinal","rawTokens","currentToken","momentTypes","momentType","rawValue","isSmallest","isLargest","wholeValue","tokenLength","truncMethod","places","foundFirst","formatValue","formatOptions","formattedValue","formattedValueEn","formattedValueMS","findType","bubbleTypes","bubble","bubbleMomentType","targetMomentType","pluralKey","autoLocalized","pluralizedLabels","_durationLabelTypes","defaultFormatTemplate","firstType","lastType","toLocaleStringSupportsLocales","momentDurationFormatSetup","symbolMap","numberMap","pluralForm","pluralize","weekdaysParseExact","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","monthsParseExact","ll","lll","llll","plural","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","weekEndings","eraYearOrdinalRegex","isUpper","translateSingular","relativeTimeWithSingular","relativeTimeMr","monthsShortWithDots","monthsShortWithoutDots","monthsNominative","monthsSubjective","correctGrammaticalCase","wordKey","suffixes","70","80","30","60","processHoursFunction","nominative","accusative","genitive","validate","Instance","_uppercasePattern","__rest","__decorate","decorators","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__awaiter","_arguments","generator","fulfilled","rejected","__generator","sent","trys","verb","__createBinding","k2","__exportStar","__values","__read","__spread","__spreadArrays","jl","__spreadArray","__await","__asyncGenerator","asyncIterator","fulfill","settle","__asyncDelegator","__asyncValues","cooked","__setModuleDefault","__importStar","__classPrivateFieldGet","__classPrivateFieldSet","bytesToUuid","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","nsecs","tmh","sizeMap","toOptions","bindings","sharedOptions","unbinds","original","getBinding","_defaultComponentDecorator2","_defaultHrefDecorator2","_defaultMatchDecorator2","_defaultTextDecorator2","matchDecorator","hrefDecorator","textDecorator","decoratedComponent","parseString","_linkifyIt2","_tlds2","linkify","tlds","escapeRE","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","__opts__","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","schemaError","__compiled__","__schemas__","compiled","createValidator","slist","schema_test","src_ZPCc","schema_search","pretest","__text_cache__","resetScanCache","Match","__last_index__","schema","__schema__","createMatch","LinkifyIt","schemas","definition","tld_pos","testSchemaAt","keepOld","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","_withLockSheet2","_withTouchListeners2","ScrollLock","SheetLock","LockToggle","accountForScrollbars","SheetProvider","addSheet","getStyles","removeSheet","TouchProvider","_reactDom","NodeResolver","b64DecodeUnicode","InvalidCharacterError","vertxNext","customSchedulerFn","asap","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","useSetTimeout","globalSetTimeout","iterations","onFulfillment","onRejection","PROMISE_ID","makePromise","invokeCallback","resolve$1","observe","characterData","vertx","runOnLoop","runOnContext","attemptVertx","handleMaybeThenable","maybeThenable","then$$1","thenable","handleOwnThenable","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","publishRejection","_onerror","_subscribers","settled","hasCallback","succeeded","Enumerator","_instanceConstructor","_remaining","_enumerate","_eachEntry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","enumerator","needsResolver","initializePromise","needsNew","finally","race","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","polyfill","promiseToString","cast","globalThis","viewClasses","isArrayBufferView","normalizeName","normalizeValue","iteratorFor","consumed","bodyUsed","fileReaderReady","readBlobAsArrayBuffer","readAsArrayBuffer","bufferClone","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","FormData","_bodyFormData","_bodyArrayBuffer","isConsumed","readAsText","readArrayBufferAsText","formData","upcased","signal","reParamSearch","Response","bodyInit","redirectStatuses","aborted","abortXhr","rawHeaders","responseURL","fixUrl","WindowsZoneName","IanaName","mapContent","Sister","sister","_loadScript","_loadScript2","onYouTubeIframeAPIReady","stdOnEnd","ieOnEnd","setAttributes","_debug2","_functionNames2","_eventNames2","_FunctionStateMap2","YouTubePlayer","_loop","onEventName","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_loop2","functionName","stateInfo","stateChangeRequired","acceptableStates","playerStateAfterChange","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","formatArgs","useColors","lastC","WebkitAppearance","firebug","exception","$1","localstorage","formatters","prevTime","createDebug","coerce","logFn","selectColor","skips","long","fmtShort","_PlayerStates","_PlayerStates2","VIDEO_CUED","Emoji","_classnames3","_stringReplaceToArray2","_emojiRegex2","_asciiRegex2","_aliasRegex2","_normalizeProtocol2","_unicodeToCodepoint2","_aliases2","_asciiAliases2","asciiAliasesRegex","aliasesRegex","unicodeEmojiRegex","replaceUnicodeEmoji","codepoint","removeHelperCharacters","replaceAsciiAliases","asciiAliasKeys","fullMatch","edgeCase","asciiAlias","maybeBiggerAliasCharacters","isEdgeCase","isMaybePartOfBiggerAlias","fullMatchContent","isPartOfBiggerAlias","replaceAliases","aliasEmoji","replaceAllAsciiAliases","textWithAsciiAliases","previousTextWithoutAsciiAliases","textWithoutAsciiAliases","replacedText","_ref$options","isOnlyEmoji","argType","invariant","regexpOrSubstr","newValueOrFn","replaceUsingString","replaceUsingRegexp","patternString","replacerIsFn","storedLastIndex","newSubStrOrFn","edgeCases","_aliasRegex","_lodash2","escapeStringToBeUsedInRegExp","toCodePoint","U200D","UFE0Fg","tName","i18nName","handleName","selectorAttr","targetAttr","optionsAttr","useOptionsAttr","parseDefaultValueFromContent","extendDefault","dataAttr","translated","localize","targetSelector","DATE_SPLITS","GRAPHS","L33T_TABLE","RANKED_DICTIONARIES","REGEXEN","build_ranked_dict","frequency_lists","lst","ordered_list","recent_year","lst2","chr_map","sorted","matchers","dictionary_match","reverse_dictionary_match","l33t_match","spatial_match","repeat_match","sequence_match","date_match","_ranked_dictionaries","dictionary_name","password_lower","ranked_dict","matched_word","reversed_password","relevant_l33t_subtable","password_chars","relevant_subs","subs","subtable","enumerate_l33t_subs","dedup","helper","l33t_chr","sub_dict","sub_dicts","assoc","deduped","dup_l33t_index","first_key","next_subs","rest_keys","sub_alternative","sub_extension","_l33t_table","match_sub","subbed_chr","subbed_password","sub_display","_graphs","graph_name","spatial_match_helper","SHIFTED_RX","adj","adjacents","cur_char","cur_direction","found_direction","last_direction","base_analysis","base_matches","base_token","greedy","greedy_match","lazy_anchored","lazy_match","MAX_DELTA","last_delta","sequence_name","sequence_space","_regexen","rx_match","best_candidate","candidates","distance","dmy","maybe_date_no_separator","maybe_date_with_separator","metric","min_distance","ref4","ref5","ref6","ref7","ref8","ref9","map_ints_to_dmy","is_submatch","len3","other_match","ints","over_12","over_31","possible_year_splits","under_1","map_ints_to_dm","two_to_four_digit_year","passwords","english_wikipedia","female_names","surnames","us_tv_and_film","male_names","crack_times_display","crack_times_seconds","scenario","online_throttling_100_per_hour","online_no_throttling_10_per_second","offline_slow_hashing_1e4_per_second","offline_fast_hashing_1e10_per_second","display_time","guesses_to_score","display_num","display_str","default_feedback","suggestions","extra_feedback","longest_match","get_match_feedback","is_sole_match","get_dictionary_match_feedback","defaultLogLevel","onFakeLocalStorageChanged","useHostPageLocalStorage","shouldUseHostPageLocalStorage","setupJitsiLocalStorage","_onI18nInitialized","jqueryI18next","localTheme","mergeOuterLocalTheme","font","weightRegular","weightSemiBold","labelRegular","labelBold","labelButton","labelButtonLarge","bodyShortRegular","bodyShortBold","bodyShortBoldLarge","bodyLongRegular","bodyLongBold","heading1","heading2","heading3","heading4","heading5","heading6","heading7","createColorTokens","createWebTheme","createMuiTheme","MuiButtonBase","disableRipple","error03","error04","error05","error06","error08","primary01","primary02","primary03","primary04","primary05","primary06","primary07","primary08","primary09","surface00","surface01","surface02","surface03","surface04","surface05","surface06","surface07","surface08","surface09","surface10","surface11","surface12","success04","success05","warning05","warning06","uiBackground","ui01","ui02","ui04","ui05","action01","action01Hover","action01Active","action01Focus","action01Disabled","action02","action02Hover","action02Active","action02Focus","action02Disabled","action03","action03Hover","action03Active","action03Focus","action03Disabled","actionDanger","actionDangerHover","actionDangerActive","actionDangerFocus","actionDangerDisabled","bottomSheet","text02","text03","text04","textError","icon01","icon02","icon03","field01","field01Hover","field01Focus","field01Disabled","field02","dividerColor","field02Hover","field02Focus","field02Disabled","section01","section01Active","section01Inactive","border01","border02","border03","borderError","link01","link01Hover","link01Active","success01","success02","warning01","warning02","JitsiThemeProvider","BaseTheme","emptyObject","ChromeExtensionBanner","dontShowAgainChecked","closePressed","shouldShow","_onClosePressed","_onInstallExtensionClick","_shouldNotRender","_onDontShowAgainChange","_onCloseKeyPress","_onInstallExtensionKeyPress","_isSupportedEnvironment","prevBannerCfg","hasExtensions","SHOW_CHROME_EXTENSION_BANNER","isTwa","dontShowAgain","mainClassNames","aria-aria-describedby","AbstractApp","_openURL","_getDefaultURL","previousUrl","previousTimestamp","_clearExistingWaitForOwnerTimeout","waitForOwnerTimeoutID","_isWaitingForOwner","sticky","disableAVModeration","enableAVModeration","previousConference","AV_MODERATION_APPROVED","AV_MODERATION_CHANGED","AV_MODERATION_PARTICIPANT_APPROVED","JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP","GENERAL","NOT_FOUND","UNSUPPORTED_RESOLUTION","permissionsListener","_useDevice","_permissionsListener","PERMISSIONS_CHANGED","isDevicePermissionGranted","cameraJitsiTrackErrorMsg","cameraErrorMsg","additionalCameraErrorMsg","micJitsiTrackErrorMsg","micErrorMsg","additionalMicErrorMsg","deviceList","devicesToStr","audioInputs","audioOutputs","videoInputs","logDeviceList","pendingRequests","_processPendingRequests","devicesGroupBy","nDevice","accumulated","devicesArray","newDevice","_checkAndNotifyForNewDevice","e2eeEnabled","oldParticipant","newEveryoneSupportE2EE","newEveryoneEnabledE2EE","previosState","latestEveryoneEnabledE2EE","latestEveryoneSupportE2EE","isE2EEEnabled","soundID","displayTileView","onStateChanged","onWarning","onNotify","setNoAudioSignalNotificationUid","DialInLink","AUDIO_INPUT_STATE_CHANGE","hasAudioInput","noAudioSignalNotificationUid","NO_AUDIO_INPUT","noSrcDataNotificationUid","activeDevice","getActiveAudioDevice","_handleNoAudioSignalNotification","setNoisyAudioInputNotificationUid","noisyAudioInputNotificationUid","NOISY_MIC","OldElectronAPPNotificationDescription","majorVersion","isOldJitsiMeetElectronApp","_appWillMount","jitsiTracks","prejoinStart","isControlledParticipantOnStage","_setScreenshareCaptureFps","screenShareFps","setDesktopSharingFrameRate","setDisableButton","sendShareVideoCommand","stateOwnerId","statevideoUrl","oldStatus","handleSharingVideoStatus","setCurrentNotificationUid","currentNotificationUid","TALK_WHILE_MUTED","calculateLocalTrackDuration","localTracksDuration","newDuration","startedTime","createHandlersPromise","newLocalTracksDuration","beforeUnloadHandler","CONFERENCE_DESTROYED","CONFERENCE_RESTARTED","CONNECTION_ERROR","_conferenceFailed","_conferenceJoined","_connectionEstablished","errorKeys","_logJwtErrors","getConnection","conferenceAction","_connectionFailed","_conferenceSubjectChanged","_updateLocalParticipantInConference","actionName","participantIdForEvent","_pinParticipant","_sendTones","_setRoom","_syncConferenceLocalTracksWithState","_trackAddedOrRemoved","disableP2P","resolutionFlag","doNotFlipLocalVideo","_updateSettings","_setConfigOrLocationURL","actionPayload","jwtPayload","issuer","_user2participant","newProperties","_overwriteLocalParticipant","_undoOverwriteLocalParticipant","_setJWT","defaultURL","appState","filmStripEnabled","lastNSelected","startLastN","limitedLastN","_updateLastN","setLogCollector","logCollector","getGlobalOnErrorHandler","oldOnErrorHandler","lineno","colno","errMsg","oldOnUnhandledRejection","onunhandledrejection","_setErrorHandlers","setLoggingConfig","buildTransport","JitsiMeetInMemoryLogStorage","logEntries","logEntry","JitsiMeetLogStorage","logMessage","_setLogLevels","BEFORE_STATISTICS_DISPOSED","_libWillInit","isTestingEnabled","disableLogCollector","_logCollector","apiLogLevels","buildExternalApiLogTransport","debugLogs","debugLogCollector","_initLogging","_setLoggingConfig","_AUDIO_INITIAL_MEDIA_STATE","_VIDEO_INITIAL_MEDIA_STATE","_clearAllVideoTransforms","_storeVideoTransform","getStreamId","nextTransforms","_trackRemoved","_appStateChanged","_setAudioOnly","roomIsValid","_syncTrackMutedState","NetworkInfoService","_onlineStateListener","_handleOnlineStatusChange","_offlineStateListener","onLine","_storeNetworkInfoCleanup","networkInfoService","_cleanup","_e2eeUpdated","_maybePlaySounds","disableJoinLeaveSounds","joinSound","leftSound","_participantJoinedOrUpdated","updatedParticipant","currentKnownId","_raiseHandUpdated","_registerSounds","_localParticipantJoined","_unregisterSounds","_localParticipantLeft","grantOwner","muteParticipant","propertyHandlers","PARTICIPANT_PROPERTY_CHANGED","throttledPersistState","clientResized","isParticipantsPaneOpen","_mapSettingsFieldToParticipant","settingsField","disableCallIntegration","_initializeCallIntegration","_maybeUpdateDisplayName","_maybeHandleCallIntegrationChange","_maybeSetAudioOnly","newLocalParticipant","_updateLocalParticipant","disableCrashReporting","_maybeCrashReportingChange","urlEmail","urlDisplayName","_updateLocalParticipantFromUrl","_playSound","_stopSound","_onConnectionEvent","_bindConferenceConnectionListener","_bindTortureHelpers","_getLocalTrack","_removeNoDataFromSourceNotification","_setMuted","localTrack","participantIDs","previousParticipantIDs","previousMuted","_handleNoDataFromSourceErrors","_switchCamera","mutePresenter","userInteractionListener","_onUserInteractionReceived","_stopListeningForUserInteraction","_startListeningForUserInteraction","_maybeClearAccessStatus","setActiveModalId","activeModalId","modalProps","_handleReceivedMessage","shouldPlaySound","disableIncomingMessageSound","soundEnabled","hasRead","millisecondsTimestamp","MESSAGE_RECEIVED","PRIVATE_MESSAGE_RECEIVED","CHAT_ERROR","_handleChatError","_addChatMsgListener","shouldSendPrivateMessageTo","lastMessage","recentPrivateMessages","recentPrivateMessage","_shouldSendPrivateMessageTo","ChatPrivacyDialog","sendPrivateTextMessage","recipientID","_persistSentPrivateMessage","sendTextMessage","prevConference","openWebApp","_TNS","DeepLinkingDesktopPage","_onLaunchWeb","_onTryAgain","HIDE_DEEP_LINKING_LOGO","NATIVE_APP_NAME","SHOW_DEEP_LINKING_IMAGE","rightColumnStyle","_SNS","DeepLinkingMobilePage","_onDownloadApp","_onOpenApp","_downloadUrl","downloadButtonClassName","onOpenLinkProperties","generateDeepLinkingURL","_generateDownloadURL","MOBILE_DYNAMIC_LINK","APN","APP_CODE","CUSTOM_DOMAIN","IBI","ISI","IUS","APP_SCHEME","NoMobileApp","_openDesktopApp","appScheme","ANDROID_APP_PACKAGE","etherpadBase","oldGridDimensions","widthBelowThreshold","disableFilmstripAutohiding","responsiveColumnMapping","multipleColumns","singleColumn","twoColumns","twoParticipantsSingleColumn","setFollowMeModerator","_getFollowMeState","nextOnStage","sharedDocumentVisible","_sendFollowMeCommand","newSelectedValue","nextOnStageTimeout","nextOnStageTimer","participantSendingCommand","setFollowMeState","isEtherpadVisible","documentManager","idOfParticipantToPin","_pinVideoThumbnailById","clickId","_onFollowMeCommand","statusToRingtone","oldParticipantPresence","pendingInviteRequests","numberOfPoltergeists","numberOfRealParticipants","_maybeHideCalleeInfo","newParticipantPresence","oldSoundId","newSoundId","AddPeopleDialog","_beginAddPeople","_hideAddPeopleDialog","nonFirstFailure","MEMBERS_ONLY_ERROR","CONFERENCE_ACCESS_DENIED","_findLoadableAvatarForKnockingParticipant","MEMBERS_ONLY_CHANGED","LOBBY_USER_JOINED","LOBBY_USER_UPDATED","LOBBY_USER_LEFT","originParticipantName","targetParticipantName","_maybeSendLobbyNotification","oldRole","NON_OVERLAY_ERRORS","isRecentListEnabled","RECENT_LIST_ENABLED","doNotStoreRoom","_updateConferenceDuration","_conferenceWillLeave","_storeCurrentConference","oldSessionData","RECORDER_STATE_CHANGED","recorderSession","isStreamMode","SERVICE_UNAVAILABLE","serviceName","RESOURCE_CONSTRAINT","_showRecordingErrorNotification","disableRecordAudioNotification","updatedSessionData","soundOff","soundOn","recentList","newMostRecent","prevMostRecent","TOGGLE_ROOM_LOCK","previousLockedState","currentLockedState","PASSWORD_NOT_SUPPORTED","_setPasswordFailed","bowserNameToJitsiName","_detectElectron","_detectNWJS","_detectReactNative","_detect","bowser","browserInfo","_detectChromiumBased","_bowser","detectedBrowserInfo","_name","_version","checkTree","_checkCondition","deltaCompression","oldStats","newStatsArg","report","dumpStream","connectionFilter","iceServers","urls","iceUrl","endpoint","useLegacy","pollInterval","traceOptions","onCloseCallback","handleTraceWSClose","rtcstatsOptions","trace","pingInterval","statsSessionId","keepAliveInterval","protocolVersion","serializedMsg","WebSocket","OPEN","CLOSING","statsEntry","statsEntryMsg","keepAlive","onclose","onopen","traceInit","sendStatsEntry","prefixesToWrap","peerconnectioncounter","browserDetection","OrigPeerConnection","peerconnection","origConfig","origConstraints","__rtcStatsId","nullConfig","credential","browserType","signalingState","iceConnectionState","iceGatheringState","map2obj","standardReport","standardStats","stat","mangleChromeStats","nativeMethod","streamInfo","rtcStatsId","generateCertificate","origGetUserMedia","getUserMedia","gum","getDisplayMedia","origGetDisplayMedia","gdm","rtcstatsInit","sendIdentityData","identityData","isRtcstatsEnabled","rtcstatsEnabled","rtcstatsPollInterval","rtcstatsUseLegacy","RTCStats","rtcstatsEndpoint","meetingUniqueId","confName","_setClearerOnTranscriptMessage","clearTimeOut","translationLanguage","getLocalParticipantProperty","message_id","transcript","is_interim","stability","_endpointMessageReceived","_requestingSubtitlesToggled","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","_setFullScreen","transcriberJoined","transcriberJID","setPendingTranscribingNotificationUid","potentialTranscriberJIDs","transcriberLeft","previousTileViewEnabled","_restoreTileViewState","_storeTileViewStateAndClear","oldScreenSharesOrder","knownSharingParticipantIds","newScreenSharesOrder","shouldUpdateAutoPin","_updateReceiverVideoConstraints","visibleParticipants","maxFrameHeight","receiverConstraints","defaultConstraints","onStageEndpoints","selectedEndpoints","setReceiverConstraints","changedPreferredVideoQuality","changedReceiverVideoQuality","preferred","setSenderVideoConstraint","_setSenderVideoConstraint","thumbnailHeight","maxFullResolutionParticipants","newMaxRecvVideoQuality","getMinHeightForQualityLvlMap","override","VIDEO_SIP_GW_AVAILABILITY_CHANGED","_availabilityChanged","VIDEO_SIP_GW_SESSION_STATE_CHANGED","toDispatch","STATE_PENDING","STATE_FAILED","STATE_OFF","failureReason","STATUS_BUSY","_sessionStateChanged","newSession","createVideoSIPGWSession","ERROR_NO_CONNECTION","ERROR_SESSION_EXISTS","_inviteRooms","AntiCollapse","Button","QuickActionButton","panePadding","ContextMenu","contextFontSize","contextFontWeight","participantActionButtonHeight","participantItemHeight","ContextMenuIcon","ContextMenuItem","ContextMenuItemGroup","Close","FooterButton","FooterEllipsisButton","FooterEllipsisContainer","headerSize","Heading","ColoredIcon","ParticipantActionButton","ParticipantActionEllipsis","ParticipantActions","ParticipantActionsHover","ParticipantActionsPermanent","ParticipantContent","ParticipantContainer","isHighlighted","ParticipantInviteButton","ParticipantName","ParticipantNameContainer","ParticipantStates","RaisedHandIndicatorBackground","InviteButton","onInvite","IconInviteMore","RaisedHandIndicator","IconRaisedHandHollow","AudioStateIcons","VideoStateIcons","ParticipantItem","onLeave","actionsTrigger","audioMediaState","videoMuteState","youText","LobbyParticipantItem","admit","headingContainer","LobbyParticipantList","admitAll","MeetingParticipantContextMenu","_containerRef","_onGrantModerator","_onKick","_onMuteEveryoneElse","_onMuteVideo","_position","offsetTarget","offsetTop","_isLocalModerator","_isChatButtonEnabled","_isParticipantModerator","_isParticipantVideoMuted","_isParticipantAudioMuted","AskToUnmuteButton","askUnmuteText","askToUnmute","ParticipantQuickAction","buttonType","muteParticipantButtonText","_audioMediaState","_quickActionButtonType","_local","onContextMenu","participantActionEllipsisLabel","MeetingParticipantList","isMouseOverMenu","showInviteButton","raiseContext","setRaiseContext","lowerMenu","queueMicrotask","raiseMenu","toggleMenu","raisedParticipant","menuEnter","menuLeave","renderParticipant","contextMenu","paddedAction","FooterContextMenu","isModerationSupported","isAvModerationSupported","allModerators","isModerationEnabled","isAvModerationEnabled","muteAllVideo","ParticipantsPane","contextOpen","_onClosePane","_onMuteAll","_onToggleContext","_onWindowClickListener","_paneOpen","_showContextMenu","_showFooter","isPaneOpen","AbstractConference","renderNotificationsContainer","_notificationsVisible","NotificationsContainer","TranscribingLabel","ConferenceTimer","timerValue","_startTimer","_stopTimer","_startTimestamp","textStyle","renderConferenceTimer","_setStateFromUTC","refValueUTC","currentValueUTC","timerMsValue","localizedTime","ParticipantsCount","IconUserGroups","hideConferenceTimer","hideConferenceSubject","hideParticipantsStats","hideRecordingLabel","fileRecordingStatus","streamRecordingStatus","isFileRecording","isStreamRecording","_hideConferenceNameAndTimer","_hideConferenceTimer","_hideRecordingLabel","_fullWidth","_showParticipantCount","_subject","_recordingLabel","Notice","noticeMessage","FULL_SCREEN_EVENTS","LAYOUT_CLASSNAMES","reactReduxConnect","mouseMoveCallbackInterval","abstractMapStateToProps","_isLobbyScreenVisible","_isParticipantsPaneVisible","_layoutClassName","_mouseMoveCallbackInterval","_roomName","_showPrejoin","_originalOnShowToolbar","_onShowToolbar","_originalOnMouseMove","_onMouseMove","_onFullScreenChange","_setBackground","_start","onMouseMove","AudioModerationNotifications","elemColor","alphaElemColor","parentColor","alphaParentColor","isInsecureRoomName","AbstractInsecureRoomNameLabel","enableInsecureRoomNameWarning","IconWarning","isAlone","HIDE_INVITE_MORE_HEADER","_shouldShow","_toolboxVisible","UnsupportedDesktopBrowser","_showFirefox","AbstractRecentList","emptyListContainer","emptyListText","_recentList","_onItemDelete","entryId","toDisplayableList","AbstractWelcomePage","animateTimeoutId","generatedRoomname","insecureRoomName","roomPlaceholder","updateTimeoutId","_animateRoomnameChanging","_onJoin","_onRoomChange","_renderInsecureRoomNameWarning","_updateRoomname","_clearTimeouts","isGenerated","onAppNavigateSettled","_enableInsecureRoomNameWarning","_doRenderInsecureRoomNameWarning","Tab","WelcomePage","generateRoomnames","GENERATE_ROOMNAMES_ON_WELCOME_PAGE","_additionalContentRef","_roomInputRef","_additionalToolbarContentRef","_additionalCardRef","_additionalCardTemplate","_additionalContentTemplate","_additionalToolbarContentTemplate","_onFormSubmit","_setAdditionalCardRef","_setAdditionalContentRef","_setRoomInputRef","_setAdditionalToolbarContentRef","_shouldShowAdditionalContent","_shouldShowAdditionalToolbarContent","_shouldShowAdditionalCard","_moderatedRoomServiceUrl","DEFAULT_WELCOME_PAGE_LOGO_URL","DISPLAY_WELCOME_FOOTER","showAdditionalCard","showAdditionalContent","showAdditionalToolbarContent","contentClassName","footerClassName","reportValidity","MOBILE_DOWNLOAD_LINK_ANDROID","MOBILE_DOWNLOAD_LINK_F_DROID","MOBILE_DOWNLOAD_LINK_IOS","_calendarEnabled","_recentListEnabled","DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD","DISPLAY_WELCOME_PAGE_CONTENT","DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT","moderatedRoomServiceUrl","_settings","_getRouteToRender","_getEmptyRoute","Conference","isWelcomePageAppEnabled","_getMobileRoute","launchInWeb","disableDeepLinking","mobileAppPromo","MOBILE_APP_PROMO","getDeepLinkingPage","deepLinkComponent","_getWebConferenceRoute","isWelcomePageUserEnabled","_getWebWelcomePageRoute","history","replaceState","shard_changed","_immediateReloadThreshold","timeSinceConnectionEstablished","reloadThreshold","isWithinSplitBrainThreshold","splitBrain","_isMaybeSplitBrainError","audioWhitelist","videoWhitelist","pendingVideo","_updatePendingParticipant","arrayItemChanged","newArr","updated","hasStateChanged","newPendingAudio","newPendingVideo","_setTransport","_suspendDetected","getStatusFromErrors","_authStatusChanged","conference_","isE2EESupported","_conferenceLeftOrWillLeave","_lockStateChanged","_p2pStatusChanged","_setPassword","INITIAL_NON_RN_STATE","INITIAL_RN_STATE","disableAudioLevels","disabledCodec","disableH264","preferredCodec","preferH264","_getInitialState","_getCurrentConnection","baseConnectionState","_updateConfig","stereo","opusMaxAverageBitrate","audioQuality","_translateLegacyConfig","hdAudioOptions","disableAP","enableNoAudioDetection","enableNoisyMicDetection","enableTalkWhileMuted","_connectionDisconnected","connection_","_connectionWillConnect","_setLocationURL","_setShowConnectionInfo","_addKnownDomains","knownDomain","initError","_setLogCollector","cellularGeneration","PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE","_isEveryoneModerator","_updateParticipantProperty","newParticipant","_participantJoined","localFeatures","filterSubtree","featureState","savedDisplayName","savedEmail","_initSettings","isAddAction","_addOrRemoveAudioElement","_registerSound","_unregisterSound","INITIAL_STATE","_setConnectionState","withoutTrackStub","newMessage","visibleParticipantsEndIndex","visibleParticipantsStartIndex","removedParticipantIndex","existingParticipant","_knockingParticipantArrivedOrUpdated","_insertNotificationByPriority","newNotificationPriority","insertAtLocation","queuedNotification","copyOfNotifications","_setShowLoadConfigOverlay","_mediaPermissionPromptVisibilityChanged","_setFatalError","_toggleSlowGUMOverlay","_urlStringEquals","_getLegacyRecentRoomList","_deleteRecentListEntry","mostRecentIndex","mostRecent","nextMostRecent","conferenceDuration","_updateSessionDatas","newSessionData","newSessionDatas","newTranscriptMessages","_removeTranscriptMessage","_updateTranscriptMessage","INITIAL_TOOLBAR_TIMEOUT","TOOLBAR_ALWAYS_VISIBLE","isDialing","isTerminating","defaultPage","pageIndex","PrejoinApp","connectionTimes","persisted","logCollectorStarted","PREJOIN","renderEntryPoint","indexLoadedTime","plainObjectConstrurctor","cloneStyle","newStyle","createRule","decl","jss","declCopy","onCreateRule","toCssValue","ignoreImportant","cssValue","indentStr","indent","toCss","_options$indent","_prop","_value","_prop2","_value2","allowEmpty","nativeEscape","CSS","BaseStyleRule","renderer","renderable","Renderer","onChangeValue","removeProperty","attached","_BaseStyleRule","StyleRule","selectorText","scoped","_proto2","applyTo","setSelector","replaceRule","pluginStyleRule","defaultToStringOptions","atRegExp","ConditionalRule","atMatch","addRule","onProcessRule","keyRegExp","pluginConditionalRule","defaultToStringOptions$1","nameRegExp","KeyframesRule","nameMatch","keyRegExp$1","refRegExp","findReferencedKeyframe","refKeyframe","onProcessStyle","KeyframeRule","pluginKeyframeRule","FontFaceRule","keyRegExp$2","pluginFontFaceRule","ViewportRule","pluginViewportRule","SimpleRule","keysMap","defaultUpdateOptions","forceUpdateOptions","RuleList","ruleOptions","_this$options","updateOne","_this$options2","styleRule","nextValue","_nextValue","_prevValue","deployed","deploy","addRules","added","_this$rules","PluginsRegistry","internal","registry","onProcessSheet","processedValue","newPlugin","SheetsRegistry","globalThis$1","createGenerateId","ruleCounter","jssId","attributeStyleMap","getHead","findPrevNode","registry$1","insertionPoint","findHigherSheet","findHighestSheet","findCommentNode","_insertRule","appendRule","getValidRuleInsertionIndex","DomRenderer","hasInsertedRules","media","createStyle","nextNode","insertionPointElement","insertStyle","nativeParent","latestNativeParent","_insertionIndex","refCssRule","ruleStr","insertionIndex","nativeRule","getRules","instanceCounter","Jss","createStyleSheet","removeStyleSheet","hasCSSTOMSupport","mergeClasses","baseClasses","newClasses","nextClasses","key1","key2","subCache","pseudoClasses","fnValuesNs","fnRuleNs","fnValues","fnRule","GlobalContainerRule","GlobalPrefixedRule","separatorRegExp","addScope","handleNestedGlobalContainerRule","handlePrefixedGlobalRule","parentRegExp","getReplaceRef","replaceParentRefs","nestedProp","parentProp","parentSelectors","nestedSelectors","getOptions","prevOptions","nestingLevel","replaceRef","isNested","isNestedConditional","uppercasePattern","toHyphenLower","hName","convertCase","converted","hyphenatedProp","px","addCamelCasedVersion","regExp","inset","perspective","gap","iterate","innerProp","_innerProp","camelCasedOptions","js","isTouch","jsCssMap","Moz","Webkit","appearence","noPrefill","supportedProperty","colorAdjust","camelize","pascalize","textOrientation","writingMode","breakPropsOld","inlineLogicalOld","newProp","unprefixed","prefixed","pascalized","scrollSnap","overscrollBehavior","propMap","flex2012","propMap$1","propKeys","prefixCss","propertyDetectors","key$1","el$1","cache$1","transitionProperties","transPropsRegExp","prefixTransitionCallback","prefixedValue","supportedValue","cacheKey","prefixStyle","changeProp","supportedProp","changeValue","supportedValue$1","atRule","prop0","prop1","jssPreset","disableGeneration","generateClassName","_options$disableGloba","disableGlobal","_options$productionPr","productionPrefix","_options$seed","seed","seedPrefix","getNextCounterId","createGenerateClassName","sheetsCache","sheetsManager","sheetsRegistry","StylesContext","indexCounter","increment","getStylesCreator","themingEnabled","stylesWithOverrides","getClasses","cacheClasses","lastProp","lastJSS","generate","stylesCreator","sheetManager","staticSheet","dynamicStyles","serverGenerateClassName","getDynamicStyles","dynamicSheet","useSynchronousEffect","currentKey","classNamePrefixOption","_options$defaultTheme","stylesOptions2","shouldUpdate","entranceMotions","exitMotions","fadeOutAnimation","movement","entranceSlideDirection","entranceDirection","ButtonWithMode","_ref$onMouseDown","_ref$onMouseUp","providedOnMouseUp","consumerEvent","clonedEvent","defaultData","WithAnalyticsContext","groupItemStyles","ButtonGroup","waitForRender","FieldBase","defaultIsFocused","isDialogFocused","shouldIgnoreNextDialogBlur","cancelSchedule","defaultOpen","activatedItem","activatedGroup","findActivatedGroup","handleItemActivation","isHTMLElement","isShadowRoot","ShadowRoot","includeScale","scaleX","scaleY","getWindowScroll","win","getNodeName","getDocumentElement","getWindowScrollBarX","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","clientLeft","clientTop","getLayoutRect","clientRect","offsetLeft","assignedSlot","listScrollParents","_element$ownerDocumen","updatedList","isTableElement","getTrueOffsetParent","contain","getContainingBlock","basePlacements","variationPlacements","modifierPhases","visited","requires","requiresIfExists","dep","depModifier","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","orderedModifiers","modifiersData","effectCleanupFns","cleanupModifierEffects","contextElement","phase","orderModifiers","merged","mergeByName","_ref3$options","cleanupFn","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","_options$scroll","_options$resize","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","commonX","commonY","mainAxis","unsetSides","mapToStyles","_Object$assign2","adaptive","roundOffsets","dpr","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","getOppositeVariationPlacement","rootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","getViewportRect","getInnerBoundingClientRect","winScroll","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","referenceElement","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","within","getSideOffsets","preventedOffsets","isAnySideFullyClipped","eventListeners","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","initialStyles","_options$offset","invertDistance","skidding","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allowedPlacements","overflows","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","fittingPlacement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","additive","maxLen","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_min","_max","_preventedOffset","_state$modifiersData$","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","axisProp","centerOffset","_options$element","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","EMPTY_MODIFIERS","NOOP","NOOP_PROMISE","_ref$placement","_ref$strategy","_ref$modifiers","popperElement","setPopperElement","_React$useState2","setArrowElement","_usePopper","optionsWithDefaults","updateStateModifier","popperOptions","popperInstanceRef","popperInstance","createPopper","childrenProps","arrowProps","constantModifiers","defaultChildrenFn","defaultOffset","_ref$children","_ref$offset","_ref$referenceElement","internalModifiers","mergedModifiers","fnToCall","_instance$context$con","contextKey","WrappedItem","WithItemClick","safeContextCall","shouldCloseAfterClick","callContextFn","otherProps","WithItemFocus","isFocusable","contextId","stateName","stateStyles","paddingKey","_getThemeStyle","_getThemeStyle$bottom","_getThemeStyle$left","_getThemeStyle$right","_getThemeStyle$top","adjustedTop","adjustedBottom","heightKey","widthKey","isDragging","standardFocus","BeforeAfterBase","Before","spaceKey","After","allowMultiline","Description","descriptionFontSize","rootComponent","dnd","dragHandleProps","patchedEventHandlers","draggableProps","shouldAllowMultiline","getBody","InternalPortal","appendPortalContainerIfNotAppended","removePortalContainer","isSubsequentRender","setIsSubsequentRender","zIndexToName","510","getLayerName","firePortalEvent","getEvent","zIndexNumber","_props$zIndex","navItemColorMap","labelColor","activeLabelColor","hoverLabelColor","selectedColor","navLineColorMap","lineColor","tabStyles","tabPaneStyles","navWrapperStyles","navStyles","getNavLineColor","getNavItemColors","TabContent","elementProps","TabItem","TabsNavigation","newselectedIndex","elementRefs","itemProps","tabKeyDownHandler","tabMouseDownHandler","defaultIsSelectedTestNumber","_tab","defaultIsSelectedTestObject","defaultComponents","isSelectedTest","testFunction","newselected","newSelectedIndex","initiallyselected","_selected","resolveSelected","updatedselected","isContentPersisted","_defaultComponents$co","contentProps","usePlatformLeafSyntheticEventHandler","delayId","clearScheduled","scheduleTimeout","primitiveCss","baseCss","truncateCss","tooltipZIndex","_ref$position","_ref$mousePosition","mousePosition","_ref$truncate","_ref$component","_ref$tag","TargetContainer","_ref$delay","_ref$onShow","onShow","_ref$onHide","onHide","_ref$hideTooltipOnCli","hideTooltipOnClick","_ref$hideTooltipOnMou","hideTooltipOnMouseDown","onShowHandler","onHideHandler","apiRef","targetRef","containerRef","lastState","lastDelay","lastHandlers","hasCalledShowHandler","showTooltip","keep","immediatelyHideAndDone","isImmediate","showImmediately","requestHide","finishHideAnimation","getInitialMouse","initialMouse","mouseCoordinates","safeMouse","onAnimationFinished","CastTargetContainer","shouldRenderTooltipContainer","shouldRenderTooltipChildren","Blanket","ScrollBlock","positionMap","POSITION_ATTRIBUTE_ENUM","positionPropToPopperPosition","positionToPopper","FixedTarget","fixedOffset","Layer","popperHeight","cssPosition","fixPositionTopUnderflow","originalHeight","calculateMaxHeight","hasExtractedStyles","actualPosition","originalPosition","extractStyles","applyPopper","calculateFixedOffset","onFlippedChange","currentHeight","positionTop","DocumentElementClientHeight","viewportHeight","isAlwaysFixed","actualTarget","popperTop","fixedRef","contentRef","popperOpts","autoFlip","flipBehavior","getFlipBehavior","lockScroll","fit","isTall","verticalPadding","SpinnerContainer","dropdownPadding","droplistItemTheme","dropOffset","setContentWidth","handleClickOutside","handleEsc","dropContentRef","triggerRef","halfFocusRing","withinTrigger","withinContent","layerContent","handleContentRef","handleTriggerRef","checkboxStyles","checkboxThemeColors","borderColor","invalidAndChecked","hoveredAndChecked","boxColor","tickColor","disabledAndChecked","activeAndChecked","checkboxColors","labelTextCSS","LabelText","RequiredIndicator","isIndeterminate","CheckboxWithMode","isCheckedProp","_props$isInvalid","_props$isIndeterminat","onChangeProps","isCheckedState","setIsCheckedState","onChangeAnalytics","activeBackgroundColor","selectedBackgroundColor","activePrimaryTextColor","defaultPrimaryTextColor","disabledPrimaryTextColor","primaryPrimaryTextColor","selectedPrimaryTextColor","focusedStyles","activeStyles","primaryStyles","Anchor","Span","InputWrapper","getInputBackground","isPressed","getInputFill","appearanceProps","supportsVoiceOver","ariaProps","ariaRoles","commonProps","handleKeyPress","handleMouseOut","handleMouseOver","handleMouseUp","testingProps","consolidatedProps","inputTypes","guardedActivate","hasInput","Input","tooltipDescription","itemContext","Reference","refHandler","LoadingSpinner","_ref2$spacing","stateToSelectorMap","getCustomCss","_ref$appearance","_ref$spacing","_ref$mode","_ref$isSelected","_ref$shouldFitContain","_ref$iconIsOnlyChild","iconIsOnlyChild","_ref$isLoading","defaultThemeFn","spinnerStyles","getInteractionState","_ref$isDisabled","_ref$isActive","_ref$isFocus","isFocus","_ref$isHover","isHover","_ref2$appearance","_ref2$autoFocus","_ref2$isDisabled","_ref2$isSelected","_ref2$shouldFitContai","_ref2$isLoading","providedOnMouseEnter","providedOnMouseLeave","providedOnFocus","_ref2$theme","restProps","GroupTitle","paddingType","GroupTitleAfter","GroupTitleText","ItemGroup","headingAfterElement","presetSizes","xsmall","rotate","loadIn","_ref2$delay","_ref2$size","providedSize","strokeColor","getStrokeColor","usePatchedProps","createEventMap","wrappedComponentProps","_useAnalyticsEvents","handlerCache","patchedProps","eventCreator","wrappedCallback","patchedEventProps","WithAnalyticsEvents","setInputRef","onKeyUp","LabelWrapper","LabelInner","inlineEdit","HeadingAfter","HeadingText","DroplistGroup","getAriaLabel","afterText","headingElement","useGlobalTheme"],"mappings":"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skI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,yBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,iCACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,oBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,eACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,IACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,iBACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,2BACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,mBACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,0BACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CACIhb,KAAM,8CACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,eACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,iBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,qBACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,oBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,8BACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,mBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gCACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,KACVtpH,KAAM,MACV,CACIhb,KAAM,yCACNskI,SAAU,KACVtpH,KAAM,MAEV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CACIhb,KAAM,+CACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,iCACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,yBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,mBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CACIhb,KAAM,6CACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,uBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,gBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,iBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,2BACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,kCACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,mBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,IACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,mBACJskI,SAAU,MACVtpH,KAAM,MACV,CACIhb,KAAM,+CACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,wBACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,eACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,4BACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,mCACJskI,SAAU,OACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,wBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,eACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,eACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,kBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,eACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,MACVtpH,KAAM,MACV,CACIhb,KAAM,+CACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,QACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,WACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,yBACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,YACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,uBACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,SACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,aACJskI,SAAU,MACVtpH,KAAM,MACV,CACIhb,KAAM,wCACNskI,SAAU,MACVtpH,KAAM,MAEV,CAAEhb,KAAM,WACJskI,SAAU,KACVtpH,KAAM,MACV,CAAEhb,KAAM,cACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,OACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,UACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,QACJskI,SAAU,MACVtpH,KAAM,MACV,CAAEhb,KAAM,sBACJskI,SAAU,OACVtp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CpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,MAAO,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,OACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,OACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OAEtCC,OAAQ,CACN,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrCD,IAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACpC,EAAK,CAAC,KAAM,MAAO,KAAM,KAAM,KAAM,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,MAAO,KAAM,KAAM,KAAM,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACp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A,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,EAAc,GAAI,KAClBA,E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","file":"app.bundle.min.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 = \"/libs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 752);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/* @flow */\n\nimport { combineReducers } from 'redux';\nimport type { Reducer } from 'redux';\n\n/**\n * The type of the dictionary/map which associates a reducer (function) with the\n * name of he Redux state property managed by the reducer.\n */\ndeclare type NameReducerMap<S, A> = { [name: string]: Reducer<S, A> };\n\n/**\n * A registry for Redux reducers, allowing features to register themselves\n * without needing to create additional inter-feature dependencies.\n */\nclass ReducerRegistry {\n    _elements: NameReducerMap<*, *>;\n\n    /**\n     * Creates a ReducerRegistry instance.\n     */\n    constructor() {\n        /**\n         * The set of registered reducers, keyed based on the field each reducer\n         * will manage.\n         *\n         * @private\n         * @type {NameReducerMap}\n         */\n        this._elements = {};\n    }\n\n    /**\n     * Combines all registered reducers into a single reducing function.\n     *\n     * @param {Object} [additional={}] - Any additional reducers that need to be\n     * included (such as reducers from third-party modules).\n     * @returns {Function}\n     */\n    combineReducers(additional: NameReducerMap<*, *> = {}) {\n        // $FlowExpectedError\n        return combineReducers({\n            ...this._elements,\n            ...additional\n        });\n    }\n\n    /**\n     * Adds a reducer to the registry.\n     *\n     * The method is to be invoked only before {@link #combineReducers()}.\n     *\n     * @param {string} name - The field in the state object that will be managed\n     * by the provided reducer.\n     * @param {Reducer} reducer - A Redux reducer.\n     * @returns {void}\n     */\n    register(name: string, reducer: Reducer<*, *>) {\n        this._elements[name] = reducer;\n    }\n}\n\n/**\n * The public singleton instance of the ReducerRegistry class.\n */\nexport default new ReducerRegistry();\n","// @flow\n\nimport type { Store } from 'redux';\n\nimport { equals } from './functions';\nimport logger from './logger';\n\n/**\n * The type listener supported for registration with\n * {@link StateListenerRegistry} in association with a {@link Selector}.\n *\n * @param {any} selection - The value derived from the redux store/state by the\n * associated {@code Selector}. Immutable!\n * @param {Store} store - The redux store. Provided in case the {@code Listener}\n * needs to {@code dispatch} or {@code getState}. The latter is advisable only\n * if the {@code Listener} is not to respond to changes to that state.\n * @param {any} prevSelection - The value previously derived from the redux\n * store/state by the associated {@code Selector}. The {@code Listener} is\n * invoked only if {@code prevSelection} and {@code selection} are different.\n * Immutable!\n */\ntype Listener\n    = (selection: any, store: Store<*, *>, prevSelection: any) => void;\n\n/**\n * The type selector supported for registration with\n * {@link StateListenerRegistry} in association with a {@link Listener}.\n *\n * @param {Object} state - The redux state from which the {@code Selector} is to\n * derive data.\n * @param {any} prevSelection - The value previously derived from the redux\n * store/state by the {@code Selector}. Provided in case the {@code Selector}\n * needs to derive the returned value from the specified {@code state} and\n * {@code prevSelection}. Immutable!\n * @returns {any} The value derived from the specified {@code state} and/or\n * {@code prevSelection}. The associated {@code Listener} will only be invoked\n * if the returned value is other than {@code prevSelection}.\n */\ntype Selector = (state: Object, prevSelection: any) => any;\n\n/**\n * Options that can be passed to the register method.\n */\ntype RegistrationOptions = {\n\n    /**\n     * @property {boolean} [deepEquals=false] - whether or not a deep equals check should be performed on the selection\n     * returned by {@link Selector}.\n     */\n    deepEquals: ?boolean\n}\n\n/**\n * A type of a {@link Selector}-{@link Listener} association in which the\n * {@code Listener} listens to changes in the values derived from a redux\n * store/state by the {@code Selector}.\n */\ntype SelectorListener = {\n\n    /**\n     * The {@code Listener} which listens to changes in the values selected by\n     * {@link selector}.\n     */\n    listener: Listener,\n\n    /**\n     * The {@link RegistrationOptions} passed during the registration to be applied on the listener.\n     */\n    options: ?RegistrationOptions,\n\n    /**\n     * The {@code Selector} which selects values whose changes are listened to\n     * by {@link listener}.\n     */\n    selector: Selector\n};\n\n/**\n * A registry listeners which listen to changes in a redux store/state.\n */\nclass StateListenerRegistry {\n    /**\n     * The {@link Listener}s registered with this {@code StateListenerRegistry}\n     * to be notified when the values derived by associated {@link Selector}s\n     * from a redux store/state change.\n     */\n    _selectorListeners: Set<SelectorListener> = new Set();\n\n    _listener: ({\n        prevSelections: Map<SelectorListener, any>,\n        store: Store<*, *>\n    }) => void;\n\n    /**\n     * Invoked by a specific redux store any time an action is dispatched, and\n     * some part of the state (tree) may potentially have changed.\n     *\n     * @param {Object} context - The redux store invoking the listener and the\n     * private state of this {@code StateListenerRegistry} associated with the\n     * redux store.\n     * @returns {void}\n     */\n    _listener({ prevSelections, store }: {\n            prevSelections: Map<SelectorListener, any>,\n            store: Store<*, *>\n    }) {\n        for (const selectorListener of this._selectorListeners) {\n            const prevSelection = prevSelections.get(selectorListener);\n\n            try {\n                const selection\n                    = selectorListener.selector(\n                        store.getState(),\n                        prevSelection);\n                const useDeepEquals = selectorListener?.options?.deepEquals;\n\n                if ((useDeepEquals && !equals(prevSelection, selection))\n                        || (!useDeepEquals && prevSelection !== selection)) {\n                    prevSelections.set(selectorListener, selection);\n                    selectorListener.listener(selection, store, prevSelection);\n                }\n            } catch (e) {\n                // Don't let one faulty listener prevent other listeners from\n                // being notified about their associated changes.\n                logger.error(e);\n            }\n        }\n    }\n\n    /**\n     * Registers a specific listener to be notified when the value derived by a\n     * specific {@code selector} from a redux store/state changes.\n     *\n     * @param {Function} selector - The pure {@code Function} of the redux\n     * store/state (and the previous selection of made by {@code selector})\n     * which selects the value listened to by the specified {@code listener}.\n     * @param {Function} listener - The listener to register with this\n     * {@code StateListenerRegistry} so that it gets invoked when the value\n     * returned by the specified {@code selector} changes.\n     * @param {RegistrationOptions} [options] - Any options to be applied to the registration.\n     * @returns {void}\n     */\n    register(selector: Selector, listener: Listener, options: ?RegistrationOptions) {\n        this._selectorListeners.add({\n            listener,\n            selector,\n            options\n        });\n    }\n\n    /**\n     * Subscribes to a specific redux store (so that this instance gets notified\n     * any time an action is dispatched, and some part of the state (tree) of\n     * the specified redux store may potentially have changed).\n     *\n     * @param {Store} store - The redux store to which this\n     * {@code StateListenerRegistry} is to {@code subscribe}.\n     * @returns {void}\n     */\n    subscribe(store: Store<*, *>) {\n        // XXX If StateListenerRegistry is not utilized by the app to listen to\n        // state changes, do not bother subscribing to the store at all.\n        if (this._selectorListeners.size) {\n            store.subscribe(\n                this._listener.bind(\n                    this,\n                    {\n                        /**\n                         * The previous selections of the {@code Selector}s\n                         * registered with this {@code StateListenerRegistry}.\n                         *\n                         * @type Map<any>\n                         */\n                        prevSelections: new Map(),\n\n                        /**\n                         * The redux store.\n                         *\n                         * @type Store\n                         */\n                        store\n                    }));\n        }\n    }\n}\n\nexport default new StateListenerRegistry();\n","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","// Re-export JitsiMeetJS from the library lib-jitsi-meet to (the other features\n// of) the project jitsi-meet.\nimport JitsiMeetJS from './_';\nexport { JitsiMeetJS as default };\n\n// XXX Re-export the properties exported by JitsiMeetJS in order to prevent\n// undefined imported JitsiMeetJS. It may be caused by import cycles but I have\n// not confirmed the theory.\nexport const analytics = JitsiMeetJS.analytics;\nexport const browser = JitsiMeetJS.util.browser;\nexport const JitsiConferenceErrors = JitsiMeetJS.errors.conference;\nexport const JitsiConferenceEvents = JitsiMeetJS.events.conference;\nexport const JitsiConnectionErrors = JitsiMeetJS.errors.connection;\nexport const JitsiConnectionEvents = JitsiMeetJS.events.connection;\nexport const JitsiConnectionQualityEvents\n    = JitsiMeetJS.events.connectionQuality;\nexport const JitsiDetectionEvents = JitsiMeetJS.events.detection;\nexport const JitsiE2ePingEvents = JitsiMeetJS.events.e2eping;\nexport const JitsiMediaDevicesEvents = JitsiMeetJS.events.mediaDevices;\nexport const JitsiParticipantConnectionStatus\n    = JitsiMeetJS.constants.participantConnectionStatus;\nexport const JitsiRecordingConstants = JitsiMeetJS.constants.recording;\nexport const JitsiSIPVideoGWStatus = JitsiMeetJS.constants.sipVideoGW;\nexport const JitsiTrackErrors = JitsiMeetJS.errors.track;\nexport const JitsiTrackEvents = JitsiMeetJS.events.track;\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n","export * from './AnalyticsEvents';\nexport * from './functions';\n","import defineProperty from \"./defineProperty\";\nexport default function _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? Object(arguments[i]) : {};\n    var ownKeys = Object.keys(source);\n\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\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}","export default 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}","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default 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\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}","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\n\nvar consoleLogger = {\n  type: 'logger',\n  log: function log(args) {\n    this.output('log', args);\n  },\n  warn: function warn(args) {\n    this.output('warn', args);\n  },\n  error: function error(args) {\n    this.output('error', args);\n  },\n  output: function output(type, args) {\n    var _console;\n\n    /* eslint no-console: 0 */\n    if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n  }\n};\n\nvar Logger =\n/*#__PURE__*/\nfunction () {\n  function Logger(concreteLogger) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Logger);\n\n    this.init(concreteLogger, options);\n  }\n\n  _createClass(Logger, [{\n    key: \"init\",\n    value: function init(concreteLogger) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.prefix = options.prefix || 'i18next:';\n      this.logger = concreteLogger || consoleLogger;\n      this.options = options;\n      this.debug = options.debug;\n    }\n  }, {\n    key: \"setDebug\",\n    value: function setDebug(bool) {\n      this.debug = bool;\n    }\n  }, {\n    key: \"log\",\n    value: function log() {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return this.forward(args, 'log', '', true);\n    }\n  }, {\n    key: \"warn\",\n    value: function warn() {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return this.forward(args, 'warn', '', true);\n    }\n  }, {\n    key: \"error\",\n    value: function error() {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return this.forward(args, 'error', '');\n    }\n  }, {\n    key: \"deprecate\",\n    value: function deprecate() {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n    }\n  }, {\n    key: \"forward\",\n    value: function forward(args, lvl, prefix, debugOnly) {\n      if (debugOnly && !this.debug) return null;\n      if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n      return this.logger[lvl](args);\n    }\n  }, {\n    key: \"create\",\n    value: function create(moduleName) {\n      return new Logger(this.logger, _objectSpread({}, {\n        prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n      }, this.options));\n    }\n  }]);\n\n  return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n  function EventEmitter() {\n    _classCallCheck(this, EventEmitter);\n\n    this.observers = {};\n  }\n\n  _createClass(EventEmitter, [{\n    key: \"on\",\n    value: function on(events, listener) {\n      var _this = this;\n\n      events.split(' ').forEach(function (event) {\n        _this.observers[event] = _this.observers[event] || [];\n\n        _this.observers[event].push(listener);\n      });\n      return this;\n    }\n  }, {\n    key: \"off\",\n    value: function off(event, listener) {\n      var _this2 = this;\n\n      if (!this.observers[event]) {\n        return;\n      }\n\n      this.observers[event].forEach(function () {\n        if (!listener) {\n          delete _this2.observers[event];\n        } else {\n          var index = _this2.observers[event].indexOf(listener);\n\n          if (index > -1) {\n            _this2.observers[event].splice(index, 1);\n          }\n        }\n      });\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(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\n      if (this.observers[event]) {\n        var cloned = [].concat(this.observers[event]);\n        cloned.forEach(function (observer) {\n          observer.apply(void 0, args);\n        });\n      }\n\n      if (this.observers['*']) {\n        var _cloned = [].concat(this.observers['*']);\n\n        _cloned.forEach(function (observer) {\n          observer.apply(observer, [event].concat(args));\n        });\n      }\n    }\n  }]);\n\n  return EventEmitter;\n}();\n\n// http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/\nfunction defer() {\n  var res;\n  var rej;\n  var promise = new Promise(function (resolve, reject) {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  /* eslint prefer-template: 0 */\n\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(function (m) {\n    if (s[m]) t[m] = s[m];\n  });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n\n  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    var key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    object = object[key];\n  }\n\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\n\nfunction setPath(object, path, newValue) {\n  var _getLastOfPath = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath.obj,\n      k = _getLastOfPath.k;\n\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  var _getLastOfPath2 = getLastOfPath(object, path, Object),\n      obj = _getLastOfPath2.obj,\n      k = _getLastOfPath2.k;\n\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  var _getLastOfPath3 = getLastOfPath(object, path),\n      obj = _getLastOfPath3.obj,\n      k = _getLastOfPath3.k;\n\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction deepExtend(target, source, overwrite) {\n  /* eslint no-restricted-syntax: 0 */\n  for (var prop in source) {\n    if (prop in target) {\n      // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n      if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n        if (overwrite) target[prop] = source[prop];\n      } else {\n        deepExtend(target[prop], source[prop], overwrite);\n      }\n    } else {\n      target[prop] = source[prop];\n    }\n  }\n\n  return target;\n}\nfunction regexEscape(str) {\n  /* eslint no-useless-escape: 0 */\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n/* eslint-disable */\n\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\n/* eslint-enable */\n\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, function (s) {\n      return _entityMap[s];\n    });\n  }\n\n  return data;\n}\n\nvar ResourceStore =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(ResourceStore, _EventEmitter);\n\n  function ResourceStore(data) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n\n    _classCallCheck(this, ResourceStore);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.data = data || {};\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    return _this;\n  }\n\n  _createClass(ResourceStore, [{\n    key: \"addNamespaces\",\n    value: function addNamespaces(ns) {\n      if (this.options.ns.indexOf(ns) < 0) {\n        this.options.ns.push(ns);\n      }\n    }\n  }, {\n    key: \"removeNamespaces\",\n    value: function removeNamespaces(ns) {\n      var index = this.options.ns.indexOf(ns);\n\n      if (index > -1) {\n        this.options.ns.splice(index, 1);\n      }\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(lng, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var path = [lng, ns];\n      if (key && typeof key !== 'string') path = path.concat(key);\n      if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n      }\n\n      return getPath(this.data, path);\n    }\n  }, {\n    key: \"addResource\",\n    value: function addResource(lng, ns, key, value) {\n      var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n        silent: false\n      };\n      var keySeparator = this.options.keySeparator;\n      if (keySeparator === undefined) keySeparator = '.';\n      var path = [lng, ns];\n      if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        value = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      setPath(this.data, path, value);\n      if (!options.silent) this.emit('added', lng, ns, key, value);\n    }\n  }, {\n    key: \"addResources\",\n    value: function addResources(lng, ns, resources) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n        silent: false\n      };\n\n      /* eslint no-restricted-syntax: 0 */\n      for (var m in resources) {\n        if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n          silent: true\n        });\n      }\n\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"addResourceBundle\",\n    value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n        silent: false\n      };\n      var path = [lng, ns];\n\n      if (lng.indexOf('.') > -1) {\n        path = lng.split('.');\n        deep = resources;\n        resources = ns;\n        ns = path[1];\n      }\n\n      this.addNamespaces(ns);\n      var pack = getPath(this.data, path) || {};\n\n      if (deep) {\n        deepExtend(pack, resources, overwrite);\n      } else {\n        pack = _objectSpread({}, pack, resources);\n      }\n\n      setPath(this.data, path, pack);\n      if (!options.silent) this.emit('added', lng, ns, resources);\n    }\n  }, {\n    key: \"removeResourceBundle\",\n    value: function removeResourceBundle(lng, ns) {\n      if (this.hasResourceBundle(lng, ns)) {\n        delete this.data[lng][ns];\n      }\n\n      this.removeNamespaces(ns);\n      this.emit('removed', lng, ns);\n    }\n  }, {\n    key: \"hasResourceBundle\",\n    value: function hasResourceBundle(lng, ns) {\n      return this.getResource(lng, ns) !== undefined;\n    }\n  }, {\n    key: \"getResourceBundle\",\n    value: function getResourceBundle(lng, ns) {\n      if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0\n\n      if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n      return this.getResource(lng, ns);\n    }\n  }, {\n    key: \"getDataByLanguage\",\n    value: function getDataByLanguage(lng) {\n      return this.data[lng];\n    }\n  }, {\n    key: \"toJSON\",\n    value: function toJSON() {\n      return this.data;\n    }\n  }]);\n\n  return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor: function addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle: function handle(processors, value, key, options, translator) {\n    var _this = this;\n\n    processors.forEach(function (processor) {\n      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nvar Translator =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Translator, _EventEmitter);\n\n  function Translator(services) {\n    var _this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Translator);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat'], services, _assertThisInitialized(_this));\n    _this.options = options;\n\n    if (_this.options.keySeparator === undefined) {\n      _this.options.keySeparator = '.';\n    }\n\n    _this.logger = baseLogger.create('translator');\n    return _this;\n  }\n\n  _createClass(Translator, [{\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng) {\n      if (lng) this.language = lng;\n    }\n  }, {\n    key: \"exists\",\n    value: function exists(key) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        interpolation: {}\n      };\n      var resolved = this.resolve(key, options);\n      return resolved && resolved.res !== undefined;\n    }\n  }, {\n    key: \"extractFromKey\",\n    value: function extractFromKey(key, options) {\n      var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n      if (nsSeparator === undefined) nsSeparator = ':';\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n      var namespaces = options.ns || this.options.defaultNS;\n\n      if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n        var parts = key.split(nsSeparator);\n        if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n        key = parts.join(keySeparator);\n      }\n\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      return {\n        key: key,\n        namespaces: namespaces\n      };\n    }\n  }, {\n    key: \"translate\",\n    value: function translate(keys, options) {\n      var _this2 = this;\n\n      if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n        /* eslint prefer-rest-params: 0 */\n        options = this.options.overloadTranslationOptionHandler(arguments);\n      }\n\n      if (!options) options = {}; // non valid keys handling\n\n      if (keys === undefined || keys === null) return '';\n      if (!Array.isArray(keys)) keys = [String(keys)]; // separators\n\n      var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; // get namespace(s)\n\n      var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n          key = _this$extractFromKey.key,\n          namespaces = _this$extractFromKey.namespaces;\n\n      var namespace = namespaces[namespaces.length - 1]; // return key on CIMode\n\n      var lng = options.lng || this.language;\n      var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n      if (lng && lng.toLowerCase() === 'cimode') {\n        if (appendNamespaceToCIMode) {\n          var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n          return namespace + nsSeparator + key;\n        }\n\n        return key;\n      } // resolve from store\n\n\n      var resolved = this.resolve(keys, options);\n      var res = resolved && resolved.res;\n      var resUsedKey = resolved && resolved.usedKey || key;\n      var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n      var resType = Object.prototype.toString.apply(res);\n      var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n      var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; // object\n\n      var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n      var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n      if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n        if (!options.returnObjects && !this.options.returnObjects) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n          return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n        } // if we got a separator we loop over children - else we just return object as is\n        // as having it set to false means no hierarchy so no lookup for nested values\n\n\n        if (keySeparator) {\n          var resTypeIsArray = resType === '[object Array]';\n          var copy$$1 = resTypeIsArray ? [] : {}; // apply child translation on a copy\n\n          /* eslint no-restricted-syntax: 0 */\n\n          var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n          for (var m in res) {\n            if (Object.prototype.hasOwnProperty.call(res, m)) {\n              var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n              copy$$1[m] = this.translate(deepKey, _objectSpread({}, options, {\n                joinArrays: false,\n                ns: namespaces\n              }));\n              if (copy$$1[m] === deepKey) copy$$1[m] = res[m]; // if nothing found use orginal value as fallback\n            }\n          }\n\n          res = copy$$1;\n        }\n      } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n        // array special treatment\n        res = res.join(joinArrays);\n        if (res) res = this.extendTranslation(res, keys, options);\n      } else {\n        // string, empty or null\n        var usedDefault = false;\n        var usedKey = false; // fallback value\n\n        if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n          usedDefault = true;\n\n          if (options.count !== undefined) {\n            var suffix = this.pluralResolver.getSuffix(lng, options.count);\n            res = options[\"defaultValue\".concat(suffix)];\n          }\n\n          if (!res) res = options.defaultValue;\n        }\n\n        if (!this.isValidLookup(res)) {\n          usedKey = true;\n          res = key;\n        } // save missing\n\n\n        var updateMissing = options.defaultValue && options.defaultValue !== res && this.options.updateMissing;\n\n        if (usedKey || usedDefault || updateMissing) {\n          this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? options.defaultValue : res);\n          var lngs = [];\n          var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n          if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n            for (var i = 0; i < fallbackLngs.length; i++) {\n              lngs.push(fallbackLngs[i]);\n            }\n          } else if (this.options.saveMissingTo === 'all') {\n            lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n          } else {\n            lngs.push(options.lng || this.language);\n          }\n\n          var send = function send(l, k) {\n            if (_this2.options.missingKeyHandler) {\n              _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n              _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? options.defaultValue : res, updateMissing, options);\n            }\n\n            _this2.emit('missingKey', l, namespace, k, res);\n          };\n\n          if (this.options.saveMissing) {\n            var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n\n            if (this.options.saveMissingPlurals && needsPluralHandling) {\n              lngs.forEach(function (l) {\n                var plurals = _this2.pluralResolver.getPluralFormsOfKey(l, key);\n\n                plurals.forEach(function (p) {\n                  return send([l], p);\n                });\n              });\n            } else {\n              send(lngs, key);\n            }\n          }\n        } // extend\n\n\n        res = this.extendTranslation(res, keys, options, resolved); // append namespace if still key\n\n        if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key); // parseMissingKeyHandler\n\n        if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n      } // return\n\n\n      return res;\n    }\n  }, {\n    key: \"extendTranslation\",\n    value: function extendTranslation(res, key, options, resolved) {\n      var _this3 = this;\n\n      if (this.i18nFormat && this.i18nFormat.parse) {\n        res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n          resolved: resolved\n        });\n      } else if (!options.skipInterpolation) {\n        // i18next.parsing\n        if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n          interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n        })); // interpolate\n\n        var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n        if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n        res = this.interpolator.interpolate(res, data, options.lng || this.language, options); // nesting\n\n        if (options.nest !== false) res = this.interpolator.nest(res, function () {\n          return _this3.translate.apply(_this3, arguments);\n        }, options);\n        if (options.interpolation) this.interpolator.reset();\n      } // post process\n\n\n      var postProcess = options.postProcess || this.options.postProcess;\n      var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n      if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n        res = postProcessor.handle(postProcessorNames, res, key, options, this);\n      }\n\n      return res;\n    }\n  }, {\n    key: \"resolve\",\n    value: function resolve(keys) {\n      var _this4 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var found;\n      var usedKey; // plain key\n\n      var exactUsedKey; // key with context / plural\n\n      var usedLng;\n      var usedNS;\n      if (typeof keys === 'string') keys = [keys]; // forEach possible key\n\n      keys.forEach(function (k) {\n        if (_this4.isValidLookup(found)) return;\n\n        var extracted = _this4.extractFromKey(k, options);\n\n        var key = extracted.key;\n        usedKey = key;\n        var namespaces = extracted.namespaces;\n        if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n        var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n        var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n        var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n        namespaces.forEach(function (ns) {\n          if (_this4.isValidLookup(found)) return;\n          usedNS = ns;\n          codes.forEach(function (code) {\n            if (_this4.isValidLookup(found)) return;\n            usedLng = code;\n            var finalKey = key;\n            var finalKeys = [finalKey];\n\n            if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n              _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n            } else {\n              var pluralSuffix;\n              if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count); // fallback for plural if context not found\n\n              if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix); // get key for context if needed\n\n              if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context)); // get key for plural if needed\n\n              if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n            } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n\n\n            var possibleKey;\n            /* eslint no-cond-assign: 0 */\n\n            while (possibleKey = finalKeys.pop()) {\n              if (!_this4.isValidLookup(found)) {\n                exactUsedKey = possibleKey;\n                found = _this4.getResource(code, ns, possibleKey, options);\n              }\n            }\n          });\n        });\n      });\n      return {\n        res: found,\n        usedKey: usedKey,\n        exactUsedKey: exactUsedKey,\n        usedLng: usedLng,\n        usedNS: usedNS\n      };\n    }\n  }, {\n    key: \"isValidLookup\",\n    value: function isValidLookup(res) {\n      return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n    }\n  }, {\n    key: \"getResource\",\n    value: function getResource(code, ns, key) {\n      var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n      if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n      return this.resourceStore.getResource(code, ns, key, options);\n    }\n  }]);\n\n  return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil =\n/*#__PURE__*/\nfunction () {\n  function LanguageUtil(options) {\n    _classCallCheck(this, LanguageUtil);\n\n    this.options = options;\n    this.whitelist = this.options.whitelist || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n\n  _createClass(LanguageUtil, [{\n    key: \"getScriptPartFromCode\",\n    value: function getScriptPartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return null;\n      var p = code.split('-');\n      if (p.length === 2) return null;\n      p.pop();\n      return this.formatLanguageCode(p.join('-'));\n    }\n  }, {\n    key: \"getLanguagePartFromCode\",\n    value: function getLanguagePartFromCode(code) {\n      if (!code || code.indexOf('-') < 0) return code;\n      var p = code.split('-');\n      return this.formatLanguageCode(p[0]);\n    }\n  }, {\n    key: \"formatLanguageCode\",\n    value: function formatLanguageCode(code) {\n      // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n        var p = code.split('-');\n\n        if (this.options.lowerCaseLng) {\n          p = p.map(function (part) {\n            return part.toLowerCase();\n          });\n        } else if (p.length === 2) {\n          p[0] = p[0].toLowerCase();\n          p[1] = p[1].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        } else if (p.length === 3) {\n          p[0] = p[0].toLowerCase(); // if lenght 2 guess it's a country\n\n          if (p[1].length === 2) p[1] = p[1].toUpperCase();\n          if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n          if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n          if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n        }\n\n        return p.join('-');\n      }\n\n      return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n    }\n  }, {\n    key: \"isWhitelisted\",\n    value: function isWhitelisted(code) {\n      if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n        code = this.getLanguagePartFromCode(code);\n      }\n\n      return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n    }\n  }, {\n    key: \"getFallbackCodes\",\n    value: function getFallbackCodes(fallbacks, code) {\n      if (!fallbacks) return [];\n      if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n      if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n      if (!code) return fallbacks[\"default\"] || []; // asume we have an object defining fallbacks\n\n      var found = fallbacks[code];\n      if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n      if (!found) found = fallbacks[this.formatLanguageCode(code)];\n      if (!found) found = fallbacks[\"default\"];\n      return found || [];\n    }\n  }, {\n    key: \"toResolveHierarchy\",\n    value: function toResolveHierarchy(code, fallbackCode) {\n      var _this = this;\n\n      var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n      var codes = [];\n\n      var addCode = function addCode(c) {\n        if (!c) return;\n\n        if (_this.isWhitelisted(c)) {\n          codes.push(c);\n        } else {\n          _this.logger.warn(\"rejecting non-whitelisted language code: \".concat(c));\n        }\n      };\n\n      if (typeof code === 'string' && code.indexOf('-') > -1) {\n        if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n        if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n        if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n      } else if (typeof code === 'string') {\n        addCode(this.formatLanguageCode(code));\n      }\n\n      fallbackCodes.forEach(function (fc) {\n        if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n      });\n      return codes;\n    }\n  }]);\n\n  return LanguageUtil;\n}();\n\n/* eslint-disable */\n\nvar sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nvar _rulesPluralsTypes = {\n  1: function _(n) {\n    return Number(n > 1);\n  },\n  2: function _(n) {\n    return Number(n != 1);\n  },\n  3: function _(n) {\n    return 0;\n  },\n  4: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function _(n) {\n    return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function _(n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function _(n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function _(n) {\n    return Number(n >= 2);\n  },\n  10: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function _(n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function _(n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function _(n) {\n    return Number(n !== 0);\n  },\n  14: function _(n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function _(n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function _(n) {\n    return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n  },\n  18: function _(n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function _(n) {\n    return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function _(n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function _(n) {\n    return Number(n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\n/* eslint-enable */\n\nfunction createRules() {\n  var rules = {};\n  sets.forEach(function (set) {\n    set.lngs.forEach(function (l) {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\n\nvar PluralResolver =\n/*#__PURE__*/\nfunction () {\n  function PluralResolver(languageUtils) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, PluralResolver);\n\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    this.rules = createRules();\n  }\n\n  _createClass(PluralResolver, [{\n    key: \"addRule\",\n    value: function addRule(lng, obj) {\n      this.rules[lng] = obj;\n    }\n  }, {\n    key: \"getRule\",\n    value: function getRule(code) {\n      return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n    }\n  }, {\n    key: \"needsPlural\",\n    value: function needsPlural(code) {\n      var rule = this.getRule(code);\n      return rule && rule.numbers.length > 1;\n    }\n  }, {\n    key: \"getPluralFormsOfKey\",\n    value: function getPluralFormsOfKey(code, key) {\n      var _this = this;\n\n      var ret = [];\n      var rule = this.getRule(code);\n      if (!rule) return ret;\n      rule.numbers.forEach(function (n) {\n        var suffix = _this.getSuffix(code, n);\n\n        ret.push(\"\".concat(key).concat(suffix));\n      });\n      return ret;\n    }\n  }, {\n    key: \"getSuffix\",\n    value: function getSuffix(code, count) {\n      var _this2 = this;\n\n      var rule = this.getRule(code);\n\n      if (rule) {\n        // if (rule.numbers.length === 1) return ''; // only singular\n        var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n        var suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural\n\n        if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          if (suffix === 2) {\n            suffix = 'plural';\n          } else if (suffix === 1) {\n            suffix = '';\n          }\n        }\n\n        var returnSuffix = function returnSuffix() {\n          return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n        }; // COMPATIBILITY JSON\n        // v1\n\n\n        if (this.options.compatibilityJSON === 'v1') {\n          if (suffix === 1) return '';\n          if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n          return returnSuffix();\n        } else if (\n        /* v2 */\n        this.options.compatibilityJSON === 'v2') {\n          return returnSuffix();\n        } else if (\n        /* v3 - gettext index */\n        this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n          return returnSuffix();\n        }\n\n        return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n      }\n\n      this.logger.warn(\"no plural rule found for: \".concat(code));\n      return '';\n    }\n  }]);\n\n  return PluralResolver;\n}();\n\nvar Interpolator =\n/*#__PURE__*/\nfunction () {\n  function Interpolator() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Interpolator);\n\n    this.logger = baseLogger.create('interpolator');\n    this.init(options, true);\n  }\n  /* eslint no-param-reassign: 0 */\n\n\n  _createClass(Interpolator, [{\n    key: \"init\",\n    value: function init() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var reset = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (reset) {\n        this.options = options;\n\n        this.format = options.interpolation && options.interpolation.format || function (value) {\n          return value;\n        };\n      }\n\n      if (!options.interpolation) options.interpolation = {\n        escapeValue: true\n      };\n      var iOpts = options.interpolation;\n      this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n      this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n      this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n      this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n      this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n      this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n      this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n      this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n      this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n      this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n      this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; // the regexp\n\n      this.resetRegExp();\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      if (this.options) this.init(this.options);\n    }\n  }, {\n    key: \"resetRegExp\",\n    value: function resetRegExp() {\n      // the regexp\n      var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n      this.regexp = new RegExp(regexpStr, 'g');\n      var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n      this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n      var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n      this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n    }\n  }, {\n    key: \"interpolate\",\n    value: function interpolate(str, data, lng, options) {\n      var _this = this;\n\n      var match;\n      var value;\n      var replaces;\n\n      function regexSafe(val) {\n        return val.replace(/\\$/g, '$$$$');\n      }\n\n      var handleFormat = function handleFormat(key) {\n        if (key.indexOf(_this.formatSeparator) < 0) return getPath(data, key);\n        var p = key.split(_this.formatSeparator);\n        var k = p.shift().trim();\n        var f = p.join(_this.formatSeparator).trim();\n        return _this.format(getPath(data, k), f, lng);\n      };\n\n      this.resetRegExp();\n      var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n      replaces = 0; // unescape if has unescapePrefix/Suffix\n\n      /* eslint no-cond-assign: 0 */\n\n      while (match = this.regexpUnescape.exec(str)) {\n        value = handleFormat(match[1].trim());\n        str = str.replace(match[0], value);\n        this.regexpUnescape.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      replaces = 0; // regular escape on demand\n\n      while (match = this.regexp.exec(str)) {\n        value = handleFormat(match[1].trim());\n\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            var temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else {\n            this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n\n        value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n        replaces++;\n\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n\n      return str;\n    }\n  }, {\n    key: \"nest\",\n    value: function nest(str, fc) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var match;\n      var value;\n\n      var clonedOptions = _objectSpread({}, options);\n\n      clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n      // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n\n      function handleHasOptions(key, inheritedOptions) {\n        if (key.indexOf(',') < 0) return key;\n        var p = key.split(',');\n        key = p.shift();\n        var optionsString = p.join(',');\n        optionsString = this.interpolate(optionsString, clonedOptions);\n        optionsString = optionsString.replace(/'/g, '\"');\n\n        try {\n          clonedOptions = JSON.parse(optionsString);\n          if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n        } catch (e) {\n          this.logger.error(\"failed parsing options string in nesting for key \".concat(key), e);\n        }\n\n        return key;\n      } // regular escape on demand\n\n\n      while (match = this.nestingRegexp.exec(str)) {\n        value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); // is only the nesting key (key1 = '$(key2)') return the value without stringify\n\n        if (value && match[0] === str && typeof value !== 'string') return value; // no string to include or empty\n\n        if (typeof value !== 'string') value = makeString(value);\n\n        if (!value) {\n          this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n          value = '';\n        } // Nested keys should not be escaped by default #854\n        // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n\n\n        str = str.replace(match[0], value);\n        this.regexp.lastIndex = 0;\n      }\n\n      return str;\n    }\n  }]);\n\n  return Interpolator;\n}();\n\nfunction remove(arr, what) {\n  var found = arr.indexOf(what);\n\n  while (found !== -1) {\n    arr.splice(found, 1);\n    found = arr.indexOf(what);\n  }\n}\n\nvar Connector =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(Connector, _EventEmitter);\n\n  function Connector(backend, store, services) {\n    var _this;\n\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    _classCallCheck(this, Connector);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.backend = backend;\n    _this.store = store;\n    _this.languageUtils = services.languageUtils;\n    _this.options = options;\n    _this.logger = baseLogger.create('backendConnector');\n    _this.state = {};\n    _this.queue = [];\n\n    if (_this.backend && _this.backend.init) {\n      _this.backend.init(services, options.backend, options);\n    }\n\n    return _this;\n  }\n\n  _createClass(Connector, [{\n    key: \"queueLoad\",\n    value: function queueLoad(languages, namespaces, options, callback) {\n      var _this2 = this;\n\n      // find what needs to be loaded\n      var toLoad = [];\n      var pending = [];\n      var toLoadLanguages = [];\n      var toLoadNamespaces = [];\n      languages.forEach(function (lng) {\n        var hasAllNamespaces = true;\n        namespaces.forEach(function (ns) {\n          var name = \"\".concat(lng, \"|\").concat(ns);\n\n          if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n            _this2.state[name] = 2; // loaded\n          } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n            if (pending.indexOf(name) < 0) pending.push(name);\n          } else {\n            _this2.state[name] = 1; // pending\n\n            hasAllNamespaces = false;\n            if (pending.indexOf(name) < 0) pending.push(name);\n            if (toLoad.indexOf(name) < 0) toLoad.push(name);\n            if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n          }\n        });\n        if (!hasAllNamespaces) toLoadLanguages.push(lng);\n      });\n\n      if (toLoad.length || pending.length) {\n        this.queue.push({\n          pending: pending,\n          loaded: {},\n          errors: [],\n          callback: callback\n        });\n      }\n\n      return {\n        toLoad: toLoad,\n        pending: pending,\n        toLoadLanguages: toLoadLanguages,\n        toLoadNamespaces: toLoadNamespaces\n      };\n    }\n  }, {\n    key: \"loaded\",\n    value: function loaded(name, err, data) {\n      var _name$split = name.split('|'),\n          _name$split2 = _slicedToArray(_name$split, 2),\n          lng = _name$split2[0],\n          ns = _name$split2[1];\n\n      if (err) this.emit('failedLoading', lng, ns, err);\n\n      if (data) {\n        this.store.addResourceBundle(lng, ns, data);\n      } // set loaded\n\n\n      this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace\n\n      var loaded = {}; // callback if ready\n\n      this.queue.forEach(function (q) {\n        pushPath(q.loaded, [lng], ns);\n        remove(q.pending, name);\n        if (err) q.errors.push(err);\n\n        if (q.pending.length === 0 && !q.done) {\n          // only do once per loaded -> this.emit('loaded', q.loaded);\n          Object.keys(q.loaded).forEach(function (l) {\n            if (!loaded[l]) loaded[l] = [];\n\n            if (q.loaded[l].length) {\n              q.loaded[l].forEach(function (ns) {\n                if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n              });\n            }\n          });\n          /* eslint no-param-reassign: 0 */\n\n          q.done = true;\n\n          if (q.errors.length) {\n            q.callback(q.errors);\n          } else {\n            q.callback();\n          }\n        }\n      }); // emit consolidated loaded event\n\n      this.emit('loaded', loaded); // remove done load requests\n\n      this.queue = this.queue.filter(function (q) {\n        return !q.done;\n      });\n    }\n  }, {\n    key: \"read\",\n    value: function read(lng, ns, fcName) {\n      var _this3 = this;\n\n      var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n      var callback = arguments.length > 5 ? arguments[5] : undefined;\n      if (!lng.length) return callback(null, {}); // noting to load\n\n      return this.backend[fcName](lng, ns, function (err, data) {\n        if (err && data\n        /* = retryFlag */\n        && tried < 5) {\n          setTimeout(function () {\n            _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n          }, wait);\n          return;\n        }\n\n        callback(err, data);\n      });\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"prepareLoading\",\n    value: function prepareLoading(languages, namespaces) {\n      var _this4 = this;\n\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n      if (!this.backend) {\n        this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n        return callback && callback();\n      }\n\n      if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n      if (typeof namespaces === 'string') namespaces = [namespaces];\n      var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n      if (!toLoad.toLoad.length) {\n        if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n\n        return null; // pendings will trigger callback\n      }\n\n      toLoad.toLoad.forEach(function (name) {\n        _this4.loadOne(name);\n      });\n    }\n  }, {\n    key: \"load\",\n    value: function load(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {}, callback);\n    }\n  }, {\n    key: \"reload\",\n    value: function reload(languages, namespaces, callback) {\n      this.prepareLoading(languages, namespaces, {\n        reload: true\n      }, callback);\n    }\n  }, {\n    key: \"loadOne\",\n    value: function loadOne(name) {\n      var _this5 = this;\n\n      var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n      var _name$split3 = name.split('|'),\n          _name$split4 = _slicedToArray(_name$split3, 2),\n          lng = _name$split4[0],\n          ns = _name$split4[1];\n\n      this.read(lng, ns, 'read', null, null, function (err, data) {\n        if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n        if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n        _this5.loaded(name, err, data);\n      });\n    }\n  }, {\n    key: \"saveMissing\",\n    value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n      var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n      if (this.backend && this.backend.create) {\n        this.backend.create(languages, namespace, key, fallbackValue, null\n        /* unused callback */\n        , _objectSpread({}, options, {\n          isUpdate: isUpdate\n        }));\n      } // write to store to avoid resending\n\n\n      if (!languages || !languages[0]) return;\n      this.store.addResource(languages[0], namespace, key, fallbackValue);\n    }\n  }]);\n\n  return Connector;\n}(EventEmitter);\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    // string or array of namespaces\n    whitelist: false,\n    // array with whitelisted languages\n    nonExplicitWhitelist: false,\n    load: 'all',\n    // | currentOnly | languageOnly\n    preload: false,\n    // array with preload languages\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    // allow bundling certain languages that are not remotely fetched\n    saveMissing: false,\n    // enable to send missing values\n    updateMissing: false,\n    // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)\n    saveMissingTo: 'fallback',\n    // 'current' || 'all'\n    saveMissingPlurals: true,\n    // will save all forms not only singular key\n    missingKeyHandler: false,\n    // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n    missingInterpolationHandler: false,\n    // function(str, match)\n    postProcess: false,\n    // string or array of postProcessor names\n    returnNull: true,\n    // allows null value as valid translation\n    returnEmptyString: true,\n    // allows empty string value as valid translation\n    returnObjects: false,\n    joinArrays: false,\n    // or string to join array\n    returnedObjectHandler: function returnedObjectHandler() {},\n    // function(key, value, options) triggered if key returns object but returnObjects is set to false\n    parseMissingKeyHandler: false,\n    // function(key) parsed a key that was not found in t() before returning\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      var ret = {};\n      if (_typeof(args[1]) === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n      if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n        var options = args[3] || args[2];\n        Object.keys(options).forEach(function (key) {\n          ret[key] = options[key];\n        });\n      }\n\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: function format(value, _format, lng) {\n        return value;\n      },\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      // prefixEscaped: '{{',\n      // suffixEscaped: '}}',\n      // unescapeSuffix: '',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      // nestingPrefixEscaped: '$t(',\n      // nestingSuffixEscaped: ')',\n      // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n      maxReplaces: 1000 // max replaces to prevent endless loop\n\n    }\n  };\n}\n/* eslint no-param-reassign: 0 */\n\nfunction transformOptions(options) {\n  // create namespace object if namespace is passed in as string\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; // extend whitelist with cimode\n\n  if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n    options.whitelist = options.whitelist.concat(['cimode']);\n  }\n\n  return options;\n}\n\nfunction noop() {}\n\nvar I18n =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n  _inherits(I18n, _EventEmitter);\n\n  function I18n() {\n    var _this;\n\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n    _classCallCheck(this, I18n);\n\n    _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n    EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)\n\n    _this.options = transformOptions(options);\n    _this.services = {};\n    _this.logger = baseLogger;\n    _this.modules = {\n      external: []\n    };\n\n    if (callback && !_this.isInitialized && !options.isClone) {\n      // https://github.com/i18next/i18next/issues/879\n      if (!_this.options.initImmediate) {\n        _this.init(options, callback);\n\n        return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n      }\n\n      setTimeout(function () {\n        _this.init(options, callback);\n      }, 0);\n    }\n\n    return _this;\n  }\n\n  _createClass(I18n, [{\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      this.options = _objectSpread({}, get(), this.options, transformOptions(options));\n      this.format = this.options.interpolation.format;\n      if (!callback) callback = noop;\n\n      function createClassOnDemand(ClassOrObject) {\n        if (!ClassOrObject) return null;\n        if (typeof ClassOrObject === 'function') return new ClassOrObject();\n        return ClassOrObject;\n      } // init services\n\n\n      if (!this.options.isClone) {\n        if (this.modules.logger) {\n          baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n        } else {\n          baseLogger.init(null, this.options);\n        }\n\n        var lu = new LanguageUtil(this.options);\n        this.store = new ResourceStore(this.options.resources, this.options);\n        var s = this.services;\n        s.logger = baseLogger;\n        s.resourceStore = this.store;\n        s.languageUtils = lu;\n        s.pluralResolver = new PluralResolver(lu, {\n          prepend: this.options.pluralSeparator,\n          compatibilityJSON: this.options.compatibilityJSON,\n          simplifyPluralSuffix: this.options.simplifyPluralSuffix\n        });\n        s.interpolator = new Interpolator(this.options);\n        s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); // pipe events from backendConnector\n\n        s.backendConnector.on('*', function (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\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n\n        if (this.modules.languageDetector) {\n          s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n          s.languageDetector.init(s, this.options.detection, this.options);\n        }\n\n        if (this.modules.i18nFormat) {\n          s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n          if (s.i18nFormat.init) s.i18nFormat.init(this);\n        }\n\n        this.translator = new Translator(this.services, this.options); // pipe events from translator\n\n        this.translator.on('*', function (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\n          _this2.emit.apply(_this2, [event].concat(args));\n        });\n        this.modules.external.forEach(function (m) {\n          if (m.init) m.init(_this2);\n        });\n      } // append api\n\n\n      var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n      storeApi.forEach(function (fcName) {\n        _this2[fcName] = function () {\n          var _this2$store;\n\n          return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n        };\n      });\n      var deferred = defer();\n\n      var load = function load() {\n        _this2.changeLanguage(_this2.options.lng, function (err, t) {\n          _this2.isInitialized = true;\n\n          _this2.logger.log('initialized', _this2.options);\n\n          _this2.emit('initialized', _this2.options);\n\n          deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning)\n\n          callback(err, t);\n        });\n      };\n\n      if (this.options.resources || !this.options.initImmediate) {\n        load();\n      } else {\n        setTimeout(load, 0);\n      }\n\n      return deferred;\n    }\n    /* eslint consistent-return: 0 */\n\n  }, {\n    key: \"loadResources\",\n    value: function loadResources() {\n      var _this3 = this;\n\n      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n      if (!this.options.resources || this.options.partialBundledLanguages) {\n        if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n        var toLoad = [];\n\n        var append = function append(lng) {\n          if (!lng) return;\n\n          var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n          lngs.forEach(function (l) {\n            if (toLoad.indexOf(l) < 0) toLoad.push(l);\n          });\n        };\n\n        if (!this.language) {\n          // at least load fallbacks in this case\n          var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n          fallbacks.forEach(function (l) {\n            return append(l);\n          });\n        } else {\n          append(this.language);\n        }\n\n        if (this.options.preload) {\n          this.options.preload.forEach(function (l) {\n            return append(l);\n          });\n        }\n\n        this.services.backendConnector.load(toLoad, this.options.ns, callback);\n      } else {\n        callback(null);\n      }\n    }\n  }, {\n    key: \"reloadResources\",\n    value: function reloadResources(lngs, ns, callback) {\n      var deferred = defer();\n      if (!lngs) lngs = this.languages;\n      if (!ns) ns = this.options.ns;\n      if (!callback) callback = noop;\n      this.services.backendConnector.reload(lngs, ns, function (err) {\n        deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning)\n\n        callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"use\",\n    value: function use(module) {\n      if (module.type === 'backend') {\n        this.modules.backend = module;\n      }\n\n      if (module.type === 'logger' || module.log && module.warn && module.error) {\n        this.modules.logger = module;\n      }\n\n      if (module.type === 'languageDetector') {\n        this.modules.languageDetector = module;\n      }\n\n      if (module.type === 'i18nFormat') {\n        this.modules.i18nFormat = module;\n      }\n\n      if (module.type === 'postProcessor') {\n        postProcessor.addPostProcessor(module);\n      }\n\n      if (module.type === '3rdParty') {\n        this.modules.external.push(module);\n      }\n\n      return this;\n    }\n  }, {\n    key: \"changeLanguage\",\n    value: function changeLanguage(lng, callback) {\n      var _this4 = this;\n\n      var deferred = defer();\n      this.emit('languageChanging', lng);\n\n      var done = function done(err, l) {\n        _this4.translator.changeLanguage(l);\n\n        if (l) {\n          _this4.emit('languageChanged', l);\n\n          _this4.logger.log('languageChanged', l);\n        }\n\n        deferred.resolve(function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n        if (callback) callback(err, function () {\n          return _this4.t.apply(_this4, arguments);\n        });\n      };\n\n      var setLng = function setLng(l) {\n        if (l) {\n          _this4.language = l;\n          _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n          if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n          if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n        }\n\n        _this4.loadResources(function (err) {\n          done(err, l);\n        });\n      };\n\n      if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n        setLng(this.services.languageDetector.detect());\n      } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n        this.services.languageDetector.detect(setLng);\n      } else {\n        setLng(lng);\n      }\n\n      return deferred;\n    }\n  }, {\n    key: \"getFixedT\",\n    value: function getFixedT(lng, ns) {\n      var _this5 = this;\n\n      var fixedT = function fixedT(key, opts) {\n        var options = _objectSpread({}, opts);\n\n        if (_typeof(opts) !== 'object') {\n          for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n            rest[_key3 - 2] = arguments[_key3];\n          }\n\n          options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n        }\n\n        options.lng = options.lng || fixedT.lng;\n        options.lngs = options.lngs || fixedT.lngs;\n        options.ns = options.ns || fixedT.ns;\n        return _this5.t(key, options);\n      };\n\n      if (typeof lng === 'string') {\n        fixedT.lng = lng;\n      } else {\n        fixedT.lngs = lng;\n      }\n\n      fixedT.ns = ns;\n      return fixedT;\n    }\n  }, {\n    key: \"t\",\n    value: function t() {\n      var _this$translator;\n\n      return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n    }\n  }, {\n    key: \"exists\",\n    value: function exists() {\n      var _this$translator2;\n\n      return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n    }\n  }, {\n    key: \"setDefaultNamespace\",\n    value: function setDefaultNamespace(ns) {\n      this.options.defaultNS = ns;\n    }\n  }, {\n    key: \"loadNamespaces\",\n    value: function loadNamespaces(ns, callback) {\n      var _this6 = this;\n\n      var deferred = defer();\n\n      if (!this.options.ns) {\n        callback && callback();\n        return Promise.resolve();\n      }\n\n      if (typeof ns === 'string') ns = [ns];\n      ns.forEach(function (n) {\n        if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n      });\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"loadLanguages\",\n    value: function loadLanguages(lngs, callback) {\n      var deferred = defer();\n      if (typeof lngs === 'string') lngs = [lngs];\n      var preloaded = this.options.preload || [];\n      var newLngs = lngs.filter(function (lng) {\n        return preloaded.indexOf(lng) < 0;\n      }); // Exit early if all given languages are already preloaded\n\n      if (!newLngs.length) {\n        if (callback) callback();\n        return Promise.resolve();\n      }\n\n      this.options.preload = preloaded.concat(newLngs);\n      this.loadResources(function (err) {\n        deferred.resolve();\n        if (callback) callback(err);\n      });\n      return deferred;\n    }\n  }, {\n    key: \"dir\",\n    value: function dir(lng) {\n      if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n      if (!lng) return 'rtl';\n      var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n      return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n    }\n    /* eslint class-methods-use-this: 0 */\n\n  }, {\n    key: \"createInstance\",\n    value: function createInstance() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 ? arguments[1] : undefined;\n      return new I18n(options, callback);\n    }\n  }, {\n    key: \"cloneInstance\",\n    value: function cloneInstance() {\n      var _this7 = this;\n\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n      var mergedOptions = _objectSpread({}, this.options, options, {\n        isClone: true\n      });\n\n      var clone = new I18n(mergedOptions);\n      var membersToCopy = ['store', 'services', 'language'];\n      membersToCopy.forEach(function (m) {\n        clone[m] = _this7[m];\n      });\n      clone.translator = new Translator(clone.services, clone.options);\n      clone.translator.on('*', function (event) {\n        for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n          args[_key4 - 1] = arguments[_key4];\n        }\n\n        clone.emit.apply(clone, [event].concat(args));\n      });\n      clone.init(mergedOptions, callback);\n      clone.translator.options = clone.options; // sync options\n\n      return clone;\n    }\n  }]);\n\n  return I18n;\n}(EventEmitter);\n\nvar i18next = new I18n();\n\nexport default i18next;\n","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction addQueryString(url, params) {\n  if (params && _typeof(params) === 'object') {\n    var queryString = '',\n        e = encodeURIComponent; // Must encode data\n\n    for (var paramName in params) {\n      queryString += '&' + e(paramName) + '=' + e(params[paramName]);\n    }\n\n    if (!queryString) {\n      return url;\n    }\n\n    url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n  }\n\n  return url;\n} // https://gist.github.com/Xeoncross/7663273\n\n\nfunction ajax(url, options, callback, data, cache) {\n  if (data && _typeof(data) === 'object') {\n    if (!cache) {\n      data['_t'] = new Date();\n    } // URL encoded form data must be in querystring format\n\n\n    data = addQueryString('', data).slice(1);\n  }\n\n  if (options.queryStringParams) {\n    url = addQueryString(url, options.queryStringParams);\n  }\n\n  try {\n    var x;\n\n    if (XMLHttpRequest) {\n      x = new XMLHttpRequest();\n    } else {\n      x = new ActiveXObject('MSXML2.XMLHTTP.3.0');\n    }\n\n    x.open(data ? 'POST' : 'GET', url, 1);\n\n    if (!options.crossDomain) {\n      x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n    }\n\n    x.withCredentials = !!options.withCredentials;\n\n    if (data) {\n      x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n    }\n\n    if (x.overrideMimeType) {\n      x.overrideMimeType(\"application/json\");\n    }\n\n    var h = options.customHeaders;\n\n    if (h) {\n      for (var i in h) {\n        x.setRequestHeader(i, h[i]);\n      }\n    }\n\n    x.onreadystatechange = function () {\n      x.readyState > 3 && callback && callback(x.responseText, x);\n    };\n\n    x.send(data);\n  } catch (e) {\n    console && console.log(e);\n  }\n}\n\nfunction getDefaults() {\n  return {\n    loadPath: '/locales/{{lng}}/{{ns}}.json',\n    addPath: '/locales/add/{{lng}}/{{ns}}',\n    allowMultiLoading: false,\n    parse: JSON.parse,\n    crossDomain: false,\n    ajax: ajax\n  };\n}\n\nvar Backend =\n/*#__PURE__*/\nfunction () {\n  function Backend(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Backend);\n\n    this.init(services, options);\n    this.type = 'backend';\n  }\n\n  _createClass(Backend, [{\n    key: \"init\",\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      this.services = services;\n      this.options = defaults(options, this.options || {}, getDefaults());\n    }\n  }, {\n    key: \"readMulti\",\n    value: function readMulti(languages, namespaces, callback) {\n      var loadPath = this.options.loadPath;\n\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath(languages, namespaces);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, {\n        lng: languages.join('+'),\n        ns: namespaces.join('+')\n      });\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: \"read\",\n    value: function read(language, namespace, callback) {\n      var loadPath = this.options.loadPath;\n\n      if (typeof this.options.loadPath === 'function') {\n        loadPath = this.options.loadPath([language], [namespace]);\n      }\n\n      var url = this.services.interpolator.interpolate(loadPath, {\n        lng: language,\n        ns: namespace\n      });\n      this.loadUrl(url, callback);\n    }\n  }, {\n    key: \"loadUrl\",\n    value: function loadUrl(url, callback) {\n      var _this = this;\n\n      this.options.ajax(url, this.options, function (data, xhr) {\n        if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true\n        /* retry */\n        );\n        if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false\n        /* no retry */\n        );\n        var ret, err;\n\n        try {\n          ret = _this.options.parse(data, url);\n        } catch (e) {\n          err = 'failed parsing ' + url + ' to json';\n        }\n\n        if (err) return callback(err, false);\n        callback(null, ret);\n      });\n    }\n  }, {\n    key: \"create\",\n    value: function create(languages, namespace, key, fallbackValue) {\n      var _this2 = this;\n\n      if (typeof languages === 'string') languages = [languages];\n      var payload = {};\n      payload[key] = fallbackValue || '';\n      languages.forEach(function (lng) {\n        var url = _this2.services.interpolator.interpolate(_this2.options.addPath, {\n          lng: lng,\n          ns: namespace\n        });\n\n        _this2.options.ajax(url, _this2.options, function (data, xhr) {//const statusCode = xhr.status.toString();\n          // TODO: if statusCode === 4xx do log\n        }, payload);\n      });\n    }\n  }]);\n\n  return Backend;\n}();\n\nBackend.type = 'backend';\n\nexport default Backend;\n","/* @flow */\n\ndeclare var config: Object;\n\n/**\n * Custom language detection, just returns the config property if any.\n */\nexport default {\n    /**\n     * Does not support caching.\n     *\n     * @returns {void}\n     */\n    cacheUserLanguage: Function.prototype,\n\n    /**\n     * Looks the language up in the config.\n     *\n     * @returns {string} The default language if any.\n     */\n    lookup() {\n        return config.defaultLanguage;\n    },\n\n    /**\n     * Name of the language detector.\n     */\n    name: 'configLanguageDetector'\n};\n","/* @flow */\n\ndeclare var navigator: Object;\n\n/**\n * Custom language detection, just returns the config property if any.\n */\nexport default {\n    /**\n     * Does not support caching.\n     *\n     * @returns {void}\n     */\n    cacheUserLanguage: Function.prototype,\n\n    /**\n     * Looks the language up in the config.\n     *\n     * @returns {string} The default language if any.\n     */\n    lookup() {\n        let found = [];\n\n        if (typeof navigator !== 'undefined') {\n            if (navigator.languages) {\n                // chrome only; not an array, so can't use .push.apply instead of iterating\n                for (let i = 0; i < navigator.languages.length; i++) {\n                    found.push(navigator.languages[i]);\n                }\n            }\n            if (navigator.userLanguage) {\n                found.push(navigator.userLanguage);\n            }\n            if (navigator.language) {\n                found.push(navigator.language);\n            }\n        }\n\n        found = found.map<string>(normalizeLanguage);\n\n        return found.length > 0 ? found : undefined;\n    },\n\n    /**\n     * Name of the language detector.\n     */\n    name: 'customNavigatorDetector'\n};\n\n/**\n * Normalize language format.\n *\n * (en-US => enUS)\n * (en-gb => enGB)\n * (es-es => es).\n *\n * @param {string} language - Language.\n * @returns {string} The normalized language.\n */\nfunction normalizeLanguage(language) {\n    const [ lang, variant ] = language.replace('_', '-').split('-');\n\n    if (!variant || lang === variant) {\n        return lang;\n    }\n\n    return lang + variant.toUpperCase();\n}\n","/* @flow */\n\nimport BrowserLanguageDetector from 'i18next-browser-languagedetector';\n\nimport configLanguageDetector from './configLanguageDetector';\nimport customNavigatorDetector from './customNavigatorDetector';\n\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The ordered list (by name) of language detectors to be utilized as backends\n * by the singleton language detector for Web.\n *\n * @type {Array<string>}\n */\nconst order = [\n    'querystring',\n    'localStorage'\n];\n\n// Allow i18next to detect the system language reported by the Web browser\n// itself.\ninterfaceConfig.LANG_DETECTION && order.push(customNavigatorDetector.name);\n\n// Default use configured language\norder.push(configLanguageDetector.name);\n\n/**\n * The singleton language detector for Web.\n */\nconst languageDetector\n    = new BrowserLanguageDetector(\n        /* services */ null,\n        /* options */ {\n            caches: [ 'localStorage' ],\n            lookupLocalStorage: 'language',\n            lookupQuerystring: 'lang',\n            order\n        });\n\n// Add the language detector which looks the language up in the config. Its\n// order has already been established above.\nlanguageDetector.addDetector(customNavigatorDetector);\nlanguageDetector.addDetector(configLanguageDetector);\n\nexport default languageDetector;\n","// @flow\n\nimport COUNTRIES_RESOURCES from 'i18n-iso-countries/langs/en.json';\nimport i18next from 'i18next';\nimport I18nextXHRBackend from 'i18next-xhr-backend';\n\nimport LANGUAGES_RESOURCES from '../../../../lang/languages.json';\nimport MAIN_RESOURCES from '../../../../lang/main.json';\n\nimport languageDetector from './languageDetector';\n\n/**\n * The available/supported languages.\n *\n * XXX The element at index zero is the default language.\n *\n * @public\n * @type {Array<string>}\n */\nexport const LANGUAGES: Array<string> = Object.keys(LANGUAGES_RESOURCES);\n\n/**\n * The default language.\n *\n * XXX The element at index zero of {@link LANGUAGES} is the default language.\n *\n * @public\n * @type {string} The default language.\n */\nexport const DEFAULT_LANGUAGE = LANGUAGES[0];\n\n/**\n * The options to initialize i18next with.\n *\n * @type {Object}\n */\nconst options = {\n    backend: {\n        loadPath: 'lang/{{ns}}-{{lng}}.json'\n    },\n    defaultNS: 'main',\n    fallbackLng: DEFAULT_LANGUAGE,\n    interpolation: {\n        escapeValue: false // not needed for react as it escapes by default\n    },\n    load: 'languageOnly',\n    ns: [ 'main', 'languages', 'countries' ],\n    react: {\n        useSuspense: false\n    },\n    returnEmptyString: false,\n    returnNull: false,\n\n    // XXX i18next modifies the array lngWhitelist so make sure to clone\n    // LANGUAGES.\n    whitelist: LANGUAGES.slice()\n};\n\ni18next\n    .use(navigator.product === 'ReactNative' ? {} : I18nextXHRBackend)\n    .use(languageDetector)\n    .init(options);\n\n// Add default language which is preloaded from the source code.\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'countries',\n    COUNTRIES_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'languages',\n    LANGUAGES_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\ni18next.addResourceBundle(\n    DEFAULT_LANGUAGE,\n    'main',\n    MAIN_RESOURCES,\n    /* deep */ true,\n    /* overwrite */ true);\n\n// Add builtin languages.\n// XXX: Note we are using require here, because we want the side-effects of the\n// import, but imports can only be placed at the top, and it would be too early,\n// since i18next is not yet initialized at that point.\nrequire('./BuiltinLanguages');\n\nexport default i18next;\n","// @flow\n\nimport moment from 'moment';\n\nimport i18next from './i18next';\n\n// allows for moment durations to be formatted\nimport 'moment-duration-format';\n\n// MomentJS uses static language bundle loading, so in order to support dynamic\n// language selection in the app we need to load all bundles that we support in\n// the app.\nrequire('moment/locale/af');\nrequire('moment/locale/ar');\nrequire('moment/locale/be');\nrequire('moment/locale/bg');\nrequire('moment/locale/ca');\nrequire('moment/locale/cs');\nrequire('moment/locale/da');\nrequire('moment/locale/de');\nrequire('moment/locale/el');\nrequire('moment/locale/en-gb');\nrequire('moment/locale/eo');\nrequire('moment/locale/es-us');\nrequire('moment/locale/es');\nrequire('moment/locale/et');\nrequire('moment/locale/eu');\nrequire('moment/locale/fa');\nrequire('moment/locale/fi');\nrequire('moment/locale/fr-ca');\nrequire('moment/locale/fr');\nrequire('moment/locale/gl');\nrequire('moment/locale/he');\nrequire('moment/locale/hr');\nrequire('moment/locale/hu');\nrequire('moment/locale/hy-am');\nrequire('moment/locale/id');\nrequire('moment/locale/is');\nrequire('moment/locale/it');\nrequire('moment/locale/ja');\nrequire('moment/locale/ko');\nrequire('moment/locale/lt');\nrequire('moment/locale/lv');\nrequire('moment/locale/ml');\nrequire('moment/locale/mn');\nrequire('moment/locale/mr');\nrequire('moment/locale/nb');\nrequire('moment/locale/nl');\nrequire('moment/locale/oc-lnc');\nrequire('moment/locale/pl');\nrequire('moment/locale/pt');\nrequire('moment/locale/pt-br');\nrequire('moment/locale/ro');\nrequire('moment/locale/ru');\nrequire('moment/locale/sk');\nrequire('moment/locale/sl');\nrequire('moment/locale/sr');\nrequire('moment/locale/sv');\nrequire('moment/locale/tr');\nrequire('moment/locale/uk');\nrequire('moment/locale/vi');\nrequire('moment/locale/zh-cn');\nrequire('moment/locale/zh-tw');\n\n/**\n * Returns a localized date formatter initialized with a specific {@code Date}\n * or timestamp ({@code number}).\n *\n * @private\n * @param {Date | number} dateOrTimeStamp - The date or unix timestamp (ms)\n * to format.\n * @returns {Object}\n */\nexport function getLocalizedDateFormatter(dateOrTimeStamp: Date | number) {\n    return moment(dateOrTimeStamp).locale(_getSupportedLocale());\n}\n\n/**\n * Returns a localized duration formatter initialized with a\n * specific duration ({@code number}).\n *\n * @private\n * @param {number} duration - The duration (ms)\n * to format.\n * @returns {Object}\n */\nexport function getLocalizedDurationFormatter(duration: number) {\n    // FIXME The flow-type definition of moment is v2.3 while our package.json\n    // states v2.19 so maybe locale on moment's duration was introduced in\n    // between?\n    //\n\n    // If the conference is under an hour long we want to display it without\n    // showing the hour and we want to include the hour if the conference is\n    // more than an hour long\n\n    if (moment.duration(duration).format('h') !== '0') {\n        return moment.duration(duration).format('h:mm:ss');\n    }\n\n    return moment.duration(duration).format('mm:ss', { trim: false });\n}\n\n/**\n * A lenient locale matcher to match language and dialect if possible.\n *\n * @private\n * @returns {string}\n */\nfunction _getSupportedLocale() {\n    const i18nLocale = i18next.language;\n    let supportedLocale;\n\n    if (i18nLocale) {\n        const localeRegexp = new RegExp('^([a-z]{2,2})(-)*([a-z]{2,2})*$');\n        const localeResult = localeRegexp.exec(i18nLocale.toLowerCase());\n\n        if (localeResult) {\n            const currentLocaleRegexp\n                = new RegExp(\n                    `^${localeResult[1]}(-)*${`(${localeResult[3]})*` || ''}`);\n\n            supportedLocale\n\n                // FIXME The flow-type definition of moment is v2.3 while our\n                // package.json states v2.19 so maybe locales on moment was\n                // introduced in between?\n                = moment.locales().find(lang => currentLocaleRegexp.exec(lang));\n        }\n    }\n\n    return supportedLocale || 'es';\n}\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgAdd = function SvgAdd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M18.984 12.984h-6v6h-1.969v-6h-6v-1.969h6v-6h1.969v6h6v1.969z\"\n  })));\n};\n\nexport default SvgAdd;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowBack = function SvgArrowBack(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M20.016 11.016v1.969H7.828l5.578 5.625L12 20.016 3.984 12 12 3.984l1.406 1.406-5.578 5.625h12.188z\"\n  })));\n};\n\nexport default SvgArrowBack;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowDown = function SvgArrowDown(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 10 6\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M8.07.248a.75.75 0 111.115 1.004L5.656 5.193a.75.75 0 01-1.115 0L1.068 1.252A.75.75 0 012.182.248L5.1 3.571 8.07.248z\"\n  })));\n};\n\nexport default SvgArrowDown;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowDownLarge = function SvgArrowDownLarge(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M12 24l-8-9h6V0h4v15h6z\"\n  })));\n};\n\nexport default SvgArrowDownLarge;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowDownSmall = function SvgArrowDownSmall(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M16.093 8.331a1 1 0 011.487 1.338l-4.705 5.256a1 1 0 01-1.487 0L6.757 9.669a1 1 0 111.486-1.338l3.889 4.43 3.961-4.43z\"\n  })));\n};\n\nexport default SvgArrowDownSmall;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgIconArrowDownWide = function SvgIconArrowDownWide(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 29 12\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M2.5 2l11.762 8L26.5 2\",\n    stroke: \"#929292\",\n    strokeWidth: 3.5,\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  })));\n};\n\nexport default SvgIconArrowDownWide;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowUp = function SvgArrowUp(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 10 7\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M8.411 6.057A.833.833 0 109.65 4.943L5.73.563a.833.833 0 00-1.24 0L.63 4.943a.833.833 0 001.24 1.114l3.24-3.691L8.41 6.057z\"\n  })));\n};\n\nexport default SvgArrowUp;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgIconArrowUpWide = function SvgIconArrowUpWide(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 29 12\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M2.5 10l11.762-8L26.5 10\",\n    stroke: \"#929292\",\n    strokeWidth: 3.5,\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  })));\n};\n\nexport default SvgIconArrowUpWide;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowLeft = function SvgArrowLeft(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M16.522 18.27a1 1 0 11-1.338 1.487l-7.866-7.08a1 1 0 010-1.487l7.866-7.08a1 1 0 111.338 1.487l-7.04 6.336 7.04 6.337z\",\n    fill: \"#A4B8D1\"\n  })));\n};\n\nexport default SvgArrowLeft;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVisibilityOff = function SvgVisibilityOff(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M15.813 12h.188c2.188 0 4 1.813 4 4v.25zm-5.75 1.063c-.438.875-.75 1.875-.75 2.938 0 3.688 3 6.688 6.688 6.688 1.063 0 2.063-.313 2.938-.75l-2.063-2.063c-.25.063-.563.125-.875.125-2.188 0-4-1.813-4-4 0-.313.063-.625.125-.875zM2.688 5.688L4.376 4l23.625 23.625-1.688 1.688c-1.499-1.48-3.008-2.95-4.5-4.438C20 25.625 18.063 26 16 26 9.312 26 3.625 21.875 1.312 16c1.063-2.625 2.813-4.875 5-6.625-1.219-1.218-2.416-2.459-3.625-3.688zM16 9.313c-.875 0-1.688.188-2.438.5l-2.875-2.875C12.312 6.313 14.125 6 16 6c6.688 0 12.313 4.125 14.625 10-1 2.5-2.563 4.625-4.563 6.313l-3.875-3.875c.313-.75.5-1.563.5-2.438 0-3.688-3-6.688-6.688-6.688z\"\n  })));\n};\n\nexport default SvgVisibilityOff;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVolume = function SvgVolume(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M18.688 4.313c5.375 1.188 9.313 6 9.313 11.688s-3.938 10.5-9.313 11.688v-2.75c3.875-1.125 6.625-4.688 6.625-8.938s-2.75-7.813-6.625-8.938v-2.75zM22 16a5.936 5.936 0 01-3.313 5.375v-10.75c2 1 3.313 3 3.313 5.375zM4 12h5.313l6.688-6.688v21.375l-6.688-6.688H4v-8z\"\n  })));\n};\n\nexport default SvgVolume;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCalendarPlus = function SvgCalendarPlus(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M5 2.5a.833.833 0 011.667 0v.833h6.666V2.5A.833.833 0 1115 2.5v.833h1.667c.92 0 1.666.747 1.666 1.667v11.667c0 .92-.746 1.666-1.666 1.666H3.333c-.92 0-1.666-.746-1.666-1.666V5c0-.92.746-1.667 1.666-1.667H5V2.5zM3.333 16.667V5h13.334v11.667H3.333zm6.667-10a.833.833 0 00-.833.833V10h-2.5a.833.833 0 000 1.667h2.5v2.5a.833.833 0 001.666 0v-2.5h2.5a.833.833 0 000-1.667h-2.5V7.5A.833.833 0 0010 6.667z\",\n    fill: \"#0163FF\"\n  })));\n};\n\nexport default SvgCalendarPlus;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgPlusCircle = function SvgPlusCircle(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M1.667 10a8.333 8.333 0 1016.666 0 8.333 8.333 0 00-16.666 0zm15.151 0a6.818 6.818 0 11-13.636 0 6.818 6.818 0 0113.636 0zm-7.576.758v3.03h1.516v-3.03h3.03V9.242h-3.03v-3.03H9.242v3.03h-3.03v1.516h3.03z\",\n    fill: \"#669AEC\"\n  })));\n};\n\nexport default SvgPlusCircle;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCamera = function SvgCamera(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M22.688 14l5.313-5.313v14.625l-5.313-5.313v4.688c0 .75-.625 1.313-1.375 1.313h-16C4.563 24 4 23.437 4 22.687V9.312c0-.75.563-1.313 1.313-1.313h16c.75 0 1.375.563 1.375 1.313V14z\"\n  })));\n};\n\nexport default SvgCamera;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCameraDisabled = function SvgCameraDisabled(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M4.375 2.688L28 26.313l-1.688 1.688-4.25-4.25c-.188.125-.5.25-.75.25h-16c-.75 0-1.313-.563-1.313-1.313V9.313c0-.75.563-1.313 1.313-1.313h1L2.687 4.375zm23.625 6v14.25L13.062 8h8.25c.75 0 1.375.563 1.375 1.313v4.688z\"\n  })));\n};\n\nexport default SvgCameraDisabled;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCameraEmpty = function SvgCameraEmpty(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M13.75 5.5H3.667c-1.013 0-1.834.82-1.834 1.833v7.334c0 1.012.821 1.833 1.834 1.833H13.75c1.012 0 1.833-.82 1.833-1.833v-.786l3.212 1.835a.916.916 0 001.372-.796V7.08a.917.917 0 00-1.372-.796l-3.212 1.835v-.786c0-1.012-.82-1.833-1.833-1.833zm0 3.667v5.5H3.667V7.333H13.75v1.834zm4.583 4.174l-2.75-1.572v-1.538l2.75-1.572v4.682z\"\n  })));\n};\n\nexport default SvgCameraEmpty;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCameraEmptyDisabled = function SvgCameraEmptyDisabled(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M6.84 5.5h-.022L3.424 2.106a.932.932 0 10-1.318 1.318L4.182 5.5h-.515c-1.013 0-1.834.82-1.834 1.833v7.334c0 1.012.821 1.833 1.834 1.833H13.75c.404 0 .777-.13 1.08-.352l3.746 3.746a.932.932 0 101.318-1.318l-4.31-4.31v-.024L13.75 12.41v.023l-5.1-5.099h.024L6.841 5.5zm6.91 4.274V7.333h-2.44L9.475 5.5h4.274c1.012 0 1.833.82 1.833 1.833v.786l3.212-1.835a.917.917 0 011.372.796v7.84c0 .344-.19.644-.47.8l-3.736-3.735 2.372 1.356V8.659l-2.75 1.571v1.377L13.75 9.774zM3.667 7.334h2.349l7.333 7.333H3.667V7.333z\"\n  })));\n};\n\nexport default SvgCameraEmptyDisabled;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCameraRefresh = function SvgCameraRefresh(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M3.333 7.5V15c0 .46.373.833.834.833h11.666c.46 0 .834-.373.834-.833V7.5a.833.833 0 00-.834-.833h-2.357L11.81 5H8.19L6.524 6.667H4.167a.833.833 0 00-.834.833zm2.5-2.5l1.179-1.179a1.667 1.667 0 011.178-.488h3.62c.442 0 .866.176 1.178.488L14.167 5h1.666a2.5 2.5 0 012.5 2.5V15a2.5 2.5 0 01-2.5 2.5H4.167a2.5 2.5 0 01-2.5-2.5V7.5a2.5 2.5 0 012.5-2.5h1.666zm-1.5 6.667l2.5-2.5 2.5 2.5h-1.69a2.487 2.487 0 003.958 1.057l1.146 1.211a4.154 4.154 0 01-6.83-2.268H4.333zM15.833 10l-2.5 2.5-2.5-2.5h1.529a2.487 2.487 0 00-3.899-1.124c-.021.017-1.04-1.302-1.04-1.302A4.154 4.154 0 0114.086 10h1.747z\"\n  })));\n};\n\nexport default SvgCameraRefresh;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCancel = function SvgCancel(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M17.016 15.609L13.407 12l3.609-3.609-1.406-1.406-3.609 3.609-3.609-3.609-1.406 1.406L10.595 12l-3.609 3.609 1.406 1.406 3.609-3.609 3.609 3.609zM12 2.016q4.125 0 7.055 2.93t2.93 7.055-2.93 7.055T12 21.986t-7.055-2.93-2.93-7.055 2.93-7.055T12 2.016z\"\n  })));\n};\n\nexport default SvgCancel;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgChat = function SvgChat(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M15.583 20.196c.507 0 .917-.41.917-.917v-4.612h2.75c.506 0 .917-.41.917-.917v-11a.917.917 0 00-.917-.917H2.75a.917.917 0 00-.917.917v11c0 .506.41.917.917.917h7.843l4.283 5.195a.917.917 0 00.707.334zM3.667 3.666h14.666v9.167h-3.666v3.893l-3.21-3.893h-7.79V3.667z\"\n  })));\n};\n\nexport default SvgChat;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgChatUnread = function SvgChatUnread(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M18 8.016V6H6v2.016h12zm-3.984 6V12H6v2.016h8.016zM6 9v2.016h12V9H6zm14.016-6.984c1.078 0 1.969.891 1.969 1.969v12c0 1.078-.891 2.016-1.969 2.016H6l-3.984 3.984v-18c0-1.078.891-1.969 1.969-1.969h16.031z\"\n  })));\n};\n\nexport default SvgChatUnread;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCheck = function SvgCheck(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M9 16.172L19.594 5.578 21 6.984l-12 12-5.578-5.578L4.828 12z\"\n  })));\n};\n\nexport default SvgCheck;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgClose = function SvgClose(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M18.984 6.422L13.406 12l5.578 5.578-1.406 1.406L12 13.406l-5.578 5.578-1.406-1.406L10.594 12 5.016 6.422l1.406-1.406L12 10.594l5.578-5.578z\"\n  })));\n};\n\nexport default SvgClose;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCloseCircle = function SvgCloseCircle(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M10 16.667a6.667 6.667 0 100-13.334 6.667 6.667 0 000 13.334zm0 1.666a8.333 8.333 0 110-16.666 8.333 8.333 0 010 16.666zm0-9.512l2.357-2.357a.833.833 0 111.179 1.179L11.179 10l2.357 2.357a.833.833 0 11-1.179 1.179L10 11.178l-2.357 2.357a.833.833 0 01-1.178-1.179L8.822 10 6.465 7.643a.833.833 0 111.178-1.179L10 8.821z\"\n  })));\n};\n\nexport default SvgCloseCircle;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCloseX = function SvgCloseX(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M9.414 8l5.657-5.657A1 1 0 0013.657.93L8 6.586 2.343.929A1 1 0 10.93 2.343L6.586 8 .929 13.657a1 1 0 101.414 1.414L8 9.414l5.657 5.657a1 1 0 001.414-1.414L9.414 8z\"\n  })));\n};\n\nexport default SvgCloseX;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgClosedCaption = function SvgClosedCaption(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M3.667 3.667h14.666v14.666H3.667V3.667zm-1.834 0c0-1.013.821-1.834 1.834-1.834h14.666c1.013 0 1.834.821 1.834 1.834v14.666c0 1.013-.821 1.834-1.834 1.834H3.667a1.833 1.833 0 01-1.834-1.834V3.667zm5.037 10.28c.445.245.958.369 1.538.369.341 0 .675-.044 1-.132.326-.095.612-.222.859-.38a.773.773 0 00.286-.263.668.668 0 00.095-.357.655.655 0 00-.131-.418.396.396 0 00-.322-.166.629.629 0 00-.262.06c-.087.03-.19.083-.31.154-.19.103-.365.187-.524.25-.151.056-.326.084-.524.084-.493 0-.874-.16-1.144-.477-.263-.326-.394-.786-.394-1.382 0-.604.131-1.065.394-1.383.27-.325.651-.488 1.144-.488.206 0 .389.032.548.095.159.056.325.135.5.238a2.4 2.4 0 00.286.143c.095.04.187.06.274.06a.385.385 0 00.322-.155.674.674 0 00.131-.429c0-.254-.127-.465-.381-.631a3.072 3.072 0 00-.834-.358 3.41 3.41 0 00-.93-.131c-.588 0-1.108.127-1.561.381a2.681 2.681 0 00-1.06 1.085c-.247.46-.37.993-.37 1.597 0 .603.12 1.132.358 1.585.238.452.576.802 1.012 1.048zm5.82 0c.444.245.956.369 1.536.369.342 0 .676-.044 1.001-.132.326-.095.612-.222.858-.38a.773.773 0 00.286-.263.669.669 0 00.096-.357.654.654 0 00-.131-.418.396.396 0 00-.322-.166.63.63 0 00-.262.06c-.088.03-.19.083-.31.154-.19.103-.366.187-.524.25a1.514 1.514 0 01-.525.084c-.492 0-.874-.16-1.144-.477-.262-.326-.393-.786-.393-1.382 0-.604.131-1.065.393-1.383.27-.325.652-.488 1.144-.488.207 0 .39.032.548.095.16.056.326.135.5.238a2.4 2.4 0 00.287.143c.095.04.187.06.274.06a.385.385 0 00.322-.155.674.674 0 00.13-.429c0-.254-.126-.465-.38-.631a3.073 3.073 0 00-.835-.358 3.41 3.41 0 00-.93-.131c-.587 0-1.107.127-1.56.381a2.682 2.682 0 00-1.06 1.085c-.247.46-.37.993-.37 1.597 0 .603.119 1.132.357 1.585.239.452.576.802 1.013 1.048z\"\n  })));\n};\n\nexport default SvgClosedCaption;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCloseSmall = function SvgCloseSmall(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M8.691 8l2.766-2.765a.489.489 0 00-.692-.692L8 7.31 5.235 4.543a.489.489 0 00-.692.692L7.31 8l-2.766 2.765a.489.489 0 10.692.692L8 8.69l2.765 2.766a.489.489 0 10.692-.692L8.69 8z\",\n    fill: \"#fff\"\n  })));\n};\n\nexport default SvgCloseSmall;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCodeBlock = function SvgCodeBlock(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M15.872 7.703a1 1 0 011.337-1.487l5.256 4.705a1 1 0 010 1.487l-5.256 4.631a1 1 0 11-1.337-1.486l4.43-3.889-4.43-3.961zM8.465 15.553a1 1 0 11-1.338 1.487l-5.256-4.705a1 1 0 010-1.487l5.256-4.632a1 1 0 011.338 1.487l-4.43 3.888 4.43 3.962z\"\n  })));\n};\n\nexport default SvgCodeBlock;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgGsmBars = function SvgGsmBars(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M28 0a4 4 0 014 4v24a4 4 0 01-8 0V4a4 4 0 014-4zM16 8a4 4 0 014 4v16a4 4 0 01-8 0V12a4 4 0 014-4zM4 20a4 4 0 014 4v4a4 4 0 01-8 0v-4a4 4 0 014-4z\"\n  })));\n};\n\nexport default SvgGsmBars;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgNinja = function SvgNinja(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M7.75 13c-.01-.35.15-.69.42-.92.75.16 1.45.47 2.08.92 0 .68-.56 1.24-1.25 1.24S7.76 13.69 7.75 13zm6 0c.63-.44 1.33-.75 2.08-.91.27.23.43.57.42.91 0 .7-.56 1.26-1.25 1.26s-1.25-.56-1.25-1.26zM12 9c-2.77-.04-5.5.65-7.93 2L4 12c0 1.23.29 2.44.84 3.54a47.642 47.642 0 0114.32 0c.55-1.1.84-2.31.84-3.54l-.07-1A15.849 15.849 0 0012 9zm0-7c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2z\"\n  })));\n};\n\nexport default SvgNinja;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCopy = function SvgCopy(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M4 4a2 2 0 012-2h8a2 2 0 012 2H6v14a2 2 0 01-2-2V4zm6 4v12h8V8h-8zm0-2h8a2 2 0 012 2v12a2 2 0 01-2 2h-8a2 2 0 01-2-2V8a2 2 0 012-2z\"\n  })));\n};\n\nexport default SvgCopy;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCrown = function SvgCrown(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M14 4a2 2 0 01-1.298 1.873l1.527 4.07.716 1.912c.062.074.126.074.165.035l1.444-1.444 2.032-2.032a2 2 0 111.248.579L19 19a2 2 0 01-2 2H7a2 2 0 01-2-2L4.166 8.993a2 2 0 111.248-.579l2.033 2.033L8.89 11.89c.087.042.145.016.165-.035l.716-1.912 1.527-4.07A2 2 0 1114 4zM6.84 17l-.393-4.725 1.029 1.03a2.1 2.1 0 003.451-.748L12 9.696l1.073 2.86a2.1 2.1 0 003.451.748l1.03-1.03L17.16 17H6.84z\"\n  })));\n};\n\nexport default SvgCrown;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgHeadset = function SvgHeadset(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M12 .984c4.969 0 9 4.031 9 9v7.031c0 1.641-1.359 3-3 3h-3v-8.016h3.984V9.983c0-3.891-3.094-6.984-6.984-6.984S5.016 6.093 5.016 9.983v2.016H9v8.016H6a3.02 3.02 0 01-3-3V9.984c0-4.969 4.031-9 9-9z\"\n  })));\n};\n\nexport default SvgHeadset;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgDocument = function SvgDocument(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M13.75 1.833h.537c.243 0 .476.097.648.269l3.13 3.13a.917.917 0 01.268.648v13.37c0 .506-.41.917-.916.917H4.583a.917.917 0 01-.916-.917V2.75c0-.506.41-.917.916-.917h9.167zm-1.833 1.834v2.75c0 1.012.82 1.833 1.833 1.833h2.75v10.083h-11V3.667h6.417zm4.583 2.75h-2.75v-2.75h.157L16.5 6.259v.158zm-8.25 8.25a.917.917 0 000 1.833h5.5a.917.917 0 000-1.833h-5.5zm-.917-1.834c0-.506.41-.916.917-.916h5.5a.917.917 0 010 1.833h-5.5a.917.917 0 01-.917-.917zm.917-3.666a.917.917 0 100 1.833h5.5a.917.917 0 000-1.833h-5.5z\"\n  })));\n};\n\nexport default SvgDocument;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgDominantSpeaker = function SvgDominantSpeaker(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 28 28\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M26 10c1.109 0 2 .891 2 2s-.891 2-2 2v6c0 1.094-.906 2-2 2-2.781-2.312-7.266-5.484-12.688-5.938-1.859.625-2.5 2.797-1.281 4.047-1.094 1.797.313 3.063 1.969 4.359-.969 1.906-5 1.937-6.438.609-.906-2.781-2.25-5.563-1.156-9.078H2.5a2.507 2.507 0 01-2.5-2.5v-3c0-1.375 1.125-2.5 2.5-2.5H10c6 0 11-3.5 14-6 1.094 0 2 .906 2 2v6zm-2 9.437V4.531c-4.078 3.125-8.031 4.922-12 5.359v4.219c3.969.438 7.922 2.203 12 5.328z\"\n  })));\n};\n\nexport default SvgDominantSpeaker;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgDownload = function SvgDownload(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M11 13.37V5a1 1 0 112 0v8.467l2.631-2.924a1 1 0 011.487 1.338l-5.012 5.568a.085.085 0 01-.126 0L6.97 11.881a1 1 0 111.487-1.338L11 13.371zM20 15a1 1 0 112 0v6a1 1 0 01-1 1H3a1 1 0 01-1-1v-6a1 1 0 112 0v5h16v-5z\"\n  })));\n};\n\nexport default SvgDownload;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgDragHandle = function SvgDragHandle(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 128 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M19.431 13.974h90.199c4.859 0 4.207.903 4.207 2.026 0 1.123.333 2.026-4.525 2.026H19.219c-4.859 0-4.844-.903-4.844-2.026 0-1.123.197-2.026 5.056-2.026z\"\n  })));\n};\n\nexport default SvgDragHandle;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgE2Ee = function SvgE2Ee(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 18 18\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M3.75 7.5h10.5V15H3.75V7.5zM14.25 6h-1.5v-.75a3.75 3.75 0 10-7.5 0V6h-1.5a1.5 1.5 0 00-1.5 1.5V15a1.5 1.5 0 001.5 1.5h10.5a1.5 1.5 0 001.5-1.5V7.5a1.5 1.5 0 00-1.5-1.5zm-4.524 5.813a1.5 1.5 0 10-1.452 0A.751.751 0 008.25 12v.75a.75.75 0 001.5 0V12a.751.751 0 00-.024-.187zM9 3a2.25 2.25 0 012.25 2.25V6h-4.5v-.75A2.25 2.25 0 019 3z\"\n  })));\n};\n\nexport default SvgE2Ee;","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgEdit = function SvgEdit(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a.996.996 0 000-1.41l-2.34-2.34a.996.996 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M0 0h24v24H0z\",\n    fill: \"none\"\n  })));\n};\n\nexport default SvgEdit;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgEnvelope = function SvgEnvelope(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M4 4h16a2 2 0 012 2v12a2 2 0 01-2 2H4a2 2 0 01-2-2V6a2 2 0 012-2zm0 4v10h16V8l-8 4-8-4zm16-2H4l8 4 8-4z\",\n    fill: \"#A4B8D1\"\n  })));\n};\n\nexport default SvgEnvelope;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgEventNote = function SvgEventNote(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M14.016 14.016v1.969H6.985v-1.969h7.031zm4.968 4.968V8.015H5.015v10.969h13.969zm0-15.984C20.062 3 21 3.938 21 5.016v13.969c0 1.078-.938 2.016-2.016 2.016H5.015c-1.125 0-2.016-.938-2.016-2.016V5.016C2.999 3.938 3.89 3 5.015 3h.984V.984h2.016V3h7.969V.984H18V3h.984zm-1.968 6.984V12H6.985V9.984h10.031z\"\n  })));\n};\n\nexport default SvgEventNote;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgExclamation = function SvgExclamation(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M1.333 8a6.667 6.667 0 1013.334 0A6.667 6.667 0 001.333 8zm12 0A5.333 5.333 0 112.667 8a5.333 5.333 0 0110.666 0zm-6-3.333a.667.667 0 011.334 0V8a.667.667 0 01-1.334 0V4.667zM8 10a.667.667 0 100 1.333A.667.667 0 008 10z\"\n  })));\n};\n\nexport default SvgExclamation;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgExclamationSolid = function SvgExclamationSolid(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M8 14.667A6.667 6.667 0 118 1.333a6.667 6.667 0 010 13.334zm-.667-10a.667.667 0 111.334 0V8a.667.667 0 11-1.334 0V4.667zM8 10a.667.667 0 100 1.333A.667.667 0 008 10z\"\n  })));\n};\n\nexport default SvgExclamationSolid;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgExitFullScreen = function SvgExitFullScreen(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M17.417 8.25v1.833h-4.584a.917.917 0 01-.916-.916V4.583h1.833V8.25h3.667zM4.583 8.25v1.833h4.584c.506 0 .916-.41.916-.916V4.583H8.25V8.25H4.583zM17.417 13.75v-1.833h-4.584a.917.917 0 00-.916.916v4.584h1.833V13.75h3.667zM4.583 13.75v-1.833h4.584c.506 0 .916.41.916.916v4.584H8.25V13.75H4.583z\"\n  })));\n};\n\nexport default SvgExitFullScreen;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgFeedback = function SvgFeedback(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M2.278 7.066l8.25-4.95a.917.917 0 01.944 0l8.25 4.95a.917.917 0 01.445.786V19.25c0 .506-.41.917-.917.917H2.75a.917.917 0 01-.917-.917V7.852c0-.322.17-.62.445-.786zm1.389 2.977v8.29h14.666v-8.29l-6.796 4.908a.917.917 0 01-1.074 0l-6.796-4.908zm.446-1.94L11 13.079l6.887-4.974L11 3.97 4.113 8.104zm4.94.605a.917.917 0 01-.969-1.557l2.432-1.513a.917.917 0 01.97.001l2.427 1.517a.917.917 0 01-.972 1.555l-1.024-.64V11a.917.917 0 01-1.834 0V8.066l-1.03.642z\"\n  })));\n};\n\nexport default SvgFeedback;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgFullScreen = function SvgFullScreen(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M8.25 2.75H3.667a.917.917 0 00-.917.917V8.25h1.833V4.583H8.25V2.75zm5.5 1.833V2.75h4.583c.507 0 .917.41.917.917V8.25h-1.833V4.583H13.75zm0 12.834h3.667V13.75h1.833v4.583c0 .507-.41.917-.917.917H13.75v-1.833zM4.583 13.75v3.667H8.25v1.833H3.667a.917.917 0 01-.917-.917V13.75h1.833z\"\n  })));\n};\n\nexport default SvgFullScreen;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgGoogle = function SvgGoogle(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M20.236 10.354h-.676v-.034H12v3.36h4.748A5.04 5.04 0 0112 17.04 5.04 5.04 0 016.96 12 5.04 5.04 0 0112 6.96c1.285 0 2.454.484 3.344 1.276l2.375-2.375A8.36 8.36 0 0012 3.6 8.4 8.4 0 003.6 12a8.4 8.4 0 008.4 8.4 8.4 8.4 0 008.236-10.046z\",\n    fill: \"#A4B8D1\"\n  })));\n};\n\nexport default SvgGoogle;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgHangup = function SvgHangup(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 12c-2.125 0-4.188.313-6.125.938v4.125c0 .5-.313 1.063-.75 1.25a13.87 13.87 0 00-3.563 2.438c-.25.25-.563.375-.938.375s-.688-.125-.938-.375L.373 17.438c-.25-.25-.375-.563-.375-.938s.125-.688.375-.938c4.063-3.875 9.563-6.25 15.625-6.25s11.563 2.375 15.625 6.25c.25.25.375.563.375.938s-.125.688-.375.938l-3.313 3.313c-.25.25-.563.375-.938.375s-.688-.125-.938-.375a13.87 13.87 0 00-3.563-2.438c-.438-.188-.75-.625-.75-1.188V13c-1.938-.625-4-1-6.125-1z\"\n  })));\n};\n\nexport default SvgHangup;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgHelp = function SvgHelp(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M10 18.333a8.333 8.333 0 110-16.666 8.333 8.333 0 010 16.666zm0-1.666a6.667 6.667 0 100-13.334 6.667 6.667 0 000 13.334zm-.752-1.774c.198.171.429.257.693.257a.988.988 0 00.677-.26c.196-.174.293-.413.293-.717a.938.938 0 00-.28-.69.938.938 0 00-.69-.28.968.968 0 00-.703.28.927.927 0 00-.286.69c0 .308.099.548.296.72zM7.161 6.76c-.264.423-.397.841-.397 1.253 0 .2.084.386.251.557a.826.826 0 00.615.257c.413 0 .692-.245.84-.736.156-.468.347-.823.573-1.064.226-.24.577-.361 1.055-.361.408 0 .74.119.999.358.258.238.387.531.387.879a1 1 0 01-.127.494c-.084.152-.188.29-.312.414s-.325.307-.602.55c-.317.278-.569.518-.755.72a2.405 2.405 0 00-.45.702c-.113.268-.169.583-.169.948 0 .29.077.51.231.657a.792.792 0 00.57.222c.434 0 .692-.226.775-.677.047-.213.083-.362.107-.446a1.37 1.37 0 01.1-.254c.044-.085.11-.178.2-.28.088-.102.207-.22.354-.355.534-.478.904-.817 1.11-1.019a2.97 2.97 0 00.534-.72c.15-.277.225-.6.225-.97 0-.468-.132-.902-.394-1.301-.263-.4-.635-.716-1.117-.948-.481-.232-1.037-.348-1.666-.348-.677 0-1.27.139-1.778.417-.507.277-.894.628-1.159 1.051z\"\n  })));\n};\n\nexport default SvgHelp;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgHorizontalPoints = function SvgHorizontalPoints(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M6.417 11a1.833 1.833 0 11-3.667 0 1.833 1.833 0 013.667 0zM11 12.833a1.833 1.833 0 100-3.666 1.833 1.833 0 000 3.666zm6.417 0a1.833 1.833 0 100-3.666 1.833 1.833 0 000 3.666z\"\n  })));\n};\n\nexport default SvgHorizontalPoints;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgInfo = function SvgInfo(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 2.667C8.64 2.667 2.667 8.64 2.667 16S8.64 29.333 16 29.333 29.333 23.36 29.333 16 23.36 2.667 16 2.667zm1.333 20h-2.667v-8h2.667v8zm0-10.667h-2.667V9.333h2.667V12z\"\n  })));\n};\n\nexport default SvgInfo;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgUserPlus = function SvgUserPlus(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M12.833 6.417a1.833 1.833 0 11-3.666 0 1.833 1.833 0 013.666 0zm-5.5 0a3.667 3.667 0 107.334 0 3.667 3.667 0 00-7.334 0zM11 11c-5.513 0-7.333 2.063-7.333 6.188 0 1.375.61 2.062 1.833 2.062h8.028a4.125 4.125 0 103.495-6.416C15.908 11.61 14 11 11 11zm3.817 2.432c-.85-.424-2.08-.599-3.817-.599-4.306 0-5.5 1.076-5.5 4.354 0 .1.003.176.006.23h7.352a4.123 4.123 0 011.958-3.985zm2.6 3.068h1.833v.917h-1.833v1.833H16.5v-1.833h-1.833V16.5H16.5v-1.833h.917V16.5z\"\n  })));\n};\n\nexport default SvgUserPlus;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgKick = function SvgKick(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 6.688l8.875 13.313H7.125zm-9.312 16h18.625v2.625H6.688v-2.625z\"\n  })));\n};\n\nexport default SvgKick;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgLiveStreaming = function SvgLiveStreaming(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M11 20.167a9.167 9.167 0 110-18.334 9.167 9.167 0 010 18.334zm0-1.834c.196 0 .39-.007.582-.022-1.032-.885-1.989-1.997-2.824-3.309-1.26.193-2.583.185-3.935-.048A7.328 7.328 0 0011 18.334zm-.347-3.786c.96 1.376 2.066 2.457 3.233 3.197.27-.116.531-.247.783-.393a.93.93 0 01.007-.062c.254-1.808.2-3.442-.13-4.941a11.59 11.59 0 01-3.893 2.2zm3.286-4.134a9.78 9.78 0 01-4.27 2.518c-1.2-2.256-2.039-5.076-2.27-8.32a7.292 7.292 0 011.36-.595 818.04 818.04 0 00.56.48c.28.242.517.452.75.665a19.214 19.214 0 011.602 1.634c.968 1.121 1.733 2.317 2.268 3.618zm1.294-1.583c-.57-1.147-1.3-2.22-2.174-3.232a21.004 21.004 0 00-1.906-1.93 7.316 7.316 0 015.376 2.514 11.302 11.302 0 01-1.296 2.648zm.803 1.993c.466 1.49.684 3.096.622 4.842A7.303 7.303 0 0018.333 11a7.309 7.309 0 00-.597-2.903c-.461 1-1.034 1.913-1.7 2.726zM3.92 12.869c1.325.378 2.627.502 3.867.4-1.03-2.09-1.776-4.558-2.102-7.32A7.308 7.308 0 003.667 11c0 .653.085 1.287.246 1.89l.006-.021z\"\n  })));\n};\n\nexport default SvgLiveStreaming;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMenu = function SvgMenu(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M3 6h18v2.016H3V6zm0 6.984v-1.969h18v1.969H3zM3 18v-2.016h18V18H3z\"\n  })));\n};\n\nexport default SvgMenu;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMenuDown = function SvgMenuDown(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M22.125 11.438L24 13.313l-8 8-8-8 1.875-1.875L16 17.563z\"\n  })));\n};\n\nexport default SvgMenuDown;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgThumbMenu = function SvgThumbMenu(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M12 15.984c1.078 0 2.016.938 2.016 2.016s-.938 2.016-2.016 2.016S9.984 19.078 9.984 18s.938-2.016 2.016-2.016zm0-6c1.078 0 2.016.938 2.016 2.016s-.938 2.016-2.016 2.016S9.984 13.078 9.984 12 10.922 9.984 12 9.984zm0-1.968c-1.078 0-2.016-.938-2.016-2.016S10.922 3.984 12 3.984s2.016.938 2.016 2.016S13.078 8.016 12 8.016z\"\n  })));\n};\n\nexport default SvgThumbMenu;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMenuUp = function SvgMenuUp(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 10.688l8 8-1.875 1.875L16 14.438l-6.125 6.125L8 18.688z\"\n  })));\n};\n\nexport default SvgMenuUp;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMessage = function SvgMessage(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M14.167 18.36c.46 0 .833-.373.833-.834v-4.193h2.5c.46 0 .833-.373.833-.833v-10a.833.833 0 00-.833-.833h-15a.833.833 0 00-.833.833v10c0 .46.373.833.833.833h7.13l3.894 4.724a.833.833 0 00.643.303zM3.333 3.333h13.334v8.334h-3.334v3.539l-2.917-3.54H3.333V3.334z\"\n  })));\n};\n\nexport default SvgMessage;","var _rect, _rect2, _rect3, _rect4, _rect5, _rect6, _rect7, _rect8;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMeter = function SvgMeter(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 38 12\",\n    fill: \"#5E6D7A\"\n  }), _rect || (_rect = React.createElement(\"rect\", {\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect2 || (_rect2 = React.createElement(\"rect\", {\n    x: 5,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect3 || (_rect3 = React.createElement(\"rect\", {\n    x: 10,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect4 || (_rect4 = React.createElement(\"rect\", {\n    x: 15,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect5 || (_rect5 = React.createElement(\"rect\", {\n    x: 20,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect6 || (_rect6 = React.createElement(\"rect\", {\n    x: 25,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect7 || (_rect7 = React.createElement(\"rect\", {\n    x: 30,\n    width: 3,\n    height: 12,\n    rx: 1\n  })), _rect8 || (_rect8 = React.createElement(\"rect\", {\n    x: 35,\n    width: 3,\n    height: 12,\n    rx: 1\n  })));\n};\n\nexport default SvgMeter;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicBlocked = function SvgMicBlocked(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M10 1.667A3.333 3.333 0 0113.333 5v5a3.335 3.335 0 01-2.506 3.23.838.838 0 01.006.103v1.598c.312-.052.614-.134.904-.241a3.754 3.754 0 012.953-2.953c.2-.541.31-1.126.31-1.737a.833.833 0 011.667 0c0 .625-.086 1.23-.247 1.803a3.752 3.752 0 01-1.003 7.364 3.752 3.752 0 01-3.615-2.747 6.643 6.643 0 01-.969.195v.885a.833.833 0 11-1.666 0v-.885A6.668 6.668 0 013.333 10 .833.833 0 015 10a5.001 5.001 0 004.167 4.93v-1.597a.84.84 0 01.006-.103A3.335 3.335 0 016.667 10V5A3.333 3.333 0 0110 1.667zm0 1.666c-.92 0-1.667.747-1.667 1.667v5a1.667 1.667 0 103.334 0V5c0-.92-.747-1.667-1.667-1.667zM13.333 15v.833H17.5V15h-4.167z\"\n  })));\n};\n\nexport default SvgMicBlocked;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicDisabled = function SvgMicDisabled(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M5.688 4l22.313 22.313-1.688 1.688-5.563-5.563c-1 .625-2.25 1-3.438 1.188v4.375h-2.625v-4.375c-4.375-.625-8-4.375-8-8.938h2.25c0 4 3.375 6.75 7.063 6.75 1.063 0 2.125-.25 3.063-.688l-2.188-2.188c-.25.063-.563.125-.875.125-2.188 0-4-1.813-4-4v-1l-8-8zM20 14.875l-8-7.938v-.25c0-2.188 1.813-4 4-4s4 1.813 4 4v8.188zm5.313-.187a8.824 8.824 0 01-1.188 4.375L22.5 17.375c.375-.813.563-1.688.563-2.688h2.25z\"\n  })));\n};\n\nexport default SvgMicDisabled;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicrophone = function SvgMicrophone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M23.063 14.688h2.25c0 4.563-3.625 8.313-8 8.938v4.375h-2.625v-4.375c-4.375-.625-8-4.375-8-8.938h2.25c0 4 3.375 6.75 7.063 6.75s7.063-2.75 7.063-6.75zm-7.063 4c-2.188 0-4-1.813-4-4v-8c0-2.188 1.813-4 4-4s4 1.813 4 4v8c0 2.188-1.813 4-4 4z\"\n  })));\n};\n\nexport default SvgMicrophone;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicrophoneEmpty = function SvgMicrophoneEmpty(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M16 6a4 4 0 00-8 0v6a4.002 4.002 0 003.008 3.876c-.005.04-.008.082-.008.124v1.917A6.002 6.002 0 016 12a1 1 0 10-2 0 8.001 8.001 0 007 7.938V21a1 1 0 102 0v-1.062A8.001 8.001 0 0020 12a1 1 0 10-2 0 6.002 6.002 0 01-5 5.917V16c0-.042-.003-.083-.008-.124A4.002 4.002 0 0016 12V6zm-4-2a2 2 0 00-2 2v6a2 2 0 104 0V6a2 2 0 00-2-2z\"\n  })));\n};\n\nexport default SvgMicrophoneEmpty;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicrophoneEmptySlash = function SvgMicrophoneEmptySlash(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M7.333 8.65V11a3.668 3.668 0 002.757 3.553.928.928 0 00-.007.114v1.757A5.501 5.501 0 015.5 11a.917.917 0 10-1.833 0c0 3.74 2.799 6.826 6.416 7.277v.973a.917.917 0 001.834 0v-.973a7.297 7.297 0 003.568-1.475l3.091 3.092a.932.932 0 101.318-1.318l-3.091-3.091.01-.013-1.311-1.311-.01.013-1.325-1.325.008-.014-1.395-1.395a1.24 1.24 0 01-.004.018l-3.61-3.609v-.023L7.334 5.993v.023l-3.909-3.91a.932.932 0 10-1.318 1.318L7.333 8.65zm1.834 1.834V11a1.833 1.833 0 002.291 1.776l-2.291-2.292zm3.682 3.683c-.29.17-.606.3-.94.386a.928.928 0 01.008.114v1.757a5.47 5.47 0 002.257-.932l-1.325-1.325zm1.818-3.476l-1.834-1.834V5.5a1.833 1.833 0 00-3.644-.287l-1.43-1.43A3.666 3.666 0 0114.667 5.5v5.19zm1.665 1.665l1.447 1.447c.357-.864.554-1.81.554-2.803a.917.917 0 10-1.833 0c0 .468-.058.922-.168 1.356z\"\n  })));\n};\n\nexport default SvgMicrophoneEmptySlash;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMicrophoneHollow = function SvgMicrophoneHollow(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 18 18\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M12 4.5a3 3 0 10-6 0V9c0 1.4.959 2.576 2.256 2.907A.756.756 0 008.25 12v1.438A4.501 4.501 0 014.5 9 .75.75 0 003 9c0 3.06 2.29 5.585 5.25 5.954v.796a.75.75 0 001.5 0v-.796A6.001 6.001 0 0015 9a.75.75 0 00-1.5 0c0 2.23-1.622 4.08-3.75 4.438V12a.756.756 0 00-.006-.093A3.001 3.001 0 0012 9V4.5zM9 3a1.5 1.5 0 00-1.5 1.5V9a1.5 1.5 0 103 0V4.5A1.5 1.5 0 009 3z\"\n  })));\n};\n\nexport default SvgMicrophoneHollow;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgStar = function SvgStar(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 20.563l5 3-1.313-5.688L24.125 14l-5.875-.5L16 8.125 13.75 13.5l-5.875.5 4.438 3.875L11 23.563zm13.313-8.25l-7.25 6.313 2.188 9.375-8.25-5-8.25 5 2.188-9.375-7.25-6.313 9.563-.813 3.75-8.813 3.75 8.813z\"\n  })));\n};\n\nexport default SvgStar;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMuteEveryone = function SvgMuteEveryone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M5.5 11.988v1.762c0 1.283.879 2.361 2.068 2.665a.694.694 0 00-.005.085v1.318a4.126 4.126 0 01-3.438-4.068.687.687 0 10-1.375 0c0 2.805 2.1 5.12 4.813 5.457v.73a.687.687 0 101.375 0v-.73c1-.124 1.917-.518 2.676-1.105l2.318 2.318a.699.699 0 10.988-.988l-2.318-2.318a.835.835 0 01.007-.01l-.983-.983-.007.01-.994-.994.007-.011-1.047-1.046-.003.014-2.707-2.707v-.018L5.5 9.995v.018L2.568 7.08a.699.699 0 10-.988.988l3.92 3.92zm1.375 1.375v.387a1.375 1.375 0 001.719 1.332l-1.719-1.719zm2.762 2.762a2.73 2.73 0 01-.705.29.694.694 0 01.005.085v1.318a4.103 4.103 0 001.694-.699l-.994-.994zM11 13.518l-1.375-1.375V9.625a1.375 1.375 0 00-2.733-.215L5.819 8.337A2.75 2.75 0 0111 9.625v3.893zm1.249 1.249l1.085 1.085a5.483 5.483 0 00.416-2.102.687.687 0 10-1.375 0c0 .35-.044.691-.126 1.017zM14.667 4.325V5.5c0 .856.586 1.574 1.378 1.776a.464.464 0 00-.003.057v.879A2.75 2.75 0 0113.75 5.5a.458.458 0 00-.917 0c0 1.87 1.4 3.413 3.209 3.638v.487a.458.458 0 00.916 0v-.487a3.648 3.648 0 001.784-.737l1.546 1.546a.466.466 0 10.659-.659L19.4 7.742a.284.284 0 00.005-.006l-.655-.656-.005.007-.663-.662.005-.008-.698-.697-.002.009-1.805-1.804v-.012l-.916-.917v.012l-1.955-1.955a.466.466 0 10-.659.659l2.614 2.613zm.916.917V5.5a.917.917 0 001.146.888l-1.146-1.146zm1.842 1.841c-.146.085-.303.15-.47.193a.464.464 0 01.003.057v.879c.416-.07.8-.232 1.13-.466l-.663-.663zm.908-1.738l-.916-.916V2.75a.917.917 0 00-1.823-.143l-.714-.715a1.833 1.833 0 013.453.858v2.595zm.833.833l.723.723c.179-.431.278-.905.278-1.401a.458.458 0 10-.917 0c0 .234-.03.461-.084.678z\"\n  })));\n};\n\nexport default SvgMuteEveryone;","var _g, _defs;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMuteEveryoneElse = function SvgMuteEveryoneElse(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _g || (_g = React.createElement(\"g\", {\n    clipPath: \"url(#mute-everyone-else_svg__clip0)\",\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\"\n  }, React.createElement(\"path\", {\n    d: \"M6 13.078V15c0 1.4.959 2.576 2.256 2.907A.756.756 0 008.25 18v1.438A4.501 4.501 0 014.5 15 .75.75 0 003 15c0 3.06 2.29 5.584 5.25 5.954v.796a.75.75 0 001.5 0v-.796a5.97 5.97 0 002.92-1.207l2.529 2.53a.762.762 0 101.078-1.078l-2.53-2.53.009-.01-1.073-1.073-.008.011-1.084-1.084.007-.012-1.141-1.141-.004.015L7.5 12.422v-.019l-1.5-1.5v.019L2.801 7.723a.762.762 0 10-1.078 1.078L6 13.078zm1.5 1.5V15a1.5 1.5 0 001.875 1.453L7.5 14.578zm3.013 3.013a2.984 2.984 0 01-.769.316c.004.03.006.061.006.093v1.438a4.476 4.476 0 001.847-.763l-1.084-1.084zM12 14.747l-1.5-1.5V10.5a1.5 1.5 0 00-2.982-.235l-1.17-1.17A3 3 0 0112 10.5v4.247zm1.362 1.362l1.184 1.184A5.983 5.983 0 0015 15a.75.75 0 00-1.5 0c0 .383-.048.754-.138 1.11zM16 4.719V6a2 2 0 001.504 1.938A.508.508 0 0017.5 8v.959A3 3 0 0115 6a.5.5 0 00-1 0 4 4 0 003.5 3.969v.531a.5.5 0 001 0v-.531a3.98 3.98 0 001.946-.804l1.686 1.686a.508.508 0 00.72-.719l-1.687-1.686.006-.007-.716-.715-.005.007-.723-.722.005-.008-.76-.761-.004.01L17 4.28V4.27l-1-1v.012L13.868 1.15a.508.508 0 10-.72.719L16 4.718zm1 1V6a1 1 0 001.25.969L17 5.719zm2.009 2.008c-.159.093-.33.164-.513.211.003.02.004.041.004.062v.959a2.984 2.984 0 001.232-.509l-.723-.723zM20 5.831l-1-1V3a1 1 0 00-1.988-.157l-.78-.78A2 2 0 0120 3v2.831zm.908.908l.79.79A3.99 3.99 0 0022 6a.5.5 0 00-1 0c0 .255-.032.503-.092.74z\"\n  }))), _defs || (_defs = React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n    id: \"mute-everyone-else_svg__clip0\"\n  }, React.createElement(\"path\", {\n    d: \"M0 0h24v24H0z\"\n  })))));\n};\n\nexport default SvgMuteEveryoneElse;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMuteVideoEveryone = function SvgMuteVideoEveryone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M3.136 7.1l14.448 14.447-1.033 1.032-2.598-2.599a.936.936 0 01-.459.153H3.709a.786.786 0 01-.803-.804V11.15c0-.459.344-.803.803-.803h.612L2.104 8.131 3.136 7.1zm14.448 3.669v8.714l-9.135-9.134h5.045c.459 0 .84.344.84.803v2.866l3.25-3.249zM14.688.818l8.164 8.165-.584.583L20.8 8.098a.536.536 0 01-.26.086h-5.528a.444.444 0 01-.454-.454V3.108c0-.26.195-.454.454-.454h.345l-1.253-1.253.584-.583zm8.164 2.074v4.924L17.69 2.654h2.851c.26 0 .476.194.476.454v1.619l1.835-1.835z\"\n  })));\n};\n\nexport default SvgMuteVideoEveryone;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMuteVideoEveryoneElse = function SvgMuteVideoEveryoneElse(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fill: \"#FFF\",\n    d: \"M3.136 7.1l14.448 14.447-1.033 1.032-2.598-2.599a.936.936 0 01-.459.153H3.709a.786.786 0 01-.803-.804V11.15c0-.459.344-.803.803-.803h.612L2.104 8.131 3.136 7.1zm14.448 3.669v8.714l-9.135-9.134h5.045c.459 0 .84.344.84.803v2.866l3.25-3.249zM14.688.818l8.164 8.165-.584.583L20.8 8.098a.536.536 0 01-.26.086h-5.528a.444.444 0 01-.454-.454V3.108c0-.26.195-.454.454-.454h.345l-1.253-1.253.584-.583zm8.164 2.074v4.924L17.69 2.654h2.851c.26 0 .476.194.476.454v1.619l1.835-1.835z\"\n  })));\n};\n\nexport default SvgMuteVideoEveryoneElse;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgOpenInNew = function SvgOpenInNew(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M14.016 3H21v6.984h-2.016V6.421l-9.797 9.797-1.406-1.406 9.797-9.797h-3.563V2.999zm4.968 15.984V12H21v6.984C21 20.062 20.062 21 18.984 21H5.015c-1.125 0-2.016-.938-2.016-2.016V5.015c0-1.078.891-2.016 2.016-2.016h6.984v2.016H5.015v13.969h13.969z\"\n  })));\n};\n\nexport default SvgOpenInNew;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgOffice365 = function SvgOffice365(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M3 6l11.014-4 6.007 1.5v17L14.014 22 3 18l11.014 1.5V5L7.005 6.5v10L3 18V6z\",\n    fill: \"#A4B8D1\"\n  })));\n};\n\nexport default SvgOffice365;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgParticipants = function SvgParticipants(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M18.792 15.583h-3.37a8.607 8.607 0 00-.482-1.833h3.388c.003-.066.005-.142.005-.23 0-3.39-.802-4.353-3.666-4.353-.745 0-1.35.065-1.839.221a4.57 4.57 0 00-1.37-3.494 3.208 3.208 0 115.875 1.85c2.08.788 2.834 2.714 2.834 5.777 0 1.375-.459 2.062-1.375 2.062zm-2.75-9.625a1.375 1.375 0 11-2.75 0 1.375 1.375 0 012.75 0zM3.437 20.167c-1.069 0-1.604-.764-1.604-2.292 0-3.493.926-5.655 3.5-6.486a3.667 3.667 0 115.833 0c2.575.831 3.5 2.993 3.5 6.486 0 1.528-.534 2.292-1.604 2.292H3.438zm6.646-11a1.833 1.833 0 11-3.666 0 1.833 1.833 0 013.666 0zm2.75 8.708c0 .196-.01.349-.025.458H3.692a3.738 3.738 0 01-.025-.458c0-3.856 1.036-5.042 4.583-5.042s4.583 1.186 4.583 5.042z\"\n  })));\n};\n\nexport default SvgParticipants;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgPhone = function SvgPhone(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M6.609 10.781a15.506 15.506 0 006.609 6.609l2.203-2.203c.281-.281.703-.375 1.031-.234 1.125.375 2.344.563 3.563.563a.96.96 0 01.984.984v3.516a.96.96 0 01-.984.984C10.64 21 2.999 13.359 2.999 3.984A.96.96 0 013.983 3h3.516a.96.96 0 01.984.984c0 1.266.188 2.438.563 3.563.094.328.047.75-.234 1.031z\"\n  })));\n};\n\nexport default SvgPhone;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgEnlarge = function SvgEnlarge(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M21 19.031V4.968H3v14.063h18zM21 3q.797 0 1.406.609t.609 1.406v13.969q0 .797-.609 1.406T21 20.999H3q-.797 0-1.406-.609t-.609-1.406V5.015q0-.797.609-1.406T3 3h18zm-6.984 12.984L12 18.515l-2.016-2.531h4.031zM6 9.984v4.031l-2.484-2.016zm12 0L20.484 12 18 14.016V9.985zm-6-4.5l2.016 2.531H9.985z\"\n  })));\n};\n\nexport default SvgEnlarge;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgPaperPlane = function SvgPaperPlane(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M16.667 1.667l-15 9.166 5.966.995.7 5.255 2.311-3.85 6.023 4.684V1.667zm-7.93 8.655L6.35 9.924 15 4.638v9.87l-3.684-2.864L12.5 7.5l-3.763 2.822z\"\n  })));\n};\n\nexport default SvgPaperPlane;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgPresentation = function SvgPresentation(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M15.667 3.667a1 1 0 00-1 1v12.666a1 1 0 001 1h1.666a1 1 0 001-1V4.667a1 1 0 00-1-1h-1.666zm-6.5 6.5a1 1 0 011-1h1.666a1 1 0 011 1v7.166a1 1 0 01-1 1h-1.666a1 1 0 01-1-1v-7.166zm-5.5 5.5a1 1 0 011-1h1.666a1 1 0 011 1v1.666a1 1 0 01-1 1H4.667a1 1 0 01-1-1v-1.666z\"\n  })));\n};\n\nexport default SvgPresentation;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgRaisedHand = function SvgRaisedHand(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M11.917 3.208v8.709a.917.917 0 001.833 0V4.833c0-.097.168-.25.458-.25.29 0 .459.153.459.25v7.084a.917.917 0 001.833 0V6.875a.458.458 0 11.917 0v6.913c-.25 2.552-2.425 4.545-5.042 4.545a5.037 5.037 0 01-4.205-2.258l-.003.001-3.495-5.255c-.168-.24-.117-.526.09-.671a.458.458 0 01.638.112l1.173 1.753h-.001a.917.917 0 001.676-.482h.002V5.043a.458.458 0 01.917-.001V11.918a.917.917 0 001.833 0V3.208a.458.458 0 11.917 0zm7.317 10.56l.016-.008V6.876a2.292 2.292 0 00-2.76-2.244c-.112-1.055-1.091-1.881-2.282-1.881-.17 0-.335.017-.495.049a2.292 2.292 0 00-4.51.004 2.292 2.292 0 00-2.786 2.238v3.663a2.293 2.293 0 00-3.27 3.135l3.302 4.94a6.875 6.875 0 0012.785-3.01z\"\n  })));\n};\n\nexport default SvgRaisedHand;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgRaisedHandHollow = function SvgRaisedHandHollow(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 18 18\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M9.75 2.625V9.75a.75.75 0 001.5 0V3.955c0-.08.138-.205.375-.205s.375.125.375.205V9.75a.75.75 0 001.5 0V5.625a.375.375 0 01.75 0v5.656C14.046 13.37 12.266 15 10.125 15a4.121 4.121 0 01-3.44-1.848l-.003.001-2.86-4.3c-.137-.196-.095-.43.074-.549a.375.375 0 01.522.092l.96 1.434-.001.001a.75.75 0 001.371-.395h.002V4.126a.375.375 0 11.75 0V9.75a.75.75 0 001.5 0V2.625a.375.375 0 11.75 0zm5.987 8.64l.013-.006V5.625a1.875 1.875 0 00-2.259-1.836C13.4 2.925 12.6 2.25 11.625 2.25c-.14 0-.275.014-.405.04a1.876 1.876 0 00-3.69.004 1.875 1.875 0 00-2.28 1.831v2.996a1.876 1.876 0 00-2.675 2.566l2.701 4.041a5.625 5.625 0 0010.46-2.463z\"\n  })));\n};\n\nexport default SvgRaisedHandHollow;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgRec = function SvgRec(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm2.167-13.556h-3.456v-1.851h3.261v-1.26h-3.261v-1.777h3.456v-1.361h-5.052v7.61h5.052v-1.361zM23.087 20c1.839 0 3.181-1.134 3.313-2.779h-1.554c-.153.838-.84 1.376-1.754 1.376-1.205 0-1.95-.997-1.95-2.6s.745-2.595 1.945-2.595c.909 0 1.601.575 1.754 1.45h1.554c-.116-1.656-1.501-2.853-3.308-2.853-2.214 0-3.578 1.524-3.578 3.997 0 2.479 1.369 4.003 3.578 4.003zM7.196 17.047h1.305l1.422 2.758h1.807l-1.607-3.006c.877-.348 1.385-1.192 1.385-2.162 0-1.514-1.03-2.442-2.706-2.442H5.6v7.61h1.596v-2.758zm0-3.565v2.341h1.4c.803 0 1.274-.432 1.274-1.165 0-.722-.497-1.176-1.289-1.176H7.196z\"\n  })));\n};\n\nexport default SvgRec;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgPlay = function SvgPlay(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 28\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M21.625 14.484L.875 26.015c-.484.266-.875.031-.875-.516v-23c0-.547.391-.781.875-.516l20.75 11.531c.484.266.484.703 0 .969z\"\n  })));\n};\n\nexport default SvgPlay;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgStop = function SvgStop(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 28\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M24 3v22c0 .547-.453 1-1 1H1c-.547 0-1-.453-1-1V3c0-.547.453-1 1-1h22c.547 0 1 .453 1 1z\"\n  })));\n};\n\nexport default SvgStop;","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgReply = function SvgReply(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M0 0h24v24H0z\",\n    fill: \"none\"\n  })));\n};\n\nexport default SvgReply;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSecurityLocked = function SvgSecurityLocked(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M24 26.688V13.313H8v13.375h16zM11.875 8v2.688h8.25V8c0-2.25-1.875-4.125-4.125-4.125S11.875 5.75 11.875 8zM24 10.688c1.438 0 2.688 1.188 2.688 2.625v13.375c0 1.438-1.25 2.625-2.688 2.625H8c-1.438 0-2.688-1.188-2.688-2.625V13.313c0-1.438 1.25-2.625 2.688-2.625h1.313V8c0-3.688 3-6.688 6.688-6.688s6.688 3 6.688 6.688v2.688h1.313zm-8 12c-1.438 0-2.688-1.25-2.688-2.688s1.25-2.688 2.688-2.688 2.688 1.25 2.688 2.688-1.25 2.688-2.688 2.688z\"\n  })));\n};\n\nexport default SvgSecurityLocked;","var _path, _path2, _defs;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSecurityOff = function SvgSecurityOff(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 25\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M3.876 3.008L3 3.118v10.557a7 7 0 003.29 5.935l5.18 3.238.53.331.53-.331 5.18-3.238A7 7 0 0021 13.675V3.117l-.876-.11-8-1L12 1.993l-.124.016-8 1z\",\n    fill: \"url(#security-off_svg__paint0_linear)\",\n    stroke: \"#fff\",\n    strokeWidth: 2\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M20 4v9.675a6 6 0 01-2.82 5.087L12 22V3l8 1z\",\n    fill: \"url(#security-off_svg__paint1_linear)\"\n  })), _defs || (_defs = React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n    id: \"security-off_svg__paint0_linear\",\n    x1: 11.814,\n    y1: 4.142,\n    x2: 11.814,\n    y2: 23,\n    gradientUnits: \"userSpaceOnUse\"\n  }, React.createElement(\"stop\", {\n    stopColor: \"#FFB800\"\n  }), React.createElement(\"stop\", {\n    offset: 1,\n    stopColor: \"#CF4B00\"\n  })), React.createElement(\"linearGradient\", {\n    id: \"security-off_svg__paint1_linear\",\n    x1: 11.814,\n    y1: 4.142,\n    x2: 11.814,\n    y2: 23,\n    gradientUnits: \"userSpaceOnUse\"\n  }, React.createElement(\"stop\", {\n    stopColor: \"#FF8A00\"\n  }), React.createElement(\"stop\", {\n    offset: 1,\n    stopColor: \"#A03B03\"\n  })))));\n};\n\nexport default SvgSecurityOff;","var _path, _path2, _path3, _defs;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSecurityOn = function SvgSecurityOn(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 25\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M3.876 3.008L3 3.118v10.557a7 7 0 003.29 5.935l5.18 3.238.53.331.53-.331 5.18-3.238A7 7 0 0021 13.675V3.117l-.876-.11-8-1L12 1.993l-.124.016-8 1z\",\n    fill: \"url(#security-on_svg__paint0_linear)\",\n    stroke: \"#fff\",\n    strokeWidth: 2\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M20 4v9.675a6 6 0 01-2.82 5.087L12 22V3l8 1z\",\n    fill: \"url(#security-on_svg__paint1_linear)\"\n  })), _path3 || (_path3 = React.createElement(\"path\", {\n    d: \"M9 11.438L10.685 13 15 9\",\n    stroke: \"#fff\",\n    strokeWidth: 1.5,\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  })), _defs || (_defs = React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n    id: \"security-on_svg__paint0_linear\",\n    x1: 11.814,\n    y1: 4.142,\n    x2: 11.814,\n    y2: 23,\n    gradientUnits: \"userSpaceOnUse\"\n  }, React.createElement(\"stop\", {\n    stopColor: \"#76CF9C\"\n  }), React.createElement(\"stop\", {\n    offset: 1,\n    stopColor: \"#279255\"\n  })), React.createElement(\"linearGradient\", {\n    id: \"security-on_svg__paint1_linear\",\n    x1: 11.814,\n    y1: 4.142,\n    x2: 11.814,\n    y2: 23,\n    gradientUnits: \"userSpaceOnUse\"\n  }, React.createElement(\"stop\", {\n    stopColor: \"#31B76A\"\n  }), React.createElement(\"stop\", {\n    offset: 1,\n    stopColor: \"#18663A\"\n  })))));\n};\n\nexport default SvgSecurityOn;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSearch = function SvgSearch(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M9.516 14.016c2.484 0 4.5-2.016 4.5-4.5s-2.016-4.5-4.5-4.5-4.5 2.016-4.5 4.5 2.016 4.5 4.5 4.5zm6 0l4.969 4.969-1.5 1.5-4.969-4.969v-.797l-.281-.281c-1.125.984-2.625 1.547-4.219 1.547C5.907 15.985 3 13.126 3 9.516S5.906 3 9.516 3s6.469 2.906 6.469 6.516c0 1.594-.563 3.094-1.547 4.219l.281.281h.797z\"\n  })));\n};\n\nexport default SvgSearch;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSettings = function SvgSettings(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M9.005 2.17l-.576 1.727-.634.262-1.628-.813a1.833 1.833 0 00-2.116.343l-.362.362a1.833 1.833 0 00-.343 2.116l.816 1.624-.265.638-1.727.576c-.748.25-1.253.95-1.253 1.739v.512c0 .79.505 1.49 1.253 1.74l1.727.575.262.634-.813 1.628a1.833 1.833 0 00.343 2.116l.362.362c.558.558 1.41.696 2.116.343l1.624-.816.638.265.576 1.727c.25.748.95 1.253 1.739 1.253h.512c.79 0 1.49-.505 1.74-1.253l.575-1.726.634-.263 1.628.813a1.833 1.833 0 002.116-.343l.362-.362c.558-.558.696-1.41.343-2.116l-.816-1.624.265-.638 1.727-.576a1.833 1.833 0 001.253-1.739v-.512c0-.79-.505-1.49-1.253-1.74l-1.726-.572-.264-.637.814-1.628a1.833 1.833 0 00-.343-2.116l-.362-.362a1.833 1.833 0 00-2.116-.343l-1.624.816-.638-.265-.576-1.727a1.833 1.833 0 00-1.74-1.253h-.511c-.79 0-1.49.505-1.74 1.253zM7.723 6.173l2.181-.903.84-2.52h.512l.84 2.52 2.185.908 2.372-1.193.362.362-1.188 2.376.903 2.185 2.52.836v.512l-2.52.84-.908 2.185 1.193 2.372-.362.362-2.376-1.188-2.181.903-.84 2.52h-.512l-.84-2.52-2.185-.908-2.372 1.193-.362-.362 1.188-2.376-.903-2.181-2.52-.84v-.512l2.52-.84.908-2.185-1.193-2.372.362-.362 2.376 1.188zM11 15.583a4.583 4.583 0 110-9.166 4.583 4.583 0 010 9.166zM13.75 11a2.75 2.75 0 11-5.5 0 2.75 2.75 0 015.5 0z\"\n  })));\n};\n\nexport default SvgSettings;","var _path, _path2, _path3;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgShare = function SvgShare(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 50 50\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M30.3 13.7L25 8.4l-5.3 5.3-1.4-1.4L25 5.6l6.7 6.7z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M24 7h2v21h-2z\"\n  })), _path3 || (_path3 = React.createElement(\"path\", {\n    d: \"M35 40H15c-1.7 0-3-1.3-3-3V19c0-1.7 1.3-3 3-3h7v2h-7c-.6 0-1 .4-1 1v18c0 .6.4 1 1 1h20c.6 0 1-.4 1-1V19c0-.6-.4-1-1-1h-7v-2h7c1.7 0 3 1.3 3 3v18c0 1.7-1.3 3-3 3z\"\n  })));\n};\n\nexport default SvgShare;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgShareAudio = function SvgShareAudio(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M9.317 3.07L5 6.666H2.5a.833.833 0 00-.833.833v5c0 .46.373.833.833.833H5l4.317 3.597a.417.417 0 00.683-.32V3.39a.417.417 0 00-.683-.32zM3.333 8.332h2.27l2.73-2.275v7.884l-2.73-2.275h-2.27V8.333zm8.334-1.666a3.333 3.333 0 010 6.666v-1.666a1.667 1.667 0 100-3.334V6.667zm0-3.334a6.667 6.667 0 010 13.334V15a5 5 0 000-10V3.333z\",\n    fill: \"#fff\"\n  })));\n};\n\nexport default SvgShareAudio;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgShareDesktop = function SvgShareDesktop(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M3.667 2.75h14.666c1.013 0 1.834.82 1.834 1.833v11c0 1.013-.821 1.834-1.834 1.834h-2.75a.917.917 0 010 1.833H6.417a.917.917 0 010-1.833h-2.75a1.833 1.833 0 01-1.834-1.834v-11c0-1.012.821-1.833 1.834-1.833zm0 1.833v11h14.666v-11H3.667zm8.25 3.667c-3.75 0-5.5 1.604-5.5 6.417 2-3.896 5.5-3.667 5.5-3.667v1.274a.5.5 0 00.813.39l3.287-2.65a.5.5 0 000-.778l-3.287-2.65a.5.5 0 00-.813.39V8.25z\"\n  })));\n};\n\nexport default SvgShareDesktop;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgShareDoc = function SvgShareDoc(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M17.313 12h7.375l-7.375-7.313V12zm4 6.688V16H10.688v2.688h10.625zm0 5.312v-2.688H10.688V24h10.625zM18.688 2.688l8 8v16c0 1.438-1.25 2.625-2.688 2.625H8c-1.438 0-2.688-1.188-2.688-2.625l.063-21.375A2.64 2.64 0 018 2.688h10.688z\"\n  })));\n};\n\nexport default SvgShareDoc;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSharedVideo = function SvgSharedVideo(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 26.688c5.875 0 10.688-4.813 10.688-10.688S21.875 5.312 16 5.312 5.312 10.125 5.312 16 10.125 26.688 16 26.688zm0-24c7.375 0 13.313 5.938 13.313 13.313S23.375 29.314 16 29.314 2.687 23.376 2.687 16.001 8.625 2.688 16 2.688zM13.313 22V10l8 6z\"\n  })));\n};\n\nexport default SvgSharedVideo;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSmile = function SvgSmile(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M10 18.333a8.333 8.333 0 110-16.666 8.333 8.333 0 010 16.666zm0-1.666a6.667 6.667 0 100-13.334 6.667 6.667 0 000 13.334zM8.333 8.75a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zM12.917 10a1.25 1.25 0 100-2.5 1.25 1.25 0 000 2.5zM10 15c1.75 0 3.289-.898 4.182-2.259l-1.295-1.072A3.335 3.335 0 0110 13.333a3.344 3.344 0 01-2.876-1.666L5.83 12.741A5 5 0 0010 15z\"\n  })));\n};\n\nexport default SvgSmile;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgStopAudioShare = function SvgStopAudioShare(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M6.574 5.355l-.012.01-3.45-3.45a.847.847 0 10-1.197 1.198l3.34 3.34L5 6.668H2.5a.833.833 0 00-.833.833v5c0 .46.373.833.833.833H5l4.317 3.597a.417.417 0 00.683-.32v-5.412l1.667 1.666v.47c.149 0 .296-.01.44-.03l1.36 1.362a4.987 4.987 0 01-1.8.334v1.667a6.638 6.638 0 003.06-.743l2.16 2.161a.847.847 0 101.198-1.198l-1.945-1.944.011-.01-1.18-1.18-.01.01-1.183-1.183.011-.01-1.189-1.189a.929.929 0 01-.012.009L10 8.802v-.02L8.333 7.114v.02l-.587-.587.011-.01-1.183-1.183zm5.403 3.007l-.31-.31V6.667a3.333 3.333 0 013.12 4.506L13.306 9.69a1.668 1.668 0 00-1.328-1.328zm4.063 4.063l1.213 1.214a6.667 6.667 0 00-5.587-10.306V5a5 5 0 014.374 7.425zM10 6.385L7.88 4.267 9.318 3.07a.417.417 0 01.683.32v2.996zM5.603 8.334l.836-.696L8.333 9.53v4.41l-2.73-2.274h-2.27V8.333h2.27z\",\n    fill: \"#fff\"\n  })));\n};\n\nexport default SvgStopAudioShare;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSwitchCamera = function SvgSwitchCamera(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M20 20.688L24.688 16 20 11.312v3.375h-8v-3.375L7.312 16 12 20.688v-3.375h8v3.375zm6.688-15.375c1.438 0 2.625 1.25 2.625 2.688v16c0 1.438-1.188 2.688-2.625 2.688H5.313c-1.438 0-2.625-1.25-2.625-2.688v-16c0-1.438 1.188-2.688 2.625-2.688h4.25l2.438-2.625h8l2.438 2.625h4.25z\"\n  })));\n};\n\nexport default SvgSwitchCamera;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgTilesMany = function SvgTilesMany(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M7.228 11.464H1.996c-.723 0-1.308.587-1.308 1.309v5.232c0 .722.585 1.308 1.308 1.308h5.232c.723 0 1.308-.586 1.308-1.308v-5.232a1.31 1.31 0 00-1.308-1.309zm0 5.887a.654.654 0 01-.654.654H2.649a.654.654 0 01-.654-.654v-3.924c0-.361.292-.654.654-.654h3.924c.361 0 .654.293.654.654v3.924zm10.464-5.887H12.46c-.723 0-1.308.587-1.308 1.309v5.232c0 .722.585 1.308 1.308 1.308h5.232c.722 0 1.308-.586 1.308-1.308v-5.232a1.31 1.31 0 00-1.308-1.309zm0 5.887a.654.654 0 01-.654.654h-3.924a.654.654 0 01-.654-.654v-3.924c0-.361.293-.654.654-.654h3.924c.361 0 .654.293.654.654v3.924zM7.228 1H1.996C1.273 1 .688 1.585.688 2.308V7.54c0 .723.585 1.308 1.308 1.308h5.232c.723 0 1.308-.585 1.308-1.308V2.308C8.536 1.585 7.95 1 7.228 1zm0 5.886a.654.654 0 01-.654.654H2.649a.654.654 0 01-.654-.654V2.962c0-.361.292-.654.654-.654h3.924c.361 0 .654.292.654.654v3.924zM17.692 1H12.46c-.723 0-1.308.585-1.308 1.308V7.54c0 .723.585 1.308 1.308 1.308h5.232c.722 0 1.308-.585 1.308-1.308V2.308C19 1.585 18.414 1 17.692 1zm0 5.886a.654.654 0 01-.654.654h-3.924a.654.654 0 01-.654-.654V2.962c0-.361.293-.654.654-.654h3.924c.361 0 .654.292.654.654v3.924z\"\n  })));\n};\n\nexport default SvgTilesMany;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgCameraTakePicture = function SvgCameraTakePicture(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 22 22\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M11 20.167a9.167 9.167 0 110-18.334 9.167 9.167 0 010 18.334zm0-1.834a7.333 7.333 0 100-14.666 7.333 7.333 0 000 14.666zM15.583 11a4.583 4.583 0 11-9.166 0 4.583 4.583 0 019.166 0z\"\n  })));\n};\n\nexport default SvgCameraTakePicture;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgTrash = function SvgTrash(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    \"aria-hidden\": \"true\",\n    \"data-prefix\": \"fas\",\n    \"data-icon\": \"trash-alt\",\n    className: \"trash_svg__svg-inline--fa trash_svg__fa-trash-alt trash_svg__fa-w-14\",\n    viewBox: \"0 0 448 512\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M32 464a48 48 0 0048 48h288a48 48 0 0048-48V128H32zm272-256a16 16 0 0132 0v224a16 16 0 01-32 0zm-96 0a16 16 0 0132 0v224a16 16 0 01-32 0zm-96 0a16 16 0 0132 0v224a16 16 0 01-32 0zM432 32H312l-9.4-18.7A24 24 0 00281.1 0H166.8a23.72 23.72 0 00-21.4 13.3L136 32H16A16 16 0 000 48v32a16 16 0 0016 16h416a16 16 0 0016-16V48a16 16 0 00-16-16z\"\n  })));\n};\n\nexport default SvgTrash;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVideoOff = function SvgVideoOff(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 20\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M6.219 5h-.021L3.113 1.915a.847.847 0 10-1.198 1.198L3.802 5h-.469c-.92 0-1.666.746-1.666 1.667v6.666c0 .92.746 1.667 1.666 1.667H12.5c.367 0 .707-.119.982-.32l3.405 3.405a.847.847 0 101.198-1.198l-3.918-3.918v-.021L12.5 11.28v.021L7.865 6.667h.02L6.22 5zM12.5 8.885V6.667h-2.219L8.615 5H12.5c.92 0 1.667.746 1.667 1.667v.714l2.92-1.669a.833.833 0 011.246.724v7.128a.833.833 0 01-.427.728l-3.396-3.396 2.157 1.232V7.872l-2.5 1.428v1.252L12.5 8.885zM3.333 6.667H5.47l6.667 6.666H3.333V6.667z\"\n  })));\n};\n\nexport default SvgVideoOff;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgAud = function SvgAud(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zM9.633 19.897h1.788l-2.74-7.891H6.74L4 19.897h1.657l.607-1.881h2.773l.596 1.881zm4.801-7.892h-1.652v5.168c0 1.75 1.285 2.926 3.303 2.926 2.023 0 3.309-1.176 3.309-2.926v-5.168h-1.652v4.998c0 .995-.596 1.63-1.657 1.63-1.055 0-1.652-.634-1.652-1.63v-4.998zM21.32 12v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894H21.32zm1.651 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51h-1.192zm-15.362.235l-.99 3.095h2.067l-.979-3.095h-.098z\"\n  })));\n};\n\nexport default SvgAud;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgHd = function SvgHd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm-.958-12v-7.994h-1.696v3.224h-3.65v-3.224H8V20h1.696v-3.341h3.65V20h1.696zm1.966-8v8h3.19C22.624 20 24 18.543 24 15.945 24 13.441 22.607 12 20.198 12h-3.19zm1.696 1.429v5.141h1.224c1.499 0 2.342-.909 2.342-2.598 0-1.618-.87-2.543-2.342-2.543h-1.224z\"\n  })));\n};\n\nexport default SvgHd;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgLd = function SvgLd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zm-1.238-13.541h-3.511v-6.453H9.599v7.891h5.162v-1.438zM16.261 12v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894h-3.106zm1.652 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51h-1.192z\"\n  })));\n};\n\nexport default SvgLd;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSd = function SvgSd(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 32 32\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16-7.163 16-16 16zM8.8 17.901c.06 1.471 1.28 2.395 3.161 2.395 1.98 0 3.199-.973 3.199-2.565 0-1.225-.684-1.909-2.27-2.242l-.952-.202c-.924-.197-1.302-.476-1.302-.963 0-.602.547-.984 1.373-.984.798 0 1.378.416 1.455 1.039h1.553C14.968 12.974 13.737 12 11.998 12c-1.821 0-3.019.979-3.019 2.466 0 1.203.705 1.952 2.144 2.253l1.028.219c.968.208 1.362.498 1.362 1.001 0 .596-.607 1.012-1.466 1.012-.93 0-1.575-.41-1.652-1.05H8.798zm7.919-5.704v7.897h3.106c2.363 0 3.702-1.438 3.702-4.003 0-2.472-1.356-3.894-3.702-3.894h-3.106zm1.651 1.411v5.075h1.192c1.46 0 2.28-.897 2.28-2.565 0-1.597-.848-2.51-2.28-2.51H18.37z\"\n  })));\n};\n\nexport default SvgSd;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgUserGroups = function SvgUserGroups(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 16\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M5.333 2c.948 0 1.764.565 2.13 1.377-.455.073-.879.239-1.252.477a1 1 0 10-1.237 1.413 3.32 3.32 0 00-.307 1.4v.03c-1.545.156-2 .957-2 3.136 0 .064.001.12.004.167h.463a6.263 6.263 0 00-.35 1.333h-.45c-.667 0-1-.5-1-1.5 0-2.227.547-3.628 2.06-4.201A2.333 2.333 0 015.334 2zM9.79 3.854a3.313 3.313 0 00-1.251-.477 2.334 2.334 0 114.068 2.255c1.513.573 2.06 1.974 2.06 4.201 0 1-.333 1.5-1 1.5h-.45a6.267 6.267 0 00-.35-1.333h.463a3.19 3.19 0 00.004-.167c0-2.179-.456-2.98-2-3.136v-.03c0-.5-.11-.975-.307-1.4a1 1 0 10-1.237-1.413zM4.5 14.667c-.778 0-1.167-.556-1.167-1.667 0-2.54.673-4.113 2.546-4.717a2.667 2.667 0 114.242 0c1.873.604 2.546 2.177 2.546 4.717 0 1.111-.39 1.667-1.167 1.667h-7zm4.833-8a1.333 1.333 0 11-2.666 0 1.333 1.333 0 012.666 0zm2 6.333c0 .143-.008.254-.018.333h-6.63c-.01-.08-.018-.19-.018-.333 0-2.804.753-3.667 3.333-3.667s3.333.863 3.333 3.667z\"\n  })));\n};\n\nexport default SvgUserGroups;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVirtualBackground = function SvgVirtualBackground(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M20 2H4a2 2 0 00-2 2v16a2 2 0 002 2h16a2 2 0 002-2V4a2 2 0 00-2-2zM9.096 14.76l2.146 3.112 3.185-7.351a1 1 0 011.81-.055L20 17.88V4H4v15.76l3.45-5a1 1 0 011.646 0zM9 12a3 3 0 110-6 3 3 0 010 6zm1-3a1 1 0 11-2 0 1 1 0 012 0zm5.416 4.269L18.833 20H12.5l2.916-6.731zm-7.143 3.82L10.28 20H6.264l2.009-2.91z\"\n  })));\n};\n\nexport default SvgVirtualBackground;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVolumeEmpty = function SvgVolumeEmpty(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M11.18 3.683L6 8H3a1 1 0 00-1 1v6a1 1 0 001 1h3l5.18 4.317a.5.5 0 00.82-.384V4.068a.5.5 0 00-.82-.385zM4 10h2.724L10 7.27v9.46L6.724 14H4v-4zm10-2a4 4 0 010 8v-2a2 2 0 100-4V8zm0-4a8 8 0 110 16v-2a6 6 0 000-12V4z\"\n  })));\n};\n\nexport default SvgVolumeEmpty;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgVolumeOff = function SvgVolumeOff(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    clipRule: \"evenodd\",\n    d: \"M7.889 6.426l-.014.012-4.14-4.14a1.017 1.017 0 10-1.437 1.437l4.009 4.01L6 8H3a1 1 0 00-1 1v6a1 1 0 001 1h3l5.18 4.317a.5.5 0 00.82-.384v-6.496l2 2V16c.179 0 .355-.012.528-.034l1.633 1.633c-.67.259-1.399.401-2.161.401v2a7.966 7.966 0 003.672-.89l2.593 2.592a1.017 1.017 0 101.437-1.437L19.37 17.93l.013-.012-1.417-1.416a.753.753 0 00-.013.012l-1.419-1.42.014-.01-1.427-1.427-.015.01L12 10.563v-.026l-2-2v.026l-.705-.705.014-.012-1.42-1.42zM14 9.663l3.745 3.745A4 4 0 0014 8v1.663zm5.248 5.248l1.456 1.456A8 8 0 0014 4v2a6 6 0 015.248 8.91zM12 7.663L9.457 5.119l1.723-1.436a.5.5 0 01.82.385v3.595zM6.724 10l1.003-.836L10 11.437v5.293L6.724 14H4v-4h2.724z\"\n  })));\n};\n\nexport default SvgVolumeOff;","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgWarning = function SvgWarning(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M0 0h24v24H0z\",\n    fill: \"none\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n  })));\n};\n\nexport default SvgWarning;","var _path, _path2, _path3;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgWifi1 = function SvgWifi1(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 12\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    opacity: 0.4,\n    d: \"M13.091 6.598a7.187 7.187 0 00-2.336-1.656A6.841 6.841 0 008 4.36c-.946 0-1.882.198-2.755.582a7.187 7.187 0 00-2.336 1.656l1.454 1.544a5.134 5.134 0 011.669-1.184A4.887 4.887 0 018 6.543c.675 0 1.344.141 1.968.415a5.135 5.135 0 011.669 1.184l1.454-1.544z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    opacity: 0.4,\n    d: \"M16 3.51C13.877 1.264 11 0 8 0S2.123 1.263 0 3.51l1.454 1.544C3.192 3.214 5.546 2.181 8 2.181c2.454 0 4.808 1.033 6.546 2.873L16 3.511z\"\n  })), _path3 || (_path3 = React.createElement(\"path\", {\n    d: \"M5.943 9.817L8 12l2.057-2.183a2.903 2.903 0 00-.944-.67 2.764 2.764 0 00-2.226 0 2.904 2.904 0 00-.944.67z\"\n  })));\n};\n\nexport default SvgWifi1;","var _path, _path2, _path3;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgWifi2 = function SvgWifi2(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 12\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M13.091 6.598a7.188 7.188 0 00-2.336-1.656A6.841 6.841 0 008 4.36c-.946 0-1.882.198-2.755.582a7.188 7.188 0 00-2.336 1.656l1.454 1.544a5.134 5.134 0 011.669-1.184A4.887 4.887 0 018 6.543c.675 0 1.344.141 1.968.415a5.135 5.135 0 011.669 1.184l1.454-1.544z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    opacity: 0.4,\n    d: \"M16 3.51C13.877 1.264 11 0 8 0S2.123 1.263 0 3.51l1.454 1.544C3.192 3.214 5.546 2.181 8 2.181c2.454 0 4.808 1.033 6.546 2.873L16 3.511z\"\n  })), _path3 || (_path3 = React.createElement(\"path\", {\n    d: \"M5.943 9.817L8 12l2.057-2.183a2.903 2.903 0 00-.944-.67 2.764 2.764 0 00-2.226 0 2.904 2.904 0 00-.944.67z\"\n  })));\n};\n\nexport default SvgWifi2;","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgWifi3 = function SvgWifi3(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 16 12\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M13.091 6.598a7.188 7.188 0 00-2.336-1.656A6.841 6.841 0 008 4.36c-.946 0-1.882.198-2.755.582a7.188 7.188 0 00-2.336 1.656l1.454 1.544a5.134 5.134 0 011.669-1.184A4.887 4.887 0 018 6.543c.675 0 1.344.141 1.968.415a5.135 5.135 0 011.669 1.184l1.454-1.544z\"\n  })), _path2 || (_path2 = React.createElement(\"path\", {\n    d: \"M16 3.51C13.877 1.264 11 0 8 0S2.123 1.263 0 3.51l1.454 1.544C3.192 3.214 5.546 2.181 8 2.181c2.454 0 4.808 1.033 6.546 2.873L16 3.511zM5.943 9.817L8 12l2.057-2.183a2.903 2.903 0 00-.944-.67 2.764 2.764 0 00-2.226 0 2.904 2.904 0 00-.944.67z\"\n  })));\n};\n\nexport default SvgWifi3;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgYahoo = function SvgYahoo(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 24 24\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    d: \"M4 3h5.104l2.972 7.604L15.086 3h4.97l-7.483 18H7.572l2.048-4.77L4 3z\",\n    fill: \"#A4B8D1\"\n  })));\n};\n\nexport default SvgYahoo;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSip = function SvgSip(props) {\n  return React.createElement(\"svg\", _extends({}, props, {\n    viewBox: \"0 0 20 14\",\n    fill: \"none\"\n  }), _path || (_path = React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M4.412 1.908c-.905 1.47.832 5.615 2.949 7.732l.002-.002c2.117 2.116 6.258 3.855 7.73 2.95 1.01-.621.915-3.075.15-3.82-.506-.493-2.055-.748-2.693-.62-.2.04-.76.617-1.07.939l-.15.154c-.23.228-1.69-1.02-2.124-1.453L7.6 9.398l1.605-1.611C8.772 7.354 7.53 5.899 7.76 5.671c.037-.038.09-.09.153-.15.322-.312.9-.87.94-1.07.127-.64-.128-2.188-.62-2.694-.746-.765-3.2-.86-3.821.15z\",\n    fill: \"#fff\"\n  })));\n};\n\nexport default SvgSip;","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\n  return obj;\n}\n\nmodule.exports = _defineProperty;","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    // $FlowFixMe\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      // $FlowFixMe\n      return document.styleSheets[i];\n    }\n  }\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  return tag;\n}\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(options) {\n    this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      var _tag = createStyleElement(this);\n\n      var before;\n\n      if (this.tags.length === 0) {\n        before = this.before;\n      } else {\n        before = this.tags[this.tags.length - 1].nextSibling;\n      }\n\n      this.container.insertBefore(_tag, before);\n      this.tags.push(_tag);\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is a really hot path\n        // we check the second character first because having \"i\"\n        // as the second character will happen less often than\n        // having \"@\" as the first character\n        var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n\n        sheet.insertRule(rule, // we need to insert @import rules before anything else\n        // otherwise there will be an error\n        // technically this means that the @import rules will\n        // _usually_(not always since there could be multiple style tags)\n        // be the first ones in prod and generally later in dev\n        // this shouldn't really matter in the real world though\n        // @import is generally only used for font faces from google fonts and etc.\n        // so while this could be technically correct then it would be slower and larger\n        // for a tiny bit of correctness that won't matter in the real world\n        isImportRule ? 0 : sheet.cssRules.length);\n      } catch (e) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n        }\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    // $FlowFixMe\n    this.tags.forEach(function (tag) {\n      return tag.parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","function stylis_min (W) {\n  function M(d, c, e, h, a) {\n    for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n      g = e.charCodeAt(l);\n      l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n      if (0 === b + n + v + m) {\n        if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n          switch (g) {\n            case 32:\n            case 9:\n            case 59:\n            case 13:\n            case 10:\n              break;\n\n            default:\n              f += e.charAt(l);\n          }\n\n          g = 59;\n        }\n\n        switch (g) {\n          case 123:\n            f = f.trim();\n            q = f.charCodeAt(0);\n            k = 1;\n\n            for (t = ++l; l < B;) {\n              switch (g = e.charCodeAt(l)) {\n                case 123:\n                  k++;\n                  break;\n\n                case 125:\n                  k--;\n                  break;\n\n                case 47:\n                  switch (g = e.charCodeAt(l + 1)) {\n                    case 42:\n                    case 47:\n                      a: {\n                        for (u = l + 1; u < J; ++u) {\n                          switch (e.charCodeAt(u)) {\n                            case 47:\n                              if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                              break;\n\n                            case 10:\n                              if (47 === g) {\n                                l = u + 1;\n                                break a;\n                              }\n\n                          }\n                        }\n\n                        l = u;\n                      }\n\n                  }\n\n                  break;\n\n                case 91:\n                  g++;\n\n                case 40:\n                  g++;\n\n                case 34:\n                case 39:\n                  for (; l++ < J && e.charCodeAt(l) !== g;) {\n                  }\n\n              }\n\n              if (0 === k) break;\n              l++;\n            }\n\n            k = e.substring(t, l);\n            0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n            switch (q) {\n              case 64:\n                0 < r && (f = f.replace(N, ''));\n                g = f.charCodeAt(1);\n\n                switch (g) {\n                  case 100:\n                  case 109:\n                  case 115:\n                  case 45:\n                    r = c;\n                    break;\n\n                  default:\n                    r = O;\n                }\n\n                k = M(c, r, k, g, a + 1);\n                t = k.length;\n                0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n                if (0 < t) switch (g) {\n                  case 115:\n                    f = f.replace(da, ea);\n\n                  case 100:\n                  case 109:\n                  case 45:\n                    k = f + '{' + k + '}';\n                    break;\n\n                  case 107:\n                    f = f.replace(fa, '$1 $2');\n                    k = f + '{' + k + '}';\n                    k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n                    break;\n\n                  default:\n                    k = f + k, 112 === h && (k = (p += k, ''));\n                } else k = '';\n                break;\n\n              default:\n                k = M(c, X(c, f, I), k, h, a + 1);\n            }\n\n            F += k;\n            k = I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n            break;\n\n          case 125:\n          case 59:\n            f = (0 < r ? f.replace(N, '') : f).trim();\n            if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n              case 0:\n                break;\n\n              case 64:\n                if (105 === g || 99 === g) {\n                  G += f + e.charAt(l);\n                  break;\n                }\n\n              default:\n                58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n            }\n            I = r = u = q = 0;\n            f = '';\n            g = e.charCodeAt(++l);\n        }\n      }\n\n      switch (g) {\n        case 13:\n        case 10:\n          47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n          0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n          z = 1;\n          D++;\n          break;\n\n        case 59:\n        case 125:\n          if (0 === b + n + v + m) {\n            z++;\n            break;\n          }\n\n        default:\n          z++;\n          y = e.charAt(l);\n\n          switch (g) {\n            case 9:\n            case 32:\n              if (0 === n + m + b) switch (x) {\n                case 44:\n                case 58:\n                case 9:\n                case 32:\n                  y = '';\n                  break;\n\n                default:\n                  32 !== g && (y = ' ');\n              }\n              break;\n\n            case 0:\n              y = '\\\\0';\n              break;\n\n            case 12:\n              y = '\\\\f';\n              break;\n\n            case 11:\n              y = '\\\\v';\n              break;\n\n            case 38:\n              0 === n + b + m && (r = I = 1, y = '\\f' + y);\n              break;\n\n            case 108:\n              if (0 === n + b + m + E && 0 < u) switch (l - u) {\n                case 2:\n                  112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n                case 8:\n                  111 === K && (E = K);\n              }\n              break;\n\n            case 58:\n              0 === n + b + m && (u = l);\n              break;\n\n            case 44:\n              0 === b + v + n + m && (r = 1, y += '\\r');\n              break;\n\n            case 34:\n            case 39:\n              0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n              break;\n\n            case 91:\n              0 === n + b + v && m++;\n              break;\n\n            case 93:\n              0 === n + b + v && m--;\n              break;\n\n            case 41:\n              0 === n + b + m && v--;\n              break;\n\n            case 40:\n              if (0 === n + b + m) {\n                if (0 === q) switch (2 * x + 3 * K) {\n                  case 533:\n                    break;\n\n                  default:\n                    q = 1;\n                }\n                v++;\n              }\n\n              break;\n\n            case 64:\n              0 === b + v + n + m + u + k && (k = 1);\n              break;\n\n            case 42:\n            case 47:\n              if (!(0 < n + m + v)) switch (b) {\n                case 0:\n                  switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n                    case 235:\n                      b = 47;\n                      break;\n\n                    case 220:\n                      t = l, b = 42;\n                  }\n\n                  break;\n\n                case 42:\n                  47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n              }\n          }\n\n          0 === b && (f += y);\n      }\n\n      K = x;\n      x = g;\n      l++;\n    }\n\n    t = p.length;\n\n    if (0 < t) {\n      r = c;\n      if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n      p = r.join(',') + '{' + p + '}';\n\n      if (0 !== w * E) {\n        2 !== w || L(p, 2) || (E = 0);\n\n        switch (E) {\n          case 111:\n            p = p.replace(ha, ':-moz-$1') + p;\n            break;\n\n          case 112:\n            p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n        }\n\n        E = 0;\n      }\n    }\n\n    return G + p + F;\n  }\n\n  function X(d, c, e) {\n    var h = c.trim().split(ia);\n    c = h;\n    var a = h.length,\n        m = d.length;\n\n    switch (m) {\n      case 0:\n      case 1:\n        var b = 0;\n\n        for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n          c[b] = Z(d, c[b], e).trim();\n        }\n\n        break;\n\n      default:\n        var v = b = 0;\n\n        for (c = []; b < a; ++b) {\n          for (var n = 0; n < m; ++n) {\n            c[v++] = Z(d[n] + ' ', h[b], e).trim();\n          }\n        }\n\n    }\n\n    return c;\n  }\n\n  function Z(d, c, e) {\n    var h = c.charCodeAt(0);\n    33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n    switch (h) {\n      case 38:\n        return c.replace(F, '$1' + d.trim());\n\n      case 58:\n        return d.trim() + c.replace(F, '$1' + d.trim());\n\n      default:\n        if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n    }\n\n    return d + c;\n  }\n\n  function P(d, c, e, h) {\n    var a = d + ';',\n        m = 2 * c + 3 * e + 4 * h;\n\n    if (944 === m) {\n      d = a.indexOf(':', 9) + 1;\n      var b = a.substring(d, a.length - 1).trim();\n      b = a.substring(0, d).trim() + b + ';';\n      return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n    }\n\n    if (0 === w || 2 === w && !L(a, 1)) return a;\n\n    switch (m) {\n      case 1015:\n        return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n      case 951:\n        return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n      case 963:\n        return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n      case 1009:\n        if (100 !== a.charCodeAt(4)) break;\n\n      case 969:\n      case 942:\n        return '-webkit-' + a + a;\n\n      case 978:\n        return '-webkit-' + a + '-moz-' + a + a;\n\n      case 1019:\n      case 983:\n        return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n      case 883:\n        if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n        if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n        break;\n\n      case 932:\n        if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n          case 103:\n            return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n          case 98:\n            return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n        }\n        return '-webkit-' + a + '-ms-' + a + a;\n\n      case 964:\n        return '-webkit-' + a + '-ms-flex-' + a + a;\n\n      case 1023:\n        if (99 !== a.charCodeAt(8)) break;\n        b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n        return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n      case 1005:\n        return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n      case 1e3:\n        b = a.substring(13).trim();\n        c = b.indexOf('-') + 1;\n\n        switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n          case 226:\n            b = a.replace(G, 'tb');\n            break;\n\n          case 232:\n            b = a.replace(G, 'tb-rl');\n            break;\n\n          case 220:\n            b = a.replace(G, 'lr');\n            break;\n\n          default:\n            return a;\n        }\n\n        return '-webkit-' + a + '-ms-' + b + a;\n\n      case 1017:\n        if (-1 === a.indexOf('sticky', 9)) break;\n\n      case 975:\n        c = (a = d).length - 10;\n        b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n        switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n          case 203:\n            if (111 > b.charCodeAt(8)) break;\n\n          case 115:\n            a = a.replace(b, '-webkit-' + b) + ';' + a;\n            break;\n\n          case 207:\n          case 102:\n            a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n        }\n\n        return a + ';';\n\n      case 938:\n        if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n          case 105:\n            return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n          case 115:\n            return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n          default:\n            return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n        }\n        break;\n\n      case 973:\n      case 989:\n        if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n      case 931:\n      case 953:\n        if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n        break;\n\n      case 962:\n        if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n    }\n\n    return a;\n  }\n\n  function L(d, c) {\n    var e = d.indexOf(1 === c ? ':' : '{'),\n        h = d.substring(0, 3 !== c ? e : 10);\n    e = d.substring(e + 1, d.length - 1);\n    return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n  }\n\n  function ea(d, c) {\n    var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n    return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n  }\n\n  function H(d, c, e, h, a, m, b, v, n, q) {\n    for (var g = 0, x = c, w; g < A; ++g) {\n      switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n        case void 0:\n        case !1:\n        case !0:\n        case null:\n          break;\n\n        default:\n          x = w;\n      }\n    }\n\n    if (x !== c) return x;\n  }\n\n  function T(d) {\n    switch (d) {\n      case void 0:\n      case null:\n        A = S.length = 0;\n        break;\n\n      default:\n        if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n          T(d[c]);\n        } else Y = !!d | 0;\n    }\n\n    return T;\n  }\n\n  function U(d) {\n    d = d.prefix;\n    void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n    return U;\n  }\n\n  function B(d, c) {\n    var e = d;\n    33 > e.charCodeAt(0) && (e = e.trim());\n    V = e;\n    e = [V];\n\n    if (0 < A) {\n      var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n      void 0 !== h && 'string' === typeof h && (c = h);\n    }\n\n    var a = M(O, e, c, 0, 0);\n    0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n    V = '';\n    E = 0;\n    z = D = 1;\n    return a;\n  }\n\n  var ca = /^\\0+/g,\n      N = /[\\0\\r\\f]/g,\n      aa = /: */g,\n      ka = /zoo|gra/,\n      ma = /([,: ])(transform)/g,\n      ia = /,\\r+?/g,\n      F = /([\\t\\r\\n ])*\\f?&/g,\n      fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n      Q = /::(place)/g,\n      ha = /:(read-only)/g,\n      G = /[svh]\\w+-[tblr]{2}/,\n      da = /\\(\\s*(.*)\\s*\\)/g,\n      oa = /([\\s\\S]*?);/g,\n      ba = /-self|flex-/g,\n      na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n      la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n      ja = /([^-])(image-set\\()/,\n      z = 1,\n      D = 1,\n      E = 0,\n      w = 1,\n      O = [],\n      S = [],\n      A = 0,\n      R = null,\n      Y = 0,\n      V = '';\n  B.use = T;\n  B.set = U;\n  void 0 !== W && U(W);\n  return B;\n}\n\nexport default stylis_min;\n","import { StyleSheet } from '@emotion/sheet';\nimport Stylis from '@emotion/stylis';\nimport '@emotion/weak-memoize';\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\n\nfunction toSheet(block) {\n  if (block) {\n    Sheet.current.insert(block + '}');\n  }\n}\n\nvar Sheet = {\n  current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n  switch (context) {\n    // property\n    case 1:\n      {\n        switch (content.charCodeAt(0)) {\n          case 64:\n            {\n              // @import\n              Sheet.current.insert(content + ';');\n              return '';\n            }\n          // charcode for l\n\n          case 108:\n            {\n              // charcode for b\n              // this ignores label\n              if (content.charCodeAt(2) === 98) {\n                return '';\n              }\n            }\n        }\n\n        break;\n      }\n    // selector\n\n    case 2:\n      {\n        if (ns === 0) return content + delimiter;\n        break;\n      }\n    // at-rule\n\n    case 3:\n      {\n        switch (ns) {\n          // @font-face, @page\n          case 102:\n          case 112:\n            {\n              Sheet.current.insert(selectors[0] + content);\n              return '';\n            }\n\n          default:\n            {\n              return content + (at === 0 ? delimiter : '');\n            }\n        }\n      }\n\n    case -2:\n      {\n        content.split(needle).forEach(toSheet);\n      }\n  }\n};\n\nvar createCache = function createCache(options) {\n  if (options === undefined) options = {};\n  var key = options.key || 'css';\n  var stylisOptions;\n\n  if (options.prefix !== undefined) {\n    stylisOptions = {\n      prefix: options.prefix\n    };\n  }\n\n  var stylis = new Stylis(stylisOptions);\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    if (/[^a-z-]/.test(key)) {\n      throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n    }\n  }\n\n  var inserted = {}; // $FlowFixMe\n\n  var container;\n\n  {\n    container = options.container || document.head;\n    var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n    Array.prototype.forEach.call(nodes, function (node) {\n      var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n      attrib.split(' ').forEach(function (id) {\n        inserted[id] = true;\n      });\n\n      if (node.parentNode !== container) {\n        container.appendChild(node);\n      }\n    });\n  }\n\n  var _insert;\n\n  {\n    stylis.use(options.stylisPlugins)(ruleSheet);\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      var name = serialized.name;\n      Sheet.current = sheet;\n\n      if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n        var map = serialized.map;\n        Sheet.current = {\n          insert: function insert(rule) {\n            sheet.insert(rule + map);\n          }\n        };\n      }\n\n      stylis(selector, serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[name] = true;\n      }\n    };\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    // https://esbench.com/bench/5bf7371a4cd7e6009ef61d0a\n    var commentStart = /\\/\\*/g;\n    var commentEnd = /\\*\\//g;\n    stylis.use(function (context, content) {\n      switch (context) {\n        case -1:\n          {\n            while (commentStart.test(content)) {\n              commentEnd.lastIndex = commentStart.lastIndex;\n\n              if (commentEnd.test(content)) {\n                commentStart.lastIndex = commentEnd.lastIndex;\n                continue;\n              }\n\n              throw new Error('Your styles have an unterminated comment (\"/*\" without corresponding \"*/\").');\n            }\n\n            commentStart.lastIndex = 0;\n            break;\n          }\n      }\n    });\n    stylis.use(function (context, content, selectors) {\n      switch (context) {\n        case -1:\n          {\n            var flag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n            var unsafePseudoClasses = content.match(/(:first|:nth|:nth-last)-child/g);\n\n            if (unsafePseudoClasses && cache.compat !== true) {\n              unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n                var ignoreRegExp = new RegExp(unsafePseudoClass + \".*\\\\/\\\\* \" + flag + \" \\\\*\\\\/\");\n                var ignore = ignoreRegExp.test(content);\n\n                if (unsafePseudoClass && !ignore) {\n                  console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n                }\n              });\n            }\n\n            break;\n          }\n      }\n    });\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  return cache;\n};\n\nexport default createCache;\n","import '@babel/runtime/helpers/inheritsLoose';\nimport { createContext, forwardRef, createElement } from 'react';\nimport createCache from '@emotion/cache';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar EmotionCacheContext = /*#__PURE__*/createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? createCache() : null);\nvar ThemeContext = /*#__PURE__*/createContext({});\nvar CacheProvider = EmotionCacheContext.Provider;\n\nvar withEmotionCache = function withEmotionCache(func) {\n  var render = function render(props, ref) {\n    return /*#__PURE__*/createElement(EmotionCacheContext.Consumer, null, function (cache) {\n      return func(props, cache, ref);\n    });\n  }; // $FlowFixMe\n\n\n  return /*#__PURE__*/forwardRef(render);\n};\n\n// thus we only need to replace what is a valid character for JS, but not for CSS\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n  return identifier.replace(/\\$/g, '-');\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n  if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n  props.css.indexOf(':') !== -1) {\n    throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`\" + props.css + \"`\");\n  }\n\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps[typePropName] = type; // TODO: check if this still works with all of those different JSX functions\n\n  if (process.env.NODE_ENV !== 'production') {\n    var error = new Error();\n\n    if (error.stack) {\n      // chrome\n      var match = error.stack.match(/at (?:Object\\.|Module\\.|)(?:jsx|createEmotionProps).*\\n\\s+at (?:Object\\.|)([A-Z][A-Za-z$]+) /);\n\n      if (!match) {\n        // safari and firefox\n        match = error.stack.match(/.*\\n([A-Z][A-Za-z$]+)@/);\n      }\n\n      if (match) {\n        newProps[labelPropName] = sanitizeIdentifier(match[1]);\n      }\n    }\n  }\n\n  return newProps;\n};\n\nvar render = function render(cache, props, theme, ref) {\n  var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var type = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles);\n\n  if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n    var labelFromStack = props[labelPropName];\n\n    if (labelFromStack) {\n      serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n    }\n  }\n\n  var rules = insertStyles(cache, serialized, typeof type === 'string');\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps.ref = ref;\n  newProps.className = className;\n  var ele = /*#__PURE__*/createElement(type, newProps);\n\n  return ele;\n}; // eslint-disable-next-line no-undef\n\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  if (typeof props.css === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      return render(cache, props, theme, ref);\n    });\n  }\n\n  return render(cache, props, null, ref);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, createEmotionProps as c, hasOwnProperty as h, withEmotionCache as w };\n","import { serializeStyles } from '@emotion/serialize';\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nexport default css;\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport { createElement, Component } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-57a3a7a3.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, w as withEmotionCache } from './emotion-element-57a3a7a3.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\nimport css from '@emotion/css';\nexport { default as css } from '@emotion/css';\n\nvar jsx = function jsx(type, props) {\n  var args = arguments;\n\n  if (props == null || !hasOwnProperty.call(props, 'css')) {\n    // $FlowFixMe\n    return createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  } // $FlowFixMe\n\n\n  return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false;\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n  // probably using the custom createElement which\n  // means it will be turned into a className prop\n  // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n  props.className || props.css)) {\n    console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n    warnedAboutCssPropForGlobal = true;\n  }\n\n  var styles = props.styles;\n\n  if (typeof styles === 'function') {\n    return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n      var serialized = serializeStyles([styles(theme)]);\n      return /*#__PURE__*/createElement(InnerGlobal, {\n        serialized: serialized,\n        cache: cache\n      });\n    });\n  }\n\n  var serialized = serializeStyles([styles]);\n  return /*#__PURE__*/createElement(InnerGlobal, {\n    serialized: serialized,\n    cache: cache\n  });\n});\n\n// maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\nvar InnerGlobal = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(InnerGlobal, _React$Component);\n\n  function InnerGlobal(props, context, updater) {\n    return _React$Component.call(this, props, context, updater) || this;\n  }\n\n  var _proto = InnerGlobal.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.sheet = new StyleSheet({\n      key: this.props.cache.key + \"-global\",\n      nonce: this.props.cache.sheet.nonce,\n      container: this.props.cache.sheet.container\n    }); // $FlowFixMe\n\n    var node = document.querySelector(\"style[data-emotion-\" + this.props.cache.key + \"=\\\"\" + this.props.serialized.name + \"\\\"]\");\n\n    if (node !== null) {\n      this.sheet.tags.push(node);\n    }\n\n    if (this.props.cache.sheet.tags.length) {\n      this.sheet.before = this.props.cache.sheet.tags[0];\n    }\n\n    this.insertStyles();\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (prevProps.serialized.name !== this.props.serialized.name) {\n      this.insertStyles();\n    }\n  };\n\n  _proto.insertStyles = function insertStyles$1() {\n    if (this.props.serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(this.props.cache, this.props.serialized.next, true);\n    }\n\n    if (this.sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;\n      this.sheet.before = element;\n      this.sheet.flush();\n    }\n\n    this.props.cache.insert(\"\", this.props.serialized, this.sheet, false);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.sheet.flush();\n  };\n\n  _proto.render = function render() {\n\n    return null;\n  };\n\n  return InnerGlobal;\n}(Component);\n\nvar keyframes = function keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n};\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar ClassNames = withEmotionCache(function (props, context) {\n  return /*#__PURE__*/createElement(ThemeContext.Consumer, null, function (theme) {\n    var hasRendered = false;\n\n    var css = function css() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('css can only be used during render');\n      }\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var serialized = serializeStyles(args, context.registered);\n\n      {\n        insertStyles(context, serialized, false);\n      }\n\n      return context.key + \"-\" + serialized.name;\n    };\n\n    var cx = function cx() {\n      if (hasRendered && process.env.NODE_ENV !== 'production') {\n        throw new Error('cx can only be used during render');\n      }\n\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return merge(context.registered, css, classnames(args));\n    };\n\n    var content = {\n      css: css,\n      cx: cx,\n      theme: theme\n    };\n    var ele = props.children(content);\n    hasRendered = true;\n\n    return ele;\n  });\n});\n\nexport { ClassNames, Global, jsx as createElement, jsx, keyframes };\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { createAudioPlayErrorEvent, createAudioPlaySuccessEvent, sendAnalytics } from '../../../../analytics';\nimport { connect } from '../../../redux';\nimport logger from '../../logger';\n\n/**\n * The type of the React {@code Component} props of {@link AudioTrack}.\n */\ntype Props = {\n\n    /**\n     * Represents muted property of the underlying audio element.\n     */\n    _muted: ?Boolean,\n\n    /**\n     * Represents volume property of the underlying audio element.\n     */\n    _volume: ?number,\n\n    /**\n     * The value of the id attribute of the audio element.\n     */\n    id: string,\n\n\n    /**\n     * The audio track.\n     */\n    audioTrack: ?Object,\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * audio element.\n     */\n    autoPlay: boolean,\n\n    /**\n     * The ID of the participant associated with the audio element.\n     */\n    participantId: string\n};\n\n/**\n * The React/Web {@link Component} which is similar to and wraps around {@code HTMLAudioElement}.\n */\nclass AudioTrack extends Component<Props> {\n    /**\n     * Reference to the HTML audio element, stored until the file is ready.\n     */\n    _ref: ?HTMLAudioElement;\n\n    /**\n     * The current timeout ID for play() retries.\n     */\n    _playTimeout: ?TimeoutID;\n\n    /**\n     * Default values for {@code AudioTrack} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        autoPlay: true,\n        id: ''\n    };\n\n\n    /**\n     * Creates new <code>Audio</code> element instance with given props.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._setRef = this._setRef.bind(this);\n        this._play = this._play.bind(this);\n    }\n\n\n    /**\n     * Attaches the audio track to the audio element and plays it.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._attachTrack(this.props.audioTrack);\n\n        if (this._ref) {\n            const { _muted, _volume } = this.props;\n\n            if (typeof _volume === 'number') {\n                this._ref.volume = _volume;\n            }\n\n            if (typeof _muted === 'boolean') {\n                this._ref.muted = _muted;\n            }\n        }\n    }\n\n    /**\n     * Remove any existing associations between the current audio track and the\n     * component's audio element.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._detachTrack(this.props.audioTrack);\n    }\n\n    /**\n     * This component's updating is blackboxed from React to prevent re-rendering of the audio\n     * element, as we set all the properties manually.\n     *\n     * @inheritdoc\n     * @returns {boolean} - False is always returned to blackbox this component\n     * from React.\n     */\n    shouldComponentUpdate(nextProps: Props) {\n        const currentJitsiTrack = this.props.audioTrack?.jitsiTrack;\n        const nextJitsiTrack = nextProps.audioTrack?.jitsiTrack;\n\n        if (currentJitsiTrack !== nextJitsiTrack) {\n            this._detachTrack(this.props.audioTrack);\n            this._attachTrack(nextProps.audioTrack);\n        }\n\n        if (this._ref) {\n            const currentVolume = this._ref.volume;\n            const nextVolume = nextProps._volume;\n\n            if (typeof nextVolume === 'number' && !isNaN(nextVolume) && currentVolume !== nextVolume) {\n                this._ref.volume = nextVolume;\n            }\n\n            const currentMuted = this._ref.muted;\n            const nextMuted = nextProps._muted;\n\n            if (typeof nextMuted === 'boolean' && currentMuted !== nextVolume) {\n                this._ref.muted = nextMuted;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { autoPlay, id } = this.props;\n\n        return (\n            <audio\n                autoPlay = { autoPlay }\n                id = { id }\n                ref = { this._setRef } />\n        );\n    }\n\n    /**\n     * Calls into the passed in track to associate the track with the component's audio element.\n     *\n     * @param {Object} track - The redux representation of the {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _attachTrack(track) {\n        if (!track || !track.jitsiTrack) {\n            return;\n        }\n\n        track.jitsiTrack.attach(this._ref);\n        this._play();\n    }\n\n    /**\n     * Removes the association to the component's audio element from the passed\n     * in redux representation of jitsi audio track.\n     *\n     * @param {Object} track -  The redux representation of the {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _detachTrack(track) {\n        if (this._ref && track && track.jitsiTrack) {\n            clearTimeout(this._playTimeout);\n            this._playTimeout = undefined;\n            track.jitsiTrack.detach(this._ref);\n        }\n    }\n\n    _play: ?number => void;\n\n    /**\n     * Plays the uderlying HTMLAudioElement.\n     *\n     * @param {number} retries - The number of previously failed retries.\n     * @returns {void}\n     */\n    _play(retries = 0) {\n        if (!this._ref) {\n            // nothing to play.\n\n            return;\n        }\n        const { autoPlay, id } = this.props;\n\n        if (autoPlay) {\n            // Ensure the audio gets play() called on it. This may be necessary in the\n            // case where the local video container was moved and re-attached, in which\n            // case the audio may not autoplay.\n            this._ref.play()\n            .then(() => {\n                if (retries !== 0) {\n                    // success after some failures\n                    this._playTimeout = undefined;\n                    sendAnalytics(createAudioPlaySuccessEvent(id));\n                    logger.info(`Successfully played audio track! retries: ${retries}`);\n                }\n            }, e => {\n                logger.error(`Failed to play audio track! retry: ${retries} ; Error: ${e}`);\n\n                if (retries < 3) {\n                    this._playTimeout = setTimeout(() => this._play(retries + 1), 1000);\n\n                    if (retries === 0) {\n                        // send only 1 error event.\n                        sendAnalytics(createAudioPlayErrorEvent(id));\n                    }\n                } else {\n                    this._playTimeout = undefined;\n                }\n            });\n        }\n    }\n\n    _setRef: (?HTMLAudioElement) => void;\n\n    /**\n     * Sets the reference to the HTML audio element.\n     *\n     * @param {HTMLAudioElement} audioElement - The HTML audio element instance.\n     * @private\n     * @returns {void}\n     */\n    _setRef(audioElement: ?HTMLAudioElement) {\n        this._ref = audioElement;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code AudioTrack}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The props passed to the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { participantsVolume } = state['features/filmstrip'];\n\n    return {\n        _muted: state['features/base/config'].startSilent,\n        _volume: participantsVolume[ownProps.participantId]\n    };\n}\n\nexport default connect(_mapStateToProps)(AudioTrack);\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { trackVideoStarted } from '../../tracks';\nimport { shouldRenderVideoTrack } from '../functions';\n\nimport { Video } from './_';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractVideoTrack}.\n */\nexport type Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Callback to invoke when the {@link Video} of {@code AbstractVideoTrack}\n     * is clicked/pressed.\n     */\n    onPress?: Function,\n\n    /**\n     * The Redux representation of the participant's video track.\n     */\n    videoTrack?: Object,\n\n    /**\n     * Whether or not video should be rendered after knowing video playback has\n     * started.\n     */\n    waitForVideoStarted?: boolean,\n\n    /**\n     * The z-order of the Video of AbstractVideoTrack in the stacking space of\n     * all Videos. For more details, refer to the zOrder property of the Video\n     * class for React Native.\n     */\n    zOrder?: number,\n\n    /**\n     * Indicates whether zooming (pinch to zoom and/or drag) is enabled.\n     */\n    zoomEnabled?: boolean\n};\n\n/**\n * Implements a React {@link Component} that renders video element for a\n * specific video track.\n *\n * @abstract\n */\nexport default class AbstractVideoTrack<P: Props> extends Component<P> {\n    /**\n     * Initializes a new AbstractVideoTrack instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVideoPlaying = this._onVideoPlaying.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const videoTrack = _falsy2null(this.props.videoTrack);\n        let render;\n\n        if (this.props.waitForVideoStarted && videoTrack) {\n            // That's the complex case: we have to wait for onPlaying before we\n            // render videoTrack. The complexity comes from the fact that\n            // onPlaying will come after we render videoTrack.\n            if (shouldRenderVideoTrack(videoTrack, true)) {\n                // It appears that onPlaying has come for videoTrack already.\n                // Most probably, another render has already passed through the\n                // else clause below already.\n                render = true;\n            } else if (shouldRenderVideoTrack(videoTrack, false)\n                    && !videoTrack.videoStarted) {\n                // XXX Unfortunately, onPlaying has not come for videoTrack yet.\n                // We have to render in order to give onPlaying a chance to\n                // come.\n                render = true;\n            }\n        } else {\n            // That's the simple case: we don't have to wait for onPlaying\n            // before we render videoTrack\n            render = shouldRenderVideoTrack(videoTrack, false);\n        }\n\n        const stream = render && videoTrack\n            ? videoTrack.jitsiTrack.getOriginalStream() : null;\n\n        // Actual zoom is currently only enabled if the stream is a desktop\n        // stream.\n        const zoomEnabled\n            = this.props.zoomEnabled\n                && stream\n                && videoTrack\n                && videoTrack.videoType === 'desktop';\n\n        return (\n            <Video\n                mirror = { videoTrack && videoTrack.mirror }\n                onPlaying = { this._onVideoPlaying }\n                onPress = { this.props.onPress }\n                stream = { stream }\n                zOrder = { this.props.zOrder }\n                zoomEnabled = { zoomEnabled } />\n        );\n    }\n\n    _onVideoPlaying: () => void;\n\n    /**\n     * Handler for case when video starts to play.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoPlaying() {\n        const { videoTrack } = this.props;\n\n        if (videoTrack && !videoTrack.videoStarted) {\n            this.props.dispatch(trackVideoStarted(videoTrack.jitsiTrack));\n        }\n    }\n}\n\n/**\n * Returns null if a specific value is falsy; otherwise, returns the specified\n * value.\n *\n * @param {*} value - The value to return if it is not falsy.\n * @returns {*} If the specified value is falsy, null; otherwise, the specified\n * value.\n */\nfunction _falsy2null(value) {\n    return value || null;\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { connect } from '../../../redux';\nimport AbstractVideoTrack from '../AbstractVideoTrack';\nimport type { Props as AbstractVideoTrackProps } from '../AbstractVideoTrack';\n\nimport Video from './Video';\n\n/**\n * The type of the React {@code Component} props of {@link VideoTrack}.\n */\ntype Props = AbstractVideoTrackProps & {\n\n    /**\n     * CSS classes to add to the video element.\n     */\n    className: string,\n\n    /**\n     * The value of the id attribute of the video. Used by the torture tests\n     * to locate video elements.\n     */\n    id: string,\n\n    /**\n     *\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    _noAutoPlayVideo: boolean,\n\n    /**\n     * A map of the event handlers for the video HTML element.\n     */\n    eventHandlers?: {|\n\n        /**\n         * onAbort event handler.\n         */\n        onAbort?: ?Function,\n\n        /**\n         * onCanPlay event handler.\n         */\n        onCanPlay?: ?Function,\n\n        /**\n         * onCanPlayThrough event handler.\n         */\n        onCanPlayThrough?: ?Function,\n\n        /**\n         * onEmptied event handler.\n         */\n        onEmptied?: ?Function,\n\n        /**\n         * onEnded event handler.\n         */\n        onEnded?: ?Function,\n\n        /**\n         * onError event handler.\n         */\n        onError?: ?Function,\n\n        /**\n         * onLoadedData event handler.\n         */\n        onLoadedData?: ?Function,\n\n        /**\n         * onLoadedMetadata event handler.\n         */\n        onLoadedMetadata?: ?Function,\n\n        /**\n         * onLoadStart event handler.\n         */\n        onLoadStart?: ?Function,\n\n        /**\n         * onPause event handler.\n         */\n        onPause?: ?Function,\n\n        /**\n         * onPlay event handler.\n         */\n        onPlay?: ?Function,\n\n        /**\n         * onPlaying event handler.\n         */\n        onPlaying?: ?Function,\n\n        /**\n         * onRateChange event handler.\n         */\n        onRateChange?: ?Function,\n\n        /**\n         * onStalled event handler.\n         */\n        onStalled?: ?Function,\n\n        /**\n         * onSuspend event handler.\n         */\n        onSuspend?: ?Function,\n\n        /**\n         * onWaiting event handler.\n         */\n        onWaiting?: ?Function,\n    |},\n\n    /**\n     * A styles that will be applied on the video element.\n     */\n    style: Object,\n\n    /**\n     * The value of the muted attribute for the underlying element.\n     */\n    muted?: boolean\n};\n\n/**\n * Component that renders a video element for a passed in video track and\n * notifies the store when the video has started playing.\n *\n * @extends AbstractVideoTrack\n */\nclass VideoTrack extends AbstractVideoTrack<Props> {\n    /**\n     * Default values for {@code VideoTrack} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n\n        id: ''\n    };\n\n    /**\n     * Renders the video element.\n     *\n     * @override\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _noAutoPlayVideo,\n            className,\n            id,\n            muted,\n            videoTrack,\n            style,\n            eventHandlers\n        } = this.props;\n\n        return (\n\n            <Video\n                autoPlay = { !_noAutoPlayVideo }\n                className = { className }\n                eventHandlers = { eventHandlers }\n                id = { id }\n                muted = { muted }\n                onVideoPlaying = { this._onVideoPlaying }\n                style = { style }\n                videoTrack = { videoTrack } />\n        );\n    }\n\n    _onVideoPlaying: () => void;\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated VideoTracks props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _noAutoPlayVideo: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const testingConfig = state['features/base/config'].testing;\n\n    return {\n        _noAutoPlayVideo: testingConfig?.noAutoPlayVideo\n    };\n}\n\nexport default connect(_mapStateToProps)(VideoTrack);\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\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\n  return self;\n}\n\nmodule.exports = _assertThisInitialized;","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { hideDialog } from '../actions';\nimport type { DialogProps } from '../constants';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractDialog}.\n */\nexport type Props = DialogProps & {\n\n    /**\n     * Used to show/hide the dialog on cancel.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * The type of the React {@code Component} state of {@link AbstractDialog}.\n */\nexport type State = {\n    submitting: ?boolean\n};\n\n/**\n * An abstract implementation of a dialog on Web/React and mobile/react-native.\n */\nexport default class AbstractDialog<P : Props, S : State>\n    extends Component<P, S> {\n\n    _mounted: boolean;\n\n    /**\n     * Initializes a new {@code AbstractDialog} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onSubmitFulfilled = this._onSubmitFulfilled.bind(this);\n        this._onSubmitRejected = this._onSubmitRejected.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately before mounting occurs.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._mounted = true;\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._mounted = false;\n    }\n\n    /**\n     * Dispatches a redux action to hide this dialog.\n     *\n     * @returns {*} The return value of {@link hideDialog}.\n     */\n    _hide() {\n        return this.props.dispatch(hideDialog());\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches a redux action to hide this dialog when it's canceled.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onCancel() {\n        const { cancelDisabled = false, onCancel } = this.props;\n\n        if (!cancelDisabled && (!onCancel || onCancel())) {\n            this._hide();\n        }\n    }\n\n    _onSubmit: (?string) => void;\n\n    /**\n     * Submits this {@code Dialog}. If the React {@code Component} prop\n     * {@code onSubmit} is defined, the function that is the value of the prop\n     * is invoked. If the function returns a {@code thenable}, then the\n     * resolution of the {@code thenable} is awaited. If the submission\n     * completes successfully, a redux action will be dispatched to hide this\n     * dialog.\n     *\n     * @protected\n     * @param {string} [value] - The submitted value if any.\n     * @returns {void}\n     */\n    _onSubmit(value: ?string) {\n        const { okDisabled = false, onSubmit } = this.props;\n\n        if (!okDisabled) {\n            this.setState({ submitting: true });\n\n            // Invoke the React Component prop onSubmit if any.\n            const r = !onSubmit || onSubmit(value);\n\n            // If the invocation returns a thenable, await its resolution;\n            // otherwise, treat the return value as a boolean indicating whether\n            // the submission has completed successfully.\n            let then;\n\n            if (r) {\n                switch (typeof r) {\n                case 'function':\n                case 'object':\n                    then = r.then;\n                    break;\n                }\n            }\n            if (typeof then === 'function' && then.length === 2) {\n                then.call(r, this._onSubmitFulfilled, this._onSubmitRejected);\n            } else if (r) {\n                this._onSubmitFulfilled();\n            } else {\n                this._onSubmitRejected();\n            }\n        }\n    }\n\n    _onSubmitFulfilled: () => void;\n\n    /**\n     * Notifies this {@code AbstractDialog} that it has been submitted\n     * successfully. Dispatches a redux action to hide this dialog after it has\n     * been submitted.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmitFulfilled() {\n        this._mounted && this.setState({ submitting: false });\n\n        this._hide();\n    }\n\n    _onSubmitRejected: () => void;\n\n    /**\n     * Notifies this {@code AbstractDialog} that its submission has failed.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmitRejected() {\n        this._mounted && this.setState({ submitting: false });\n    }\n}\n","import * as React from 'react';\nimport { generateUID } from \"./uid\";\nexport var createSource = function (prefix) {\n    if (prefix === void 0) { prefix = ''; }\n    return ({\n        value: 1,\n        prefix: prefix,\n        uid: generateUID()\n    });\n};\nexport var counter = createSource();\nexport var source = React.createContext(createSource());\nexport var getId = function (source) { return source.value++; };\nexport var getPrefix = function (source) { return source ? source.prefix : ''; };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","import { __extends } from \"tslib\";\nimport * as React from 'react';\nimport { counter, getId, getPrefix } from \"./context\";\n// --------------------------------------------\nvar prefixId = function (id, prefix, name) {\n    var uid = (prefix + id);\n    return String(name ? name(uid) : uid);\n};\n/**\n * @deprecated\n * UID in form of renderProps (not SSR friendly)\n * @see https://github.com/thearnica/react-uid#react-components\n * @example\n * // get UID to connect label to input\n * <UID>\n *   {(id)} => <label htmlFor={id}><input id={id}/>}\n * </UID>\n *\n * // get uid to generate uid for a keys in a list\n * <UID>\n *   {(, uid)} => items.map(item => <li key={uid(item) />)}\n * </UID>\n */\nvar UID = /** @class */ (function (_super) {\n    __extends(UID, _super);\n    function UID() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            quartz: _this.props.idSource || counter,\n            prefix: getPrefix(_this.props.idSource),\n            id: getId(_this.props.idSource || counter)\n        };\n        _this.uid = function (item) { return prefixId(_this.state.id + '-' + _this.state.quartz.uid(item), _this.state.prefix, _this.props.name); };\n        return _this;\n    }\n    UID.prototype.render = function () {\n        var _a = this.props, children = _a.children, name = _a.name;\n        var _b = this.state, id = _b.id, prefix = _b.prefix;\n        return children(prefixId(id, prefix, name), this.uid);\n    };\n    return UID;\n}(React.Component));\nexport { UID };\n","import * as React from 'react';\nimport { createSource, source } from \"./context\";\nimport { UID } from \"./UIDComponent\";\n/**\n * UID isolation component, required for SSR and testing.\n * Wrap your application with it to guarantee UID consistency between SSR and CSR.\n * @param {String} [prefix] - prefix for all generated ids\n * @example\n * <UIDReset>\n *    <App />\n * </UIDReset/>\n * @see https://github.com/thearnica/react-uid#server-side-friendly-uid\n */\nexport var UIDReset = function (_a) {\n    var children = _a.children, _b = _a.prefix, prefix = _b === void 0 ? '' : _b;\n    return (React.createElement(source.Provider, { value: createSource(prefix) }, children));\n};\n/**\n * Creates a sub-ids for nested components, isolating from inside a branch.\n * Useful for self-contained elements or code splitting\n * @see https://github.com/thearnica/react-uid#code-splitting\n */\nexport var UIDFork = function (_a) {\n    var children = _a.children, _b = _a.prefix, prefix = _b === void 0 ? '' : _b;\n    return (React.createElement(UIDConsumer, null, function (id) { return (React.createElement(source.Provider, { value: createSource(id + '-' + prefix) }, children)); }));\n};\n/**\n * UID in form of renderProps. Supports nesting and SSR. Prefer {@link useUID} hook version if possible.\n * @see https://github.com/thearnica/react-uid#server-side-friendly-uid\n * @see https://github.com/thearnica/react-uid#react-components\n * @example\n * // get UID to connect label to input\n * <UIDConsumer>\n *   {(id)} => <label htmlFor={id}><input id={id}/>}\n * </UIDConsumer>\n *\n * // get uid to generate uid for a keys in a list\n * <UIDConsumer>\n *   {(, uid)} => items.map(item => <li key={uid(item) />)}\n * </UIDConsumer>\n *\n * @see {@link useUID} - a hook version of this component\n * @see {@link UID} - not SSR compatible version\n */\nexport var UIDConsumer = function (_a) {\n    var name = _a.name, children = _a.children;\n    return (React.createElement(source.Consumer, null, function (value) { return (React.createElement(UID, { name: name, idSource: value, children: children })); }));\n};\n","/**\n * An empty function which does nothing.\n */\nexport default function noop() {}","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","import { createTheme } from '../utils/createTheme';\n\n// Create default global light theme\nvar _createTheme = createTheme(function () {\n  return {\n    mode: 'light'\n  };\n}),\n    Provider = _createTheme.Provider,\n    Consumer = _createTheme.Consumer,\n    useTheme = _createTheme.useTheme;\n\nexport var useGlobalTheme = function useGlobalTheme() {\n  return useTheme();\n};\nexport default {\n  Provider: Provider,\n  Consumer: Consumer\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext, useContext, useCallback } from 'react';\n\n/**\n * createTheme is used to create a set of Providers and Consumers for theming components.\n * - Takes a default theme function; this theme function gets a set of props, and returns tokens\n *  based on those props. An example of this default theme function is one that produces the standard\n *  appearance of the component\n * - Returns three things - a Provider that allow for additional themes to be applied, a Consumer\n *  that can get the current theme and fetch it, and a custom hook - useTheme which provides an alternate (although functionally the same) API\n *  to the Consumer.\n **/\nexport function createTheme(defaultGetTokens) {\n  var emptyThemeFn = function emptyThemeFn(getTokens, props) {\n    return getTokens(props);\n  };\n  /**\n   * Internally, Theme uses React Context, with internal providers and consumers.\n   * The React Context passes only a function that gets props, and turns them into tokens. This\n   * function gets mixed as more Providers with their own themes are added. This mixed function\n   * is ultimately picked up by Consumers, which implement a context consumer internally to fetch\n   * the theme.\n   **/\n\n\n  var ThemeContext = /*#__PURE__*/createContext(defaultGetTokens);\n\n  function useTheme(themeProps) {\n    var theme = useContext(ThemeContext);\n    var themeFn = theme || emptyThemeFn;\n    var tokens = themeFn(themeProps);\n    return tokens;\n  } // The Theme Consumer takes a function as its child - this function takes tokens, and the\n  // return value is generally a set of nodes with the tokens applied appropriately.\n\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]); // @ts-ignore See issue for more info: https://github.com/Microsoft/TypeScript/issues/10727\n    // Argument of type 'Pick<ThemeProps & { children: (tokens: ThemeTokens) => ReactNode; }, Exclude<keyof ThemeProps, \"children\">>' is not assignable to parameter of type 'ThemeProps'.ts(2345)\n\n\n    var tokens = useTheme(themeProps); // We add a fragment to ensure we don't break people upgrading.\n    // Previously they may have been able to pass in undefined without things blowing up.\n\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children(tokens));\n  }\n  /**\n   * The Theme Provider takes regular nodes as its children, but also takes a *theme function*\n   * - The theme function takes a set of props, as well as a function (getTokens) that can turn props into tokens.\n   * - The getTokens function isn't called immediately - instead the props are passed\n   *    through a mix of parent theming functions\n   * Children of this provider will receive this mixed theme\n   */\n\n\n  function Provider(props) {\n    var themeFn = useContext(ThemeContext);\n    var valueFn = props.value || emptyThemeFn;\n    var mixedFn = useCallback(function (themeProps) {\n      return valueFn(themeFn, themeProps);\n    }, [themeFn, valueFn]);\n    return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n      value: mixedFn\n    }, props.children);\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider,\n    useTheme: useTheme\n  };\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport React, { forwardRef, memo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler';\nimport noop from '@atlaskit/ds-lib/noop';\nimport { DN90A, N100A } from '@atlaskit/theme/colors';\nimport { useGlobalTheme } from '@atlaskit/theme/components';\nimport { layers } from '@atlaskit/theme/constants';\nvar packageName = \"@atlaskit/blanket\";\nvar packageVersion = \"11.4.1\";\nvar analyticsAttributes = {\n  componentName: 'blanket',\n  packageName: packageName,\n  packageVersion: packageVersion\n};\nvar baseStyle = css({\n  position: 'fixed',\n  bottom: 0,\n  left: 0,\n  right: 0,\n  top: 0,\n  pointerEvents: 'initial',\n  opacity: 1,\n  zIndex: layers.blanket()\n});\nvar canClickThroughStyle = css({\n  pointerEvents: 'none'\n});\nvar invisible = css({\n  opacity: 0\n});\nvar lightBg = css({\n  backgroundColor: N100A\n});\nvar darkBg = css({\n  backgroundColor: DN90A\n});\nvar backgroundStyle = {\n  light: lightBg,\n  dark: darkBg\n};\n/**\n * __Blanket__\n *\n * A Blanket provides the overlay layer for components such as a modal dialog or a tooltip\n *\n * - [Examples](https://atlaskit.atlassian.com/examples/design-system/blanket/basic-usage)\n */\n\nvar Blanket = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Blanket(_ref, ref) {\n  var _ref$canClickThrough = _ref.canClickThrough,\n      canClickThrough = _ref$canClickThrough === void 0 ? false : _ref$canClickThrough,\n      _ref$isTinted = _ref.isTinted,\n      isTinted = _ref$isTinted === void 0 ? false : _ref$isTinted,\n      _ref$onBlanketClicked = _ref.onBlanketClicked,\n      onBlanketClicked = _ref$onBlanketClicked === void 0 ? noop : _ref$onBlanketClicked,\n      testId = _ref.testId,\n      analyticsContext = _ref.analyticsContext;\n\n  var _useGlobalTheme = useGlobalTheme(),\n      mode = _useGlobalTheme.mode;\n\n  var onBlanketClickedWithAnalytics = usePlatformLeafEventHandler(_objectSpread({\n    fn: onBlanketClicked,\n    action: 'clicked',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var onClick = canClickThrough ? undefined : onBlanketClickedWithAnalytics;\n  return jsx(\"div\", {\n    role: \"presentation\",\n    css: [baseStyle, !isTinted && invisible, canClickThrough && canClickThroughStyle, backgroundStyle[mode]],\n    onClick: onClick,\n    \"data-testid\": testId,\n    ref: ref\n  });\n}));\nBlanket.displayName = 'Blanket';\nexport default Blanket;","import { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = visuallyHidden;\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","// eslint-disable-next-line import/prefer-default-export\nexport var WIDTH_ENUM = {\n  values: ['small', 'medium', 'large', 'x-large'],\n  widths: {\n    small: 400,\n    medium: 600,\n    large: 800,\n    'x-large': 968\n  },\n  defaultValue: 'medium'\n};\nexport var gutter = 60;","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { createElement } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/core';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n  return key !== 'theme' && key !== 'innerRef';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n  return typeof tag === 'string' && // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar createStyled = function createStyled(tag, options) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (tag === undefined) {\n      throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n    }\n  }\n\n  var identifierName;\n  var shouldForwardProp;\n  var targetClassName;\n\n  if (options !== undefined) {\n    identifierName = options.label;\n    targetClassName = options.target;\n    shouldForwardProp = tag.__emotion_forwardProp && options.shouldForwardProp ? function (propName) {\n      return tag.__emotion_forwardProp(propName) && // $FlowFixMe\n      options.shouldForwardProp(propName);\n    } : options.shouldForwardProp;\n  }\n\n  var isReal = tag.__emotion_real === tag;\n  var baseTag = isReal && tag.__emotion_base || tag;\n\n  if (typeof shouldForwardProp !== 'function' && isReal) {\n    shouldForwardProp = tag.__emotion_forwardProp;\n  }\n\n  var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n  var shouldUseAs = !defaultShouldForwardProp('as');\n  return function () {\n    var args = arguments;\n    var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n    if (identifierName !== undefined) {\n      styles.push(\"label:\" + identifierName + \";\");\n    }\n\n    if (args[0] == null || args[0].raw === undefined) {\n      styles.push.apply(styles, args);\n    } else {\n      if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n      }\n\n      styles.push(args[0][0]);\n      var len = args.length;\n      var i = 1;\n\n      for (; i < len; i++) {\n        if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n          console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n        }\n\n        styles.push(args[i], args[0][i]);\n      }\n    } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n    var Styled = withEmotionCache(function (props, context, ref) {\n      return createElement(ThemeContext.Consumer, null, function (theme) {\n        var finalTag = shouldUseAs && props.as || baseTag;\n        var className = '';\n        var classInterpolations = [];\n        var mergedProps = props;\n\n        if (props.theme == null) {\n          mergedProps = {};\n\n          for (var key in props) {\n            mergedProps[key] = props[key];\n          }\n\n          mergedProps.theme = theme;\n        }\n\n        if (typeof props.className === 'string') {\n          className = getRegisteredStyles(context.registered, classInterpolations, props.className);\n        } else if (props.className != null) {\n          className = props.className + \" \";\n        }\n\n        var serialized = serializeStyles(styles.concat(classInterpolations), context.registered, mergedProps);\n        var rules = insertStyles(context, serialized, typeof finalTag === 'string');\n        className += context.key + \"-\" + serialized.name;\n\n        if (targetClassName !== undefined) {\n          className += \" \" + targetClassName;\n        }\n\n        var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n        var newProps = {};\n\n        for (var _key in props) {\n          if (shouldUseAs && _key === 'as') continue;\n\n          if ( // $FlowFixMe\n          finalShouldForwardProp(_key)) {\n            newProps[_key] = props[_key];\n          }\n        }\n\n        newProps.className = className;\n        newProps.ref = ref || props.innerRef;\n\n        if (process.env.NODE_ENV !== 'production' && props.innerRef) {\n          console.error('`innerRef` is deprecated and will be removed in a future major version of Emotion, please use the `ref` prop instead' + (identifierName === undefined ? '' : \" in the usage of `\" + identifierName + \"`\"));\n        }\n\n        var ele = createElement(finalTag, newProps);\n\n        return ele;\n      });\n    });\n    Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n    Styled.defaultProps = tag.defaultProps;\n    Styled.__emotion_real = Styled;\n    Styled.__emotion_base = baseTag;\n    Styled.__emotion_styles = styles;\n    Styled.__emotion_forwardProp = shouldForwardProp;\n    Object.defineProperty(Styled, 'toString', {\n      value: function value() {\n        if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n          return 'NO_COMPONENT_SELECTOR';\n        } // $FlowFixMe: coerce undefined to string\n\n\n        return \".\" + targetClassName;\n      }\n    });\n\n    Styled.withComponent = function (nextTag, nextOptions) {\n      return createStyled(nextTag, nextOptions !== undefined ? _objectSpread({}, options || {}, {}, nextOptions) : options).apply(void 0, styles);\n    };\n\n    return Styled;\n  };\n};\n\nexport default createStyled;\n","import styled from '@emotion/styled-base';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = styled.bind();\ntags.forEach(function (tagName) {\n  newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","// eslint-disable-next-line import/prefer-default-export\nexport const WIDTH_ENUM = {\n  values: ['small', 'medium', 'large', 'x-large'],\n  widths: {\n    small: 400,\n    medium: 600,\n    large: 800,\n    'x-large': 968\n  },\n  defaultValue: 'medium'\n};\nexport const gutter = 60;","import { css } from '@emotion/core';\nimport styled from '@emotion/styled';\nimport { DN50, N0, N30A, N60A, text } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { borderRadius, layers } from '@atlaskit/theme/constants';\nimport { gutter, WIDTH_ENUM } from '../shared-variables';\n\nconst boxShadow = ({\n  isChromeless\n}) => isChromeless ? 'none' : `\n      0 0 0 1px ${N30A}, 0 2px 1px ${N30A},\n      0 0 20px -6px ${N60A}\n    `;\n\nconst dialogBgColor = ({\n  isChromeless\n}) => {\n  return isChromeless ? 'transparent' : themed({\n    light: N0,\n    dark: DN50\n  })();\n};\n\nconst maxDimensions = `calc(100% - ${gutter * 2}px)`;\nconst maxHeightDimensions = `calc(100% - ${gutter * 2 - 1}px)`;\nexport const dialogWidth = ({\n  widthName,\n  widthValue\n}) => {\n  if (typeof widthValue === 'number') {\n    return `${widthValue}px`;\n  }\n\n  return widthName ? `${WIDTH_ENUM.widths[widthName]}px` : widthValue || 'auto';\n};\nexport const dialogHeight = ({\n  heightValue\n}) => {\n  if (typeof heightValue === 'number') {\n    return `${heightValue}px`;\n  }\n\n  return heightValue || 'auto';\n};\n/**\n  NOTE:\n  z-index\n  - temporarily added to beat @atlaskit/navigation\n\n  absolute + top\n  - rather than fixed position so popper.js children are properly positioned\n\n  overflow-y\n  - only active when popper.js children invoked below the dialog\n*/\n\nexport const FillScreen = styled.div`\n  height: 100vh;\n  left: 0;\n  overflow-y: auto;\n  position: absolute;\n  top: ${props => props.scrollDistance}px;\n  width: 100%;\n  z-index: ${layers.modal};\n  -webkit-overflow-scrolling: touch;\n`;\n\nconst positionBaseStyles = props => css`\n  display: flex;\n  flex-direction: column;\n  height: ${maxHeightDimensions};\n  left: 0;\n  right: 0;\n  margin-left: auto;\n  margin-right: auto;\n  max-width: ${maxDimensions};\n  top: ${gutter}px;\n  width: ${dialogWidth(props)};\n  z-index: ${layers.modal()};\n  pointer-events: none;\n`;\n\nconst positionBaseResponsiveStyles = css`\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  max-width: 100%;\n  width: 100%;\n`;\nexport const PositionerAbsolute = styled.div`\n  ${positionBaseStyles};\n  position: absolute;\n\n  @media (min-width: 320px) and (max-width: 480px) {\n    ${positionBaseResponsiveStyles};\n  }\n`;\nexport const PositionerRelative = styled.div`\n  margin: ${gutter}px auto;\n  position: relative;\n  width: ${dialogWidth};\n  z-index: ${layers.modal};\n\n  @media (min-width: 320px) and (max-width: 480px) {\n    ${positionBaseResponsiveStyles};\n    margin: 0;\n  }\n`;\nexport const PositionerFixed = styled.div`\n  ${positionBaseStyles};\n  position: fixed;\n\n  @media (min-width: 320px) and (max-width: 480px) {\n    ${positionBaseResponsiveStyles};\n  }\n`;\nexport const Dialog = styled.div`\n  ${props => props.isChromeless ? null : `\n          background-color: ${dialogBgColor(props)};\n          border-radius: ${borderRadius()}px;\n          box-shadow: ${boxShadow(props)};\n        `}\n  color: ${text};\n  display: flex;\n  flex-direction: column;\n  height: ${props => dialogHeight({\n  heightValue: props.heightValue\n})};\n  max-height: 100%;\n  outline: 0;\n  pointer-events: auto;\n\n  @media (min-width: 320px) and (max-width: 480px) {\n    height: 100%;\n    max-height: 100%;\n    border-radius: 0;\n  }\n`;\nPositionerAbsolute.displayName = 'PositionerAbsolute';\nDialog.displayName = 'Dialog';\nFillScreen.displayName = 'FillScreen';\nPositionerRelative.displayName = 'PositionerRelative';\nPositionerFixed.displayName = 'PositionerFixed';","import {\n    Dialog,\n    FillScreen,\n    dialogWidth,\n    dialogHeight,\n    PositionerAbsolute,\n    PositionerRelative\n} from '@atlaskit/modal-dialog/dist/es2019/styled/Modal.js';\nimport { N0, DN50 } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport React from 'react';\n\nconst ThemedDialog = props => {\n    const style = { backgroundColor: props.isChromeless ? 'transparent' : themed({ light: N0,\n        dark: DN50 })({ theme: { mode: 'dark' } }) };\n\n    return (<Dialog\n        { ...props }\n        aria-modal = { true }\n        style = { style }\n        theme = {{ mode: 'dark' }} />);\n};\n\n\nexport { ThemedDialog as Dialog, FillScreen, dialogWidth, dialogHeight, PositionerAbsolute, PositionerRelative };\n","export default {\n  disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\nvar duration = 500;\nvar easing = 'cubic-bezier(0.23, 1, 0.32, 1)'; // easeOutQuint\n\nvar verticalOffset = 16; // Animation\n// ==============================\n// Modal has two parts that need to be animated. Everything should fade in/out\n// and the popup should slide up/up (sic). These animations happen at the same time.\n// This component calls its children with the styles for both animations.\n\nexport var Animation = function Animation(_ref) {\n  var hasEntered = _ref.in,\n      _ref$stackIndex = _ref.stackIndex,\n      stackIndex = _ref$stackIndex === void 0 ? 0 : _ref$stackIndex,\n      onExited = _ref.onExited,\n      onEntered = _ref.onEntered,\n      children = _ref.children;\n  return /*#__PURE__*/React.createElement(Transition, {\n    in: hasEntered,\n    timeout: {\n      enter: 0,\n      exit: duration\n    },\n    onExited: onExited,\n    onEntered: onEntered,\n    appear: true\n  }, function (unadjustedStatus) {\n    // when we first render, we want to finish the 'entering' state render\n    // then jump to the 'entered' state as quick as possible.\n    var adjustedStatus = hasEntered && unadjustedStatus === 'exited' ? 'entering' : unadjustedStatus; // Fade styles\n\n    var fadeBaseStyles = {\n      transition: \"opacity \".concat(duration / 2, \"ms\"),\n      opacity: 1\n    };\n    var fadeTransitionStyles = {\n      entering: {\n        opacity: 0\n      },\n      entered: {},\n      exiting: {\n        opacity: 0\n      },\n      exited: {}\n    }; // Slide styles\n\n    var slideBaseStyles = {\n      transition: \"transform \".concat(duration, \"ms \").concat(easing),\n      transform: \"translate3d(0, \".concat(verticalOffset * 2, \"px, 0)\")\n    };\n    var slideTransitionStyles = {\n      entering: {},\n      entered: {\n        transform: stackIndex > 0 ? \"translate3d(0, \".concat(stackIndex * (verticalOffset / 2), \"px, 0)\") : null\n      },\n      exiting: {\n        transform: \"translate3d(0, -\".concat(verticalOffset * 2, \"px, 0)\")\n      },\n      exited: {}\n    };\n    return children({\n      fade: _objectSpread(_objectSpread({}, fadeBaseStyles), fadeTransitionStyles[adjustedStatus]),\n      slide: _objectSpread(_objectSpread({}, slideBaseStyles), slideTransitionStyles[adjustedStatus])\n    });\n  });\n};","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject10() {\n  var data = _taggedTemplateLiteral([\"\\n  flex: 1 0 auto;\\n  margin: 0 \", \"px;\\n\"]);\n\n  _templateObject10 = function _templateObject10() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject9() {\n  var data = _taggedTemplateLiteral([\"\\n  display: inline-flex;\\n  margin: 0 -\", \"px;\\n\"]);\n\n  _templateObject9 = function _templateObject9() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject8() {\n  var data = _taggedTemplateLiteral([\"\\n  position: relative;\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 auto;\\n  justify-content: space-between;\\n  transition: box-shadow 200ms;\\n  padding: \", \"px \", \"px \", \"px\\n    \", \"px;\\n  box-shadow: \", \";\\n\"]);\n\n  _templateObject8 = function _templateObject8() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject7() {\n  var data = _taggedTemplateLiteral([\"\\n  \", \";\\n\"]);\n\n  _templateObject7 = function _templateObject7() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject6() {\n  var data = _taggedTemplateLiteral([\"\\n  flex: 1 1 auto;\\n  \", \"\\n  @media (min-width: 320px) and (max-width: 480px) {\\n    overflow-y: auto;\\n    height: 100%;\\n  }\\n  &:focus {\\n    outline-offset: -1px;\\n    outline-style: dotted;\\n    outline-color: \", \";\\n    outline-width: thin;\\n  }\\n\"]);\n\n  _templateObject6 = function _templateObject6() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject5() {\n  var data = _taggedTemplateLiteral([\"\\n  color: \", \";\\n  margin-right: \", \"px;\\n  flex: 0 0 auto;\\n\"]);\n\n  _templateObject5 = function _templateObject5() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject4() {\n  var data = _taggedTemplateLiteral([\"\\n  flex: 1 1 auto;\\n  min-width: 0;\\n  word-wrap: break-word;\\n  width: 100%;\\n  \", \";\\n\"]);\n\n  _templateObject4 = function _templateObject4() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n  align-items: center;\\n  display: flex;\\n  font-size: 20px;\\n  font-style: inherit;\\n  font-weight: 500;\\n  letter-spacing: -0.008em;\\n  line-height: 1;\\n  margin: 0;\\n  min-width: 0;\\n\"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 auto;\\n  justify-content: space-between;\\n  transition: box-shadow 200ms;\\n  position: relative;\\n  padding: \", \"px \", \"px \", \"px\\n    \", \"px;\\n  box-shadow: \", \";\\n\"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 1 auto;\\n  max-height: 100%;\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport { css } from '@emotion/core';\nimport styled from '@emotion/styled';\nimport { DN30, N30, N800, R400, Y400 } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { divide } from '@atlaskit/theme/math';\n// Constants\n// ==============================\nvar modalPadding = gridSize() * 3;\nvar keylineColor = themed({\n  light: N30,\n  dark: DN30\n});\nexport var keylineHeight = 2; // Wrapper\n// ==============================\n\nexport var wrapperStyles = css(_templateObject()); // Header\n// ==============================\n\nexport var Header = styled.header(_templateObject2(), modalPadding, modalPadding, modalPadding - keylineHeight, modalPadding, function (props) {\n  return props.showKeyline ? \"0 \".concat(keylineHeight, \"px 0 0 \").concat(keylineColor(props)) : 'none';\n});\nexport var Title = styled.h4(_templateObject3());\nexport var TitleText = styled.span(_templateObject4(), function (props) {\n  return !props.isHeadingMultiline && \"\\n      white-space: nowrap;\\n      overflow: hidden;\\n      text-overflow: ellipsis;\\n    \";\n});\nvar iconColor = {\n  danger: R400,\n  warning: Y400\n};\nexport var titleIconWrapperStyles = function titleIconWrapperStyles(appearance) {\n  return css(_templateObject5(), iconColor[appearance], gridSize());\n}; // Body\n// ==============================\n\n/**\n  Adding the padding here avoids cropping box shadow on first/last\n  children. The combined vertical spacing is maintained by subtracting the\n  keyline height from header and footer.\n*/\n\nexport var bodyStyles = function bodyStyles(shouldScroll) {\n  return css(_templateObject6(), shouldScroll ? \"\\n        overflow-y: auto;\\n        overflow-x: hidden;\\n        padding: \".concat(keylineHeight, \"px \").concat(modalPadding, \"px;\\n      \") : \"\\n        padding: 0 \".concat(modalPadding, \"px;\\n      \"), N800);\n};\n// Body styles are used when customizing the body of the component.\n// This is duplicated here: https://bitbucket.org/atlassian/atlassian-frontend/src/3c6a7cf3d18e97608fc1a4dc822b9bb003781bf2/packages/design-system/modal-dialog/src/components/Content.tsx#packages/design-system/modal-dialog/src/components/Content.tsx-341\n// On the next major version delete `bodyStyles` from this declaration! They're just doubling up now!\nexport var Body = styled.div(_templateObject7(), function (props) {\n  return bodyStyles(props.shouldScroll);\n}); // Footer\n// ==============================\n\nexport var Footer = styled.footer(_templateObject8(), modalPadding - keylineHeight, modalPadding, modalPadding, modalPadding, function (props) {\n  return props.showKeyline ? \"0 -\".concat(keylineHeight, \"px 0 0 \").concat(keylineColor(props)) : 'none';\n});\nexport var Actions = styled.div(_templateObject9(), divide(gridSize, 2));\nexport var ActionItem = styled.div(_templateObject10(), divide(gridSize, 2));","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport Button from '@atlaskit/button/custom-theme-button';\nimport { ActionItem, Actions, Footer } from '../styled/Content';\n\nvar JustifyShim = function JustifyShim(props) {\n  return /*#__PURE__*/React.createElement(\"span\", props);\n};\n\nvar ModalFooter = /*#__PURE__*/function (_React$Component) {\n  _inherits(ModalFooter, _React$Component);\n\n  var _super = _createSuper(ModalFooter);\n\n  function ModalFooter() {\n    _classCallCheck(this, ModalFooter);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ModalFooter, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          actions = _this$props.actions,\n          appearance = _this$props.appearance,\n          component = _this$props.component,\n          onClose = _this$props.onClose,\n          showKeyline = _this$props.showKeyline;\n      var warning = 'You can provide `component` OR `actions`, not both.';\n\n      if (!component && !actions) {\n        return null;\n      }\n\n      if (component && actions) {\n        console.warn(warning); // eslint-disable-line no-console\n\n        return null;\n      }\n\n      if (component) {\n        return /*#__PURE__*/React.createElement(component, {\n          appearance: appearance,\n          onClose: onClose,\n          showKeyline: showKeyline\n        });\n      }\n\n      return /*#__PURE__*/React.createElement(Footer, {\n        showKeyline: showKeyline\n      }, /*#__PURE__*/React.createElement(JustifyShim, null), /*#__PURE__*/React.createElement(Actions, null, actions ? actions.map(function (_ref, index) {\n        var text = _ref.text,\n            rest = _objectWithoutProperties(_ref, [\"text\"]);\n\n        var variant = index !== 0 ? 'subtle' : appearance || 'primary';\n        return /*#__PURE__*/React.createElement(ActionItem, {\n          key: index\n        }, /*#__PURE__*/React.createElement(Button, _extends({\n          appearance: variant\n        }, rest), text));\n      }) : null));\n    }\n  }]);\n\n  return ModalFooter;\n}(React.Component);\n\nexport { ModalFooter as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport React from 'react';\nimport { jsx } from '@emotion/core';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport { Header, Title, titleIconWrapperStyles, TitleText } from '../styled/Content';\n\nvar TitleIcon = function TitleIcon(_ref) {\n  var appearance = _ref.appearance;\n\n  if (!appearance) {\n    return null;\n  }\n\n  var Icon = appearance === 'danger' ? ErrorIcon : WarningIcon;\n  return jsx(\"span\", {\n    css: titleIconWrapperStyles(appearance)\n  }, jsx(Icon, {\n    label: \"\".concat(appearance, \" icon\")\n  }));\n};\n\nvar ModalHeader = /*#__PURE__*/function (_React$Component) {\n  _inherits(ModalHeader, _React$Component);\n\n  var _super = _createSuper(ModalHeader);\n\n  function ModalHeader() {\n    _classCallCheck(this, ModalHeader);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ModalHeader, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          id = _this$props.id,\n          appearance = _this$props.appearance,\n          component = _this$props.component,\n          heading = _this$props.heading,\n          onClose = _this$props.onClose,\n          showKeyline = _this$props.showKeyline,\n          isHeadingMultiline = _this$props.isHeadingMultiline,\n          testId = _this$props.testId;\n      var warning = 'You can provide `component` OR `heading`, not both.';\n\n      if (!component && !heading) {\n        return null;\n      }\n\n      if (component && heading) {\n        console.warn(warning); // eslint-disable-line no-console\n\n        return null;\n      }\n\n      if (component) {\n        return /*#__PURE__*/React.createElement(component, {\n          id: id,\n          testId: testId,\n          appearance: appearance,\n          onClose: onClose,\n          showKeyline: showKeyline,\n          isHeadingMultiline: isHeadingMultiline\n        });\n      }\n\n      return jsx(Header, {\n        showKeyline: showKeyline\n      }, jsx(Title, null, jsx(TitleIcon, {\n        appearance: appearance\n      }), jsx(TitleText, {\n        isHeadingMultiline: isHeadingMultiline,\n        id: id,\n        \"data-testid\": testId && \"\".concat(testId, \"-heading\")\n      }, heading)));\n    }\n  }]);\n\n  return ModalHeader;\n}(React.Component);\n\n_defineProperty(ModalHeader, \"defaultProps\", {\n  isHeadingMultiline: true\n});\n\nexport { ModalHeader as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport React from 'react';\nimport { jsx } from '@emotion/core';\nimport rafSchedule from 'raf-schd';\nimport ScrollLock, { TouchScrollable } from 'react-scrolllock';\nimport { bodyStyles, Body as DefaultBody, keylineHeight, wrapperStyles } from '../styled/Content';\nimport Footer from './Footer';\nimport Header from './Header';\n\nfunction getInitialState() {\n  return {\n    showFooterKeyline: false,\n    showHeaderKeyline: false,\n    showContentFocus: false,\n    tabbableElements: []\n  };\n}\n\nfunction mergeRefs(refs) {\n  return function (value) {\n    refs.forEach(function (ref) {\n      if (typeof ref === 'function') {\n        ref(value);\n      } else if (ref != null) {\n        ref.current = value;\n      }\n    });\n  };\n}\n\nvar Content = /*#__PURE__*/function (_React$Component) {\n  _inherits(Content, _React$Component);\n\n  var _super = _createSuper(Content);\n\n  function Content() {\n    var _this;\n\n    _classCallCheck(this, Content);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"escapeIsHeldDown\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"_isMounted\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"scrollContainer\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", getInitialState());\n\n    _defineProperty(_assertThisInitialized(_this), \"determineKeylines\", rafSchedule(function () {\n      if (!_this.scrollContainer) {\n        return;\n      }\n\n      var _this$scrollContainer = _this.scrollContainer,\n          scrollTop = _this$scrollContainer.scrollTop,\n          scrollHeight = _this$scrollContainer.scrollHeight,\n          clientHeight = _this$scrollContainer.clientHeight;\n      var scrollableDistance = scrollHeight - clientHeight;\n      var showHeaderKeyline = scrollTop > keylineHeight;\n      var showFooterKeyline = scrollTop <= scrollableDistance - keylineHeight;\n      var showContentFocus = scrollHeight > clientHeight;\n\n      _this.setState({\n        showHeaderKeyline: showHeaderKeyline,\n        showFooterKeyline: showFooterKeyline,\n        showContentFocus: showContentFocus\n      });\n    }));\n\n    _defineProperty(_assertThisInitialized(_this), \"getScrollContainer\", function (ref) {\n      if (!ref) {\n        return;\n      }\n\n      _this.scrollContainer = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyUp\", function () {\n      _this.escapeIsHeldDown = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyDown\", function (event) {\n      var _this$props = _this.props,\n          onClose = _this$props.onClose,\n          shouldCloseOnEscapePress = _this$props.shouldCloseOnEscapePress,\n          _this$props$stackInde = _this$props.stackIndex,\n          stackIndex = _this$props$stackInde === void 0 ? 0 : _this$props$stackInde;\n      var isEscapeKeyPressed = event.key === 'Escape'; // avoid consumers accidentally closing multiple modals if they hold escape.\n\n      if (_this.escapeIsHeldDown) {\n        return;\n      }\n\n      if (isEscapeKeyPressed) {\n        _this.escapeIsHeldDown = true;\n      } // only the foremost modal should be interactive.\n\n\n      if (!_this._isMounted || stackIndex > 0) {\n        return;\n      }\n\n      if (isEscapeKeyPressed && shouldCloseOnEscapePress) {\n        onClose(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleStackChange\", function (stackIndex) {\n      var onStackChange = _this.props.onStackChange;\n\n      if (onStackChange) {\n        onStackChange(stackIndex);\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Content, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this._isMounted = true;\n      document.addEventListener('keydown', this.handleKeyDown, false);\n      document.addEventListener('keyup', this.handleKeyUp, false);\n\n      if (this.scrollContainer) {\n        var capturedScrollContainer = this.scrollContainer;\n        window.addEventListener('resize', this.determineKeylines, false);\n        capturedScrollContainer.addEventListener('scroll', this.determineKeylines, false);\n        this.determineKeylines();\n      }\n      /* eslint-disable no-console */\n      // Check for deprecated props\n\n\n      if (this.props.header) {\n        console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the header prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\");\n      }\n\n      if (this.props.footer) {\n        console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the footer prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\");\n      }\n\n      if (this.props.body) {\n        console.warn(\"@atlaskit/modal-dialog: Deprecation warning - Use of the body prop in ModalDialog is deprecated. Please compose your ModalDialog using the 'components' prop instead\");\n      } // Check that custom body components have used ForwardRef to attach to a DOM element\n\n\n      if (this.props.components.Body) {\n        if (!(this.scrollContainer instanceof HTMLElement)) {\n          console.warn('@atlaskit/modal-dialog: Warning - Ref must attach to a DOM element; check you are using forwardRef and attaching the ref to an appropriate element. Check the examples for more details.');\n        }\n      }\n      /* eslint-enable no-console */\n\n    }\n  }, {\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      var stackIndex = this.props.stackIndex; // update focus scope and let consumer know when stack index has changed\n\n      if (nextProps.stackIndex && nextProps.stackIndex !== stackIndex) {\n        this.handleStackChange(nextProps.stackIndex);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this._isMounted = false;\n      document.removeEventListener('keydown', this.handleKeyDown, false);\n      document.removeEventListener('keyup', this.handleKeyUp, false);\n\n      if (this.scrollContainer) {\n        var capturedScrollContainer = this.scrollContainer;\n        window.removeEventListener('resize', this.determineKeylines, false);\n        capturedScrollContainer.removeEventListener('scroll', this.determineKeylines, false);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          actions = _this$props2.actions,\n          appearance = _this$props2.appearance,\n          DeprecatedBody = _this$props2.body,\n          children = _this$props2.children,\n          components = _this$props2.components,\n          footer = _this$props2.footer,\n          header = _this$props2.header,\n          heading = _this$props2.heading,\n          isChromeless = _this$props2.isChromeless,\n          isHeadingMultiline = _this$props2.isHeadingMultiline,\n          onClose = _this$props2.onClose,\n          shouldScroll = _this$props2.shouldScroll,\n          testId = _this$props2.testId,\n          headingId = _this$props2.headingId;\n      var _this$state = this.state,\n          showFooterKeyline = _this$state.showFooterKeyline,\n          showHeaderKeyline = _this$state.showHeaderKeyline,\n          showContentFocus = _this$state.showContentFocus;\n      var _components$Container = components.Container,\n          Container = _components$Container === void 0 ? 'div' : _components$Container,\n          CustomBody = components.Body;\n      var Body = CustomBody || DeprecatedBody || DefaultBody;\n      return jsx(Container, {\n        css: wrapperStyles,\n        \"data-testid\": testId\n      }, isChromeless ? children : jsx(React.Fragment, null, jsx(Header, {\n        id: headingId,\n        appearance: appearance,\n        component: components.Header ? components.Header : header,\n        heading: heading,\n        onClose: onClose,\n        isHeadingMultiline: isHeadingMultiline,\n        showKeyline: showHeaderKeyline,\n        testId: testId\n      }), this.scrollContainer instanceof HTMLElement ? jsx(TouchScrollable, null, function (touchRef) {\n        return jsx(Body, _extends({\n          tabIndex: showContentFocus ? 0 : undefined,\n          css: bodyStyles(shouldScroll)\n        }, !Body.hasOwnProperty('styledComponentId') ? {\n          ref: mergeRefs([touchRef, _this2.getScrollContainer])\n        } : {\n          innerRef: mergeRefs([touchRef, _this2.getScrollContainer])\n        }), children);\n      }) : jsx(Body, _extends({\n        tabIndex: showContentFocus ? 0 : undefined,\n        css: bodyStyles(shouldScroll)\n      }, !Body.hasOwnProperty('styledComponentId') ? {\n        ref: this.getScrollContainer\n      } : {\n        innerRef: this.getScrollContainer\n      }), children), jsx(Footer, {\n        actions: actions,\n        appearance: appearance,\n        component: components.Footer ? components.Footer : footer,\n        onClose: onClose,\n        showKeyline: showFooterKeyline\n      })), jsx(ScrollLock, null));\n    }\n  }]);\n\n  return Content;\n}(React.Component);\n\n_defineProperty(Content, \"defaultProps\", {\n  autoFocus: false,\n  components: {},\n  isChromeless: false,\n  stackIndex: 0,\n  isHeadingMultiline: true\n});\n\nexport { Content as default };","import { useCallbackRef } from './useRef';\nimport { assignRef } from './assignRef';\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    return useCallbackRef(defaultValue, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            }\n        }\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nexport var hiddenGuard = {\n  width: '1px',\n  height: '0px',\n  padding: 0,\n  overflow: 'hidden',\n  position: 'fixed',\n  top: '1px',\n  left: '1px'\n};\n\nvar InFocusGuard = function InFocusGuard(_ref) {\n  var children = _ref.children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-first\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }), children, children && /*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-last\",\n    \"data-focus-guard\": true,\n    \"data-focus-auto-guard\": true,\n    style: hiddenGuard\n  }));\n};\n\nInFocusGuard.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node\n} : {};\nInFocusGuard.defaultProps = {\n  children: null\n};\nexport default InFocusGuard;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = tslib_1.__assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { createMedium, createSidecarMedium } from 'use-sidecar';\nexport var mediumFocus = createMedium({}, function (_ref) {\n  var target = _ref.target,\n      currentTarget = _ref.currentTarget;\n  return {\n    target: target,\n    currentTarget: currentTarget\n  };\n});\nexport var mediumBlur = createMedium();\nexport var mediumEffect = createMedium();\nexport var mediumSidecar = createSidecarMedium({\n  async: true\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { node, bool, string, any, arrayOf, oneOfType, object, func } from 'prop-types';\nimport * as constants from 'focus-lock/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { hiddenGuard } from './FocusGuard';\nimport { mediumFocus, mediumBlur, mediumSidecar } from './medium';\nvar emptyArray = [];\nvar FocusLock = /*#__PURE__*/React.forwardRef(function FocusLockUI(props, parentRef) {\n  var _extends2;\n\n  var _React$useState = React.useState(),\n      realObserved = _React$useState[0],\n      setObserved = _React$useState[1];\n\n  var observed = React.useRef();\n  var isActive = React.useRef(false);\n  var originalFocusedElement = React.useRef(null);\n  var children = props.children,\n      disabled = props.disabled,\n      noFocusGuards = props.noFocusGuards,\n      persistentFocus = props.persistentFocus,\n      crossFrame = props.crossFrame,\n      autoFocus = props.autoFocus,\n      allowTextSelection = props.allowTextSelection,\n      group = props.group,\n      className = props.className,\n      whiteList = props.whiteList,\n      _props$shards = props.shards,\n      shards = _props$shards === void 0 ? emptyArray : _props$shards,\n      _props$as = props.as,\n      Container = _props$as === void 0 ? 'div' : _props$as,\n      _props$lockProps = props.lockProps,\n      containerProps = _props$lockProps === void 0 ? {} : _props$lockProps,\n      SideCar = props.sideCar,\n      shouldReturnFocus = props.returnFocus,\n      onActivationCallback = props.onActivation,\n      onDeactivationCallback = props.onDeactivation;\n\n  var _React$useState2 = React.useState({}),\n      id = _React$useState2[0]; // SIDE EFFECT CALLBACKS\n\n\n  var onActivation = React.useCallback(function () {\n    originalFocusedElement.current = originalFocusedElement.current || document && document.activeElement;\n\n    if (observed.current && onActivationCallback) {\n      onActivationCallback(observed.current);\n    }\n\n    isActive.current = true;\n  }, [onActivationCallback]);\n  var onDeactivation = React.useCallback(function () {\n    isActive.current = false;\n\n    if (onDeactivationCallback) {\n      onDeactivationCallback(observed.current);\n    }\n  }, [onDeactivationCallback]);\n  var returnFocus = React.useCallback(function (allowDefer) {\n    var current = originalFocusedElement.current;\n\n    if (Boolean(shouldReturnFocus) && current && current.focus) {\n      var focusOptions = typeof shouldReturnFocus === 'object' ? shouldReturnFocus : undefined;\n      originalFocusedElement.current = null;\n\n      if (allowDefer) {\n        // React might return focus after update\n        // it's safer to defer the action\n        Promise.resolve().then(function () {\n          return current.focus(focusOptions);\n        });\n      } else {\n        current.focus(focusOptions);\n      }\n    }\n  }, [shouldReturnFocus]); // MEDIUM CALLBACKS\n\n  var onFocus = React.useCallback(function (event) {\n    if (isActive.current) {\n      mediumFocus.useMedium(event);\n    }\n  }, []);\n  var onBlur = mediumBlur.useMedium; // REF PROPAGATION\n  // not using real refs due to race conditions\n\n  var setObserveNode = React.useCallback(function (newObserved) {\n    if (observed.current !== newObserved) {\n      observed.current = newObserved;\n      setObserved(newObserved);\n    }\n  }, []);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof allowTextSelection !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn('React-Focus-Lock: allowTextSelection is deprecated and enabled by default');\n    }\n\n    React.useEffect(function () {\n      if (!observed.current) {\n        // eslint-disable-next-line no-console\n        console.error('FocusLock: could not obtain ref to internal node');\n      }\n    }, []);\n  }\n\n  var lockProps = _extends((_extends2 = {}, _extends2[constants.FOCUS_DISABLED] = disabled && 'disabled', _extends2[constants.FOCUS_GROUP] = group, _extends2), containerProps);\n\n  var hasLeadingGuards = noFocusGuards !== true;\n  var hasTailingGuards = hasLeadingGuards && noFocusGuards !== 'tail';\n  var mergedRef = useMergeRefs([parentRef, setObserveNode]);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, hasLeadingGuards && [/*#__PURE__*/React.createElement(\"div\", {\n    key: \"guard-first\",\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 0,\n    style: hiddenGuard\n  }),\n  /*#__PURE__*/\n  // nearest focus guard\n  React.createElement(\"div\", {\n    key: \"guard-nearest\",\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 1,\n    style: hiddenGuard\n  }) // first tabbed element guard\n  ], !disabled && /*#__PURE__*/React.createElement(SideCar, {\n    id: id,\n    sideCar: mediumSidecar,\n    observed: realObserved,\n    disabled: disabled,\n    persistentFocus: persistentFocus,\n    crossFrame: crossFrame,\n    autoFocus: autoFocus,\n    whiteList: whiteList,\n    shards: shards,\n    onActivation: onActivation,\n    onDeactivation: onDeactivation,\n    returnFocus: returnFocus\n  }), /*#__PURE__*/React.createElement(Container, _extends({\n    ref: mergedRef\n  }, lockProps, {\n    className: className,\n    onBlur: onBlur,\n    onFocus: onFocus\n  }), children), hasTailingGuards && /*#__PURE__*/React.createElement(\"div\", {\n    \"data-focus-guard\": true,\n    tabIndex: disabled ? -1 : 0,\n    style: hiddenGuard\n  }));\n});\nFocusLock.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: node,\n  disabled: bool,\n  returnFocus: oneOfType([bool, object]),\n  noFocusGuards: bool,\n  allowTextSelection: bool,\n  autoFocus: bool,\n  persistentFocus: bool,\n  crossFrame: bool,\n  group: string,\n  className: string,\n  whiteList: func,\n  shards: arrayOf(any),\n  as: oneOfType([string, func, object]),\n  lockProps: object,\n  onActivation: func,\n  onDeactivation: func,\n  sideCar: any.isRequired\n} : {};\nFocusLock.defaultProps = {\n  children: undefined,\n  disabled: false,\n  returnFocus: false,\n  noFocusGuards: false,\n  autoFocus: true,\n  persistentFocus: false,\n  crossFrame: true,\n  allowTextSelection: undefined,\n  group: undefined,\n  className: undefined,\n  whiteList: undefined,\n  shards: undefined,\n  as: 'div',\n  lockProps: {},\n  onActivation: undefined,\n  onDeactivation: undefined\n};\nexport default FocusLock;","export var FOCUS_GROUP = 'data-focus-lock';\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React, { PureComponent } from 'react';\n\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (typeof reducePropsToState !== 'function') {\n      throw new Error('Expected reducePropsToState to be a function.');\n    }\n\n    if (typeof handleStateChangeOnClient !== 'function') {\n      throw new Error('Expected handleStateChangeOnClient to be a function.');\n    }\n  }\n\n  function getDisplayName(WrappedComponent) {\n    return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n  }\n\n  return function wrap(WrappedComponent) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof WrappedComponent !== 'function') {\n        throw new Error('Expected WrappedComponent to be a React component.');\n      }\n    }\n\n    var mountedInstances = [];\n    var state;\n\n    function emitChange() {\n      state = reducePropsToState(mountedInstances.map(function (instance) {\n        return instance.props;\n      }));\n      handleStateChangeOnClient(state);\n    }\n\n    var SideEffect = /*#__PURE__*/function (_PureComponent) {\n      _inheritsLoose(SideEffect, _PureComponent);\n\n      function SideEffect() {\n        return _PureComponent.apply(this, arguments) || this;\n      }\n\n      // Try to use displayName of wrapped component\n      SideEffect.peek = function peek() {\n        return state;\n      };\n\n      var _proto = SideEffect.prototype;\n\n      _proto.componentDidMount = function componentDidMount() {\n        mountedInstances.push(this);\n        emitChange();\n      };\n\n      _proto.componentDidUpdate = function componentDidUpdate() {\n        emitChange();\n      };\n\n      _proto.componentWillUnmount = function componentWillUnmount() {\n        var index = mountedInstances.indexOf(this);\n        mountedInstances.splice(index, 1);\n        emitChange();\n      };\n\n      _proto.render = function render() {\n        return /*#__PURE__*/React.createElement(WrappedComponent, this.props);\n      };\n\n      return SideEffect;\n    }(PureComponent);\n\n    _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n    return SideEffect;\n  };\n}\n\nexport default withSideEffect;\n","export default 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\n  return obj;\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}","export var toArray = function (a) {\n    var ret = Array(a.length);\n    for (var i = 0; i < a.length; ++i) {\n        ret[i] = a[i];\n    }\n    return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\nvar filterNested = function (nodes) {\n    var contained = new Set();\n    var l = nodes.length;\n    for (var i = 0; i < l; i += 1) {\n        for (var j = i + 1; j < l; j += 1) {\n            var position = nodes[i].compareDocumentPosition(nodes[j]);\n            if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n                contained.add(j);\n            }\n            if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n                contained.add(i);\n            }\n        }\n    }\n    return nodes.filter(function (_, index) { return !contained.has(index); });\n};\nvar getTopParent = function (node) {\n    return node.parentNode ? getTopParent(node.parentNode) : node;\n};\nexport var getAllAffectedNodes = function (node) {\n    var nodes = asArray(node);\n    return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n        var group = currentNode.getAttribute(FOCUS_GROUP);\n        acc.push.apply(acc, (group\n            ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\" + FOCUS_GROUP + \"=\\\"\" + group + \"\\\"]:not([\" + FOCUS_DISABLED + \"=\\\"disabled\\\"])\")))\n            : [currentNode]));\n        return acc;\n    }, []);\n};\n","import { getAllAffectedNodes } from './utils/all-affected';\nimport { toArray } from './utils/array';\nvar focusInFrame = function (frame) { return frame === document.activeElement; };\nvar focusInsideIframe = function (topNode) {\n    return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node); }));\n};\nexport var focusInside = function (topNode) {\n    var activeElement = document && document.activeElement;\n    if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n        return false;\n    }\n    return getAllAffectedNodes(topNode).reduce(function (result, node) { return result || node.contains(activeElement) || focusInsideIframe(node); }, false);\n};\n","var isRadio = function (node) { return node.tagName === 'INPUT' && node.type === 'radio'; };\nvar findSelectedRadio = function (node, nodes) {\n    return nodes\n        .filter(isRadio)\n        .filter(function (el) { return el.name === node.name; })\n        .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n    if (isRadio(node) && node.name) {\n        return findSelectedRadio(node, nodes);\n    }\n    return node;\n};\nexport var correctNodes = function (nodes) {\n    var resultSet = new Set();\n    nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n    return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n    if (nodes[0] && nodes.length > 1) {\n        return correctNode(nodes[0], nodes);\n    }\n    return nodes[0];\n};\nexport var pickFocusable = function (nodes, index) {\n    if (nodes.length > 1) {\n        return nodes.indexOf(correctNode(nodes[index], nodes));\n    }\n    return index;\n};\n","var isElementHidden = function (computedStyle) {\n    if (!computedStyle || !computedStyle.getPropertyValue) {\n        return false;\n    }\n    return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nvar isVisibleUncached = function (node, checkParent) {\n    return !node ||\n        node === document ||\n        (node && node.nodeType === Node.DOCUMENT_NODE) ||\n        (!isElementHidden(window.getComputedStyle(node, null)) &&\n            checkParent(node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n                ? node.parentNode.host\n                : node.parentNode));\n};\nexport var isVisibleCached = function (visibilityCache, node) {\n    var cached = visibilityCache.get(node);\n    if (cached !== undefined) {\n        return cached;\n    }\n    var result = isVisibleUncached(node, isVisibleCached.bind(undefined, visibilityCache));\n    visibilityCache.set(node, result);\n    return result;\n};\nexport var notHiddenInput = function (node) {\n    return !((node.tagName === 'INPUT' || node.tagName === 'BUTTON') && (node.type === 'hidden' || node.disabled));\n};\nexport var isGuard = function (node) { return Boolean(node && node.dataset && node.dataset.focusGuard); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\nexport var newFocus = function (innerNodes, outerNodes, activeElement, lastNode) {\n    var cnt = innerNodes.length;\n    var firstFocus = innerNodes[0];\n    var lastFocus = innerNodes[cnt - 1];\n    var isOnGuard = isGuard(activeElement);\n    if (innerNodes.indexOf(activeElement) >= 0) {\n        return undefined;\n    }\n    var activeIndex = outerNodes.indexOf(activeElement);\n    var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n    var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n    var indexDiff = activeIndex - lastIndex;\n    var firstNodeIndex = outerNodes.indexOf(firstFocus);\n    var lastNodeIndex = outerNodes.indexOf(lastFocus);\n    var correctedNodes = correctNodes(outerNodes);\n    var correctedIndexDiff = correctedNodes.indexOf(activeElement) - (lastNode ? correctedNodes.indexOf(lastNode) : activeIndex);\n    var returnFirstNode = pickFocusable(innerNodes, 0);\n    var returnLastNode = pickFocusable(innerNodes, cnt - 1);\n    if (activeIndex === -1 || lastNodeInside === -1) {\n        return NEW_FOCUS;\n    }\n    if (!indexDiff && lastNodeInside >= 0) {\n        return lastNodeInside;\n    }\n    if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n        return returnLastNode;\n    }\n    if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n        return returnFirstNode;\n    }\n    if (indexDiff && Math.abs(correctedIndexDiff) > 1) {\n        return lastNodeInside;\n    }\n    if (activeIndex <= firstNodeIndex) {\n        return returnLastNode;\n    }\n    if (activeIndex > lastNodeIndex) {\n        return returnFirstNode;\n    }\n    if (indexDiff) {\n        if (Math.abs(indexDiff) > 1) {\n            return lastNodeInside;\n        }\n        return (cnt + lastNodeInside + indexDiff) % cnt;\n    }\n    return undefined;\n};\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n    var tabDiff = a.tabIndex - b.tabIndex;\n    var indexDiff = a.index - b.index;\n    if (tabDiff) {\n        if (!a.tabIndex) {\n            return 1;\n        }\n        if (!b.tabIndex) {\n            return -1;\n        }\n    }\n    return tabDiff || indexDiff;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n    return toArray(nodes)\n        .map(function (node, index) { return ({\n        node: node,\n        index: index,\n        tabIndex: keepGuards && node.tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : node.tabIndex,\n    }); })\n        .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n        .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = queryTabbables + \", [data-focus-guard]\";\nexport var getFocusables = function (parents, withGuards) {\n    return parents.reduce(function (acc, parent) {\n        return acc.concat(toArray(parent.querySelectorAll(withGuards ? queryGuardTabbables : queryTabbables)), parent.parentNode\n            ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n            : []);\n    }, []);\n};\nexport var getParentAutofocusables = function (parent) {\n    var parentFocus = parent.querySelectorAll(\"[\" + FOCUS_AUTO + \"]\");\n    return toArray(parentFocus)\n        .map(function (node) { return getFocusables([node]); })\n        .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","export var tabbables = [\n    'button:enabled',\n    'select:enabled',\n    'textarea:enabled',\n    'input:enabled',\n    'a[href]',\n    'area[href]',\n    'summary',\n    'iframe',\n    'object',\n    'embed',\n    'audio[controls]',\n    'video[controls]',\n    '[tabindex]',\n    '[contenteditable]',\n    '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isVisibleCached, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\nexport var filterFocusable = function (nodes, visibilityCache) {\n    return toArray(nodes)\n        .filter(function (node) { return isVisibleCached(visibilityCache, node); })\n        .filter(function (node) { return notHiddenInput(node); });\n};\nexport var getTabbableNodes = function (topNodes, visibilityCache, withGuards) {\n    return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards), visibilityCache), true, withGuards);\n};\nexport var getAllTabbableNodes = function (topNodes, visibilityCache) {\n    return orderByTabIndex(filterFocusable(getFocusables(topNodes), visibilityCache), false);\n};\nexport var parentAutofocusables = function (topNode, visibilityCache) {\n    return filterFocusable(getParentAutofocusables(topNode), visibilityCache);\n};\n","import { asArray } from './array';\nimport { parentAutofocusables } from './DOMutils';\nvar getParents = function (node, parents) {\n    if (parents === void 0) { parents = []; }\n    parents.push(node);\n    if (node.parentNode) {\n        getParents(node.parentNode, parents);\n    }\n    return parents;\n};\nexport var getCommonParent = function (nodeA, nodeB) {\n    var parentsA = getParents(nodeA);\n    var parentsB = getParents(nodeB);\n    for (var i = 0; i < parentsA.length; i += 1) {\n        var currentParent = parentsA[i];\n        if (parentsB.indexOf(currentParent) >= 0) {\n            return currentParent;\n        }\n    }\n    return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n    var activeElements = asArray(baseActiveElement);\n    var leftEntries = asArray(leftEntry);\n    var activeElement = activeElements[0];\n    var topCommon = false;\n    leftEntries.filter(Boolean).forEach(function (entry) {\n        topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n        rightEntries.filter(Boolean).forEach(function (subEntry) {\n            var common = getCommonParent(activeElement, subEntry);\n            if (common) {\n                if (!topCommon || common.contains(topCommon)) {\n                    topCommon = common;\n                }\n                else {\n                    topCommon = getCommonParent(common, topCommon);\n                }\n            }\n        });\n    });\n    return topCommon;\n};\nexport var allParentAutofocusables = function (entries, visibilityCache) {\n    return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node, visibilityCache)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getAllTabbableNodes, getTabbableNodes } from './utils/DOMutils';\nimport { pickFirstFocus } from './utils/firstFocus';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar findAutoFocused = function (autoFocusables) { return function (node) {\n    return node.autofocus || (node.dataset && !!node.dataset.autofocus) || autoFocusables.indexOf(node) >= 0;\n}; };\nvar reorderNodes = function (srcNodes, dstNodes) {\n    var remap = new Map();\n    dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n    return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\nexport var getFocusMerge = function (topNode, lastNode) {\n    var activeElement = (document && document.activeElement);\n    var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n    var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n    var visibilityCache = new Map();\n    var anyFocusable = getAllTabbableNodes(entries, visibilityCache);\n    var innerElements = getTabbableNodes(entries, visibilityCache).filter(function (_a) {\n        var node = _a.node;\n        return isNotAGuard(node);\n    });\n    if (!innerElements[0]) {\n        innerElements = anyFocusable;\n        if (!innerElements[0]) {\n            return undefined;\n        }\n    }\n    var outerNodes = getAllTabbableNodes([commonParent], visibilityCache).map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n    var innerNodes = orderedInnerElements.map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode);\n    if (newId === NEW_FOCUS) {\n        var autoFocusable = anyFocusable\n            .map(function (_a) {\n            var node = _a.node;\n            return node;\n        })\n            .filter(findAutoFocused(allParentAutofocusables(entries, visibilityCache)));\n        return {\n            node: autoFocusable && autoFocusable.length ? pickFirstFocus(autoFocusable) : pickFirstFocus(innerNodes),\n        };\n    }\n    if (newId === undefined) {\n        return newId;\n    }\n    return orderedInnerElements[newId];\n};\n","import { getFocusMerge } from './focusMerge';\nexport var focusOn = function (target) {\n    target.focus();\n    if ('contentWindow' in target && target.contentWindow) {\n        target.contentWindow.focus();\n    }\n};\nvar guardCount = 0;\nvar lockDisabled = false;\nexport var setFocus = function (topNode, lastNode) {\n    var focusable = getFocusMerge(topNode, lastNode);\n    if (lockDisabled) {\n        return;\n    }\n    if (focusable) {\n        if (guardCount > 2) {\n            console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n                'See https://github.com/theKashey/focus-lock/#focus-fighting');\n            lockDisabled = true;\n            setTimeout(function () {\n                lockDisabled = false;\n            }, 1);\n            return;\n        }\n        guardCount++;\n        focusOn(focusable.node);\n        guardCount--;\n    }\n};\n","import * as constants from './constants';\nimport { getFocusabledIn } from './focusables';\nimport { focusInside } from './focusInside';\nimport { focusIsHidden } from './focusIsHidden';\nimport { getFocusMerge as focusMerge } from './focusMerge';\nimport { setFocus } from './setFocus';\nimport { focusNextElement, focusPrevElement } from './sibling';\nimport tabHook from './tabHook';\nimport { getAllAffectedNodes } from './utils/all-affected';\nexport { tabHook, focusInside, focusIsHidden, focusMerge, getFocusabledIn, constants, getAllAffectedNodes, focusNextElement, focusPrevElement, };\nexport default setFocus;\n","export function deferAction(action) {\n  // Hidding setImmediate from Webpack to avoid inserting polyfill\n  var _window = window,\n      setImmediate = _window.setImmediate;\n\n  if (typeof setImmediate !== 'undefined') {\n    setImmediate(action);\n  } else {\n    setTimeout(action, 1);\n  }\n}\nexport var inlineProp = function inlineProp(name, value) {\n  var obj = {};\n  obj[name] = value;\n  return obj;\n};","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport withSideEffect from 'react-clientside-effect';\nimport moveFocusInside, { focusInside, focusIsHidden, getFocusabledIn } from 'focus-lock';\nimport { deferAction } from './util';\nimport { mediumFocus, mediumBlur, mediumEffect } from './medium';\n\nvar focusOnBody = function focusOnBody() {\n  return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n  return focusOnBody() || focusIsHidden();\n};\n\nvar lastActiveTrap = null;\nvar lastActiveFocus = null;\nvar lastPortaledElement = null;\nvar focusWasOutsideWindow = false;\n\nvar defaultWhitelist = function defaultWhitelist() {\n  return true;\n};\n\nvar focusWhitelisted = function focusWhitelisted(activeElement) {\n  return (lastActiveTrap.whiteList || defaultWhitelist)(activeElement);\n};\n\nvar recordPortal = function recordPortal(observerNode, portaledElement) {\n  lastPortaledElement = {\n    observerNode: observerNode,\n    portaledElement: portaledElement\n  };\n};\n\nvar focusIsPortaledPair = function focusIsPortaledPair(element) {\n  return lastPortaledElement && lastPortaledElement.portaledElement === element;\n};\n\nfunction autoGuard(startIndex, end, step, allNodes) {\n  var lastGuard = null;\n  var i = startIndex;\n\n  do {\n    var item = allNodes[i];\n\n    if (item.guard) {\n      if (item.node.dataset.focusAutoGuard) {\n        lastGuard = item;\n      }\n    } else if (item.lockItem) {\n      if (i !== startIndex) {\n        // we will tab to the next element\n        return;\n      }\n\n      lastGuard = null;\n    } else {\n      break;\n    }\n  } while ((i += step) !== end);\n\n  if (lastGuard) {\n    lastGuard.node.tabIndex = 0;\n  }\n}\n\nvar extractRef = function extractRef(ref) {\n  return ref && 'current' in ref ? ref.current : ref;\n};\n\nvar focusWasOutside = function focusWasOutside(crossFrameOption) {\n  if (crossFrameOption) {\n    // with cross frame return true for any value\n    return Boolean(focusWasOutsideWindow);\n  } // in other case return only of focus went a while aho\n\n\n  return focusWasOutsideWindow === 'meanwhile';\n};\n\nvar activateTrap = function activateTrap() {\n  var result = false;\n\n  if (lastActiveTrap) {\n    var _lastActiveTrap = lastActiveTrap,\n        observed = _lastActiveTrap.observed,\n        persistentFocus = _lastActiveTrap.persistentFocus,\n        autoFocus = _lastActiveTrap.autoFocus,\n        shards = _lastActiveTrap.shards,\n        crossFrame = _lastActiveTrap.crossFrame;\n    var workingNode = observed || lastPortaledElement && lastPortaledElement.portaledElement;\n    var activeElement = document && document.activeElement;\n\n    if (workingNode) {\n      var workingArea = [workingNode].concat(shards.map(extractRef).filter(Boolean));\n\n      if (!activeElement || focusWhitelisted(activeElement)) {\n        if (persistentFocus || focusWasOutside(crossFrame) || !isFreeFocus() || !lastActiveFocus && autoFocus) {\n          if (workingNode && !(focusInside(workingArea) || focusIsPortaledPair(activeElement, workingNode))) {\n            if (document && !lastActiveFocus && activeElement && !autoFocus) {\n              // Check if blur() exists, which is missing on certain elements on IE\n              if (activeElement.blur) {\n                activeElement.blur();\n              }\n\n              document.body.focus();\n            } else {\n              result = moveFocusInside(workingArea, lastActiveFocus);\n              lastPortaledElement = {};\n            }\n          }\n\n          focusWasOutsideWindow = false;\n          lastActiveFocus = document && document.activeElement;\n        }\n      }\n\n      if (document) {\n        var newActiveElement = document && document.activeElement;\n        var allNodes = getFocusabledIn(workingArea);\n        var focusedIndex = allNodes.map(function (_ref) {\n          var node = _ref.node;\n          return node;\n        }).indexOf(newActiveElement);\n\n        if (focusedIndex > -1) {\n          // remove old focus\n          allNodes.filter(function (_ref2) {\n            var guard = _ref2.guard,\n                node = _ref2.node;\n            return guard && node.dataset.focusAutoGuard;\n          }).forEach(function (_ref3) {\n            var node = _ref3.node;\n            return node.removeAttribute('tabIndex');\n          });\n          autoGuard(focusedIndex, allNodes.length, +1, allNodes);\n          autoGuard(focusedIndex, -1, -1, allNodes);\n        }\n      }\n    }\n  }\n\n  return result;\n};\n\nvar onTrap = function onTrap(event) {\n  if (activateTrap() && event) {\n    // prevent scroll jump\n    event.stopPropagation();\n    event.preventDefault();\n  }\n};\n\nvar onBlur = function onBlur() {\n  return deferAction(activateTrap);\n};\n\nvar onFocus = function onFocus(event) {\n  // detect portal\n  var source = event.target;\n  var currentNode = event.currentTarget;\n\n  if (!currentNode.contains(source)) {\n    recordPortal(currentNode, source);\n  }\n};\n\nvar FocusWatcher = function FocusWatcher() {\n  return null;\n};\n\nvar FocusTrap = function FocusTrap(_ref4) {\n  var children = _ref4.children;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    onBlur: onBlur,\n    onFocus: onFocus\n  }, children);\n};\n\nFocusTrap.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired\n} : {};\n\nvar onWindowBlur = function onWindowBlur() {\n  focusWasOutsideWindow = 'just'; // using setTimeout to set  this variable after React/sidecar reaction\n\n  setTimeout(function () {\n    focusWasOutsideWindow = 'meanwhile';\n  }, 0);\n};\n\nvar attachHandler = function attachHandler() {\n  document.addEventListener('focusin', onTrap, true);\n  document.addEventListener('focusout', onBlur);\n  window.addEventListener('blur', onWindowBlur);\n};\n\nvar detachHandler = function detachHandler() {\n  document.removeEventListener('focusin', onTrap, true);\n  document.removeEventListener('focusout', onBlur);\n  window.removeEventListener('blur', onWindowBlur);\n};\n\nfunction reducePropsToState(propsList) {\n  return propsList.filter(function (_ref5) {\n    var disabled = _ref5.disabled;\n    return !disabled;\n  });\n}\n\nfunction handleStateChangeOnClient(traps) {\n  var trap = traps.slice(-1)[0];\n\n  if (trap && !lastActiveTrap) {\n    attachHandler();\n  }\n\n  var lastTrap = lastActiveTrap;\n  var sameTrap = lastTrap && trap && trap.id === lastTrap.id;\n  lastActiveTrap = trap;\n\n  if (lastTrap && !sameTrap) {\n    lastTrap.onDeactivation(); // return focus only of last trap was removed\n\n    if (!traps.filter(function (_ref6) {\n      var id = _ref6.id;\n      return id === lastTrap.id;\n    }).length) {\n      // allow defer is no other trap is awaiting restore\n      lastTrap.returnFocus(!trap);\n    }\n  }\n\n  if (trap) {\n    lastActiveFocus = null;\n\n    if (!sameTrap || lastTrap.observed !== trap.observed) {\n      trap.onActivation();\n    }\n\n    activateTrap(true);\n    deferAction(activateTrap);\n  } else {\n    detachHandler();\n    lastActiveFocus = null;\n  }\n} // bind medium\n\n\nmediumFocus.assignSyncMedium(onFocus);\nmediumBlur.assignMedium(onBlur);\nmediumEffect.assignMedium(function (cb) {\n  return cb({\n    moveFocusInside: moveFocusInside,\n    focusInside: focusInside\n  });\n});\nexport default withSideEffect(reducePropsToState, handleStateChangeOnClient)(FocusWatcher);","import { FOCUS_ALLOW } from './constants';\nimport { toArray } from './utils/array';\nexport var focusIsHidden = function () {\n    return document &&\n        toArray(document.querySelectorAll(\"[\" + FOCUS_ALLOW + \"]\")).some(function (node) { return node.contains(document.activeElement); });\n};\n","import { getAllAffectedNodes } from './utils/all-affected';\nimport { getTabbableNodes } from './utils/DOMutils';\nimport { isGuard, isNotAGuard } from './utils/is';\nimport { getTopCommonParent } from './utils/parenting';\nexport var getFocusabledIn = function (topNode) {\n    var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n    var commonParent = getTopCommonParent(topNode, topNode, entries);\n    var visibilityCache = new Map();\n    var outerNodes = getTabbableNodes([commonParent], visibilityCache, true);\n    var innerElements = getTabbableNodes(entries, visibilityCache)\n        .filter(function (_a) {\n        var node = _a.node;\n        return isNotAGuard(node);\n    })\n        .map(function (_a) {\n        var node = _a.node;\n        return node;\n    });\n    return outerNodes.map(function (_a) {\n        var node = _a.node, index = _a.index;\n        return ({\n            node: node,\n            index: index,\n            lockItem: innerElements.indexOf(node) >= 0,\n            guard: isGuard(node),\n        });\n    });\n};\n","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport FocusLockUI from './Lock';\nimport FocusTrap from './Trap';\n/* that would be a BREAKING CHANGE!\n// delaying sidecar execution till the first usage\nconst RequireSideCar = (props) => {\n  // eslint-disable-next-line global-require\n  const SideCar = require('./Trap').default;\n  return <SideCar {...props} />;\n};\n*/\n\nvar FocusLockCombination = /*#__PURE__*/React.forwardRef(function FocusLockUICombination(props, ref) {\n  return /*#__PURE__*/React.createElement(FocusLockUI, _extends({\n    sideCar: FocusTrap,\n    ref: ref\n  }, props));\n});\n\nvar _ref = FocusLockUI.propTypes || {},\n    sideCar = _ref.sideCar,\n    propTypes = _objectWithoutPropertiesLoose(_ref, [\"sideCar\"]);\n\nFocusLockCombination.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\nexport default FocusLockCombination;","import FocusLock from './Combination';\nexport * from './UI';\nexport default FocusLock;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport * as constants from 'focus-lock/constants';\nimport { inlineProp } from './util';\nimport { mediumEffect } from './medium';\nexport var useFocusInside = function useFocusInside(observedRef) {\n  React.useEffect(function () {\n    var enabled = true;\n    mediumEffect.useMedium(function (car) {\n      var observed = observedRef && observedRef.current;\n\n      if (enabled && observed) {\n        if (!car.focusInside(observed)) {\n          car.moveFocusInside(observed, null);\n        }\n      }\n    });\n    return function () {\n      enabled = false;\n    };\n  }, [observedRef]);\n};\n\nfunction MoveFocusInside(_ref) {\n  var isDisabled = _ref.disabled,\n      className = _ref.className,\n      children = _ref.children;\n  var ref = React.useRef(null);\n  useFocusInside(isDisabled ? undefined : ref);\n  return /*#__PURE__*/React.createElement(\"div\", _extends({}, inlineProp(constants.FOCUS_AUTO, !isDisabled), {\n    ref: ref,\n    className: className\n  }), children);\n}\n\nMoveFocusInside.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  children: PropTypes.node.isRequired,\n  disabled: PropTypes.bool,\n  className: PropTypes.string\n} : {};\nMoveFocusInside.defaultProps = {\n  disabled: false,\n  className: undefined\n};\nexport default MoveFocusInside;","// @flow\nimport React from 'react';\nimport FocusLock, { MoveFocusInside } from 'react-focus-lock';\n\n/**\n * FocusLock wrapper that disable the FocusLock in the @atlaskit/modal-dialog. We need to disable it because if the\n * iframe API is used and a dialog is displayed it is impossible to click on fields outside of the iframe (FocusLock\n * will steal the focus from any element that is not part of the dialog).\n *\n * @param {Object} props - The props passed to the FocusLock.\n * @returns {ReactElement}\n */\nexport default (props: Object) => {\n    const { children, ...otherProps } = props;\n\n    const forwardProps = {\n        ...otherProps,\n        crossFrame: false\n    };\n\n    // MoveFocusInside is added in order to initially bring the focus on the dialog.\n    return (\n        <FocusLock\n            { ...forwardProps }\n            className = 'focus-lock'>\n            <MoveFocusInside>{children}</MoveFocusInside>\n        </FocusLock>\n    );\n};\n\nexport * from 'react-focus-lock';\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport ReactFocusLock from 'react-focus-lock';\nimport invariant from 'tiny-invariant';\n\n// Thin wrapper over react-focus-lock. This wrapper only exists to ensure API compatibility.\n// This component should be deleted during https://ecosystem.atlassian.net/browse/AK-5658\nvar FocusLock = /*#__PURE__*/function (_React$Component) {\n  _inherits(FocusLock, _React$Component);\n\n  var _super = _createSuper(FocusLock);\n\n  function FocusLock() {\n    _classCallCheck(this, FocusLock);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(FocusLock, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var _this$props = this.props,\n          isEnabled = _this$props.isEnabled,\n          autoFocus = _this$props.autoFocus;\n\n      if (process.env.NODE_ENV !== 'production') {\n        invariant(typeof autoFocus === 'boolean', '@atlaskit/modal-dialog: Passing a function as autoFocus is deprecated. Instead call focus on the element ref or use the autofocus property.');\n      }\n\n      if (typeof autoFocus === 'function' && isEnabled) {\n        var elem = autoFocus();\n\n        if (elem && elem.focus) {\n          elem.focus();\n        }\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          isEnabled = _this$props2.isEnabled,\n          autoFocus = _this$props2.autoFocus,\n          shouldReturnFocus = _this$props2.shouldReturnFocus;\n      return /*#__PURE__*/React.createElement(ReactFocusLock, {\n        disabled: !isEnabled,\n        autoFocus: !!autoFocus,\n        returnFocus: shouldReturnFocus\n      }, this.props.children);\n    }\n  }]);\n\n  return FocusLock;\n}(React.Component);\n\n_defineProperty(FocusLock, \"defaultProps\", {\n  autoFocus: true,\n  isEnabled: true,\n  shouldReturnFocus: true\n});\n\nexport { FocusLock as default };","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport { PositionerAbsolute, PositionerFixed, PositionerRelative } from '../styled/Modal';\n\nvar Positioner = function Positioner(_ref) {\n  var scrollBehavior = _ref.scrollBehavior,\n      props = _objectWithoutProperties(_ref, [\"scrollBehavior\"]);\n\n  // default 'inside'\n  var PositionComponent = PositionerAbsolute;\n\n  if (scrollBehavior === 'outside') {\n    PositionComponent = PositionerRelative;\n  } else if (scrollBehavior === 'inside-wide') {\n    PositionComponent = PositionerFixed;\n  }\n\n  return /*#__PURE__*/React.createElement(PositionComponent, props);\n};\n\nexport default Positioner;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport { canUseDOM } from 'exenv';\nimport { UIDConsumer, UIDReset } from 'react-uid';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport Blanket from '@atlaskit/blanket';\nimport { WIDTH_ENUM } from '../shared-variables';\nimport { Dialog, FillScreen as StyledFillScreen } from '../styled/Modal';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport { Animation } from './Animation';\nimport Content from './Content';\nimport FocusLock from './FocusLock';\nimport Positioner from './Positioner';\n\nfunction getScrollDistance() {\n  return window.pageYOffset || document.documentElement && document.documentElement.scrollTop || document.body && document.body.scrollTop || 0;\n}\n\nvar Modal = /*#__PURE__*/function (_React$Component) {\n  _inherits(Modal, _React$Component);\n\n  var _super = _createSuper(Modal);\n\n  function Modal() {\n    var _this;\n\n    _classCallCheck(this, Modal);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      dialogNode: null,\n      scrollDistance: canUseDOM ? getScrollDistance() : 0,\n      isExiting: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleWindowScroll\", function () {\n      if (getScrollDistance() !== _this.state.scrollDistance) {\n        window.scrollTo(window.pageXOffset, _this.state.scrollDistance);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOverlayClick\", function (e) {\n      if (_this.props.shouldCloseOnOverlayClick) {\n        _this.props.onClose(e);\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Modal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var scrollDistance = getScrollDistance();\n\n      if (getScrollDistance() !== this.state.scrollDistance) {\n        // eslint-disable-next-line react/no-did-mount-set-state\n        this.setState({\n          scrollDistance: scrollDistance\n        });\n      }\n\n      window.addEventListener('scroll', this.handleWindowScroll);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      window.removeEventListener('scroll', this.handleWindowScroll);\n    }\n    /* Prevent window from being scrolled programatically so that the modal is positioned correctly\n     * and to prevent scrollIntoView from scrolling the window.\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          actions = _this$props.actions,\n          appearance = _this$props.appearance,\n          autoFocus = _this$props.autoFocus,\n          body = _this$props.body,\n          children = _this$props.children,\n          components = _this$props.components,\n          footer = _this$props.footer,\n          header = _this$props.header,\n          height = _this$props.height,\n          isBlanketHidden = _this$props.isBlanketHidden,\n          isChromeless = _this$props.isChromeless,\n          isHeadingMultiline = _this$props.isHeadingMultiline,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose,\n          onCloseComplete = _this$props.onCloseComplete,\n          onOpenComplete = _this$props.onOpenComplete,\n          onStackChange = _this$props.onStackChange,\n          shouldCloseOnEscapePress = _this$props.shouldCloseOnEscapePress,\n          stackIndex = _this$props.stackIndex,\n          heading = _this$props.heading,\n          width = _this$props.width,\n          scrollBehavior = _this$props.scrollBehavior,\n          testId = _this$props.testId;\n      var scrollDistance = this.state.scrollDistance;\n      var isBackground = stackIndex != null && stackIndex > 0; // If a custom width (number or percentage) is supplied, set inline style\n      // otherwise allow styled component to consume as named prop\n\n      var widthName = width ? WIDTH_ENUM.values.indexOf(width.toString()) !== -1 ? width : undefined : undefined;\n      var widthValue = widthName ? undefined : width;\n      return /*#__PURE__*/React.createElement(Animation, {\n        in: isOpen,\n        onExited: onCloseComplete,\n        onEntered: onOpenComplete,\n        stackIndex: stackIndex\n      }, function (_ref) {\n        var fade = _ref.fade,\n            slide = _ref.slide;\n        return /*#__PURE__*/React.createElement(StyledFillScreen, {\n          style: fade,\n          \"aria-hidden\": isBackground,\n          scrollDistance: scrollDistance\n        }, /*#__PURE__*/React.createElement(FocusLock, {\n          isEnabled: stackIndex === 0 && isOpen,\n          autoFocus: autoFocus\n        }, /*#__PURE__*/React.createElement(Blanket, {\n          isTinted: !isBlanketHidden,\n          onBlanketClicked: _this2.handleOverlayClick\n        }), /*#__PURE__*/React.createElement(Positioner, {\n          style: slide,\n          scrollBehavior: scrollBehavior,\n          widthName: widthName,\n          widthValue: widthValue\n        }, /*#__PURE__*/React.createElement(UIDReset, null, /*#__PURE__*/React.createElement(UIDConsumer, null, function (id, _) {\n          return /*#__PURE__*/React.createElement(Dialog, {\n            heightValue: height,\n            isChromeless: isChromeless,\n            role: \"dialog\",\n            \"aria-labelledby\": \"dialog-heading-\".concat(id),\n            \"data-testid\": testId,\n            tabIndex: -1\n          }, /*#__PURE__*/React.createElement(Content, {\n            actions: actions,\n            appearance: appearance,\n            components: components,\n            footer: footer,\n            heading: heading,\n            headingId: \"dialog-heading-\".concat(id),\n            testId: testId && \"\".concat(testId, \"-dialog-content\"),\n            isHeadingMultiline: isHeadingMultiline,\n            header: header,\n            onClose: onClose,\n            shouldScroll: scrollBehavior === 'inside' || scrollBehavior === 'inside-wide',\n            shouldCloseOnEscapePress: shouldCloseOnEscapePress,\n            onStackChange: onStackChange,\n            isChromeless: isChromeless,\n            stackIndex: stackIndex,\n            body: body\n          }, children));\n        })))));\n      });\n    }\n  }]);\n\n  return Modal;\n}(React.Component);\n\n_defineProperty(Modal, \"defaultProps\", {\n  autoFocus: true,\n  scrollBehavior: 'inside',\n  shouldCloseOnEscapePress: true,\n  shouldCloseOnOverlayClick: true,\n  isBlanketHidden: false,\n  isChromeless: false,\n  isOpen: true,\n  stackIndex: 0,\n  width: 'medium',\n  isHeadingMultiline: true,\n  onClose: function onClose() {}\n});\n\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport var ModalDialogWithoutAnalytics = Modal;\nexport default withAnalyticsContext({\n  componentName: 'modalDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'modalDialog',\n    attributes: {\n      componentName: 'modalDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Modal));","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\n\nvar _React$createContext = /*#__PURE__*/React.createContext({\n  isOpen: true,\n  onExited: function onExited() {}\n}),\n    Consumer = _React$createContext.Consumer,\n    Provider = _React$createContext.Provider; // checks if children exist and are truthy\n\n\nvar hasChildren = function hasChildren(children) {\n  return React.Children.count(children) > 0 && React.Children.map(children, function (child) {\n    return !!child;\n  }).filter(Boolean).length > 0;\n};\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inherits(Transition, _React$Component);\n\n  var _super = _createSuper(Transition);\n\n  function Transition() {\n    var _this;\n\n    _classCallCheck(this, Transition);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      currentChildren: undefined\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onExited\", function () {\n      _this.setState({\n        currentChildren: _this.props.children\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Transition, [{\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(Provider, {\n        value: {\n          onExited: this.onExited,\n          isOpen: hasChildren(this.props.children)\n        }\n      }, this.state.currentChildren);\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(props, state) {\n      var previousChildren = state.currentChildren;\n      var exiting = hasChildren(previousChildren) && !hasChildren(props.children);\n      return {\n        currentChildren: exiting ? previousChildren : props.children\n      };\n    }\n  }]);\n\n  return Transition;\n}(React.Component);\n\nexport var ModalTransitionConsumer = Consumer;\nexport default Transition;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\n// This is the source of truth for open modals\nvar stackConsumers = []; // This component provides the position of a modal dialog in the list of all open dialogs.\n// The key behaviours are:\n// - When a modal renders for the first time it takes the first stack position\n// - When a modal mounts, all other modals have to adjust their position\n// - When a modal unmounts, all other modals have to adjust their position\n\nvar StackConsumer = /*#__PURE__*/function (_React$Component) {\n  _inherits(StackConsumer, _React$Component);\n\n  var _super = _createSuper(StackConsumer);\n\n  function StackConsumer() {\n    var _this;\n\n    _classCallCheck(this, StackConsumer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      stackIndex: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"update\", function () {\n      var stackIndex = stackConsumers.indexOf(_this.update);\n\n      if (_this.state.stackIndex !== stackIndex) {\n        _this.setState({\n          stackIndex: stackIndex\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(StackConsumer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      stackConsumers.forEach(function (updateFn) {\n        return updateFn();\n      });\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      var _this2 = this;\n\n      // This check will pass if the <Transition><Modal/></Transition> pattern has not been\n      // implemented correctly. In this case, will still need to make sure we remove ourselves\n      // from the stack list.\n      if (stackConsumers.indexOf(this.update) !== -1) {\n        stackConsumers = stackConsumers.filter(function (stack) {\n          return stack !== _this2.update;\n        });\n        stackConsumers.forEach(function (updateFn) {\n          return updateFn();\n        });\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this3 = this;\n\n      if (prevProps.isOpen && !this.props.isOpen) {\n        stackConsumers = stackConsumers.filter(function (stack) {\n          return stack !== _this3.update;\n        });\n        stackConsumers.forEach(function (updateFn) {\n          return updateFn();\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      if (stackConsumers.indexOf(this.update) === -1) {\n        // add this instance to stack consumer list\n        stackConsumers = [this.update].concat(_toConsumableArray(stackConsumers));\n      }\n\n      return this.props.children(this.state.stackIndex);\n    }\n  }]);\n\n  return StackConsumer;\n}(React.Component);\n\nexport default StackConsumer;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport Portal from '@atlaskit/portal';\nimport { layers } from '@atlaskit/theme/constants';\nimport Modal from './Modal';\nimport { ModalTransitionConsumer } from './ModalTransition';\nimport StackConsumer from './StackConsumer';\n\nvar ModalWrapper = /*#__PURE__*/function (_React$Component) {\n  _inherits(ModalWrapper, _React$Component);\n\n  var _super = _createSuper(ModalWrapper);\n\n  function ModalWrapper() {\n    var _this;\n\n    _classCallCheck(this, ModalWrapper);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"onModalClosed\", function (onExited) {\n      return function (e) {\n        if (onExited) {\n          onExited();\n        }\n\n        if (_this.props.onCloseComplete) {\n          _this.props.onCloseComplete(e);\n        }\n      };\n    });\n\n    return _this;\n  }\n\n  _createClass(ModalWrapper, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      return /*#__PURE__*/React.createElement(ModalTransitionConsumer, null, function (_ref) {\n        var isOpen = _ref.isOpen,\n            onExited = _ref.onExited;\n        return /*#__PURE__*/React.createElement(Portal, {\n          zIndex: layers.modal()\n        }, /*#__PURE__*/React.createElement(StackConsumer, {\n          isOpen: isOpen\n        }, function (naturalStackIndex) {\n          return /*#__PURE__*/React.createElement(Modal, _extends({}, _this2.props, {\n            isOpen: isOpen,\n            stackIndex: _this2.props.stackIndex || naturalStackIndex,\n            onCloseComplete: _this2.onModalClosed(onExited)\n          }), _this2.props.children);\n        }));\n      });\n    }\n  }]);\n\n  return ModalWrapper;\n}(React.Component);\n\n_defineProperty(ModalWrapper, \"defaultProps\", {\n  autoFocus: true,\n  scrollBehavior: 'inside',\n  shouldCloseOnEscapePress: true,\n  shouldCloseOnOverlayClick: true,\n  isChromeless: false,\n  width: 'medium',\n  isHeadingMultiline: true,\n  onClose: function onClose() {}\n});\n\nexport default ModalWrapper;","import { css } from '@emotion/core';\nimport styled from '@emotion/styled';\nimport { DN30, N30, N800, R400, Y400 } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { divide } from '@atlaskit/theme/math';\n// Constants\n// ==============================\nconst modalPadding = gridSize() * 3;\nconst keylineColor = themed({\n  light: N30,\n  dark: DN30\n});\nexport const keylineHeight = 2; // Wrapper\n// ==============================\n\nexport const wrapperStyles = css`\n  display: flex;\n  flex-direction: column;\n  flex: 1 1 auto;\n  max-height: 100%;\n`; // Header\n// ==============================\n\nexport const Header = styled.header`\n  align-items: center;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: space-between;\n  transition: box-shadow 200ms;\n  position: relative;\n  padding: ${modalPadding}px ${modalPadding}px ${modalPadding - keylineHeight}px\n    ${modalPadding}px;\n  box-shadow: ${props => props.showKeyline ? `0 ${keylineHeight}px 0 0 ${keylineColor(props)}` : 'none'};\n`;\nexport const Title = styled.h4`\n  align-items: center;\n  display: flex;\n  font-size: 20px;\n  font-style: inherit;\n  font-weight: 500;\n  letter-spacing: -0.008em;\n  line-height: 1;\n  margin: 0;\n  min-width: 0;\n`;\nexport const TitleText = styled.span`\n  flex: 1 1 auto;\n  min-width: 0;\n  word-wrap: break-word;\n  width: 100%;\n  ${props => !props.isHeadingMultiline && `\n      white-space: nowrap;\n      overflow: hidden;\n      text-overflow: ellipsis;\n    `};\n`;\nconst iconColor = {\n  danger: R400,\n  warning: Y400\n};\nexport const titleIconWrapperStyles = appearance => css`\n  color: ${iconColor[appearance]};\n  margin-right: ${gridSize()}px;\n  flex: 0 0 auto;\n`; // Body\n// ==============================\n\n/**\n  Adding the padding here avoids cropping box shadow on first/last\n  children. The combined vertical spacing is maintained by subtracting the\n  keyline height from header and footer.\n*/\n\nexport const bodyStyles = shouldScroll => css`\n  flex: 1 1 auto;\n  ${shouldScroll ? `\n        overflow-y: auto;\n        overflow-x: hidden;\n        padding: ${keylineHeight}px ${modalPadding}px;\n      ` : `\n        padding: 0 ${modalPadding}px;\n      `}\n  @media (min-width: 320px) and (max-width: 480px) {\n    overflow-y: auto;\n    height: 100%;\n  }\n  &:focus {\n    outline-offset: -1px;\n    outline-style: dotted;\n    outline-color: ${N800};\n    outline-width: thin;\n  }\n`;\n// Body styles are used when customizing the body of the component.\n// This is duplicated here: https://bitbucket.org/atlassian/atlassian-frontend/src/3c6a7cf3d18e97608fc1a4dc822b9bb003781bf2/packages/design-system/modal-dialog/src/components/Content.tsx#packages/design-system/modal-dialog/src/components/Content.tsx-341\n// On the next major version delete `bodyStyles` from this declaration! They're just doubling up now!\nexport const Body = styled.div`\n  ${props => bodyStyles(props.shouldScroll)};\n`; // Footer\n// ==============================\n\nexport const Footer = styled.footer`\n  position: relative;\n  align-items: center;\n  display: flex;\n  flex: 0 0 auto;\n  justify-content: space-between;\n  transition: box-shadow 200ms;\n  padding: ${modalPadding - keylineHeight}px ${modalPadding}px ${modalPadding}px\n    ${modalPadding}px;\n  box-shadow: ${props => props.showKeyline ? `0 -${keylineHeight}px 0 0 ${keylineColor(props)}` : 'none'};\n`;\nexport const Actions = styled.div`\n  display: inline-flex;\n  margin: 0 -${divide(gridSize, 2)}px;\n`;\nexport const ActionItem = styled.div`\n  flex: 1 0 auto;\n  margin: 0 ${divide(gridSize, 2)}px;\n`;","// @flow\n/* eslint-disable react/no-multi-comp */\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport {\n    Header,\n    Title,\n    titleIconWrapperStyles,\n    TitleText\n} from '@atlaskit/modal-dialog/dist/es2019/styled/Content';\nimport React from 'react';\n\nimport { translate } from '../../../i18n';\nimport { Icon, IconClose } from '../../../icons';\n\nconst TitleIcon = ({ appearance }: { appearance?: 'danger' | 'warning' }) => {\n    if (!appearance) {\n        return null;\n    }\n\n    const IconSymbol = appearance === 'danger' ? ErrorIcon : WarningIcon;\n\n    return (\n        <span css = { titleIconWrapperStyles(appearance) }>\n            <IconSymbol label = { `${appearance} icon` } />\n        </span>\n    );\n};\n\ntype Props = {\n    id: string,\n    appearance?: 'danger' | 'warning',\n    heading: string,\n    hideCloseIconButton: boolean,\n    onClose: Function,\n    showKeyline: boolean,\n    isHeadingMultiline: boolean,\n    testId: string,\n    t: Function\n}\n\n/**\n * A default header for modal-dialog components\n *\n * @export\n * @class ModalHeader\n * @extends {React.Component<Props>}\n */\nclass ModalHeader extends React.Component<Props> {\n    static defaultProps = {\n        isHeadingMultiline: true\n    };\n\n    /**\n     * Initializes a new {@code ModalHeader} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (this.props.onClose && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            this.props.onClose();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            id,\n            appearance,\n            heading,\n            hideCloseIconButton,\n            onClose,\n            showKeyline,\n            isHeadingMultiline,\n            testId,\n            t\n        } = this.props;\n\n        if (!heading) {\n            return null;\n        }\n\n        return (\n            <Header showKeyline = { showKeyline }>\n                <Title>\n                    <TitleIcon appearance = { appearance } />\n                    <TitleText\n                        data-testid = { testId && `${testId}-heading` }\n                        id = { id }\n                        isHeadingMultiline = { isHeadingMultiline }>\n                        {heading}\n                    </TitleText>\n                </Title>\n\n                {\n                    !hideCloseIconButton && <Icon\n                        ariaLabel = { t('dialog.close') }\n                        onClick = { onClose }\n                        onKeyPress = { this._onKeyPress }\n                        role = 'button'\n                        src = { IconClose }\n                        tabIndex = { 0 } />\n                }\n            </Header>\n        );\n    }\n}\nexport default translate(ModalHeader);\n","// @flow\n\nimport ButtonGroup from '@atlaskit/button/button-group';\nimport Button from '@atlaskit/button/standard-button';\nimport Modal, { ModalFooter } from '@atlaskit/modal-dialog';\nimport _ from 'lodash';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n/functions';\nimport type { DialogProps } from '../../constants';\n\nimport ModalHeader from './ModalHeader';\n\n/**\n * The ID to be used for the cancel button if enabled.\n * @type {string}\n */\nconst CANCEL_BUTTON_ID = 'modal-dialog-cancel-button';\n\n/**\n * The ID to be used for the ok button if enabled.\n * @type {string}\n */\nconst OK_BUTTON_ID = 'modal-dialog-ok-button';\n\n/**\n * The type of the React {@code Component} props of {@link StatelessDialog}.\n *\n * @static\n */\ntype Props = {\n    ...DialogProps,\n\n    /**\n     * Custom dialog header that replaces the standard heading.\n     */\n    customHeader?: React$Element<any> | Function,\n\n    /*\n     * True if listening for the Enter key should be disabled.\n     */\n    disableEnter: boolean,\n\n    /**\n     * Disables dismissing the dialog when the blanket is clicked. Enabled\n     * by default.\n     */\n    disableBlanketClickDismiss: boolean,\n\n    /**\n     * If true, the cancel button will not display but cancel actions, like\n     * clicking the blanket, will cancel.\n     */\n    hideCancelButton: boolean,\n\n    /**\n     * If true, the close icon button will not be displayed.\n     */\n    hideCloseIconButton: boolean,\n\n    /**\n     * If true, no footer will be displayed.\n     */\n    disableFooter?: boolean,\n\n    i18n: Object,\n\n    /**\n     * Whether the dialog is modal. This means clicking on the blanket will\n     * leave the dialog open. No cancel button.\n     */\n    isModal: boolean,\n\n    /**\n     * Disables rendering of the submit button.\n     */\n    submitDisabled: boolean,\n\n    /**\n     * Function to be used to retrieve translated i18n labels.\n     */\n    t: Function,\n\n    /**\n     * Width of the dialog, can be:\n     * - 'small' (400px), 'medium' (600px), 'large' (800px),\n     *   'x-large' (968px)\n     * - integer value for pixel width\n     * - string value for percentage\n     */\n    width: string\n};\n\n/**\n * Web dialog that uses atlaskit modal-dialog to display dialogs.\n */\nclass StatelessDialog extends Component<Props> {\n    static defaultProps = {\n        hideCloseIconButton: false\n    };\n\n    /**\n     * The functional component to be used for rendering the modal footer.\n     */\n    _Footer: ?Function\n\n    _dialogElement: ?HTMLElement;\n\n    /**\n     * Initializes a new {@code StatelessDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onDialogDismissed = this._onDialogDismissed.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._renderFooter = this._renderFooter.bind(this);\n        this._setDialogElement = this._setDialogElement.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            customHeader,\n            children,\n            hideCloseIconButton,\n            t /* The following fixes a flow error: */ = _.identity,\n            titleString,\n            titleKey,\n            width\n        } = this.props;\n\n        return (\n            <Modal\n                autoFocus = { true }\n                components = {{\n                    Header: customHeader ? customHeader : props => (\n                        <ModalHeader\n                            { ...props }\n                            heading = { titleString || t(titleKey) }\n                            hideCloseIconButton = { hideCloseIconButton } />\n                    )\n                }}\n                footer = { this._renderFooter }\n                i18n = { this.props.i18n }\n                onClose = { this._onDialogDismissed }\n                onDialogDismissed = { this._onDialogDismissed }\n                shouldCloseOnEscapePress = { true }\n                width = { width || 'medium' }>\n                <div\n                    onKeyPress = { this._onKeyPress }\n                    ref = { this._setDialogElement }>\n                    <form\n                        className = 'modal-dialog-form'\n                        id = 'modal-dialog-form'\n                        onSubmit = { this._onSubmit }>\n                        { children }\n                    </form>\n                </div>\n            </Modal>\n        );\n    }\n\n    _renderFooter: () => React$Node;\n\n    /**\n     * Returns a ReactElement to display buttons for closing the modal.\n     *\n     * @param {Object} propsFromModalFooter - The props passed in from the\n     * {@link ModalFooter} component.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFooter(propsFromModalFooter) {\n        // Filter out falsy (null) values because {@code ButtonGroup} will error\n        // if passed in anything but buttons with valid type props.\n        const buttons = [\n            this._renderOKButton(),\n            this._renderCancelButton()\n        ].filter(Boolean);\n\n        if (this.props.disableFooter) {\n            return null;\n        }\n\n        return (\n            <ModalFooter showKeyline = { propsFromModalFooter.showKeyline } >\n                {\n\n                    /**\n                     * Atlaskit has this empty span (JustifySim) so...\n                     */\n                }\n                <span />\n                <ButtonGroup>\n                    { buttons }\n                </ButtonGroup>\n            </ModalFooter>\n        );\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches action to hide the dialog.\n     *\n     * @returns {void}\n     */\n    _onCancel() {\n        if (!this.props.isModal) {\n            const { onCancel } = this.props;\n\n            onCancel && onCancel();\n        }\n    }\n\n    _onDialogDismissed: () => void;\n\n    /**\n     * Handles click on the blanket area.\n     *\n     * @returns {void}\n     */\n    _onDialogDismissed() {\n        if (!this.props.disableBlanketClickDismiss) {\n            this._onCancel();\n        }\n    }\n\n    _onSubmit: (?string) => void;\n\n    /**\n     * Dispatches the action when submitting the dialog.\n     *\n     * @private\n     * @param {string} value - The submitted value if any.\n     * @returns {void}\n     */\n    _onSubmit(value) {\n        const { onSubmit } = this.props;\n\n        onSubmit && onSubmit(value);\n    }\n\n    /**\n     * Renders Cancel button.\n     *\n     * @private\n     * @returns {ReactElement|null} The Cancel button if enabled and dialog is\n     * not modal.\n     */\n    _renderCancelButton() {\n        if (this.props.cancelDisabled\n            || this.props.isModal\n            || this.props.hideCancelButton) {\n            return null;\n        }\n\n        const {\n            t /* The following fixes a flow error: */ = _.identity\n        } = this.props;\n\n        return (\n            <Button\n                appearance = 'subtle'\n                id = { CANCEL_BUTTON_ID }\n                key = 'cancel'\n                onClick = { this._onCancel }\n                type = 'button'>\n                { t(this.props.cancelKey || 'dialog.Cancel') }\n            </Button>\n        );\n    }\n\n    /**\n     * Renders OK button.\n     *\n     * @private\n     * @returns {ReactElement|null} The OK button if enabled.\n     */\n    _renderOKButton() {\n        if (this.props.submitDisabled) {\n            return null;\n        }\n\n        const {\n            t /* The following fixes a flow error: */ = _.identity\n        } = this.props;\n\n        return (\n            <Button\n                appearance = 'primary'\n                form = 'modal-dialog-form'\n                id = { OK_BUTTON_ID }\n                isDisabled = { this.props.okDisabled }\n                key = 'submit'\n                onClick = { this._onSubmit }\n                type = 'button'>\n                { t(this.props.okKey || 'dialog.Ok') }\n            </Button>\n        );\n    }\n\n    _setDialogElement: (?HTMLElement) => void;\n\n    /**\n     * Sets the instance variable for the div containing the component's dialog\n     * element so it can be accessed directly.\n     *\n     * @param {HTMLElement} element - The DOM element for the component's\n     * dialog.\n     * @private\n     * @returns {void}\n     */\n    _setDialogElement(element: ?HTMLElement) {\n        this._dialogElement = element;\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * Handles 'Enter' key in the dialog to submit/hide dialog depending on\n     * the available buttons and their disabled state.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyPress(event) {\n        // If the event coming to the dialog has been subject to preventDefault\n        // we don't handle it here.\n        if (event.defaultPrevented) {\n            return;\n        }\n\n        if (event.key === 'Enter' && !this.props.disableEnter) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            if (this.props.submitDisabled && !this.props.cancelDisabled) {\n                this._onCancel();\n            } else if (!this.props.okDisabled) {\n                this._onSubmit();\n            }\n        }\n    }\n}\n\nexport default translate(StatelessDialog);\n","// @flow\n\nimport React from 'react';\n\nimport { connect } from '../../../redux';\nimport AbstractDialog from '../AbstractDialog';\nimport type { Props as AbstractDialogProps, State } from '../AbstractDialog';\n\nimport StatelessDialog from './StatelessDialog';\n\n/**\n * The type of the React {@code Component} props of {@link Dialog}.\n */\ntype Props = AbstractDialogProps & {\n\n    /**\n     * True if listening for the Enter key should be disabled.\n     */\n    disableEnter: boolean,\n\n    /**\n     * Whether the dialog is modal. This means clicking on the blanket will\n     * leave the dialog open. No cancel button.\n     */\n    isModal: boolean,\n\n    /**\n     * Disables rendering of the submit button.\n     */\n    submitDisabled: boolean,\n\n    /**\n     * Width of the dialog, can be:\n     * - 'small' (400px), 'medium' (600px), 'large' (800px),\n     * 'x-large' (968px)\n     * - integer value for pixel width\n     * - string value for percentage\n     */\n    width: string\n};\n\n/**\n * Web dialog that uses atlaskit modal-dialog to display dialogs.\n */\nclass Dialog extends AbstractDialog<Props, State> {\n    /**\n     * Initializes a new Dialog instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const props = {\n            ...this.props,\n            onCancel: this._onCancel,\n            onSubmit: this._onSubmit\n        };\n\n        // $FlowExpectedError\n        delete props.dispatch;\n\n        return <StatelessDialog { ...props } />;\n    }\n\n    _onCancel: () => void;\n\n    /**\n     * Dispatches action to hide the dialog.\n     *\n     * @returns {void}\n     */\n    _onCancel() {\n        this.props.isModal || super._onCancel();\n    }\n\n    _onSubmit: (?string) => void;\n}\n\nexport default connect()(Dialog);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { type ReactionEmojiProps } from '../../../reactions/constants';\n\n/**\n * The type of the React {@code Component} props of {@link DialogContainer}.\n */\ntype Props = {\n\n    /**\n     * The component to render.\n     */\n    _component: Function,\n\n    /**\n     * The props to pass to the component that will be rendered.\n     */\n    _componentProps: Object,\n\n    /**\n     * True if the dialog is a raw dialog (doesn't inherit behavior from other common frameworks, such as atlaskit).\n     */\n    _rawDialog: boolean,\n\n    /**\n     * True if the UI is in a compact state where we don't show dialogs.\n     */\n    _reducedUI: boolean,\n\n    /**\n     * Array of reactions to be displayed.\n     */\n    _reactionsQueue: Array<ReactionEmojiProps>\n};\n\n/**\n * Implements a DialogContainer responsible for showing all dialogs.\n */\nexport default class AbstractDialogContainer extends Component<Props> {\n    /**\n     * Returns the dialog to be displayed.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderDialogContent() {\n        const {\n            _component: component,\n            _reducedUI: reducedUI\n        } = this.props;\n\n        return (\n            component && !reducedUI\n                ? React.createElement(component, this.props._componentProps)\n                : null);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated\n * {@code AbstractDialogContainer}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Props}\n */\nexport function abstractMapStateToProps(state: Object): $Shape<Props> {\n    const stateFeaturesBaseDialog = state['features/base/dialog'];\n    const { reducedUI } = state['features/base/responsive-ui'];\n\n    return {\n        _component: stateFeaturesBaseDialog.component,\n        _componentProps: stateFeaturesBaseDialog.componentProps,\n        _rawDialog: stateFeaturesBaseDialog.rawDialog,\n        _reducedUI: reducedUI\n    };\n}\n","import { ModalTransition } from '@atlaskit/modal-dialog';\nimport React from 'react';\n\nimport { connect } from '../../../redux';\nimport AbstractDialogContainer, {\n    abstractMapStateToProps\n} from '../AbstractDialogContainer';\n\n/**\n * Implements a DialogContainer responsible for showing all dialogs. Necessary\n * for supporting @atlaskit's modal animations.\n *\n * @extends AbstractDialogContainer\n */\nclass DialogContainer extends AbstractDialogContainer {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this.props._rawDialog) {\n            return this._renderDialogContent();\n        }\n\n        return (\n            <ModalTransition>\n                { this._renderDialogContent() }\n            </ModalTransition>\n        );\n    }\n}\n\nexport default connect(abstractMapStateToProps)(DialogContainer);\n\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/dialog');\n","// @flow\n\nimport Tabs from '@atlaskit/tabs';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n/functions';\nimport logger from '../../logger';\n\nimport StatelessDialog from './StatelessDialog';\n\n/**\n * The type of the React {@code Component} props of {@link DialogWithTabs}.\n */\nexport type Props = {\n\n    /**\n     * Function that closes the dialog.\n     */\n    closeDialog: Function,\n\n    /**\n     * Css class name that will be added to the dialog.\n     */\n    cssClassName: string,\n\n    /**\n     * Which settings tab should be initially displayed. If not defined then\n     * the first tab will be displayed.\n     */\n    defaultTab: number,\n\n    /**\n     * Disables dismissing the dialog when the blanket is clicked. Enabled\n     * by default.\n     */\n    disableBlanketClickDismiss: boolean,\n\n    /**\n     * Callback invoked when the Save button has been pressed.\n     */\n    onSubmit: Function,\n\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Information about the tabs that will be rendered.\n     */\n    tabs: Array<Object>,\n\n    /**\n     * Key to use for showing a title.\n     */\n    titleKey: string\n\n};\n\n/**\n * The type of the React {@code Component} state of {@link DialogWithTabs}.\n */\ntype State = {\n\n    /**\n     * The index of the tab that should be displayed.\n     */\n    selectedTab: number,\n\n    /**\n     * An array of the states of the tabs.\n     */\n    tabStates: Array<Object>\n};\n\n/**\n * A React {@code Component} for displaying a dialog with tabs.\n *\n * @extends Component\n */\nclass DialogWithTabs extends Component<Props, State> {\n    /**\n     * Initializes a new {@code DialogWithTabs} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            selectedTab: this.props.defaultTab || 0,\n            tabStates: this.props.tabs.map(tab => tab.props)\n        };\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n        this._onTabStateChange = this._onTabStateChange.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const onCancel = this.props.closeDialog;\n\n        return (\n            <StatelessDialog\n                disableBlanketClickDismiss\n                    = { this.props.disableBlanketClickDismiss }\n                onCancel = { onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = { this.props.titleKey } >\n                <div className = { this.props.cssClassName } >\n                    { this._renderTabs() }\n                </div>\n            </StatelessDialog>\n        );\n    }\n\n    /**\n     * Gets the props to pass into the tab component.\n     *\n     * @param {number} tabId - The index of the tab configuration within\n     * {@link this.state.tabStates}.\n     * @returns {Object}\n     */\n    _getTabProps(tabId) {\n        const { tabs } = this.props;\n        const { tabStates } = this.state;\n        const tabConfiguration = tabs[tabId];\n        const currentTabState = tabStates[tabId];\n\n        if (tabConfiguration.propsUpdateFunction) {\n            return tabConfiguration.propsUpdateFunction(\n                currentTabState,\n                tabConfiguration.props);\n        }\n\n        return { ...currentTabState };\n    }\n\n    _onTabSelected: (Object, number) => void;\n\n    /**\n     * Callback invoked when the desired tab to display should be changed.\n     *\n     * @param {Object} tab - The configuration passed into atlaskit tabs to\n     * describe how to display the selected tab.\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @private\n     * @returns {void}\n     */\n    _onTabSelected(tab, tabIndex) { // eslint-disable-line no-unused-vars\n        this.setState({ selectedTab: tabIndex });\n    }\n\n    /**\n     * Renders the tabs from the tab information passed on props.\n     *\n     * @returns {void}\n     */\n    _renderTabs() {\n        const { t, tabs } = this.props;\n\n        if (tabs.length === 1) {\n            return this._renderTab({\n                ...tabs[0],\n                tabId: 0\n            });\n        }\n\n        if (tabs.length > 1) {\n            return (\n                <Tabs\n                    onSelect = { this._onTabSelected }\n                    selected = { this.state.selectedTab }\n                    tabs = {\n                        tabs.map(({ component, label, styles }, idx) => {\n                            return {\n                                content: this._renderTab({\n                                    component,\n                                    styles,\n                                    tabId: idx\n                                }),\n                                label: t(label)\n                            };\n                        })\n                    } />);\n        }\n\n        logger.warn('No settings tabs configured to display.');\n\n        return null;\n    }\n\n    /**\n     * Renders a tab from the tab information passed as parameters.\n     *\n     * @param {Object} tabInfo - Information about the tab.\n     * @returns {Component} - The tab.\n     */\n    _renderTab({ component, styles, tabId }) {\n        const { closeDialog } = this.props;\n        const TabComponent = component;\n\n        return (\n            <div className = { styles }>\n                <TabComponent\n                    closeDialog = { closeDialog }\n                    mountCallback = { this.props.tabs[tabId].onMount }\n                    onTabStateChange\n                        = { this._onTabStateChange }\n                    tabId = { tabId }\n                    { ...this._getTabProps(tabId) } />\n            </div>);\n    }\n\n    _onTabStateChange: (number, Object) => void;\n\n    /**\n     * Changes the state for a tab.\n     *\n     * @param {number} tabId - The id of the tab which state will be changed.\n     * @param {Object} state - The new state.\n     * @returns {void}\n     */\n    _onTabStateChange(tabId, state) {\n        const tabStates = [ ...this.state.tabStates ];\n\n        tabStates[tabId] = state;\n        this.setState({ tabStates });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Submits the information filled in the dialog.\n     *\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { onSubmit, tabs } = this.props;\n\n        tabs.forEach(({ submit }, idx) => {\n            submit && submit(this.state.tabStates[idx]);\n        });\n\n        onSubmit();\n    }\n}\n\nexport default translate(DialogWithTabs);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Container, Text } from '../../react';\nimport { type StyleType } from '../../styles';\n\nimport styles from './styles';\n\ntype Props = {\n\n    /**\n     * Children of the component.\n     */\n    children: string | React$Node,\n\n    style: ?StyleType\n};\n\n/**\n * Generic dialog content container to provide the same styling for all custom\n * dialogs.\n */\nexport default class DialogContent extends Component<Props> {\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { children, style } = this.props;\n\n        const childrenComponent = typeof children === 'string'\n            ? <Text style = { style }>{ children }</Text>\n            : children;\n\n        return (\n            <Container style = { styles.dialogContainer }>\n                { childrenComponent }\n            </Container>\n        );\n    }\n}\n","import hyphenate from 'fbjs/lib/hyphenateStyleName';\nimport React, { cloneElement, Component, createElement } from 'react';\nimport Stylis from 'stylis';\nimport _insertRulePlugin from 'stylis-rule-sheet';\nimport PropTypes from 'prop-types';\nimport hoistStatics from 'hoist-non-react-statics';\nimport { isValidElementType } from 'react-is';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\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\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n// \nvar isPlainObject = (function (x) {\n  return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object;\n});\n\n// \n\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n */\nvar ERRORS = process.env.NODE_ENV !== 'production' ? {\n  \"1\": \"Cannot create styled-component for component: %s.\\n\\n\",\n  \"2\": \"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n* Are you trying to reuse it across renders?\\n* Are you accidentally calling collectStyles twice?\\n\\n\",\n  \"3\": \"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",\n  \"4\": \"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n* Does this error occur on the client and is your target falsy?\\n* Does this error occur on the server and is the sheet falsy?\\n\\n\",\n  \"5\": \"The clone method cannot be used on the client!\\n\\n* Are you running in a client-like environment on the server?\\n* Are you trying to run SSR on the client?\\n\\n\",\n  \"6\": \"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n* Are you using a custom target that isn't mounted?\\n* Does your document not have a valid head element?\\n* Have you accidentally removed a style tag manually?\\n\\n\",\n  \"7\": \"ThemeProvider: Please return an object from your \\\"theme\\\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n\",\n  \"8\": \"ThemeProvider: Please make your \\\"theme\\\" prop an object.\\n\\n\",\n  \"9\": \"Missing document `<head>`\\n\\n\",\n  \"10\": \"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",\n  \"11\": \"A plain React class (%s) has been interpolated into styles, probably as a component selector (https://www.styled-components.com/docs/advanced#referring-to-other-components). Only styled-component classes can be targeted in this fashion.\"\n} : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var a = args[0];\n  var b = [];\n  var c = void 0;\n\n  for (c = 1; c < args.length; c += 1) {\n    b.push(args[c]);\n  }\n\n  b.forEach(function (d) {\n    a = a.replace(/%[a-z]/, d);\n  });\n\n  return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\n\nvar StyledComponentsError = function (_Error) {\n  inherits(StyledComponentsError, _Error);\n\n  function StyledComponentsError(code) {\n    classCallCheck(this, StyledComponentsError);\n\n    for (var _len2 = arguments.length, interpolations = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      interpolations[_key2 - 1] = arguments[_key2];\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      var _this = possibleConstructorReturn(this, _Error.call(this, 'An error occurred. See https://github.com/styled-components/styled-components/blob/master/src/utils/errors.md#' + code + ' for more information. ' + (interpolations ? 'Additional arguments: ' + interpolations.join(', ') : '')));\n    } else {\n      var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations))));\n    }\n    return possibleConstructorReturn(_this);\n  }\n\n  return StyledComponentsError;\n}(Error);\n\n// \n\nvar objToCss = function objToCss(obj, prevKey) {\n  var css = Object.keys(obj).filter(function (key) {\n    var chunk = obj[key];\n    return chunk !== undefined && chunk !== null && chunk !== false && chunk !== '';\n  }).map(function (key) {\n    if (isPlainObject(obj[key])) return objToCss(obj[key], key);\n    return hyphenate(key) + ': ' + obj[key] + ';';\n  }).join(' ');\n  return prevKey ? prevKey + ' {\\n  ' + css + '\\n}' : css;\n};\n\nvar flatten = function flatten(chunks, executionContext) {\n  return chunks.reduce(function (ruleSet, chunk) {\n    /* Remove falsey values */\n    if (chunk === undefined || chunk === null || chunk === false || chunk === '') {\n      return ruleSet;\n    }\n\n    /* Flatten ruleSet */\n    if (Array.isArray(chunk)) {\n      ruleSet.push.apply(ruleSet, flatten(chunk, executionContext));\n      return ruleSet;\n    }\n\n    /* Handle other components */\n    if (chunk.hasOwnProperty('styledComponentId')) {\n      // $FlowFixMe not sure how to make this pass\n      ruleSet.push('.' + chunk.styledComponentId);\n      return ruleSet;\n    }\n\n    /* Either execute or defer the function */\n    if (typeof chunk === 'function') {\n      if (executionContext) {\n        var nextChunk = chunk(executionContext);\n        /* Throw if a React Element was given styles */\n        if (React.isValidElement(nextChunk)) {\n          var elementName = chunk.displayName || chunk.name;\n          throw new StyledComponentsError(11, elementName);\n        }\n        ruleSet.push.apply(ruleSet, flatten([nextChunk], executionContext));\n      } else ruleSet.push(chunk);\n\n      return ruleSet;\n    }\n\n    /* Handle objects */\n    ruleSet.push(\n    // $FlowFixMe have to add %checks somehow to isPlainObject\n    isPlainObject(chunk) ? objToCss(chunk) : chunk.toString());\n\n    return ruleSet;\n  }, []);\n};\n\n// \n\nvar COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\n// NOTE: This stylis instance is only used to split rules from SSR'd style tags\nvar stylisSplitter = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: false,\n  compress: false,\n  semicolon: true\n});\n\nvar stylis = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: true,\n  compress: false,\n  semicolon: false // NOTE: This means \"autocomplete missing semicolons\"\n});\n\n// Wrap `insertRulePlugin to build a list of rules,\n// and then make our own plugin to return the rules. This\n// makes it easier to hook into the existing SSR architecture\n\nvar parsingRules = [];\n// eslint-disable-next-line consistent-return\nvar returnRulesPlugin = function returnRulesPlugin(context) {\n  if (context === -2) {\n    var parsedRules = parsingRules;\n    parsingRules = [];\n    return parsedRules;\n  }\n};\n\nvar parseRulesPlugin = _insertRulePlugin(function (rule) {\n  parsingRules.push(rule);\n});\n\nstylis.use([parseRulesPlugin, returnRulesPlugin]);\nstylisSplitter.use([parseRulesPlugin, returnRulesPlugin]);\n\nvar stringifyRules = function stringifyRules(rules, selector, prefix) {\n  var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n  var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS;\n\n  return stylis(prefix || !selector ? '' : selector, cssStr);\n};\n\nvar splitByRules = function splitByRules(css) {\n  return stylisSplitter('', css);\n};\n\n// \n\nfunction isStyledComponent(target) /* : %checks */{\n  return (\n    // $FlowFixMe TODO: flow for styledComponentId\n    typeof target === 'function' && typeof target.styledComponentId === 'string'\n  );\n}\n\n// \n\n/* This function is DEPRECATED and will be removed on the next major version release.\n * It was needed to rehydrate all style blocks prepended to chunks before React\n * tries to rehydrate its HTML stream. Since the master StyleSheet will now detect\n * the use of streamed style tags and will perform the rehydration earlier when needed\n * this function will not be needed anymore */\nfunction consolidateStreamedStyles() {\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line no-console\n    console.warn('styled-components automatically does streaming SSR rehydration now.\\n' + 'Calling consolidateStreamedStyles manually is no longer necessary and a noop now.\\n' + '- Please remove the consolidateStreamedStyles call from your client.');\n  }\n}\n\n// \n/* eslint-disable no-bitwise */\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nvar charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nvar getAlphabeticChar = function getAlphabeticChar(code) {\n  return String.fromCharCode(code + (code > 25 ? 39 : 97));\n};\n\n/* input a number, usually a hash and convert it to base-52 */\nvar generateAlphabeticName = function generateAlphabeticName(code) {\n  var name = '';\n  var x = void 0;\n\n  /* get a char and divide by alphabet-length */\n  for (x = code; x > charsLength; x = Math.floor(x / charsLength)) {\n    name = getAlphabeticChar(x % charsLength) + name;\n  }\n\n  return getAlphabeticChar(x % charsLength) + name;\n};\n\n// \n\nvar interleave = (function (strings, interpolations) {\n  var result = [strings[0]];\n\n  for (var i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n});\n\n// \nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_OBJECT = Object.freeze({});\n\n// \n\nvar css = (function (styles) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  if (typeof styles === 'function' || isPlainObject(styles)) {\n    // $FlowFixMe\n    return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));\n  }\n\n  // $FlowFixMe\n  return flatten(interleave(styles, interpolations));\n});\n\n// \n\n\nvar SC_ATTR = typeof process !== 'undefined' && process.env.SC_ATTR || 'data-styled-components';\nvar SC_STREAM_ATTR = 'data-styled-streamed';\nvar CONTEXT_KEY = '__styled-components-stylesheet__';\n\nvar IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nvar DISABLE_SPEEDY = process.env.NODE_ENV !== 'production';\n\n// \nvar SC_COMPONENT_ID = /^[^\\S\\n]*?\\/\\* sc-component-id:\\s*(\\S+)\\s+\\*\\//gm;\n\nvar extractComps = (function (maybeCSS) {\n  var css = '' + (maybeCSS || ''); // Definitely a string, and a clone\n  var existingComponents = [];\n  css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) {\n    existingComponents.push({ componentId: componentId, matchIndex: matchIndex });\n    return match;\n  });\n  return existingComponents.map(function (_ref, i) {\n    var componentId = _ref.componentId,\n        matchIndex = _ref.matchIndex;\n\n    var nextComp = existingComponents[i + 1];\n    var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex);\n    return { componentId: componentId, cssFromDOM: cssFromDOM };\n  });\n});\n\n// \n/* eslint-disable camelcase, no-undef */\n\nvar getNonce = (function () {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n});\n\n// \n// Helper to call a given function, only once\nvar once = (function (cb) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      cb();\n    }\n  };\n});\n\n// \n/* These are helpers for the StyleTags to keep track of the injected\n * rule names for each (component) ID that they're keeping track of.\n * They're crucial for detecting whether a name has already been\n * injected.\n * (This excludes rehydrated names) */\n\n/* adds a new ID:name pairing to a names dictionary */\nvar addNameForId = function addNameForId(names, id, name) {\n  if (name) {\n    // eslint-disable-next-line no-param-reassign\n    var namesForId = names[id] || (names[id] = Object.create(null));\n    namesForId[name] = true;\n  }\n};\n\n/* resets an ID entirely by overwriting it in the dictionary */\nvar resetIdNames = function resetIdNames(names, id) {\n  // eslint-disable-next-line no-param-reassign\n  names[id] = Object.create(null);\n};\n\n/* factory for a names dictionary checking the existance of an ID:name pairing */\nvar hasNameForId = function hasNameForId(names) {\n  return function (id, name) {\n    return names[id] !== undefined && names[id][name];\n  };\n};\n\n/* stringifies names for the html/element output */\nvar stringifyNames = function stringifyNames(names) {\n  var str = '';\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    str += Object.keys(names[id]).join(' ') + ' ';\n  }\n  return str.trim();\n};\n\n/* clones the nested names dictionary */\nvar cloneNames = function cloneNames(names) {\n  var clone = Object.create(null);\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    clone[id] = _extends({}, names[id]);\n  }\n  return clone;\n};\n\n// \n\n/* These are helpers that deal with the insertRule (aka speedy) API\n * They are used in the StyleTags and specifically the speedy tag\n */\n\n/* retrieve a sheet for a given style tag */\nvar sheetForTag = function sheetForTag(tag) {\n  // $FlowFixMe\n  if (tag.sheet) return tag.sheet;\n\n  /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */\n  var size = document.styleSheets.length;\n  for (var i = 0; i < size; i += 1) {\n    var sheet = document.styleSheets[i];\n    // $FlowFixMe\n    if (sheet.ownerNode === tag) return sheet;\n  }\n\n  /* we should always be able to find a tag */\n  throw new StyledComponentsError(10);\n};\n\n/* insert a rule safely and return whether it was actually injected */\nvar safeInsertRule = function safeInsertRule(sheet, cssRule, index) {\n  /* abort early if cssRule string is falsy */\n  if (!cssRule) return false;\n\n  var maxIndex = sheet.cssRules.length;\n\n  try {\n    /* use insertRule and cap passed index with maxIndex (no of cssRules) */\n    sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex);\n  } catch (err) {\n    /* any error indicates an invalid rule */\n    return false;\n  }\n\n  return true;\n};\n\n/* deletes `size` rules starting from `removalIndex` */\nvar deleteRules = function deleteRules(sheet, removalIndex, size) {\n  var lowerBound = removalIndex - size;\n  for (var i = removalIndex; i > lowerBound; i -= 1) {\n    sheet.deleteRule(i);\n  }\n};\n\n// \n\n/* this marker separates component styles and is important for rehydration */\nvar makeTextMarker = function makeTextMarker(id) {\n  return '\\n/* sc-component-id: ' + id + ' */\\n';\n};\n\n/* add up all numbers in array up until and including the index */\nvar addUpUntilIndex = function addUpUntilIndex(sizes, index) {\n  var totalUpToIndex = 0;\n  for (var i = 0; i <= index; i += 1) {\n    totalUpToIndex += sizes[i];\n  }\n\n  return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nvar makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) {\n  var el = document.createElement('style');\n  el.setAttribute(SC_ATTR, '');\n\n  var nonce = getNonce();\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n\n  /* Work around insertRule quirk in EdgeHTML */\n  el.appendChild(document.createTextNode(''));\n\n  if (target && !tagEl) {\n    /* Append to target when no previous element was passed */\n    target.appendChild(el);\n  } else {\n    if (!tagEl || !target || !tagEl.parentNode) {\n      throw new StyledComponentsError(6);\n    }\n\n    /* Insert new style tag after the previous one */\n    tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n  }\n\n  return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nvar wrapAsHtmlTag = function wrapAsHtmlTag(css, names) {\n  return function (additionalAttrs) {\n    var nonce = getNonce();\n    var attrs = [nonce && 'nonce=\"' + nonce + '\"', SC_ATTR + '=\"' + stringifyNames(names) + '\"', additionalAttrs];\n\n    var htmlAttr = attrs.filter(Boolean).join(' ');\n    return '<style ' + htmlAttr + '>' + css() + '</style>';\n  };\n};\n\n/* takes a css factory function and outputs an element factory */\nvar wrapAsElement = function wrapAsElement(css, names) {\n  return function () {\n    var _props;\n\n    var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props);\n\n    var nonce = getNonce();\n    if (nonce) {\n      // $FlowFixMe\n      props.nonce = nonce;\n    }\n\n    // eslint-disable-next-line react/no-danger\n    return React.createElement('style', _extends({}, props, { dangerouslySetInnerHTML: { __html: css() } }));\n  };\n};\n\nvar getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) {\n  return function () {\n    return Object.keys(markers);\n  };\n};\n\n/* speedy tags utilise insertRule */\nvar makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n  var sizes = [];\n\n  var extractImport = getImportRuleTag !== undefined;\n  /* indicates whther getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = sizes.length;\n    sizes.push(0);\n    resetIdNames(names, id);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var sheet = sheetForTag(el);\n    var insertIndex = addUpUntilIndex(sizes, marker);\n\n    var injectedRules = 0;\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var cssRule = cssRules[i];\n      var mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n      if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n        importRules.push(cssRule);\n      } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n        mayHaveImport = false;\n        injectedRules += 1;\n      }\n    }\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n\n    sizes[marker] += injectedRules; /* add up no of injected rules */\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n\n    var size = sizes[marker];\n    var sheet = sheetForTag(el);\n    var removalIndex = addUpUntilIndex(sizes, marker);\n    deleteRules(sheet, removalIndex, size);\n    sizes[marker] = 0;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var _sheetForTag = sheetForTag(el),\n        cssRules = _sheetForTag.cssRules;\n\n    var str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += makeTextMarker(id);\n      var marker = markers[id];\n      var end = addUpUntilIndex(sizes, marker);\n      var size = sizes[marker];\n      for (var i = end - size; i < end; i += 1) {\n        var rule = cssRules[i];\n        if (rule !== undefined) {\n          str += rule.cssText;\n        }\n      }\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeTextNode = function makeTextNode(id) {\n  return document.createTextNode(makeTextMarker(id));\n};\n\nvar makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n\n  var extractImport = getImportRuleTag !== undefined;\n\n  /* indicates whther getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = makeTextNode(id);\n    el.appendChild(markers[id]);\n    names[id] = Object.create(null);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var rule = cssRules[i];\n      var mayHaveImport = extractImport;\n      if (mayHaveImport && rule.indexOf('@import') !== -1) {\n        importRules.push(rule);\n      } else {\n        mayHaveImport = false;\n        var separator = i === cssRulesSize - 1 ? '' : ' ';\n        marker.appendData('' + rule + separator);\n      }\n    }\n\n    addNameForId(names, id, name);\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n\n    /* create new empty text node and replace the current one */\n    var newMarker = makeTextNode(id);\n    el.replaceChild(newMarker, marker);\n    markers[id] = newMarker;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var str = '';\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += markers[id].data;\n    }\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeServerTagInternal = function makeServerTagInternal(namesArg, markersArg) {\n  var names = namesArg === undefined ? Object.create(null) : namesArg;\n  var markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    return markers[id] = [''];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    marker[0] += cssRules.join(' ');\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    marker[0] = '';\n    resetIdNames(names, id);\n  };\n\n  var css = function css() {\n    var str = '';\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      var cssForId = markers[id][0];\n      if (cssForId) {\n        str += makeTextMarker(id) + cssForId;\n      }\n    }\n    return str;\n  };\n\n  var clone = function clone() {\n    var namesClone = cloneNames(names);\n    var markersClone = Object.create(null);\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      markersClone[id] = [markers[id][0]];\n    }\n\n    return makeServerTagInternal(namesClone, markersClone);\n  };\n\n  var tag = {\n    clone: clone,\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: null,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n\n  return tag;\n};\n\nvar makeServerTag = function makeServerTag() {\n  return makeServerTagInternal();\n};\n\nvar makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) {\n  if (IS_BROWSER && !forceServer) {\n    var el = makeStyleTag(target, tagEl, insertBefore);\n\n    if (DISABLE_SPEEDY) {\n      return makeBrowserTag(el, getImportRuleTag);\n    } else {\n      return makeSpeedyTag(el, getImportRuleTag);\n    }\n  }\n\n  return makeServerTag();\n};\n\n/* wraps a given tag so that rehydration is performed once when necessary */\nvar makeRehydrationTag = function makeRehydrationTag(tag, els, extracted, immediateRehydration) {\n  /* rehydration function that adds all rules to the new tag */\n  var rehydrate = once(function () {\n    /* add all extracted components to the new tag */\n    for (var i = 0, len = extracted.length; i < len; i += 1) {\n      var _extracted$i = extracted[i],\n          componentId = _extracted$i.componentId,\n          cssFromDOM = _extracted$i.cssFromDOM;\n\n      var cssRules = splitByRules(cssFromDOM);\n      tag.insertRules(componentId, cssRules);\n    }\n\n    /* remove old HTMLStyleElements, since they have been rehydrated */\n    for (var _i = 0, _len = els.length; _i < _len; _i += 1) {\n      var el = els[_i];\n      if (el.parentNode) {\n        el.parentNode.removeChild(el);\n      }\n    }\n  });\n\n  if (immediateRehydration) rehydrate();\n\n  return _extends({}, tag, {\n    /* add rehydration hook to insertion methods */\n    insertMarker: function insertMarker(id) {\n      rehydrate();\n      return tag.insertMarker(id);\n    },\n    insertRules: function insertRules(id, cssRules, name) {\n      rehydrate();\n      return tag.insertRules(id, cssRules, name);\n    }\n  });\n};\n\n// \n\nvar SPLIT_REGEX = /\\s+/;\n\n/* determine the maximum number of components before tags are sharded */\nvar MAX_SIZE = void 0;\nif (IS_BROWSER) {\n  /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */\n  MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000;\n} else {\n  /* for servers we do not need to shard at all */\n  MAX_SIZE = -1;\n}\n\nvar sheetRunningId = 0;\nvar master = void 0;\n\nvar StyleSheet = function () {\n  /* a map from ids to tags */\n  /* deferred rules for a given id */\n  /* this is used for not reinjecting rules via hasNameForId() */\n  /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */\n  /* a list of tags belonging to this StyleSheet */\n  /* a tag for import rules */\n  /* current capacity until a new tag must be created */\n  /* children (aka clones) of this StyleSheet inheriting all and future injections */\n\n  function StyleSheet() {\n    var _this = this;\n\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null;\n    var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    classCallCheck(this, StyleSheet);\n\n    this.getImportRuleTag = function () {\n      var importRuleTag = _this.importRuleTag;\n\n      if (importRuleTag !== undefined) {\n        return importRuleTag;\n      }\n\n      var firstTag = _this.tags[0];\n      var insertBefore = true;\n\n      return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore);\n    };\n\n    sheetRunningId += 1;\n    this.id = sheetRunningId;\n    this.forceServer = forceServer;\n    this.target = forceServer ? null : target;\n    this.tagMap = {};\n    this.deferred = {};\n    this.rehydratedNames = {};\n    this.ignoreRehydratedNames = {};\n    this.tags = [];\n    this.capacity = 1;\n    this.clones = [];\n  }\n\n  /* rehydrate all SSR'd style tags */\n\n\n  StyleSheet.prototype.rehydrate = function rehydrate() {\n    if (!IS_BROWSER || this.forceServer) {\n      return this;\n    }\n\n    var els = [];\n    var extracted = [];\n    var isStreamed = false;\n\n    /* retrieve all of our SSR style elements from the DOM */\n    var nodes = document.querySelectorAll('style[' + SC_ATTR + ']');\n    var nodesSize = nodes.length;\n\n    /* abort rehydration if no previous style tags were found */\n    if (nodesSize === 0) {\n      return this;\n    }\n\n    for (var i = 0; i < nodesSize; i += 1) {\n      // $FlowFixMe: We can trust that all elements in this query are style elements\n      var el = nodes[i];\n\n      /* check if style tag is a streamed tag */\n      if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR);\n\n      /* retrieve all component names */\n      var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX);\n      var elNamesSize = elNames.length;\n      for (var j = 0; j < elNamesSize; j += 1) {\n        var name = elNames[j];\n        /* add rehydrated name to sheet to avoid readding styles */\n        this.rehydratedNames[name] = true;\n      }\n\n      /* extract all components and their CSS */\n      extracted.push.apply(extracted, extractComps(el.textContent));\n\n      /* store original HTMLStyleElement */\n      els.push(el);\n    }\n\n    /* abort rehydration if nothing was extracted */\n    var extractedSize = extracted.length;\n    if (extractedSize === 0) {\n      return this;\n    }\n\n    /* create a tag to be used for rehydration */\n    var tag = this.makeTag(null);\n    var rehydrationTag = makeRehydrationTag(tag, els, extracted, isStreamed);\n\n    /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */\n    this.capacity = Math.max(1, MAX_SIZE - extractedSize);\n    this.tags.push(rehydrationTag);\n\n    /* retrieve all component ids */\n    for (var _j = 0; _j < extractedSize; _j += 1) {\n      this.tagMap[extracted[_j].componentId] = rehydrationTag;\n    }\n\n    return this;\n  };\n\n  /* retrieve a \"master\" instance of StyleSheet which is typically used when no other is available\n   * The master StyleSheet is targeted by injectGlobal, keyframes, and components outside of any\n    * StyleSheetManager's context */\n\n\n  /* reset the internal \"master\" instance */\n  StyleSheet.reset = function reset() {\n    var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    master = new StyleSheet(undefined, forceServer).rehydrate();\n  };\n\n  /* adds \"children\" to the StyleSheet that inherit all of the parents' rules\n   * while their own rules do not affect the parent */\n\n\n  StyleSheet.prototype.clone = function clone() {\n    var sheet = new StyleSheet(this.target, this.forceServer);\n\n    /* add to clone array */\n    this.clones.push(sheet);\n\n    /* clone all tags */\n    sheet.tags = this.tags.map(function (tag) {\n      var ids = tag.getIds();\n      var newTag = tag.clone();\n\n      /* reconstruct tagMap */\n      for (var i = 0; i < ids.length; i += 1) {\n        sheet.tagMap[ids[i]] = newTag;\n      }\n\n      return newTag;\n    });\n\n    /* clone other maps */\n    sheet.rehydratedNames = _extends({}, this.rehydratedNames);\n    sheet.deferred = _extends({}, this.deferred);\n\n    return sheet;\n  };\n\n  /* force StyleSheet to create a new tag on the next injection */\n\n\n  StyleSheet.prototype.sealAllTags = function sealAllTags() {\n    this.capacity = 1;\n\n    this.tags.forEach(function (tag) {\n      // eslint-disable-next-line no-param-reassign\n      tag.sealed = true;\n    });\n  };\n\n  StyleSheet.prototype.makeTag = function makeTag$$1(tag) {\n    var lastEl = tag ? tag.styleTag : null;\n    var insertBefore = false;\n\n    return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag);\n  };\n\n  /* get a tag for a given componentId, assign the componentId to one, or shard */\n  StyleSheet.prototype.getTagForId = function getTagForId(id) {\n    /* simply return a tag, when the componentId was already assigned one */\n    var prev = this.tagMap[id];\n    if (prev !== undefined && !prev.sealed) {\n      return prev;\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */\n    this.capacity -= 1;\n\n    if (this.capacity === 0) {\n      this.capacity = MAX_SIZE;\n      tag = this.makeTag(tag);\n      this.tags.push(tag);\n    }\n\n    return this.tagMap[id] = tag;\n  };\n\n  /* mainly for injectGlobal to check for its id */\n\n\n  StyleSheet.prototype.hasId = function hasId(id) {\n    return this.tagMap[id] !== undefined;\n  };\n\n  /* caching layer checking id+name to already have a corresponding tag and injected rules */\n\n\n  StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) {\n    /* exception for rehydrated names which are checked separately */\n    if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) {\n      return true;\n    }\n\n    var tag = this.tagMap[id];\n    return tag !== undefined && tag.hasNameForId(id, name);\n  };\n\n  /* registers a componentId and registers it on its tag */\n\n\n  StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) {\n    /* don't inject when the id is already registered */\n    if (this.tagMap[id] !== undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].deferredInject(id, cssRules);\n    }\n\n    this.getTagForId(id).insertMarker(id);\n    this.deferred[id] = cssRules;\n  };\n\n  /* injects rules for a given id with a name that will need to be cached */\n\n\n  StyleSheet.prototype.inject = function inject(id, cssRules, name) {\n    var clones = this.clones;\n\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].inject(id, cssRules, name);\n    }\n\n    var tag = this.getTagForId(id);\n\n    /* add deferred rules for component */\n    if (this.deferred[id] !== undefined) {\n      // Combine passed cssRules with previously deferred CSS rules\n      // NOTE: We cannot mutate the deferred array itself as all clones\n      // do the same (see clones[i].inject)\n      var rules = this.deferred[id].concat(cssRules);\n      tag.insertRules(id, rules, name);\n\n      this.deferred[id] = undefined;\n    } else {\n      tag.insertRules(id, cssRules, name);\n    }\n  };\n\n  /* removes all rules for a given id, which doesn't remove its marker but resets it */\n\n\n  StyleSheet.prototype.remove = function remove(id) {\n    var tag = this.tagMap[id];\n    if (tag === undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].remove(id);\n    }\n\n    /* remove all rules from the tag */\n    tag.removeRules(id);\n    /* ignore possible rehydrated names */\n    this.ignoreRehydratedNames[id] = true;\n    /* delete possible deferred rules */\n    this.deferred[id] = undefined;\n  };\n\n  StyleSheet.prototype.toHTML = function toHTML() {\n    return this.tags.map(function (tag) {\n      return tag.toHTML();\n    }).join('');\n  };\n\n  StyleSheet.prototype.toReactElements = function toReactElements() {\n    var id = this.id;\n\n\n    return this.tags.map(function (tag, i) {\n      var key = 'sc-' + id + '-' + i;\n      return cloneElement(tag.toElement(), { key: key });\n    });\n  };\n\n  createClass(StyleSheet, null, [{\n    key: 'master',\n    get: function get$$1() {\n      return master || (master = new StyleSheet().rehydrate());\n    }\n\n    /* NOTE: This is just for backwards-compatibility with jest-styled-components */\n\n  }, {\n    key: 'instance',\n    get: function get$$1() {\n      return StyleSheet.master;\n    }\n  }]);\n  return StyleSheet;\n}();\n\nvar _StyleSheetManager$ch;\n\nvar StyleSheetManager = function (_Component) {\n  inherits(StyleSheetManager, _Component);\n\n  function StyleSheetManager() {\n    classCallCheck(this, StyleSheetManager);\n    return possibleConstructorReturn(this, _Component.apply(this, arguments));\n  }\n\n  StyleSheetManager.prototype.getChildContext = function getChildContext() {\n    var _ref;\n\n    return _ref = {}, _ref[CONTEXT_KEY] = this.sheetInstance, _ref;\n  };\n\n  StyleSheetManager.prototype.componentWillMount = function componentWillMount() {\n    if (this.props.sheet) {\n      this.sheetInstance = this.props.sheet;\n    } else if (this.props.target) {\n      this.sheetInstance = new StyleSheet(this.props.target);\n    } else {\n      throw new StyledComponentsError(4);\n    }\n  };\n\n  StyleSheetManager.prototype.render = function render() {\n    /* eslint-disable react/prop-types */\n    // Flow v0.43.1 will report an error accessing the `children` property,\n    // but v0.47.0 will not. It is necessary to use a type cast instead of\n    // a \"fixme\" comment to satisfy both Flow versions.\n    return React.Children.only(this.props.children);\n  };\n\n  return StyleSheetManager;\n}(Component);\n\nStyleSheetManager.childContextTypes = (_StyleSheetManager$ch = {}, _StyleSheetManager$ch[CONTEXT_KEY] = PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]).isRequired, _StyleSheetManager$ch);\nprocess.env.NODE_ENV !== \"production\" ? StyleSheetManager.propTypes = {\n  sheet: PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]),\n  target: PropTypes.shape({\n    appendChild: PropTypes.func.isRequired\n  })\n} : void 0;\n\n// \n\nvar ServerStyleSheet = function () {\n  function ServerStyleSheet() {\n    classCallCheck(this, ServerStyleSheet);\n\n    /* The master sheet might be reset, so keep a reference here */\n    this.masterSheet = StyleSheet.master;\n    this.instance = this.masterSheet.clone();\n    this.closed = false;\n  }\n\n  ServerStyleSheet.prototype.complete = function complete() {\n    if (!this.closed) {\n      /* Remove closed StyleSheets from the master sheet */\n      var index = this.masterSheet.clones.indexOf(this.instance);\n      this.masterSheet.clones.splice(index, 1);\n      this.closed = true;\n    }\n  };\n\n  ServerStyleSheet.prototype.collectStyles = function collectStyles(children) {\n    if (this.closed) {\n      throw new StyledComponentsError(2);\n    }\n\n    return React.createElement(\n      StyleSheetManager,\n      { sheet: this.instance },\n      children\n    );\n  };\n\n  ServerStyleSheet.prototype.getStyleTags = function getStyleTags() {\n    this.complete();\n    return this.instance.toHTML();\n  };\n\n  ServerStyleSheet.prototype.getStyleElement = function getStyleElement() {\n    this.complete();\n    return this.instance.toReactElements();\n  };\n\n  ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) {\n    var _this = this;\n\n    {\n      throw new StyledComponentsError(3);\n    }\n\n    /* the tag index keeps track of which tags have already been emitted */\n    var instance = this.instance;\n\n    var instanceTagIndex = 0;\n\n    var streamAttr = SC_STREAM_ATTR + '=\"true\"';\n\n    var transformer = new stream.Transform({\n      transform: function appendStyleChunks(chunk, /* encoding */_, callback) {\n        var tags = instance.tags;\n\n        var html = '';\n\n        /* retrieve html for each new style tag */\n        for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {\n          var tag = tags[instanceTagIndex];\n          html += tag.toHTML(streamAttr);\n        }\n\n        /* force our StyleSheets to emit entirely new tags */\n        instance.sealAllTags();\n\n        /* prepend style html to chunk */\n        this.push(html + chunk);\n        callback();\n      }\n    });\n\n    readableStream.on('end', function () {\n      return _this.complete();\n    });\n    readableStream.on('error', function (err) {\n      _this.complete();\n\n      // forward the error to the transform stream\n      transformer.emit('error', err);\n    });\n\n    return readableStream.pipe(transformer);\n  };\n\n  return ServerStyleSheet;\n}();\n\n// \n\nvar LIMIT = 200;\n\nvar createWarnTooManyClasses = (function (displayName) {\n  var generatedClasses = {};\n  var warningSeen = false;\n\n  return function (className) {\n    if (!warningSeen) {\n      generatedClasses[className] = true;\n      if (Object.keys(generatedClasses).length >= LIMIT) {\n        // Unable to find latestRule in test environment.\n        /* eslint-disable no-console, prefer-template */\n        console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \\n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' + 'Example:\\n' + '  const Component = styled.div.attrs({\\n' + '    style: ({ background }) => ({\\n' + '      background,\\n' + '    }),\\n' + '  })`width: 100%;`\\n\\n' + '  <Component />');\n        warningSeen = true;\n        generatedClasses = {};\n      }\n    }\n  };\n});\n\n// \n\nvar determineTheme = (function (props, fallbackTheme, defaultProps) {\n  // Props should take precedence over ThemeProvider, which should take precedence over\n  // defaultProps, but React automatically puts defaultProps on props.\n\n  /* eslint-disable react/prop-types */\n  var isDefaultTheme = defaultProps && props.theme === defaultProps.theme;\n  var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme;\n  /* eslint-enable */\n\n  return theme;\n});\n\n// \nvar escapeRegex = /[[\\].#*$><+~=|^:(),\"'`-]+/g;\nvar dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nfunction escape(str) {\n  return str\n  // Replace all possible CSS selectors\n  .replace(escapeRegex, '-')\n\n  // Remove extraneous hyphens at the start and end\n  .replace(dashesAtEnds, '');\n}\n\n// \n\nfunction getComponentName(target) {\n  return target.displayName || target.name || 'Component';\n}\n\n// \n\nfunction isTag(target) /* : %checks */{\n  return typeof target === 'string';\n}\n\n// \n\nfunction generateDisplayName(target) {\n  return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')';\n}\n\n// \n/* eslint-disable max-len */\n/**\n * Trying to avoid the unknown-prop errors on styled components by filtering by\n * React's attribute whitelist.\n *\n * To regenerate this regex:\n *\n * 1. `npm i -g regexgen` (https://github.com/devongovett/regexgen)\n * 2. Run `regexgen` with the list of space-separated words below as input\n * 3. Surround the emitted regex with this: `/^(GENERATED_REGEX)$/` -- this will ensure a full string match\n *    and no false positives from partials\n * */\n/*\nchildren dangerouslySetInnerHTML key ref autoFocus defaultValue valueLink defaultChecked checkedLink innerHTML suppressContentEditableWarning onFocusIn onFocusOut className onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown onKeyPress onKeyUp onFocus onBlur onChange onInput onInvalid onSubmit onReset onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onAnimationStart onAnimationEnd onAnimationIteration onTransitionEnd onCopyCapture onCutCapture onPasteCapture onCompositionEndCapture onCompositionStartCapture onCompositionUpdateCapture onKeyDownCapture onKeyPressCapture onKeyUpCapture onFocusCapture onBlurCapture onChangeCapture onInputCapture onSubmitCapture onResetCapture onClickCapture onContextMenuCapture onDoubleClickCapture onDragCapture onDragEndCapture onDragEnterCapture onDragExitCapture onDragLeaveCapture onDragOverCapture onDragStartCapture onDropCapture onMouseDownCapture onMouseEnterCapture onMouseLeaveCapture onMouseMoveCapture onMouseOutCapture onMouseOverCapture onMouseUpCapture onSelectCapture onTouchCancelCapture onTouchEndCapture onTouchMoveCapture onTouchStartCapture onScrollCapture onWheelCapture onAbortCapture onCanPlayCapture onCanPlayThroughCapture onDurationChangeCapture onEmptiedCapture onEncryptedCapture onEndedCapture onErrorCapture onLoadedDataCapture onLoadedMetadataCapture onLoadStartCapture onPauseCapture onPlayCapture onPlayingCapture onProgressCapture onRateChangeCapture onSeekedCapture onSeekingCapture onStalledCapture onSuspendCapture onTimeUpdateCapture onVolumeChangeCapture onWaitingCapture onLoadCapture onAnimationStartCapture onAnimationEndCapture onAnimationIterationCapture onTransitionEndCapture accept acceptCharset accessKey action allowFullScreen allowTransparency alt as async autoComplete autoPlay capture cellPadding cellSpacing charSet challenge checked cite classID className cols colSpan content contentEditable contextMenu controlsList controls coords crossOrigin data dateTime default defer dir disabled download draggable encType form formAction formEncType formMethod formNoValidate formTarget frameBorder headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media mediaGroup method min minLength multiple muted name nonce noValidate open optimum pattern placeholder playsInline poster preload profile radioGroup readOnly referrerPolicy rel required reversed role rows rowSpan sandbox scope scoped scrolling seamless selected shape size sizes span spellCheck src srcDoc srcLang srcSet start step style summary tabIndex target title type useMap value width wmode wrap about datatype inlist prefix property resource typeof vocab autoCapitalize autoCorrect autoSave color itemProp itemScope itemType itemID itemRef results security unselectable accentHeight accumulate additive alignmentBaseline allowReorder alphabetic amplitude arabicForm ascent attributeName attributeType autoReverse azimuth baseFrequency baseProfile baselineShift bbox begin bias by calcMode capHeight clip clipPath clipRule clipPathUnits colorInterpolation colorInterpolationFilters colorProfile colorRendering contentScriptType contentStyleType cursor cx cy d decelerate descent diffuseConstant direction display divisor dominantBaseline dur dx dy edgeMode elevation enableBackground end exponent externalResourcesRequired fill fillOpacity fillRule filter filterRes filterUnits floodColor floodOpacity focusable fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight format from fx fy g1 g2 glyphName glyphOrientationHorizontal glyphOrientationVertical glyphRef gradientTransform gradientUnits hanging horizAdvX horizOriginX ideographic imageRendering in in2 intercept k k1 k2 k3 k4 kernelMatrix kernelUnitLength kerning keyPoints keySplines keyTimes lengthAdjust letterSpacing lightingColor limitingConeAngle local markerEnd markerMid markerStart markerHeight markerUnits markerWidth mask maskContentUnits maskUnits mathematical mode numOctaves offset opacity operator order orient orientation origin overflow overlinePosition overlineThickness paintOrder panose1 pathLength patternContentUnits patternTransform patternUnits pointerEvents points pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits r radius refX refY renderingIntent repeatCount repeatDur requiredExtensions requiredFeatures restart result rotate rx ry scale seed shapeRendering slope spacing specularConstant specularExponent speed spreadMethod startOffset stdDeviation stemh stemv stitchTiles stopColor stopOpacity strikethroughPosition strikethroughThickness string stroke strokeDasharray strokeDashoffset strokeLinecap strokeLinejoin strokeMiterlimit strokeOpacity strokeWidth surfaceScale systemLanguage tableValues targetX targetY textAnchor textDecoration textRendering textLength to transform u1 u2 underlinePosition underlineThickness unicode unicodeBidi unicodeRange unitsPerEm vAlphabetic vHanging vIdeographic vMathematical values vectorEffect version vertAdvY vertOriginX vertOriginY viewBox viewTarget visibility widths wordSpacing writingMode x xHeight x1 x2 xChannelSelector xlinkActuate xlinkArcrole xlinkHref xlinkRole xlinkShow xlinkTitle xlinkType xmlBase xmlns xmlnsXlink xmlLang xmlSpace y y1 y2 yChannelSelector z zoomAndPan onPointerDown onPointerMove onPointerUp onPointerCancel onGotPointerCapture onLostPointerCapture onPointerEnter onPointerLeave onPointerOver onPointerOut class for autofocus\n*/\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_REGEX = /^((?:s(?:uppressContentEditableWarn|croll|pac)|(?:shape|image|text)Render|(?:letter|word)Spac|vHang|hang)ing|(?:on(?:AnimationIteration|C(?:o(?:mposition(?:Update|Start|End)|ntextMenu|py)|anPlayThrough|anPlay|hange|lick|ut)|(?:Animation|Touch|Load|Drag)Start|(?:(?:Duration|Volume|Rate)Chang|(?:MouseLea|(?:Touch|Mouse)Mo|DragLea)v|Paus)e|Loaded(?:Metad|D)ata|(?:(?:T(?:ransition|ouch)|Animation)E|Suspe)nd|DoubleClick|(?:TouchCanc|Whe)el|Lo(?:stPointer|ad)|TimeUpdate|(?:Mouse(?:Ent|Ov)e|Drag(?:Ent|Ov)e|Erro)r|GotPointer|MouseDown|(?:E(?:n(?:crypt|d)|mpti)|S(?:tall|eek))ed|KeyPress|(?:MouseOu|DragExi|S(?:elec|ubmi)|Rese|Inpu)t|P(?:rogress|laying)|DragEnd|Key(?:Down|Up)|(?:MouseU|Dro)p|(?:Wait|Seek)ing|Scroll|Focus|Paste|Abort|Drag|Play|Blur)Captur|alignmentBaselin|(?:limitingConeAng|xlink(?:(?:Arcr|R)o|Tit)|s(?:urfaceSca|ty|ca)|unselectab|baseProfi|fontSty|(?:focus|dragg)ab|multip|profi|tit)l|d(?:ominantBaselin|efaultValu)|onPointerLeav|a(?:uto(?:Capitaliz|Revers|Sav)|dditiv)|(?:(?:formNoValid|xlinkActu|noValid|accumul|rot)a|autoComple|decelera)t|(?:(?:attribute|item)T|datat)yp|onPointerMov|(?:attribute|glyph)Nam|playsInlin|(?:writing|input|edge)Mod|(?:formE|e)ncTyp|(?:amplitu|mo)d|(?:xlinkTy|itemSco|keyTy|slo)p|(?:xmlSpa|non)c|fillRul|(?:dateTi|na)m|r(?:esourc|ol)|xmlBas|wmod)e|(?:glyphOrientationHorizont|loc)al|(?:externalResourcesRequir|select|revers|mut)ed|c(?:o(?:lorInterpolationFilter|ord)s|o(?:lor(?:Interpolation)?|nt(?:rols|ent))|(?:ontentS(?:cript|tyle)Typ|o(?:ntentEditab|lorProfi)l|l(?:assNam|ipRul)|a(?:lcMod|ptur)|it)e|olorRendering|l(?:ipPathUnits|assID)|(?:ontrolsLis|apHeigh)t|h(?:eckedLink|a(?:llenge|rSet)|ildren|ecked)|ell(?:Spac|Padd)ing|o(?:ntextMenu|ls)|(?:rossOrigi|olSpa)n|l(?:ip(?:Path)?|ass)|ursor|[xy])|glyphOrientationVertical|d(?:angerouslySetInnerHTML|efaultChecked|ownload|isabled|isplay|[xy])|(?:s(?:trikethroughThickn|eaml)es|(?:und|ov)erlineThicknes|r(?:equiredExtension|adiu)|(?:requiredFeatur|tableValu|stitchTil|numOctav|filterR)e|key(?:(?:Splin|Tim)e|Param)|auto[Ff]ocu|header|bia)s|(?:(?:st(?:rikethroughPosi|dDevia)|(?:und|ov)erlinePosi|(?:textDecor|elev)a|orienta)tio|(?:strokeLinejo|orig)i|on(?:PointerDow|FocusI)|formActio|zoomAndPa|directio|(?:vers|act)io|rowSpa|begi|ico)n|o(?:n(?:AnimationIteration|C(?:o(?:mposition(?:Update|Start|End)|ntextMenu|py)|anPlayThrough|anPlay|hange|lick|ut)|(?:(?:Duration|Volume|Rate)Chang|(?:MouseLea|(?:Touch|Mouse)Mo|DragLea)v|Paus)e|Loaded(?:Metad|D)ata|(?:Animation|Touch|Load|Drag)Start|(?:(?:T(?:ransition|ouch)|Animation)E|Suspe)nd|DoubleClick|(?:TouchCanc|Whe)el|(?:Mouse(?:Ent|Ov)e|Drag(?:Ent|Ov)e|Erro)r|TimeUpdate|(?:E(?:n(?:crypt|d)|mpti)|S(?:tall|eek))ed|MouseDown|P(?:rogress|laying)|(?:MouseOu|DragExi|S(?:elec|ubmi)|Rese|Inpu)t|KeyPress|DragEnd|Key(?:Down|Up)|(?:Wait|Seek)ing|(?:MouseU|Dro)p|Scroll|Paste|Focus|Abort|Drag|Play|Load|Blur)|rient)|p(?:reserveA(?:spectRatio|lpha)|ointsAt[X-Z]|anose1)|(?:patternContent|ma(?:sk(?:Content)?|rker)|primitive|gradient|pattern|filter)Units|(?:(?:allowTranspar|baseFrequ)enc|re(?:ferrerPolic|adOnl)|(?:(?:st(?:roke|op)O|floodO|fillO|o)pac|integr|secur)it|visibilit|fontFamil|accessKe|propert|summar)y|(?:gradientT|patternT|t)ransform|(?:[xy]ChannelSelect|lightingCol|textAnch|floodCol|stopCol|operat|htmlF)or|(?:strokeMiterlimi|(?:specularConsta|repeatCou|fontVaria)n|(?:(?:specularE|e)xpon|renderingInt|asc)en|d(?:iffuseConsta|esce)n|(?:fontSizeAdju|lengthAdju|manife)s|baselineShif|onPointerOu|vectorEffec|(?:(?:mar(?:ker|gin)|x)H|accentH|fontW)eigh|markerStar|a(?:utoCorrec|bou)|onFocusOu|intercep|restar|forma|inlis|heigh|lis)t|(?:(?:st(?:rokeDasho|artO)|o)ffs|acceptChars|formTarg|viewTarg|srcS)et|k(?:ernel(?:UnitLength|Matrix)|[1-4])|(?:(?:enableBackgrou|markerE)n|s(?:p(?:readMetho|ee)|ee)|formMetho|(?:markerM|onInval)i|preloa|metho|kin)d|strokeDasharray|(?:onPointerCanc|lab)el|(?:allowFullScre|hidd)en|systemLanguage|(?:(?:o(?:nPointer(?:Ent|Ov)|rd)|allowReord|placehold|frameBord|paintOrd|post)e|repeatDu|d(?:efe|u))r|v(?:Mathematical|ert(?:Origin[XY]|AdvY)|alues|ocab)|(?:pointerEve|keyPoi)nts|(?:strokeLineca|onPointerU|itemPro|useMa|wra|loo)p|h(?:oriz(?:Origin|Adv)X|ttpEquiv)|(?:vI|i)deographic|unicodeRange|mathematical|vAlphabetic|u(?:nicodeBidi|[12])|(?:fontStretc|hig)h|(?:(?:mar(?:ker|gin)W|strokeW)id|azimu)th|(?:xmlnsXl|valueL)ink|mediaGroup|spellCheck|(?:text|m(?:in|ax))Length|(?:unitsPerE|optimu|fro)m|r(?:adioGroup|e(?:sults|f[XY]|l)|ows|[xy])|a(?:rabicForm|l(?:phabetic|t)|sync)|pathLength|innerHTML|xlinkShow|(?:xlinkHr|glyphR)ef|(?:tabInde|(?:sand|b)bo|viewBo)x|(?:(?:href|xml|src)La|kerni)ng|autoPlay|o(?:verflow|pen)|f(?:o(?:ntSize|rm?)|il(?:ter|l))|r(?:e(?:quired|sult|f))?|divisor|p(?:attern|oints)|unicode|d(?:efault|ata|ir)?|i(?:temRef|n2|s)|t(?:arget[XY]|o)|srcDoc|s(?:coped|te(?:m[hv]|p)|pan)|(?:width|size)s|prefix|typeof|itemID|s(?:t(?:roke|art)|hape|cope|rc)|t(?:arget|ype)|(?:stri|la)ng|a(?:ccept|s)|m(?:edia|a(?:sk|x)|in)|x(?:mlns)?|width|value|size|href|k(?:ey)?|end|low|by|i[dn]|y[12]|g[12]|x[12]|f[xy]|[yz])$/;\n\n/* From DOMProperty */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nvar isCustomAttribute = RegExp.prototype.test.bind(new RegExp('^(x|data|aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'));\n\nvar validAttr = (function (name) {\n  return ATTRIBUTE_REGEX.test(name) || isCustomAttribute(name.toLowerCase());\n});\n\n// \n\nfunction hasInInheritanceChain(child, parent) {\n  var target = child;\n\n  while (target) {\n    target = Object.getPrototypeOf(target);\n\n    if (target && target === parent) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n// \n/**\n * Creates a broadcast that can be listened to, i.e. simple event emitter\n *\n * @see https://github.com/ReactTraining/react-broadcast\n */\n\nvar createBroadcast = function createBroadcast(initialState) {\n  var listeners = {};\n  var id = 0;\n  var state = initialState;\n\n  function publish(nextState) {\n    state = nextState;\n\n    // eslint-disable-next-line guard-for-in, no-restricted-syntax\n    for (var key in listeners) {\n      var listener = listeners[key];\n      if (listener === undefined) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      listener(state);\n    }\n  }\n\n  function subscribe(listener) {\n    var currentId = id;\n    listeners[currentId] = listener;\n    id += 1;\n    listener(state);\n    return currentId;\n  }\n\n  function unsubscribe(unsubID) {\n    listeners[unsubID] = undefined;\n  }\n\n  return { publish: publish, subscribe: subscribe, unsubscribe: unsubscribe };\n};\n\nvar _contextShape, _ThemeProvider$contex;\n\n// NOTE: DO NOT CHANGE, changing this is a semver major change!\nvar CHANNEL = '__styled-components__';\nvar CHANNEL_NEXT = CHANNEL + 'next__';\n\nvar CONTEXT_CHANNEL_SHAPE = PropTypes.shape({\n  getTheme: PropTypes.func,\n  subscribe: PropTypes.func,\n  unsubscribe: PropTypes.func\n});\n\nvar contextShape = (_contextShape = {}, _contextShape[CHANNEL] = PropTypes.func, _contextShape[CHANNEL_NEXT] = CONTEXT_CHANNEL_SHAPE, _contextShape);\n\nvar warnChannelDeprecated = void 0;\nif (process.env.NODE_ENV !== 'production') {\n  warnChannelDeprecated = once(function () {\n    // eslint-disable-next-line no-console\n    console.warn('Warning: Usage of `context.' + CHANNEL + '` as a function is deprecated. It will be replaced with the object on `.context.' + CHANNEL_NEXT + '` in a future version.');\n  });\n}\n\nvar isFunction = function isFunction(test) {\n  return typeof test === 'function';\n};\n\n/**\n * Provide a theme to an entire react component tree via context and event listeners (have to do\n * both context and event emitter as pure components block context updates)\n */\n\nvar ThemeProvider = function (_Component) {\n  inherits(ThemeProvider, _Component);\n\n  function ThemeProvider() {\n    classCallCheck(this, ThemeProvider);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this));\n\n    _this.unsubscribeToOuterId = -1;\n\n    _this.getTheme = _this.getTheme.bind(_this);\n    return _this;\n  }\n\n  ThemeProvider.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n\n    // If there is a ThemeProvider wrapper anywhere around this theme provider, merge this theme\n    // with the outer theme\n    var outerContext = this.context[CHANNEL_NEXT];\n    if (outerContext !== undefined) {\n      this.unsubscribeToOuterId = outerContext.subscribe(function (theme) {\n        _this2.outerTheme = theme;\n\n        if (_this2.broadcast !== undefined) {\n          _this2.publish(_this2.props.theme);\n        }\n      });\n    }\n\n    this.broadcast = createBroadcast(this.getTheme());\n  };\n\n  ThemeProvider.prototype.getChildContext = function getChildContext() {\n    var _this3 = this,\n        _babelHelpers$extends;\n\n    return _extends({}, this.context, (_babelHelpers$extends = {}, _babelHelpers$extends[CHANNEL_NEXT] = {\n      getTheme: this.getTheme,\n      subscribe: this.broadcast.subscribe,\n      unsubscribe: this.broadcast.unsubscribe\n    }, _babelHelpers$extends[CHANNEL] = function (subscriber) {\n      if (process.env.NODE_ENV !== 'production') {\n        warnChannelDeprecated();\n      }\n\n      // Patch the old `subscribe` provide via `CHANNEL` for older clients.\n      var unsubscribeId = _this3.broadcast.subscribe(subscriber);\n      return function () {\n        return _this3.broadcast.unsubscribe(unsubscribeId);\n      };\n    }, _babelHelpers$extends));\n  };\n\n  ThemeProvider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    if (this.props.theme !== nextProps.theme) {\n      this.publish(nextProps.theme);\n    }\n  };\n\n  ThemeProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n    if (this.unsubscribeToOuterId !== -1) {\n      this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeToOuterId);\n    }\n  };\n\n  // Get the theme from the props, supporting both (outerTheme) => {} as well as object notation\n\n\n  ThemeProvider.prototype.getTheme = function getTheme(passedTheme) {\n    var theme = passedTheme || this.props.theme;\n\n    if (isFunction(theme)) {\n      var mergedTheme = theme(this.outerTheme);\n\n      if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) {\n        throw new StyledComponentsError(7);\n      }\n\n      return mergedTheme;\n    }\n\n    if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') {\n      throw new StyledComponentsError(8);\n    }\n\n    return _extends({}, this.outerTheme, theme);\n  };\n\n  ThemeProvider.prototype.publish = function publish(theme) {\n    this.broadcast.publish(this.getTheme(theme));\n  };\n\n  ThemeProvider.prototype.render = function render() {\n    if (!this.props.children) {\n      return null;\n    }\n\n    return React.Children.only(this.props.children);\n  };\n\n  return ThemeProvider;\n}(Component);\n\nThemeProvider.childContextTypes = contextShape;\nThemeProvider.contextTypes = (_ThemeProvider$contex = {}, _ThemeProvider$contex[CHANNEL_NEXT] = CONTEXT_CHANNEL_SHAPE, _ThemeProvider$contex);\n\nvar _babelHelpers$extends;\n\n// HACK for generating all static styles without needing to allocate\n// an empty execution context every single time...\nvar STATIC_EXECUTION_CONTEXT = {};\n\nvar modifiedContextShape = _extends({}, contextShape, (_babelHelpers$extends = {}, _babelHelpers$extends[CONTEXT_KEY] = PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]), _babelHelpers$extends));\n\nvar identifiers = {};\n\n/* We depend on components having unique IDs */\nvar generateId = function generateId(ComponentStyle, _displayName, parentComponentId) {\n  var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName);\n\n  /**\n   * This ensures uniqueness if two components happen to share\n   * the same displayName.\n   */\n  var nr = (identifiers[displayName] || 0) + 1;\n  identifiers[displayName] = nr;\n\n  var componentId = displayName + '-' + ComponentStyle.generateName(displayName + nr);\n\n  return parentComponentId !== undefined ? parentComponentId + '-' + componentId : componentId;\n};\n\nvar warnExtendDeprecated = function warnExtendDeprecated() {};\nif (process.env.NODE_ENV !== 'production') {\n  warnExtendDeprecated = once(function () {\n    // eslint-disable-next-line no-console\n    console.warn('Warning: The \"extend\" API will be removed in the upcoming v4.0 release. Use styled(StyledComponent) instead. You can find more information here: https://github.com/styled-components/styled-components/issues/1546');\n  });\n}\n\n// $FlowFixMe\n\nvar BaseStyledComponent = function (_Component) {\n  inherits(BaseStyledComponent, _Component);\n\n  function BaseStyledComponent() {\n    var _temp, _this, _ret;\n\n    classCallCheck(this, BaseStyledComponent);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.attrs = {}, _this.state = {\n      theme: null,\n      generatedClassName: ''\n    }, _this.unsubscribeId = -1, _temp), possibleConstructorReturn(_this, _ret);\n  }\n\n  BaseStyledComponent.prototype.unsubscribeFromContext = function unsubscribeFromContext() {\n    if (this.unsubscribeId !== -1) {\n      this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeId);\n    }\n  };\n\n  BaseStyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props) {\n    var attrs = this.constructor.attrs;\n\n    var context = _extends({}, props, { theme: theme });\n    if (attrs === undefined) {\n      return context;\n    }\n\n    this.attrs = Object.keys(attrs).reduce(function (acc, key) {\n      var attr = attrs[key];\n\n      // eslint-disable-next-line no-param-reassign\n      acc[key] = typeof attr === 'function' && !hasInInheritanceChain(attr, Component) ? attr(context) : attr;\n      return acc;\n    }, {});\n\n    return _extends({}, context, this.attrs);\n  };\n\n  BaseStyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {\n    var _constructor = this.constructor,\n        attrs = _constructor.attrs,\n        componentStyle = _constructor.componentStyle,\n        warnTooManyClasses = _constructor.warnTooManyClasses;\n\n    var styleSheet = this.context[CONTEXT_KEY] || StyleSheet.master;\n\n    // statically styled-components don't need to build an execution context object,\n    // and shouldn't be increasing the number of class names\n    if (componentStyle.isStatic && attrs === undefined) {\n      return componentStyle.generateAndInjectStyles(STATIC_EXECUTION_CONTEXT, styleSheet);\n    } else {\n      var executionContext = this.buildExecutionContext(theme, props);\n      var className = componentStyle.generateAndInjectStyles(executionContext, styleSheet);\n\n      if (process.env.NODE_ENV !== 'production' && warnTooManyClasses !== undefined) {\n        warnTooManyClasses(className);\n      }\n\n      return className;\n    }\n  };\n\n  BaseStyledComponent.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n\n    var componentStyle = this.constructor.componentStyle;\n\n    var styledContext = this.context[CHANNEL_NEXT];\n\n    // If this is a statically-styled component, we don't need to the theme\n    // to generate or build styles.\n    if (componentStyle.isStatic) {\n      var generatedClassName = this.generateAndInjectStyles(STATIC_EXECUTION_CONTEXT, this.props);\n      this.setState({ generatedClassName: generatedClassName });\n      // If there is a theme in the context, subscribe to the event emitter. This\n      // is necessary due to pure components blocking context updates, this circumvents\n      // that by updating when an event is emitted\n    } else if (styledContext !== undefined) {\n      var subscribe = styledContext.subscribe;\n\n      this.unsubscribeId = subscribe(function (nextTheme) {\n        // This will be called once immediately\n        var theme = determineTheme(_this2.props, nextTheme, _this2.constructor.defaultProps);\n\n        var generatedClassName = _this2.generateAndInjectStyles(theme, _this2.props);\n\n        _this2.setState({ theme: theme, generatedClassName: generatedClassName });\n      });\n    } else {\n      // eslint-disable-next-line react/prop-types\n      var theme = this.props.theme || EMPTY_OBJECT;\n      var _generatedClassName = this.generateAndInjectStyles(theme, this.props);\n      this.setState({ theme: theme, generatedClassName: _generatedClassName });\n    }\n  };\n\n  BaseStyledComponent.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    var _this3 = this;\n\n    // If this is a statically-styled component, we don't need to listen to\n    // props changes to update styles\n    var componentStyle = this.constructor.componentStyle;\n\n    if (componentStyle.isStatic) {\n      return;\n    }\n\n    this.setState(function (prevState) {\n      var theme = determineTheme(nextProps, prevState.theme, _this3.constructor.defaultProps);\n      var generatedClassName = _this3.generateAndInjectStyles(theme, nextProps);\n\n      return { theme: theme, generatedClassName: generatedClassName };\n    });\n  };\n\n  BaseStyledComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.unsubscribeFromContext();\n  };\n\n  BaseStyledComponent.prototype.render = function render() {\n    // eslint-disable-next-line react/prop-types\n    var innerRef = this.props.innerRef;\n    var generatedClassName = this.state.generatedClassName;\n    var _constructor2 = this.constructor,\n        styledComponentId = _constructor2.styledComponentId,\n        target = _constructor2.target;\n\n\n    var isTargetTag = isTag(target);\n\n    var className = [\n    // eslint-disable-next-line react/prop-types\n    this.props.className, styledComponentId, this.attrs.className, generatedClassName].filter(Boolean).join(' ');\n\n    var baseProps = _extends({}, this.attrs, {\n      className: className\n    });\n\n    if (isStyledComponent(target)) {\n      baseProps.innerRef = innerRef;\n    } else {\n      baseProps.ref = innerRef;\n    }\n\n    var propsForElement = baseProps;\n    var key = void 0;\n\n    for (key in this.props) {\n      // Don't pass through non HTML tags through to HTML elements\n      // always omit innerRef\n      if (key !== 'innerRef' && key !== 'className' && (!isTargetTag || validAttr(key))) {\n        propsForElement[key] = key === 'style' && key in this.attrs ? _extends({}, this.attrs[key], this.props[key]) : this.props[key];\n      }\n    }\n\n    return createElement(target, propsForElement);\n  };\n\n  return BaseStyledComponent;\n}(Component);\n\nvar _StyledComponent = (function (ComponentStyle, constructWithOptions) {\n  var createStyledComponent = function createStyledComponent(target, options, rules) {\n    var _options$isClass = options.isClass,\n        isClass = _options$isClass === undefined ? !isTag(target) : _options$isClass,\n        _options$displayName = options.displayName,\n        displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName,\n        _options$componentId = options.componentId,\n        componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId,\n        _options$ParentCompon = options.ParentComponent,\n        ParentComponent = _options$ParentCompon === undefined ? BaseStyledComponent : _options$ParentCompon,\n        extendingRules = options.rules,\n        attrs = options.attrs;\n\n\n    var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId;\n\n    var componentStyle = new ComponentStyle(extendingRules === undefined ? rules : extendingRules.concat(rules), attrs, styledComponentId);\n\n    var StyledComponent = function (_ParentComponent) {\n      inherits(StyledComponent, _ParentComponent);\n\n      function StyledComponent() {\n        classCallCheck(this, StyledComponent);\n        return possibleConstructorReturn(this, _ParentComponent.apply(this, arguments));\n      }\n\n      StyledComponent.withComponent = function withComponent(tag) {\n        var previousComponentId = options.componentId,\n            optionsToCopy = objectWithoutProperties(options, ['componentId']);\n\n\n        var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag)));\n\n        var newOptions = _extends({}, optionsToCopy, {\n          componentId: newComponentId,\n          ParentComponent: StyledComponent\n        });\n\n        return createStyledComponent(tag, newOptions, rules);\n      };\n\n      createClass(StyledComponent, null, [{\n        key: 'extend',\n        get: function get$$1() {\n          var rulesFromOptions = options.rules,\n              parentComponentId = options.componentId,\n              optionsToCopy = objectWithoutProperties(options, ['rules', 'componentId']);\n\n\n          var newRules = rulesFromOptions === undefined ? rules : rulesFromOptions.concat(rules);\n\n          var newOptions = _extends({}, optionsToCopy, {\n            rules: newRules,\n            parentComponentId: parentComponentId,\n            ParentComponent: StyledComponent\n          });\n\n          warnExtendDeprecated();\n\n          return constructWithOptions(createStyledComponent, target, newOptions);\n        }\n      }]);\n      return StyledComponent;\n    }(ParentComponent);\n\n    StyledComponent.attrs = attrs;\n    StyledComponent.componentStyle = componentStyle;\n    StyledComponent.contextTypes = modifiedContextShape;\n    StyledComponent.displayName = displayName;\n    StyledComponent.styledComponentId = styledComponentId;\n    StyledComponent.target = target;\n\n\n    if (process.env.NODE_ENV !== 'production') {\n      StyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName);\n    }\n\n    if (isClass) {\n      hoistStatics(StyledComponent, target, {\n        // all SC-specific things should not be hoisted\n        attrs: true,\n        componentStyle: true,\n        displayName: true,\n        extend: true,\n        styledComponentId: true,\n        target: true,\n        warnTooManyClasses: true,\n        withComponent: true\n      });\n    }\n\n    return StyledComponent;\n  };\n\n  return createStyledComponent;\n});\n\n// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\nfunction murmurhash(str) {\n  var l = str.length | 0,\n      h = l | 0,\n      i = 0,\n      k;\n\n  while (l >= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    k ^= k >>> 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\n    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n\n    l -= 4;\n    ++i;\n  }\n\n  switch (l) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  }\n\n  h ^= h >>> 13;\n  h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  h ^= h >>> 15;\n\n  return h >>> 0;\n}\n\n// \n\nvar areStylesCacheable = IS_BROWSER;\n\nvar isStaticRules = function isStaticRules(rules, attrs) {\n  for (var i = 0, len = rules.length; i < len; i += 1) {\n    var rule = rules[i];\n\n    // recursive case\n    if (Array.isArray(rule) && !isStaticRules(rule)) {\n      return false;\n    } else if (typeof rule === 'function' && !isStyledComponent(rule)) {\n      // functions are allowed to be static if they're just being\n      // used to get the classname of a nested styled component\n      return false;\n    }\n  }\n\n  if (attrs !== undefined) {\n    // eslint-disable-next-line guard-for-in, no-restricted-syntax\n    for (var key in attrs) {\n      if (typeof attrs[key] === 'function') {\n        return false;\n      }\n    }\n  }\n\n  return true;\n};\n\nvar isHMREnabled = typeof module !== 'undefined' && module.hot && process.env.NODE_ENV !== 'production';\n\n/*\n ComponentStyle is all the CSS-specific stuff, not\n the React-specific stuff.\n */\nvar _ComponentStyle = (function (nameGenerator, flatten, stringifyRules) {\n  /* combines hashStr (murmurhash) and nameGenerator for convenience */\n  var generateRuleHash = function generateRuleHash(str) {\n    return nameGenerator(murmurhash(str));\n  };\n\n  var ComponentStyle = function () {\n    function ComponentStyle(rules, attrs, componentId) {\n      classCallCheck(this, ComponentStyle);\n\n      this.rules = rules;\n      this.isStatic = !isHMREnabled && isStaticRules(rules, attrs);\n      this.componentId = componentId;\n\n      if (!StyleSheet.master.hasId(componentId)) {\n        var placeholder = process.env.NODE_ENV !== 'production' ? ['.' + componentId + ' {}'] : [];\n\n        StyleSheet.master.deferredInject(componentId, placeholder);\n      }\n    }\n\n    /*\n     * Flattens a rule set into valid CSS\n     * Hashes it, wraps the whole chunk in a .hash1234 {}\n     * Returns the hash to be injected on render()\n     * */\n\n\n    ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) {\n      var isStatic = this.isStatic,\n          componentId = this.componentId,\n          lastClassName = this.lastClassName;\n\n      if (areStylesCacheable && isStatic && lastClassName !== undefined && styleSheet.hasNameForId(componentId, lastClassName)) {\n        return lastClassName;\n      }\n\n      var flatCSS = flatten(this.rules, executionContext);\n      var name = generateRuleHash(this.componentId + flatCSS.join(''));\n\n      if (!styleSheet.hasNameForId(componentId, name)) {\n        styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name), name);\n      }\n\n      this.lastClassName = name;\n      return name;\n    };\n\n    ComponentStyle.generateName = function generateName(str) {\n      return generateRuleHash(str);\n    };\n\n    return ComponentStyle;\n  }();\n\n  return ComponentStyle;\n});\n\n// \n// Thanks to ReactDOMFactories for this handy list!\n\nvar domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n\n// SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// \n\nvar _styled = (function (styledComponent, constructWithOptions) {\n  var styled = function styled(tag) {\n    return constructWithOptions(styledComponent, tag);\n  };\n\n  // Shorthands for all valid HTML Elements\n  domElements.forEach(function (domElement) {\n    styled[domElement] = styled(domElement);\n  });\n\n  return styled;\n});\n\n// \n\nvar replaceWhitespace = function replaceWhitespace(str) {\n  return str.replace(/\\s|\\\\n/g, '');\n};\n\nvar _keyframes = (function (nameGenerator, stringifyRules, css) {\n  return function () {\n    var styleSheet = StyleSheet.master;\n    var rules = css.apply(undefined, arguments);\n    var name = nameGenerator(murmurhash(replaceWhitespace(JSON.stringify(rules))));\n    var id = 'sc-keyframes-' + name;\n\n    if (!styleSheet.hasNameForId(id, name)) {\n      styleSheet.inject(id, stringifyRules(rules, name, '@keyframes'), name);\n    }\n\n    return name;\n  };\n});\n\n// \n\nvar _injectGlobal = (function (stringifyRules, css) {\n  var injectGlobal = function injectGlobal() {\n    var styleSheet = StyleSheet.master;\n    var rules = css.apply(undefined, arguments);\n    var hash = murmurhash(JSON.stringify(rules));\n    var id = 'sc-global-' + hash;\n\n    if (!styleSheet.hasId(id)) {\n      styleSheet.inject(id, stringifyRules(rules));\n    }\n  };\n\n  return injectGlobal;\n});\n\n// \n\nvar _constructWithOptions = (function (css) {\n  var constructWithOptions = function constructWithOptions(componentConstructor, tag) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n    if (!isValidElementType(tag)) {\n      throw new StyledComponentsError(1, String(tag));\n    }\n\n    /* This is callable directly as a template function */\n    // $FlowFixMe: Not typed to avoid destructuring arguments\n    var templateFunction = function templateFunction() {\n      return componentConstructor(tag, options, css.apply(undefined, arguments));\n    };\n\n    /* If config methods are called, wrap up a new template function and merge options */\n    templateFunction.withConfig = function (config) {\n      return constructWithOptions(componentConstructor, tag, _extends({}, options, config));\n    };\n    templateFunction.attrs = function (attrs) {\n      return constructWithOptions(componentConstructor, tag, _extends({}, options, {\n        attrs: _extends({}, options.attrs || EMPTY_OBJECT, attrs)\n      }));\n    };\n\n    return templateFunction;\n  };\n\n  return constructWithOptions;\n});\n\n// \n\nvar withTheme = (function (Component$$1) {\n  var isStatelessFunctionalComponent = typeof Component$$1 === 'function' &&\n  // $FlowFixMe TODO: flow for prototype\n  !(Component$$1.prototype && 'isReactComponent' in Component$$1.prototype);\n\n  // NOTE: We can't pass a ref to a stateless functional component\n  var shouldSetInnerRef = isStyledComponent(Component$$1) || isStatelessFunctionalComponent;\n\n  var WithTheme = function (_React$Component) {\n    inherits(WithTheme, _React$Component);\n\n    function WithTheme() {\n      var _temp, _this, _ret;\n\n      classCallCheck(this, WithTheme);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = EMPTY_OBJECT, _this.unsubscribeId = -1, _temp), possibleConstructorReturn(_this, _ret);\n    }\n\n    // NOTE: This is so that isStyledComponent passes for the innerRef unwrapping\n\n\n    WithTheme.prototype.componentWillMount = function componentWillMount() {\n      var _this2 = this;\n\n      var defaultProps = this.constructor.defaultProps;\n\n      var styledContext = this.context[CHANNEL_NEXT];\n      var themeProp = determineTheme(this.props, undefined, defaultProps);\n      if (styledContext === undefined && themeProp === undefined && process.env.NODE_ENV !== 'production') {\n        // eslint-disable-next-line no-console\n        console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps');\n      } else if (styledContext === undefined && themeProp !== undefined) {\n        this.setState({ theme: themeProp });\n      } else {\n        var subscribe = styledContext.subscribe;\n\n        this.unsubscribeId = subscribe(function (nextTheme) {\n          var theme = determineTheme(_this2.props, nextTheme, defaultProps);\n          _this2.setState({ theme: theme });\n        });\n      }\n    };\n\n    WithTheme.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var defaultProps = this.constructor.defaultProps;\n\n      this.setState(function (oldState) {\n        var theme = determineTheme(nextProps, oldState.theme, defaultProps);\n\n        return { theme: theme };\n      });\n    };\n\n    WithTheme.prototype.componentWillUnmount = function componentWillUnmount() {\n      if (this.unsubscribeId !== -1) {\n        this.context[CHANNEL_NEXT].unsubscribe(this.unsubscribeId);\n      }\n    };\n\n    WithTheme.prototype.render = function render() {\n      var props = _extends({\n        theme: this.state.theme\n      }, this.props);\n\n      if (!shouldSetInnerRef) {\n        props.ref = props.innerRef;\n        delete props.innerRef;\n      }\n\n      return React.createElement(Component$$1, props);\n    };\n\n    return WithTheme;\n  }(React.Component);\n\n  WithTheme.contextTypes = contextShape;\n  WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')';\n  WithTheme.styledComponentId = 'withTheme';\n\n\n  return hoistStatics(WithTheme, Component$$1);\n});\n\n// \n\n/* eslint-disable */\nvar __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = {\n  StyleSheet: StyleSheet\n};\n\n// \n\n/* Warning if you've imported this file on React Native */\nif (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n  // eslint-disable-next-line no-console\n  console.warn(\"It looks like you've imported 'styled-components' on React Native.\\n\" + \"Perhaps you're looking to import 'styled-components/native'?\\n\" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native');\n}\n\n/* Warning if there are several instances of styled-components */\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) {\n  window['__styled-components-init__'] = window['__styled-components-init__'] || 0;\n\n  if (window['__styled-components-init__'] === 1) {\n    // eslint-disable-next-line no-console\n    console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. \" + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\\n\\n' + 'See https://s-c.sh/2BAXzed for more info.');\n  }\n\n  window['__styled-components-init__'] += 1;\n}\n\n/* Instantiate singletons */\nvar ComponentStyle = _ComponentStyle(generateAlphabeticName, flatten, stringifyRules);\nvar constructWithOptions = _constructWithOptions(css);\nvar StyledComponent = _StyledComponent(ComponentStyle, constructWithOptions);\n\n/* Instantiate exported singletons */\nvar keyframes = _keyframes(generateAlphabeticName, stringifyRules, css);\nvar injectGlobal = _injectGlobal(stringifyRules, css);\nvar styled = _styled(StyledComponent, constructWithOptions);\n\nexport default styled;\nexport { css, keyframes, injectGlobal, isStyledComponent, consolidateStreamedStyles, ThemeProvider, withTheme, ServerStyleSheet, StyleSheetManager, __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS };\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n","// @flow\n\n/**\n * Returns a new {@code Promise} which settles when a specific {@code Promise}\n * settles and is automatically rejected if the specified {@code Promise}\n * doesn't settle within a specific time interval.\n *\n * @param {Promise} promise - The {@code Promise} for which automatic rejecting\n * after the specified timeout is to be implemented.\n * @param {number} timeout - The number of milliseconds to wait the specified\n * {@code promise} to settle before automatically rejecting the returned\n * {@code Promise}.\n * @returns {Promise} - A new {@code Promise} which settles when the specified\n * {@code promise} settles and is automatically rejected after {@code timeout}\n * milliseconds.\n */\nexport function timeoutPromise<T>(\n        promise: Promise<T>,\n        timeout: number\n): Promise<T> {\n    return new Promise((resolve, reject) => {\n        const timeoutID\n            = setTimeout(() => reject(new Error('timeout')), timeout);\n\n        promise.then(\n            /* onFulfilled */ value => {\n                resolve(value);\n                clearTimeout(timeoutID);\n            },\n            /* onRejected */ reason => {\n                reject(reason);\n                clearTimeout(timeoutID);\n            }\n        );\n    });\n}\n","import { timeoutPromise } from './timeoutPromise';\n\n/**\n * The number of milliseconds before deciding that we need retry a fetch request.\n *\n * @type {number}\n */\nconst RETRY_TIMEOUT = 3000;\n\n/**\n * Wrapper around fetch GET requests to handle json-ifying the response\n * and logging errors.\n *\n * @param {string} url - The URL to perform a GET against.\n * @param {?boolean} retry - Whether the request will be retried after short timeout.\n * @returns {Promise<Object>} The response body, in JSON format, will be\n * through the Promise.\n */\nexport function doGetJSON(url, retry) {\n    const fetchPromise = fetch(url)\n        .then(response => {\n            const jsonify = response.json();\n\n            if (response.ok) {\n                return jsonify;\n            }\n\n            return jsonify\n                .then(result => Promise.reject(result));\n        });\n\n    if (retry) {\n        return timeoutPromise(fetchPromise, RETRY_TIMEOUT)\n            .catch(response => {\n                if (response.status >= 400 && response.status < 500) {\n                    return Promise.reject(response);\n                }\n\n                return timeoutPromise(fetchPromise, RETRY_TIMEOUT);\n            });\n    }\n\n    return fetchPromise;\n}\n","// @flow\n\ndeclare var JitsiMeetJS: Object;\n\n/**\n * Loads a script from a specific URL. The script will be interpreted upon load.\n *\n * @param {string} url - The url to be loaded.\n * @returns {Promise} Resolved with no arguments when the script is loaded and\n * rejected with the error from JitsiMeetJS.ScriptUtil.loadScript method.\n */\nexport function loadScript(url: string): Promise<void> {\n    return new Promise((resolve, reject) =>\n        JitsiMeetJS.util.ScriptUtil.loadScript(\n            url,\n            /* async */ true,\n            /* prepend */ false,\n            /* relativeURL */ false,\n            /* loadCallback */ resolve,\n            /* errorCallback */ reject));\n}\n","// @flow\n\n/**\n * Opens URL in the browser.\n *\n * @param {string} url - The URL to be opened.\n * @param {boolean} openInNewTab - If the link should be opened in a new tab.\n * @returns {void}\n */\nexport function openURLInBrowser(url: string, openInNewTab?: boolean) {\n    const target = openInNewTab ? '_blank' : '';\n\n    window.open(url, target, 'noopener');\n}\n","// @flow\n\nimport { parseURLParams } from './parseURLParams';\nimport { normalizeNFKC } from './strings';\n\n/**\n * The app linking scheme.\n * TODO: This should be read from the manifest files later.\n */\nexport const APP_LINK_SCHEME = 'org.jitsi.meet:';\n\n/**\n * A list of characters to be excluded/removed from the room component/segment\n * of a conference/meeting URI/URL. The list is based on RFC 3986 and the jxmpp\n * library utilized by jicofo.\n */\nconst _ROOM_EXCLUDE_PATTERN = '[\\\\:\\\\?#\\\\[\\\\]@!$&\\'()*+,;=></\"]';\n\n/**\n * The {@link RegExp} pattern of the authority of a URI.\n *\n * @private\n * @type {string}\n */\nconst _URI_AUTHORITY_PATTERN = '(//[^/?#]+)';\n\n/**\n * The {@link RegExp} pattern of the path of a URI.\n *\n * @private\n * @type {string}\n */\nconst _URI_PATH_PATTERN = '([^?#]*)';\n\n/**\n * The {@link RegExp} pattern of the protocol of a URI.\n *\n * FIXME: The URL class exposed by JavaScript will not include the colon in\n * the protocol field. Also in other places (at the time of this writing:\n * the DeepLinkingMobilePage.js) the APP_LINK_SCHEME does not include\n * the double dots, so things are inconsistent.\n *\n * @type {string}\n */\nexport const URI_PROTOCOL_PATTERN = '^([a-z][a-z0-9\\\\.\\\\+-]*:)';\n\n/**\n * Excludes/removes certain characters from a specific path part which are\n * incompatible with Jitsi Meet on the client and/or server sides. The main\n * use case for this method is to clean up the room name and the tenant.\n *\n * @param {?string} pathPart - The path part to fix.\n * @private\n * @returns {?string}\n */\nfunction _fixPathPart(pathPart: ?string) {\n    return pathPart\n        ? pathPart.replace(new RegExp(_ROOM_EXCLUDE_PATTERN, 'g'), '')\n        : pathPart;\n}\n\n/**\n * Fixes the scheme part of a specific URI (string) so that it contains a\n * well-known scheme such as HTTP(S). For example, the mobile app implements an\n * app-specific URI scheme in addition to Universal Links. The app-specific\n * scheme may precede or replace the well-known scheme. In such a case, dealing\n * with the app-specific scheme only complicates the logic and it is simpler to\n * get rid of it (by translating the app-specific scheme into a well-known\n * scheme).\n *\n * @param {string} uri - The URI (string) to fix the scheme of.\n * @private\n * @returns {string}\n */\nfunction _fixURIStringScheme(uri: string) {\n    const regex = new RegExp(`${URI_PROTOCOL_PATTERN}+`, 'gi');\n    const match: Array<string> | null = regex.exec(uri);\n\n    if (match) {\n        // As an implementation convenience, pick up the last scheme and make\n        // sure that it is a well-known one.\n        let protocol = match[match.length - 1].toLowerCase();\n\n        if (protocol !== 'http:' && protocol !== 'https:') {\n            protocol = 'https:';\n        }\n\n        /* eslint-disable no-param-reassign */\n\n        uri = uri.substring(regex.lastIndex);\n        if (uri.startsWith('//')) {\n            // The specified URL was not a room name only, it contained an\n            // authority.\n            uri = protocol + uri;\n        }\n\n        /* eslint-enable no-param-reassign */\n    }\n\n    return uri;\n}\n\n/**\n * Converts a path to a backend-safe format, by splitting the path '/' processing each part.\n * Properly lowercased and url encoded.\n *\n * @param {string?} path - The path to convert.\n * @returns {string?}\n */\nexport function getBackendSafePath(path: ?string): ?string {\n    if (!path) {\n        return path;\n    }\n\n    return path\n        .split('/')\n        .map(getBackendSafeRoomName)\n        .join('/');\n}\n\n/**\n * Converts a room name to a backend-safe format. Properly lowercased and url encoded.\n *\n * @param {string?} room - The room name to convert.\n * @returns {string?}\n */\nexport function getBackendSafeRoomName(room: ?string): ?string {\n    if (!room) {\n        return room;\n    }\n\n    /* eslint-disable no-param-reassign */\n    try {\n        // We do not know if we get an already encoded string at this point\n        // as different platforms do it differently, but we need a decoded one\n        // for sure. However since decoding a non-encoded string is a noop, we're safe\n        // doing it here.\n        room = decodeURIComponent(room);\n    } catch (e) {\n        // This can happen though if we get an unencoded string and it contains\n        // some characters that look like an encoded entity, but it's not.\n        // But in this case we're fine goin on...\n    }\n\n    // Normalize the character set.\n    room = normalizeNFKC(room);\n\n    // Only decoded and normalized strings can be lowercased properly.\n    room = room.toLowerCase();\n\n    // But we still need to (re)encode it.\n    room = encodeURIComponent(room);\n    /* eslint-enable no-param-reassign */\n\n    // Unfortunately we still need to lowercase it, because encoding a string will\n    // add some uppercase characters, but some backend services\n    // expect it to be full lowercase. However lowercasing an encoded string\n    // doesn't change the string value.\n    return room.toLowerCase();\n}\n\n/**\n * Gets the (Web application) context root defined by a specific location (URI).\n *\n * @param {Object} location - The location (URI) which defines the (Web\n * application) context root.\n * @public\n * @returns {string} - The (Web application) context root defined by the\n * specified {@code location} (URI).\n */\nexport function getLocationContextRoot({ pathname }: { pathname: string }) {\n    const contextRootEndIndex = pathname.lastIndexOf('/');\n\n    return (\n        contextRootEndIndex === -1\n            ? '/'\n            : pathname.substring(0, contextRootEndIndex + 1));\n}\n\n/**\n * Constructs a new {@code Array} with URL parameter {@code String}s out of a\n * specific {@code Object}.\n *\n * @param {Object} obj - The {@code Object} to turn into URL parameter\n * {@code String}s.\n * @returns {Array<string>} The {@code Array} with URL parameter {@code String}s\n * constructed out of the specified {@code obj}.\n */\nfunction _objectToURLParamsArray(obj = {}) {\n    const params = [];\n\n    for (const key in obj) { // eslint-disable-line guard-for-in\n        try {\n            params.push(\n                `${key}=${encodeURIComponent(JSON.stringify(obj[key]))}`);\n        } catch (e) {\n            console.warn(`Error encoding ${key}: ${e}`);\n        }\n    }\n\n    return params;\n}\n\n/**\n * Parses a specific URI string into an object with the well-known properties of\n * the {@link Location} and/or {@link URL} interfaces implemented by Web\n * browsers. The parsing attempts to be in accord with IETF's RFC 3986.\n *\n * @param {string} str - The URI string to parse.\n * @public\n * @returns {{\n *     hash: string,\n *     host: (string|undefined),\n *     hostname: (string|undefined),\n *     pathname: string,\n *     port: (string|undefined),\n *     protocol: (string|undefined),\n *     search: string\n * }}\n */\nexport function parseStandardURIString(str: string) {\n    /* eslint-disable no-param-reassign */\n\n    const obj: Object = {\n        toString: _standardURIToString\n    };\n\n    let regex;\n    let match: Array<string> | null;\n\n    // XXX A URI string as defined by RFC 3986 does not contain any whitespace.\n    // Usually, a browser will have already encoded any whitespace. In order to\n    // avoid potential later problems related to whitespace in URI, strip any\n    // whitespace. Anyway, the Jitsi Meet app is not known to utilize unencoded\n    // whitespace so the stripping is deemed safe.\n    str = str.replace(/\\s/g, '');\n\n    // protocol\n    regex = new RegExp(URI_PROTOCOL_PATTERN, 'gi');\n    match = regex.exec(str);\n    if (match) {\n        obj.protocol = match[1].toLowerCase();\n        str = str.substring(regex.lastIndex);\n    }\n\n    // authority\n    regex = new RegExp(`^${_URI_AUTHORITY_PATTERN}`, 'gi');\n    match = regex.exec(str);\n    if (match) {\n        let authority: string = match[1].substring(/* // */ 2);\n\n        str = str.substring(regex.lastIndex);\n\n        // userinfo\n        const userinfoEndIndex = authority.indexOf('@');\n\n        if (userinfoEndIndex !== -1) {\n            authority = authority.substring(userinfoEndIndex + 1);\n        }\n\n        obj.host = authority;\n\n        // port\n        const portBeginIndex = authority.lastIndexOf(':');\n\n        if (portBeginIndex !== -1) {\n            obj.port = authority.substring(portBeginIndex + 1);\n            authority = authority.substring(0, portBeginIndex);\n        }\n\n        // hostname\n        obj.hostname = authority;\n    }\n\n    // pathname\n    regex = new RegExp(`^${_URI_PATH_PATTERN}`, 'gi');\n    match = regex.exec(str);\n\n    let pathname: ?string;\n\n    if (match) {\n        pathname = match[1];\n        str = str.substring(regex.lastIndex);\n    }\n    if (pathname) {\n        pathname.startsWith('/') || (pathname = `/${pathname}`);\n    } else {\n        pathname = '/';\n    }\n    obj.pathname = pathname;\n\n    // query\n    if (str.startsWith('?')) {\n        let hashBeginIndex = str.indexOf('#', 1);\n\n        if (hashBeginIndex === -1) {\n            hashBeginIndex = str.length;\n        }\n        obj.search = str.substring(0, hashBeginIndex);\n        str = str.substring(hashBeginIndex);\n    } else {\n        obj.search = ''; // Google Chrome\n    }\n\n    // fragment\n    obj.hash = str.startsWith('#') ? str : '';\n\n    /* eslint-enable no-param-reassign */\n\n    return obj;\n}\n\n/**\n * Parses a specific URI which (supposedly) references a Jitsi Meet resource\n * (location).\n *\n * @param {(string|undefined)} uri - The URI to parse which (supposedly)\n * references a Jitsi Meet resource (location).\n * @public\n * @returns {{\n *     contextRoot: string,\n *     hash: string,\n *     host: string,\n *     hostname: string,\n *     pathname: string,\n *     port: string,\n *     protocol: string,\n *     room: (string|undefined),\n *     search: string\n * }}\n */\nexport function parseURIString(uri: ?string) {\n    if (typeof uri !== 'string') {\n        return undefined;\n    }\n\n    const obj = parseStandardURIString(_fixURIStringScheme(uri));\n\n    // XXX While the components/segments of pathname are URI encoded, Jitsi Meet\n    // on the client and/or server sides still don't support certain characters.\n    obj.pathname = obj.pathname.split('/').map(pathPart => _fixPathPart(pathPart))\n        .join('/');\n\n    // Add the properties that are specific to a Jitsi Meet resource (location)\n    // such as contextRoot, room:\n\n    // contextRoot\n    obj.contextRoot = getLocationContextRoot(obj);\n\n    // The room (name) is the last component/segment of pathname.\n    const { pathname } = obj;\n\n    const contextRootEndIndex = pathname.lastIndexOf('/');\n\n    obj.room = pathname.substring(contextRootEndIndex + 1) || undefined;\n\n    if (contextRootEndIndex > 1) {\n        // The part of the pathname from the beginning to the room name is the tenant.\n        obj.tenant = pathname.substring(1, contextRootEndIndex);\n    }\n\n    return obj;\n}\n\n/**\n * Implements {@code href} and {@code toString} for the {@code Object} returned\n * by {@link #parseStandardURIString}.\n *\n * @param {Object} [thiz] - An {@code Object} returned by\n * {@code #parseStandardURIString} if any; otherwise, it is presumed that the\n * function is invoked on such an instance.\n * @returns {string}\n */\nfunction _standardURIToString(thiz: ?Object) {\n    // eslint-disable-next-line no-invalid-this\n    const { hash, host, pathname, protocol, search } = thiz || this;\n    let str = '';\n\n    protocol && (str += protocol);\n\n    // TODO userinfo\n\n    host && (str += `//${host}`);\n    str += pathname || '/';\n    search && (str += search);\n    hash && (str += hash);\n\n    return str;\n}\n\n/**\n * Sometimes we receive strings that we don't know if already percent-encoded, or not, due to the\n * various sources we get URLs or room names. This function encapsulates the decoding in a safe way.\n *\n * @param {string} text - The text to decode.\n * @returns {string}\n */\nexport function safeDecodeURIComponent(text: string) {\n    try {\n        return decodeURIComponent(text);\n    } catch (e) {\n        // The text wasn't encoded.\n    }\n\n    return text;\n}\n\n/**\n * Attempts to return a {@code String} representation of a specific\n * {@code Object} which is supposed to represent a URL. Obviously, if a\n * {@code String} is specified, it is returned. If a {@code URL} is specified,\n * its {@code URL#href} is returned. Additionally, an {@code Object} similar to\n * the one accepted by the constructor of Web's ExternalAPI is supported on both\n * mobile/React Native and Web/React.\n *\n * @param {Object|string} obj - The URL to return a {@code String}\n * representation of.\n * @returns {string} - A {@code String} representation of the specified\n * {@code obj} which is supposed to represent a URL.\n */\nexport function toURLString(obj: ?(Object | string)): ?string {\n    let str;\n\n    switch (typeof obj) {\n    case 'object':\n        if (obj) {\n            if (obj instanceof URL) {\n                str = obj.href;\n            } else {\n                str = urlObjectToString(obj);\n            }\n        }\n        break;\n\n    case 'string':\n        str = String(obj);\n        break;\n    }\n\n    return str;\n}\n\n/**\n * Attempts to return a {@code String} representation of a specific\n * {@code Object} similar to the one accepted by the constructor\n * of Web's ExternalAPI.\n *\n * @param {Object} o - The URL to return a {@code String} representation of.\n * @returns {string} - A {@code String} representation of the specified\n * {@code Object}.\n */\nexport function urlObjectToString(o: Object): ?string {\n    // First normalize the given url. It come as o.url or split into o.serverURL\n    // and o.room.\n    let tmp;\n\n    if (o.serverURL && o.room) {\n        tmp = new URL(o.room, o.serverURL).toString();\n    } else if (o.room) {\n        tmp = o.room;\n    } else {\n        tmp = o.url || '';\n    }\n\n    const url = parseStandardURIString(_fixURIStringScheme(tmp));\n\n    // protocol\n    if (!url.protocol) {\n        let protocol: ?string = o.protocol || o.scheme;\n\n        if (protocol) {\n            // Protocol is supposed to be the scheme and the final ':'. Anyway,\n            // do not make a fuss if the final ':' is not there.\n            protocol.endsWith(':') || (protocol += ':');\n            url.protocol = protocol;\n        }\n    }\n\n    // authority & pathname\n    let { pathname } = url;\n\n    if (!url.host) {\n        // Web's ExternalAPI domain\n        //\n        // It may be host/hostname and pathname with the latter denoting the\n        // tenant.\n        const domain: ?string = o.domain || o.host || o.hostname;\n\n        if (domain) {\n            const { host, hostname, pathname: contextRoot, port }\n                = parseStandardURIString(\n\n                    // XXX The value of domain in supposed to be host/hostname\n                    // and, optionally, pathname. Make sure it is not taken for\n                    // a pathname only.\n                    _fixURIStringScheme(`${APP_LINK_SCHEME}//${domain}`));\n\n            // authority\n            if (host) {\n                url.host = host;\n                url.hostname = hostname;\n                url.port = port;\n            }\n\n            // pathname\n            pathname === '/' && contextRoot !== '/' && (pathname = contextRoot);\n        }\n    }\n\n    // pathname\n\n    // Web's ExternalAPI roomName\n    const room = o.roomName || o.room;\n\n    if (room\n            && (url.pathname.endsWith('/')\n                || !url.pathname.endsWith(`/${room}`))) {\n        pathname.endsWith('/') || (pathname += '/');\n        pathname += room;\n    }\n\n    url.pathname = pathname;\n\n    // query/search\n\n    // Web's ExternalAPI jwt\n    const { jwt } = o;\n\n    if (jwt) {\n        let { search } = url;\n\n        if (search.indexOf('?jwt=') === -1 && search.indexOf('&jwt=') === -1) {\n            search.startsWith('?') || (search = `?${search}`);\n            search.length === 1 || (search += '&');\n            search += `jwt=${jwt}`;\n\n            url.search = search;\n        }\n    }\n\n    // fragment/hash\n\n    let { hash } = url;\n\n    for (const urlPrefix of [ 'config', 'interfaceConfig', 'devices', 'userInfo', 'appData' ]) {\n        const urlParamsArray\n            = _objectToURLParamsArray(\n                o[`${urlPrefix}Overwrite`]\n                    || o[urlPrefix]\n                    || o[`${urlPrefix}Override`]);\n\n        if (urlParamsArray.length) {\n            let urlParamsString\n                = `${urlPrefix}.${urlParamsArray.join(`&${urlPrefix}.`)}`;\n\n            if (hash.length) {\n                urlParamsString = `&${urlParamsString}`;\n            } else {\n                hash = '#';\n            }\n            hash += urlParamsString;\n        }\n    }\n\n    url.hash = hash;\n\n    return url.toString() || undefined;\n}\n\n/**\n * Adds hash params to URL.\n *\n * @param {URL} url - The URL.\n * @param {Object} hashParamsToAdd - A map with the parameters to be set.\n * @returns {URL} - The new URL.\n */\nexport function addHashParamsToURL(url: URL, hashParamsToAdd: Object = {}) {\n    const params = parseURLParams(url);\n    const urlParamsArray = _objectToURLParamsArray({\n        ...params,\n        ...hashParamsToAdd\n    });\n\n    if (urlParamsArray.length) {\n        url.hash = `#${urlParamsArray.join('&')}`;\n    }\n\n    return url;\n}\n\n/**\n * Returns the decoded URI.\n *\n * @param {string} uri - The URI to decode.\n * @returns {string}\n */\nexport function getDecodedURI(uri: string) {\n    return decodeURI(uri.replace(/^https?:\\/\\//i, ''));\n}\n","// @flow\n\n/**\n * Applies NFKC normalization to the given text.\n *\n * @param {string} text - The text that needs to be normalized.\n * @returns {string} - The normalized text.\n */\nexport function normalizeNFKC(text: string) {\n    return text.normalize('NFKC');\n}\n","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  border: 0 !important;\\n  clip: rect(1px, 1px, 1px, 1px) !important;\\n  height: 1px !important;\\n  overflow: hidden !important;\\n  padding: 0 !important;\\n  position: absolute !important;\\n  width: 1px !important;\\n  white-space: nowrap !important;\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport { css } from 'styled-components';\nimport { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = function assistive() {\n  return css(_templateObject());\n};\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n","// @flow\n\nimport Logger, { getLogger as _getLogger } from 'jitsi-meet-logger';\nimport _ from 'lodash';\n\nimport LogTransport from './LogTransport';\n\n/**\n * Options for building the logger. We disable the callee info on RN because it's\n * almost always empty anyway.\n */\nconst DEFAULT_OPTS = {};\nconst DEFAULT_RN_OPTS = { disableCallerInfo: true };\n\n/**\n * Gets a logger for the given id.\n *\n * @param {string} id - Name for the logger.\n * @returns {Object} - The logger object.\n */\nexport function getLogger(id: string) {\n    const opts = navigator.product === 'ReactNative' ? DEFAULT_RN_OPTS : DEFAULT_OPTS;\n\n    return _getLogger(id, undefined, opts);\n}\n\n/**\n * Initializes native logging. This operations must be done as early as possible.\n */\nexport const _initLogging = _.once(() => {\n    if (navigator.product !== 'ReactNative') {\n        return;\n    }\n\n    // Lazy load it to avoid cycles in early web bootstrap code.\n    const { default: JitsiMeetJS } = require('../lib-jitsi-meet/_');\n\n    Logger.setGlobalOptions(DEFAULT_RN_OPTS);\n    JitsiMeetJS.setGlobalLogOptions(DEFAULT_RN_OPTS);\n    Logger.removeGlobalTransport(console);\n    JitsiMeetJS.removeGlobalLogTransport(console);\n    Logger.addGlobalTransport(LogTransport);\n    JitsiMeetJS.addGlobalLogTransport(LogTransport);\n});\n","export * from './components';\nexport * from './functions';\n\nexport { default as Platform } from './Platform';\nexport * from './Types';\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck;","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\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nmodule.exports = _createClass;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _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\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\nmodule.exports = _inherits;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/video-layout');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    createToolbarEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { TILE_VIEW_ENABLED, getFeatureFlag } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport { IconTileView } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { setTileView } from '../actions';\nimport { shouldDisplayTileView } from '../functions';\nimport logger from '../logger';\n\n/**\n * The type of the React {@code Component} props of {@link TileViewButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether or not tile view layout has been enabled as the user preference.\n     */\n    _tileViewEnabled: boolean,\n\n    /**\n     * Used to dispatch actions from the buttons.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * Component that renders a toolbar button for toggling the tile layout view.\n *\n * @extends AbstractButton\n */\nclass TileViewButton<P: Props> extends AbstractButton<P, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.tileView';\n    icon = IconTileView;\n    label = 'toolbar.enterTileView';\n    toggledLabel = 'toolbar.exitTileView';\n    tooltip = 'toolbar.tileViewToggle';\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _tileViewEnabled, dispatch } = this.props;\n        const value = !_tileViewEnabled;\n\n        sendAnalytics(createToolbarEvent(\n            'tileview.button',\n            {\n                'is_enabled': value\n            }));\n\n        logger.debug(`Tile view ${value ? 'enable' : 'disable'}`);\n        dispatch(setTileView(value));\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._tileViewEnabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code TileViewButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component instance.\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const enabled = getFeatureFlag(state, TILE_VIEW_ENABLED, true);\n    const { visible = enabled } = ownProps;\n\n    return {\n        _tileViewEnabled: shouldDisplayTileView(state),\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(TileViewButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport type { StyleType } from '../../styles';\n\nexport type Styles = {\n\n    /**\n     * Style for the item's icon.\n     */\n    iconStyle: StyleType,\n\n    /**\n     * Style for the item's label.\n     */\n    labelStyle: StyleType,\n\n    /**\n     * Style for the item itself.\n     */\n    style: StyleType,\n\n    /**\n     * Color for the item underlay (shows when clicked).\n     */\n    underlayColor: ?string\n};\n\nexport type Props = {\n\n    /**\n     * A succinct description of what the item does. Used by accessibility\n     * tools and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * An extra class name to be added at the end of the element's class name\n     * in order to enable custom styling.\n     */\n    customClass?: string,\n\n    /**\n     * Whether this item is disabled or not. When disabled, clicking an the item\n     * has no effect, and it may reflect on its style.\n     */\n    disabled: boolean,\n\n    /**\n     * A React Element to display at the end of {@code ToolboxItem}.\n     */\n    elementAfter?: React$Node,\n\n    /**\n     * The icon to render for this {@code ToolboxItem}.\n     */\n    icon: Object,\n\n    /**\n     * The text associated with this item. When `showLabel` is set to\n     * {@code true}, it will be displayed alongside the icon.\n     */\n    label: string,\n\n    /**\n     * On click handler.\n     */\n    onClick: Function,\n\n    /**\n     * Whether to show the label or not.\n     */\n    showLabel: boolean,\n\n    /**\n     * Collection of styles for the item. Used only on native.\n     */\n    styles: ?Styles,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: ?Function,\n\n    /**\n     * True if the item is toggled, false otherwise.\n     */\n    toggled: boolean,\n\n    /**\n     * The text to display in the tooltip. Used only on web.\n     */\n    tooltip: ?string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the\n     * item. Used only on web.\n     */\n    tooltipPosition: string,\n\n    /**\n     * Whether this item is visible or not.\n     */\n    visible: boolean\n};\n\n/**\n * Abstract (base) class for an item in {@link Toolbox}. The item can be located\n * anywhere in the {@link Toolbox}, it will morph its shape to accommodate it.\n *\n * @abstract\n */\nexport default class AbstractToolboxItem<P : Props> extends Component<P> {\n    /**\n     * Default values for {@code AbstractToolboxItem} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        disabled: false,\n        label: '',\n        showLabel: false,\n        t: undefined,\n        tooltip: '',\n        tooltipPosition: 'top',\n        visible: true\n    };\n\n    /**\n     * Initializes a new {@code AbstractToolboxItem} instance.\n     *\n     * @param {Object} props - The React {@code Component} props to initialize\n     * the new {@code AbstractToolboxItem} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Helper property to get the item label. If a translation function was\n     * provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get label(): ?string {\n        return this._maybeTranslateAttribute(this.props.label);\n    }\n\n    /**\n     * Helper property to get the item tooltip. If a translation function was\n     * provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get tooltip(): ?string {\n        return this._maybeTranslateAttribute(this.props.tooltip);\n    }\n\n    /**\n     * Helper property to get the item accessibilityLabel. If a translation\n     * function was provided then it will be translated using it.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    get accessibilityLabel(): ?string {\n        return this._maybeTranslateAttribute(this.props.accessibilityLabel);\n    }\n\n    /**\n     * Utility function to translate the given string, if a translation\n     * function is available.\n     *\n     * @param {string} text - What needs translating.\n     * @private\n     * @returns {string}\n     */\n    _maybeTranslateAttribute(text) {\n        const { t } = this.props;\n\n        return typeof t === 'function' ? t(text) : text;\n    }\n\n    _onClick: (*) => void;\n\n    /**\n     * Handles clicking/pressing this {@code AbstractToolboxItem} by\n     * forwarding the event to the {@code onClick} prop of this instance if any.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onClick(...args) {\n        const { disabled, onClick } = this.props;\n\n        disabled || (onClick && onClick(...args));\n    }\n\n    /**\n     * Renders this {@code AbstractToolboxItem} (if it is {@code visible}). To\n     * be implemented/overridden by extenders. The default implementation of\n     * {@code AbstractToolboxItem} does nothing.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderItem() {\n        // To be implemented by a subclass.\n        return null;\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this.props.visible ? this._renderItem() : null;\n    }\n}\n","// @flow\n\nimport React, { Fragment } from 'react';\n\nimport { Icon } from '../../icons';\nimport { Tooltip } from '../../tooltip';\n\nimport AbstractToolboxItem from './AbstractToolboxItem';\nimport type { Props } from './AbstractToolboxItem';\n\n/**\n * Web implementation of {@code AbstractToolboxItem}.\n */\nexport default class ToolboxItem extends AbstractToolboxItem<Props> {\n    /**\n     * Initializes a new {@code ToolboxItem} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * Handles 'Enter' and Space key on the button to trigger onClick for accessibility.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyPress(event) {\n        if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            this.props.onClick();\n        }\n    }\n\n    /**\n     * Handles rendering of the actual item. If the label is being shown, which\n     * is controlled with the `showLabel` prop, the item is rendered for its\n     * display in an overflow menu, otherwise it will only have an icon, which\n     * can be displayed on any toolbar.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderItem() {\n        const {\n            disabled,\n            elementAfter,\n            onClick,\n            showLabel,\n            tooltipPosition,\n            toggled\n        } = this.props;\n        const className = showLabel ? 'overflow-menu-item' : 'toolbox-button';\n        const props = {\n            'aria-pressed': toggled,\n            'aria-disabled': disabled,\n            'aria-label': this.accessibilityLabel,\n            className: className + (disabled ? ' disabled' : ''),\n            onClick: disabled ? undefined : onClick,\n            onKeyPress: this._onKeyPress,\n            tabIndex: 0,\n            role: showLabel ? 'menuitem' : 'button'\n        };\n\n        const elementType = showLabel ? 'li' : 'div';\n        const useTooltip = this.tooltip && this.tooltip.length > 0;\n        let children = (\n            <Fragment>\n                { this._renderIcon() }\n                { showLabel && <span>\n                    { this.label }\n                </span> }\n                { elementAfter }\n            </Fragment>\n        );\n\n        if (useTooltip) {\n            children = (\n                <Tooltip\n                    content = { this.tooltip }\n                    position = { tooltipPosition }>\n                    { children }\n                </Tooltip>\n            );\n        }\n\n        return React.createElement(elementType, props, children);\n    }\n\n    /**\n     * Helper function to render the item's icon.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderIcon() {\n        const { customClass, disabled, icon, showLabel, toggled } = this.props;\n        const iconComponent = <Icon src = { icon } />;\n        const elementType = showLabel ? 'span' : 'div';\n        const className = `${showLabel ? 'overflow-menu-item-icon' : 'toolbox-icon'} ${\n            toggled ? 'toggled' : ''} ${disabled ? 'disabled' : ''} ${customClass ?? ''}`;\n\n        return React.createElement(elementType, { className }, iconComponent);\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { combineStyles } from '../../styles';\n\nimport type { Styles } from './AbstractToolboxItem';\nimport ToolboxItem from './ToolboxItem';\n\nexport type Props = {\n\n    /**\n     * Function to be called after the click handler has been processed.\n     */\n    afterClick: ?Function,\n\n    /**\n     * Extra styles which will be applied in conjunction with `styles` or\n     * `toggledStyles` when the button is disabled;\n     */\n    disabledStyles: ?Styles,\n\n    /**\n     * Whether to show the label or not.\n     */\n    showLabel: boolean,\n\n    /**\n     * Collection of styles for the button.\n     */\n    styles: ?Styles,\n\n    /**\n     * Collection of styles for the button, when in toggled state.\n     */\n    toggledStyles: ?Styles,\n\n    /**\n     * From which direction the tooltip should appear, relative to the button.\n     */\n    tooltipPosition: string,\n\n    /**\n     * Whether this button is visible or not.\n     */\n    visible: boolean\n};\n\n/**\n * Default style for disabled buttons.\n */\nexport const defaultDisabledButtonStyles = {\n    iconStyle: {\n        opacity: 0.5\n    },\n    labelStyle: {\n        opacity: 0.5\n    },\n    style: undefined,\n    underlayColor: undefined\n};\n\n/**\n * An abstract implementation of a button.\n */\nexport default class AbstractButton<P: Props, S: *> extends Component<P, S> {\n    static defaultProps = {\n        afterClick: undefined,\n        disabledStyles: defaultDisabledButtonStyles,\n        showLabel: false,\n        styles: undefined,\n        toggledStyles: undefined,\n        tooltipPosition: 'top',\n        visible: true\n    };\n\n    /**\n     * A succinct description of what the button does. Used by accessibility\n     * tools and torture tests.\n     *\n     * @abstract\n     */\n    accessibilityLabel: string;\n\n    /**\n     * The icon of this button.\n     *\n     * @abstract\n     */\n    icon: Object;\n\n    /**\n     * The text associated with this button. When `showLabel` is set to\n     * {@code true}, it will be displayed alongside the icon.\n     *\n     * @abstract\n     */\n    label: string;\n\n    /**\n     * The label for this button, when toggled.\n     */\n    toggledLabel: string;\n\n    /**\n     * The icon of this button, when toggled.\n     *\n     * @abstract\n     */\n    toggledIcon: Object;\n\n    /**\n     * The text to display in the tooltip. Used only on web.\n     *\n     * @abstract\n     */\n    tooltip: ?string;\n\n    /**\n     * Initializes a new {@code AbstractButton} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code AbstractButton} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which should be used\n     * to handle the button being clicked / pressed.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which may return a\n     * new React Element to be appended at the end of the button.\n     *\n     * @protected\n     * @returns {ReactElement|null}\n     */\n    _getElementAfter() {\n        return null;\n    }\n\n    /**\n     * Gets the current icon, taking the toggled state into account. If no\n     * toggled icon is provided, the regular icon will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getIcon() {\n        return (\n            this._isToggled() ? this.toggledIcon : this.icon\n        ) || this.icon;\n    }\n\n    /**\n     * Gets the current label, taking the toggled state into account. If no\n     * toggled label is provided, the regular label will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getLabel() {\n        return (this._isToggled() ? this.toggledLabel : this.label)\n            || this.label;\n    }\n\n    /**\n     * Gets the current styles, taking the toggled state into account. If no\n     * toggled styles are provided, the regular styles will also be used in the\n     * toggled state.\n     *\n     * @private\n     * @returns {?Styles}\n     */\n    _getStyles(): ?Styles {\n        const { disabledStyles, styles, toggledStyles } = this.props;\n        const buttonStyles\n            = (this._isToggled() ? toggledStyles : styles) || styles;\n\n        if (this._isDisabled() && buttonStyles && disabledStyles) {\n            return {\n                iconStyle: combineStyles(\n                    buttonStyles.iconStyle, disabledStyles.iconStyle),\n                labelStyle: combineStyles(\n                    buttonStyles.labelStyle, disabledStyles.labelStyle),\n                style: combineStyles(\n                    buttonStyles.style, disabledStyles.style),\n                underlayColor:\n                    disabledStyles.underlayColor || buttonStyles.underlayColor\n            };\n        }\n\n        return buttonStyles;\n    }\n\n    /**\n     * Get the tooltip to display when hovering over the button.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.tooltip || '';\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return false;\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if this button is toggled or not or\n     * undefined if the button is not toggleable.\n     *\n     * @protected\n     * @returns {?boolean}\n     */\n    _isToggled() {\n        return undefined;\n    }\n\n    _onClick: (*) => void;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the audio mute state\n     * accordingly.\n     *\n     * @param {Object} e - Event.\n     * @private\n     * @returns {void}\n     */\n    _onClick(e) {\n        const { afterClick } = this.props;\n\n        this._handleClick();\n        afterClick && afterClick(e);\n\n        // blur after click to release focus from button to allow PTT.\n        e?.currentTarget?.blur && e.currentTarget.blur();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Node}\n     */\n    render(): React$Node {\n        const props = {\n            ...this.props,\n            accessibilityLabel: this.accessibilityLabel,\n            disabled: this._isDisabled(),\n            elementAfter: this._getElementAfter(),\n            icon: this._getIcon(),\n            label: this._getLabel(),\n            styles: this._getStyles(),\n            toggled: this._isToggled(),\n            tooltip: this._getTooltip()\n        };\n\n        return (\n            <ToolboxItem\n                disabled = { this._isDisabled() }\n                onClick = { this._onClick }\n                { ...props } />\n        );\n    }\n}\n","// @flow\n\nimport { IconMicrophoneEmpty, IconMicrophoneEmptySlash } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for toggling audio mute.\n */\nexport default class AbstractAudioMuteButton<P: Props, S: *>\n    extends AbstractButton<P, S> {\n\n    icon = IconMicrophoneEmpty;\n    toggledIcon = IconMicrophoneEmptySlash;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the audio mute state\n     * accordingly.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._setAudioMuted(!this._isAudioMuted());\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if audio is muted or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isAudioMuted() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this._isAudioMuted();\n    }\n\n    /**\n     * Helper function to perform the actual setting of the audio mute / unmute\n     * action.\n     *\n     * @param {boolean} audioMuted - Whether audio should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setAudioMuted(audioMuted: boolean) { // eslint-disable-line no-unused-vars\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport { IconHangup } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for disconnecting a conference.\n */\nexport default class AbstractHangupButton<P : Props, S: *>\n    extends AbstractButton<P, S> {\n\n    icon = IconHangup;\n\n    /**\n     * Handles clicking / pressing the button, and disconnects the conference.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._doHangup();\n    }\n\n    /**\n     * Helper function to perform the actual hangup action.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _doHangup() {\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport { IconCameraEmpty, IconCameraEmptyDisabled } from '../../icons';\n\nimport AbstractButton from './AbstractButton';\nimport type { Props } from './AbstractButton';\n\n/**\n * An abstract implementation of a button for toggling video mute.\n */\nexport default class AbstractVideoMuteButton<P : Props, S : *>\n    extends AbstractButton<P, S> {\n\n    icon = IconCameraEmpty;\n    toggledIcon = IconCameraEmptyDisabled;\n\n    /**\n     * Handles clicking / pressing the button, and toggles the video mute state\n     * accordingly.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this._setVideoMuted(!this._isVideoMuted());\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this._isVideoMuted();\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if video is muted or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isVideoMuted() {\n        // To be implemented by subclass.\n    }\n\n    /**\n     * Helper function to perform the actual setting of the video mute / unmute\n     * action.\n     *\n     * @param {boolean} videoMuted - Whether video should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setVideoMuted(videoMuted: boolean) { // eslint-disable-line no-unused-vars\n        // To be implemented by subclass.\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../i18n';\nimport { Container, Text } from '../../react';\n\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Creates a ReactElement for showing a ToolboxItem is for a beta feature.\n *\n * @extends {Component}\n */\nclass BetaTag extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Container className = 'beta-tag'>\n                <Text>\n                    { this.props.t('recording.beta') }\n                </Text>\n            </Container>\n        );\n    }\n}\n\nexport default translate(BetaTag);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Icon } from '../../../icons';\nimport { Tooltip } from '../../../tooltip';\n\n/**\n * The type of the React {@code Component} props of {@link OverflowMenuItem}.\n */\ntype Props = {\n\n    /**\n     * A succinct description of what the item does. Used by accessibility tools\n     * and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * Whether menu item is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * A React Element to display at the end of {@code OverflowMenuItem}.\n     */\n    elementAfter?: React$Node,\n\n    /**\n     * The icon class to use for displaying an icon before the link text.\n     */\n    icon: Object,\n\n    /**\n     * Id of the icon to be rendered.\n     */\n    iconId?: string,\n\n    /**\n     * The callback to invoke when {@code OverflowMenuItem} is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The text to display in the {@code OverflowMenuItem}.\n     */\n    text: string,\n\n    /**\n     * The text to display in the tooltip.\n     */\n    tooltip?: string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the button.\n     */\n    tooltipPosition: string\n};\n\n/**\n * A React {@code Component} for displaying a link to interact with other\n * features of the application.\n *\n * @extends Component\n */\nclass OverflowMenuItem extends Component<Props> {\n    /**\n     * Default values for {@code OverflowMenuItem} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        tooltipPosition: 'left',\n        disabled: false\n    };\n\n    /**\n     * Initializes a new {@code OverflowMenuItem} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (!this.props.disabled && this.props.onClick && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            this.props.onClick();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { accessibilityLabel, disabled, elementAfter, icon, iconId, onClick } = this.props;\n\n        let className = 'overflow-menu-item';\n\n        className += this.props.disabled ? ' disabled' : '';\n\n        return (\n            <li\n                aria-disabled = { disabled }\n                aria-label = { accessibilityLabel }\n                className = { className }\n                onClick = { disabled ? null : onClick }\n                onKeyPress = { this._onKeyPress }\n                role = 'menuitem'\n                tabIndex = { 0 }>\n                <span className = 'overflow-menu-item-icon'>\n                    <Icon\n                        id = { iconId }\n                        src = { icon } />\n                </span>\n                { this._renderText() }\n                {\n                    elementAfter || null\n                }\n            </li>\n        );\n    }\n\n    /**\n     * Renders the text label to display in the {@code OverflowMenuItem}.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderText() {\n        const textElement = (\n            <span className = 'overflow-menu-item-text'>\n                { this.props.text }\n            </span>\n        );\n\n        if (this.props.tooltip) {\n            return (\n                <Tooltip\n                    content = { this.props.tooltip }\n                    position = { this.props.tooltipPosition }>\n                    { textElement }\n                </Tooltip>\n            );\n        }\n\n        return textElement;\n    }\n}\n\nexport default OverflowMenuItem;\n","// @flow\n\nimport React from 'react';\n\nimport { Icon } from '../../../icons';\nimport { Tooltip } from '../../../tooltip';\n\ntype Props = {\n\n    /**\n     * The decorated component (ToolboxButton).\n     */\n    children: React$Node,\n\n    /**\n     * Icon of the button.\n     */\n    icon: Function,\n\n    /**\n     * Flag used for disabling the small icon.\n     */\n    iconDisabled: boolean,\n\n    /**\n     * Click handler for the small icon.\n     */\n    onIconClick: Function,\n\n    /**\n     * The tooltip used for the icon.\n     */\n    iconTooltip: string,\n\n    /**\n     * Additional styles.\n     */\n    styles?: Object,\n\n    /**\n     * aria label for the Icon.\n     */\n    ariaLabel?: string,\n\n    /**\n     * whether the element has a popup\n     */\n    ariaHasPopup?: boolean,\n\n    /**\n     * whether the element popup is expanded\n     */\n    ariaExpanded?: boolean,\n\n    /**\n     * The id of the element this button icon controls\n     */\n    ariaControls?: string,\n\n    /**\n     * keydown handler for icon.\n     */\n    onIconKeyDown?: Function,\n\n    /**\n     * The ID of the icon button\n     */\n    iconId: string\n};\n\n/**\n * Displays the `ToolboxButtonWithIcon` component.\n *\n * @param {Object} props - Component's props.\n * @returns {ReactElement}\n */\nexport default function ToolboxButtonWithIcon(props: Props) {\n    const {\n        children,\n        icon,\n        iconDisabled,\n        iconTooltip,\n        onIconClick,\n        onIconKeyDown,\n        styles,\n        ariaLabel,\n        ariaHasPopup,\n        ariaControls,\n        ariaExpanded,\n        iconId\n    } = props;\n\n    const iconProps = {};\n\n    if (iconDisabled) {\n        iconProps.className\n            = 'settings-button-small-icon settings-button-small-icon--disabled';\n    } else {\n        iconProps.className = 'settings-button-small-icon';\n        iconProps.onClick = onIconClick;\n        iconProps.onKeyDown = onIconKeyDown;\n        iconProps.role = 'button';\n        iconProps.tabIndex = 0;\n        iconProps.ariaControls = ariaControls;\n        iconProps.ariaExpanded = ariaExpanded;\n        iconProps.containerId = iconId;\n    }\n\n\n    return (\n        <div\n            className = 'settings-button-container'\n            styles = { styles }>\n            {children}\n\n            <div>\n                <Tooltip\n                    content = { iconTooltip }\n                    position = 'top'>\n                    <Icon\n                        { ...iconProps }\n                        ariaHasPopup = { ariaHasPopup }\n                        ariaLabel = { ariaLabel }\n                        size = { 9 }\n                        src = { icon } />\n                </Tooltip>\n            </div>\n        </div>\n    );\n}\n","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","function _extends() {\n  module.exports = _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\n","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","/**\n * Copyright (c) 2013-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\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","// @flow\n\nimport { BoxModel } from '../base/styles';\n\n/**\n * The size (height and width) of the small (not tile view) thumbnails.\n */\nexport const SMALL_THUMBNAIL_SIZE = 80;\n\n/**\n * The height of the filmstrip in narrow aspect ratio, or width in wide.\n */\nexport const FILMSTRIP_SIZE = SMALL_THUMBNAIL_SIZE + BoxModel.margin;\n\n/**\n * The aspect ratio of a tile in tile view.\n */\nexport const TILE_ASPECT_RATIO = 16 / 9;\n\n/**\n * The aspect ratio of a square tile in tile view.\n */\nexport const SQUARE_TILE_ASPECT_RATIO = 1;\n\n/**\n * Width below which the overflow menu(s) will be displayed as drawer(s).\n */\nexport const DISPLAY_DRAWER_THRESHOLD = 512;\n\n/**\n * Breakpoint past which a single column view is enforced in tile view.\n */\nexport const SINGLE_COLUMN_BREAKPOINT = 300;\n\n/**\n * Breakpoint past which a two column view is enforced in tile view.\n */\nexport const TWO_COLUMN_BREAKPOINT = 1000;\n\n/**\n * Breakpoint past which the aspect ratio is switched in tile view.\n * Also, past this breakpoint, if there are two participants in the conference, we enforce\n * single column view.\n * If this is to be modified, please also change the related media query from the tile_view scss file.\n */\nexport const ASPECT_RATIO_BREAKPOINT = 500;\n\n/**\n * The default number of columns for tile view.\n */\nexport const DEFAULT_MAX_COLUMNS = 5;\n\n/**\n * An extended number of columns for tile view.\n */\nexport const ABSOLUTE_MAX_COLUMNS = 7;\n\n/**\n * An array of attributes of the video element that will be used for adding a listener for every event in the list.\n * The latest event will be stored in redux. This is currently used by torture only.\n */\nexport const VIDEO_TEST_EVENTS = [\n    'onAbort',\n    'onCanPlay',\n    'onCanPlayThrough',\n    'onEmptied',\n    'onEnded',\n    'onError',\n    'onLoadedData',\n    'onLoadedMetadata',\n    'onLoadStart',\n    'onPause',\n    'onPlay',\n    'onPlaying',\n    'onRateChange',\n    'onStalled',\n    'onSuspend',\n    'onWaiting'\n];\n\n\n/**\n * Display mode constant used when video is being displayed on the small video.\n * @type {number}\n * @constant\n */\nexport const DISPLAY_VIDEO = 0;\n\n/**\n * Display mode constant used when the user's avatar is being displayed on\n * the small video.\n * @type {number}\n * @constant\n */\nexport const DISPLAY_AVATAR = 1;\n\n/**\n * Display mode constant used when neither video nor avatar is being displayed\n * on the small video. And we just show the display name.\n * @type {number}\n * @constant\n */\nexport const DISPLAY_BLACKNESS_WITH_NAME = 2;\n\n/**\n * Display mode constant used when video is displayed and display name\n * at the same time.\n * @type {number}\n * @constant\n */\nexport const DISPLAY_VIDEO_WITH_NAME = 3;\n\n/**\n * Display mode constant used when neither video nor avatar is being displayed\n * on the small video. And we just show the display name.\n * @type {number}\n * @constant\n */\nexport const DISPLAY_AVATAR_WITH_NAME = 4;\n\n/**\n * Maps the display modes to class name that will be applied on the thumbnail container.\n * @type {Array<string>}\n * @constant\n */\nexport const DISPLAY_MODE_TO_CLASS_NAME = [\n    'display-video',\n    'display-avatar-only',\n    'display-name-on-black',\n    'display-name-on-video',\n    'display-avatar-with-name'\n];\n\n/**\n * Maps the display modes to string.\n * @type {Array<string>}\n * @constant\n */\nexport const DISPLAY_MODE_TO_STRING = [\n    'video',\n    'avatar',\n    'blackness-with-name',\n    'video-with-name',\n    'avatar-with-name'\n];\n\n/**\n * The vertical margin of a tile.\n *\n * @type {number}\n */\nexport const TILE_VERTICAL_MARGIN = 4;\n\n/**\n * The horizontal margin of a tile.\n *\n * @type {number}\n */\nexport const TILE_HORIZONTAL_MARGIN = 4;\n\n/**\n * The height of the whole toolbar.\n */\nexport const TOOLBAR_HEIGHT = 72;\n\n/**\n * The height of the whole toolbar.\n */\nexport const TOOLBAR_HEIGHT_MOBILE = 60;\n\n/**\n * The size of the horizontal border of a thumbnail.\n *\n * @type {number}\n */\nexport const STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER = 4;\n\n/**\n * The size of the vertical border of a thumbnail.\n *\n * @type {number}\n */\nexport const STAGE_VIEW_THUMBNAIL_VERTICAL_BORDER = 4;\n\n/**\n * The size of the scroll.\n *\n * @type {number}\n */\nexport const SCROLL_SIZE = 7;\n\n/**\n * The total vertical space between the thumbnails container and the edges of the window.\n *\n * NOTE: This will include margins, paddings and the space for the 'hide filmstrip' icon.\n *\n * @type {number}\n */\nexport const VERTICAL_FILMSTRIP_VERTICAL_MARGIN = 60;\n\n/**\n * The min horizontal space between the thumbnails container and the edges of the window.\n *\n * @type {number}\n */\nexport const VERTICAL_FILMSTRIP_MIN_HORIZONTAL_MARGIN = 10;\n\n/**\n * The total horizontal space between the thumbnails container and the edges of the window.\n *\n * NOTE: This will include margins, paddings and the space for the 'hide filmstrip' icon.\n *\n * @type {number}\n */\nexport const HORIZONTAL_FILMSTRIP_MARGIN = 39;\n\n/**\n * Sets after how many ms to show the thumbnail context menu on long touch on mobile.\n *\n * @type {number}\n */\nexport const SHOW_TOOLBAR_CONTEXT_MENU_AFTER = 600;\n","function _taggedTemplateLiteral(strings, raw) {\n  if (!raw) {\n    raw = strings.slice(0);\n  }\n\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}\n\nmodule.exports = _taggedTemplateLiteral;","/**\n * The type of (redux) action which signals that server authentication has\n * becoming available or unavailable or logged in user has changed.\n *\n * {\n *     type: AUTH_STATUS_CHANGED,\n *     authEnabled: boolean,\n *     authLogin: string\n * }\n */\nexport const AUTH_STATUS_CHANGED = 'AUTH_STATUS_CHANGED';\n\n/**\n * The type of (redux) action which signals that a specific conference failed.\n *\n * {\n *     type: CONFERENCE_FAILED,\n *     conference: JitsiConference,\n *     error: Error\n * }\n */\nexport const CONFERENCE_FAILED = 'CONFERENCE_FAILED';\n\n/**\n * The type of (redux) action which signals that a specific conference was\n * joined.\n *\n * {\n *     type: CONFERENCE_JOINED,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_JOINED = 'CONFERENCE_JOINED';\n\n/**\n * The type of (redux) action which signals that a specific conference was left.\n *\n * {\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_LEFT = 'CONFERENCE_LEFT';\n\n/**\n * The type of (redux) action, which indicates conference subject changes.\n *\n * {\n *     type: CONFERENCE_SUBJECT_CHANGED\n *     subject: string\n * }\n */\nexport const CONFERENCE_SUBJECT_CHANGED = 'CONFERENCE_SUBJECT_CHANGED';\n\n/**\n* The type of (redux) action, which indicates conference UTC timestamp changes.\n*\n* {\n*      type: CONFERENCE_TIMESTAMP_CHANGED\n*      timestamp: number\n* }\n*/\nexport const CONFERENCE_TIMESTAMP_CHANGED = 'CONFERENCE_TIMESTAMP_CHANGED';\n\n/**\n * The type of (redux) action which signals that an uuid for a conference has been set.\n *\n * {\n *     type: CONFERENCE_UNIQUE_ID_SET,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_UNIQUE_ID_SET = 'CONFERENCE_UNIQUE_ID_SET';\n\n/**\n * The type of (redux) action which signals that a specific conference will be\n * joined.\n *\n * {\n *     type: CONFERENCE_WILL_JOIN,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_WILL_JOIN = 'CONFERENCE_WILL_JOIN';\n\n/**\n * The type of (redux) action which signals that a specific conference will be\n * left.\n *\n * {\n *     type: CONFERENCE_WILL_LEAVE,\n *     conference: JitsiConference\n * }\n */\nexport const CONFERENCE_WILL_LEAVE = 'CONFERENCE_WILL_LEAVE';\n\n/**\n * The type of (redux) action which signals that the data channel with the\n * bridge has been established.\n *\n * {\n *     type: DATA_CHANNEL_OPENED\n * }\n */\nexport const DATA_CHANNEL_OPENED = 'DATA_CHANNEL_OPENED';\n\n/**\n * The type of action which signals that the user has been kicked out from\n * the conference.\n *\n * {\n *     type: KICKED_OUT,\n *     conference: JitsiConference\n * }\n */\nexport const KICKED_OUT = 'KICKED_OUT';\n\n/**\n * The type of (redux) action which signals that the lock state of a specific\n * {@code JitsiConference} changed.\n *\n * {\n *     type: LOCK_STATE_CHANGED,\n *     conference: JitsiConference,\n *     locked: boolean\n * }\n */\nexport const LOCK_STATE_CHANGED = 'LOCK_STATE_CHANGED';\n\n/**\n * The type of (redux) action which sets the peer2peer flag for the current\n * conference.\n *\n * {\n *     type: P2P_STATUS_CHANGED,\n *     p2p: boolean\n * }\n */\nexport const P2P_STATUS_CHANGED = 'P2P_STATUS_CHANGED';\n\n/**\n * The type of (redux) action which signals to play specified touch tones.\n *\n * {\n *     type: SEND_TONES,\n *     tones: string,\n *     duration: number,\n *     pause: number\n * }\n */\nexport const SEND_TONES = 'SEND_TONES';\n\n/**\n * The type of (redux) action which updates the current known status of the\n * Follow Me feature.\n *\n * {\n *     type: SET_FOLLOW_ME,\n *     enabled: boolean\n * }\n */\nexport const SET_FOLLOW_ME = 'SET_FOLLOW_ME';\n\n/**\n * The type of (redux) action which sets the password to join or lock a specific\n * {@code JitsiConference}.\n *\n * {\n *     type: SET_PASSWORD,\n *     conference: JitsiConference,\n *     method: Function\n *     password: string\n * }\n */\nexport const SET_PASSWORD = 'SET_PASSWORD';\n\n/**\n * The type of (redux) action which signals that setting a password on a\n * {@code JitsiConference} failed (with an error).\n *\n * {\n *     type: SET_PASSWORD_FAILED,\n *     error: string\n * }\n */\nexport const SET_PASSWORD_FAILED = 'SET_PASSWORD_FAILED';\n\n/**\n * The type of (redux) action which signals for pending subject changes.\n *\n * {\n *     type: SET_PENDING_SUBJECT_CHANGE,\n *     subject: string\n * }\n */\nexport const SET_PENDING_SUBJECT_CHANGE = 'SET_PENDING_SUBJECT_CHANGE';\n\n/**\n * The type of (redux) action which sets the name of the room of the\n * conference to be joined.\n *\n * {\n *     type: SET_ROOM,\n *     room: string\n * }\n */\nexport const SET_ROOM = 'SET_ROOM';\n\n/**\n * The type of (redux) action which updates the current known status of the\n * moderator features for starting participants as audio or video muted.\n *\n * {\n *     type: SET_START_MUTED_POLICY,\n *     startAudioMutedPolicy: boolean,\n *     startVideoMutedPolicy: boolean\n * }\n */\nexport const SET_START_MUTED_POLICY = 'SET_START_MUTED_POLICY';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/app');\n","// @flow\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport _ from 'lodash';\nimport React, { Component, Fragment } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\nimport { compose, createStore } from 'redux';\nimport Thunk from 'redux-thunk';\n\nimport { i18next } from '../../i18n';\nimport {\n    MiddlewareRegistry,\n    PersistenceRegistry,\n    ReducerRegistry,\n    StateListenerRegistry\n} from '../../redux';\nimport { SoundCollection } from '../../sounds';\nimport { appWillMount, appWillUnmount } from '../actions';\nimport logger from '../logger';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} state of {@link BaseApp}.\n */\ntype State = {\n\n    /**\n     * The {@code Route} rendered by the {@code BaseApp}.\n     */\n    route: Object,\n\n    /**\n     * The redux store used by the {@code BaseApp}.\n     */\n    store: Object\n};\n\n/**\n * Base (abstract) class for main App component.\n *\n * @abstract\n */\nexport default class BaseApp extends Component<*, State> {\n    _init: Promise<*>;\n\n    /**\n     * Initializes a new {@code BaseApp} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Object) {\n        super(props);\n\n        this.state = {\n            route: {},\n            store: undefined\n        };\n    }\n\n    /**\n     * Initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        /**\n         * Make the mobile {@code BaseApp} wait until the {@code AsyncStorage}\n         * implementation of {@code Storage} initializes fully.\n         *\n         * @private\n         * @see {@link #_initStorage}\n         * @type {Promise}\n         */\n        this._init = this._initStorage()\n            .catch(err => {\n                /* BaseApp should always initialize! */\n                logger.error(err);\n            })\n            .then(() => new Promise(resolve => {\n                this.setState({\n                    store: this._createStore()\n                }, resolve);\n            }))\n            .then(() => this.state.store.dispatch(appWillMount(this)))\n            .catch(err => {\n                /* BaseApp should always initialize! */\n                logger.error(err);\n            });\n    }\n\n    /**\n     * De-initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this.state.store.dispatch(appWillUnmount(this));\n    }\n\n    /**\n     * Delays this {@code BaseApp}'s startup until the {@code Storage}\n     * implementation of {@code localStorage} initializes. While the\n     * initialization is instantaneous on Web (with Web Storage API), it is\n     * asynchronous on mobile/react-native.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _initStorage(): Promise<*> {\n        const _initializing = jitsiLocalStorage.getItem('_initializing');\n\n        return _initializing || Promise.resolve();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { route: { component, props }, store } = this.state;\n\n        if (store) {\n            return (\n                <I18nextProvider i18n = { i18next }>\n                    <Provider store = { store }>\n                        <Fragment>\n                            { this._createMainElement(component, props) }\n                            <SoundCollection />\n                            { this._createExtraElement() }\n                            { this._renderDialogContainer() }\n                        </Fragment>\n                    </Provider>\n                </I18nextProvider>\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * Creates an extra {@link ReactElement}s to be added (unconditionally)\n     * alongside the main element.\n     *\n     * @returns {ReactElement}\n     * @abstract\n     * @protected\n     */\n    _createExtraElement() {\n        return null;\n    }\n\n    /**\n     * Creates a {@link ReactElement} from the specified component, the\n     * specified props and the props of this {@code AbstractApp} which are\n     * suitable for propagation to the children of this {@code Component}.\n     *\n     * @param {Component} component - The component from which the\n     * {@code ReactElement} is to be created.\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the {@code ReactElement} is to be initialized.\n     * @returns {ReactElement}\n     * @protected\n     */\n    _createMainElement(component, props) {\n        return component ? React.createElement(component, props || {}) : null;\n    }\n\n    /**\n     * Initializes a new redux store instance suitable for use by this\n     * {@code AbstractApp}.\n     *\n     * @private\n     * @returns {Store} - A new redux store instance suitable for use by\n     * this {@code AbstractApp}.\n     */\n    _createStore() {\n        // Create combined reducer from all reducers in ReducerRegistry.\n        const reducer = ReducerRegistry.combineReducers();\n\n        // Apply all registered middleware from the MiddlewareRegistry and\n        // additional 3rd party middleware:\n        // - Thunk - allows us to dispatch async actions easily. For more info\n        // @see https://github.com/gaearon/redux-thunk.\n        let middleware = MiddlewareRegistry.applyMiddleware(Thunk);\n\n        // Try to enable Redux DevTools Chrome extension in order to make it\n        // available for the purposes of facilitating development.\n        let devToolsExtension;\n\n        if (typeof window === 'object'\n                && (devToolsExtension = window.devToolsExtension)) {\n            middleware = compose(middleware, devToolsExtension());\n        }\n\n        const store = createStore(\n            reducer, PersistenceRegistry.getPersistedState(), middleware);\n\n        // StateListenerRegistry\n        StateListenerRegistry.subscribe(store);\n\n        // This is temporary workaround to be able to dispatch actions from\n        // non-reactified parts of the code (conference.js for example).\n        // Don't use in the react code!!!\n        // FIXME: remove when the reactification is finished!\n        if (typeof APP !== 'undefined') {\n            APP.store = store;\n        }\n\n        return store;\n    }\n\n    /**\n     * Navigates to a specific Route.\n     *\n     * @param {Route} route - The Route to which to navigate.\n     * @returns {Promise}\n     */\n    _navigate(route): Promise<*> {\n        if (_.isEqual(route, this.state.route)) {\n            return Promise.resolve();\n        }\n\n        if (route.href) {\n            // This navigation requires loading a new URL in the browser.\n            window.location.href = route.href;\n\n            return Promise.resolve();\n        }\n\n        // XXX React's setState is asynchronous which means that the value of\n        // this.state.route above may not even be correct. If the check is\n        // performed before setState completes, the app may not navigate to the\n        // expected route. In order to mitigate the problem, _navigate was\n        // changed to return a Promise.\n        return new Promise(resolve => {\n            this.setState({ route }, resolve);\n        });\n    }\n\n    /**\n     * Renders the platform specific dialog container.\n     *\n     * @returns {React$Element}\n     */\n    _renderDialogContainer: () => React$Element<*>\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';\n\ndeclare var APP;\n\n/**\n * Signals that a specific App will mount (in the terms of React).\n *\n * @param {App} app - The App which will mount.\n * @returns {{\n *     type: APP_WILL_MOUNT,\n *     app: App\n * }}\n */\nexport function appWillMount(app: Object) {\n    return (dispatch: Dispatch<any>) => {\n        // TODO There was a redux action creator appInit which I did not like\n        // because we already had the redux action creator appWillMount and,\n        // respectively, the redux action APP_WILL_MOUNT. So I set out to remove\n        // appInit and managed to move everything it was doing but the\n        // following. Which is not extremely bad because we haven't moved the\n        // API module into its own feature yet so we're bound to work on that in\n        // the future.\n        typeof APP === 'object' && APP.API.init();\n\n        dispatch({\n            type: APP_WILL_MOUNT,\n            app\n        });\n    };\n}\n\n/**\n * Signals that a specific App will unmount (in the terms of React).\n *\n * @param {App} app - The App which will unmount.\n * @returns {{\n *     type: APP_WILL_UNMOUNT,\n *     app: App\n * }}\n */\nexport function appWillUnmount(app: Object) {\n    return {\n        type: APP_WILL_UNMOUNT,\n        app\n    };\n}\n","// @flow\n\nimport { toState } from '../redux';\n\n/**\n * Gets the value of a specific React {@code Component} prop of the currently\n * mounted {@link App}.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @param {string} propName - The name of the React {@code Component} prop of\n * the currently mounted {@code App} to get.\n * @returns {*} The value of the specified React {@code Component} prop of the\n * currently mounted {@code App}.\n */\nexport function getAppProp(stateful: Function | Object, propName: string) {\n    const state = toState(stateful)['features/base/app'];\n\n    if (state) {\n        const { app } = state;\n\n        if (app) {\n            return app.props[propName];\n        }\n    }\n\n    return undefined;\n}\n","import React from 'react';\nexport var ReactReduxContext = React.createContext(null);\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar CLEARED = null;\nvar nullListeners = {\n  notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n  var batch = getBatch(); // the current/next pattern is copied from redux's createStore code.\n  // TODO: refactor+expose that code to be reusable here?\n\n  var current = [];\n  var next = [];\n  return {\n    clear: function clear() {\n      next = CLEARED;\n      current = CLEARED;\n    },\n    notify: function notify() {\n      var listeners = current = next;\n      batch(function () {\n        for (var i = 0; i < listeners.length; i++) {\n          listeners[i]();\n        }\n      });\n    },\n    get: function get() {\n      return next;\n    },\n    subscribe: function subscribe(listener) {\n      var isSubscribed = true;\n      if (next === current) next = current.slice();\n      next.push(listener);\n      return function unsubscribe() {\n        if (!isSubscribed || current === CLEARED) return;\n        isSubscribed = false;\n        if (next === current) next = current.slice();\n        next.splice(next.indexOf(listener), 1);\n      };\n    }\n  };\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n  function Subscription(store, parentSub) {\n    this.store = store;\n    this.parentSub = parentSub;\n    this.unsubscribe = null;\n    this.listeners = nullListeners;\n    this.handleChangeWrapper = this.handleChangeWrapper.bind(this);\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.addNestedSub = function addNestedSub(listener) {\n    this.trySubscribe();\n    return this.listeners.subscribe(listener);\n  };\n\n  _proto.notifyNestedSubs = function notifyNestedSubs() {\n    this.listeners.notify();\n  };\n\n  _proto.handleChangeWrapper = function handleChangeWrapper() {\n    if (this.onStateChange) {\n      this.onStateChange();\n    }\n  };\n\n  _proto.isSubscribed = function isSubscribed() {\n    return Boolean(this.unsubscribe);\n  };\n\n  _proto.trySubscribe = function trySubscribe() {\n    if (!this.unsubscribe) {\n      this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.handleChangeWrapper) : this.store.subscribe(this.handleChangeWrapper);\n      this.listeners = createListenerCollection();\n    }\n  };\n\n  _proto.tryUnsubscribe = function tryUnsubscribe() {\n    if (this.unsubscribe) {\n      this.unsubscribe();\n      this.unsubscribe = null;\n      this.listeners.clear();\n      this.listeners = nullListeners;\n    }\n  };\n\n  return Subscription;\n}();\n\nexport { Subscription as default };","import _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport Subscription from '../utils/Subscription';\n\nvar Provider =\n/*#__PURE__*/\nfunction (_Component) {\n  _inheritsLoose(Provider, _Component);\n\n  function Provider(props) {\n    var _this;\n\n    _this = _Component.call(this, props) || this;\n    var store = props.store;\n    _this.notifySubscribers = _this.notifySubscribers.bind(_assertThisInitialized(_this));\n    var subscription = new Subscription(store);\n    subscription.onStateChange = _this.notifySubscribers;\n    _this.state = {\n      store: store,\n      subscription: subscription\n    };\n    _this.previousState = store.getState();\n    return _this;\n  }\n\n  var _proto = Provider.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n    this.state.subscription.trySubscribe();\n\n    if (this.previousState !== this.props.store.getState()) {\n      this.state.subscription.notifyNestedSubs();\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unsubscribe) this.unsubscribe();\n    this.state.subscription.tryUnsubscribe();\n    this._isMounted = false;\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.store !== prevProps.store) {\n      this.state.subscription.tryUnsubscribe();\n      var subscription = new Subscription(this.props.store);\n      subscription.onStateChange = this.notifySubscribers;\n      this.setState({\n        store: this.props.store,\n        subscription: subscription\n      });\n    }\n  };\n\n  _proto.notifySubscribers = function notifySubscribers() {\n    this.state.subscription.notifyNestedSubs();\n  };\n\n  _proto.render = function render() {\n    var Context = this.props.context || ReactReduxContext;\n    return React.createElement(Context.Provider, {\n      value: this.state\n    }, this.props.children);\n  };\n\n  return Provider;\n}(Component);\n\nProvider.propTypes = {\n  store: PropTypes.shape({\n    subscribe: PropTypes.func.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    getState: PropTypes.func.isRequired\n  }),\n  context: PropTypes.object,\n  children: PropTypes.any\n};\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport React, { useContext, useMemo, useEffect, useLayoutEffect, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n}; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect because we want\n// `connect` to perform sync updates to a ref to save the latest props after\n// a render is actually committed to the DOM.\n\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;\nexport default function connectAdvanced(\n/*\n  selectorFactory is a func that is responsible for returning the selector function used to\n  compute new props from state, props, and dispatch. For example:\n     export default connectAdvanced((dispatch, options) => (state, props) => ({\n      thing: state.things[props.thingId],\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\n    }))(YourComponent)\n   Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\n   Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\n  selector, otherwise the Connect component will re-render on every state or props change.\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n  invariant(renderCountProp === undefined, \"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n  invariant(!withRef, 'withRef is removed. To access the wrapped instance, use a ref on the connected component');\n  var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n  invariant(storeKey === 'store', 'storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(isValidElementType(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        var forwardedRef = props.forwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, [\"forwardedRef\"]);\n\n        return [props.context, forwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          forwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && isContextConsumer(React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context\n\n      var didStoreComeFromProps = Boolean(props.store);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n      invariant(didStoreComeFromProps || didStoreComeFromContext, \"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n      var store = props.store || contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        var subscription = new Subscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n\n      var overriddenContextValue = useMemo(function () {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\n        // Tricky logic here:\n        // - This render may have been triggered by a Redux store update that produced new child props\n        // - However, we may have gotten new wrapper props after that\n        // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n        // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n        // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n        if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n          return childPropsFromStoreUpdate.current;\n        } // TODO We're reading the store directly in render() here. Bad idea?\n        // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n        // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n        // to determine what the child props should be.\n\n\n        return childPropsSelector(store.getState(), wrapperProps);\n      }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      useIsomorphicLayoutEffect(function () {\n        // We want to capture the wrapper props and child props we used for later comparisons\n        lastWrapperProps.current = wrapperProps;\n        lastChildProps.current = actualChildProps;\n        renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n        if (childPropsFromStoreUpdate.current) {\n          childPropsFromStoreUpdate.current = null;\n          notifyNestedSubs();\n        }\n      }); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffect(function () {\n        // If we're not subscribed to the store, nothing to do here\n        if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n        var didUnsubscribe = false;\n        var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n        var checkForUpdates = function checkForUpdates() {\n          if (didUnsubscribe) {\n            // Don't run stale listeners.\n            // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n            return;\n          }\n\n          var latestStoreState = store.getState();\n          var newChildProps, error;\n\n          try {\n            // Actually run the selector with the most recent store state and wrapper props\n            // to determine what the child props should be\n            newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n          } catch (e) {\n            error = e;\n            lastThrownError = e;\n          }\n\n          if (!error) {\n            lastThrownError = null;\n          } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n          if (newChildProps === lastChildProps.current) {\n            if (!renderIsScheduled.current) {\n              notifyNestedSubs();\n            }\n          } else {\n            // Save references to the new child props.  Note that we track the \"child props from store update\"\n            // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n            // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n            // forcing another re-render, which we don't want.\n            lastChildProps.current = newChildProps;\n            childPropsFromStoreUpdate.current = newChildProps;\n            renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n            forceComponentUpdateDispatch({\n              type: 'STORE_UPDATED',\n              payload: {\n                latestStoreState: latestStoreState,\n                error: error\n              }\n            });\n          }\n        }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n        subscription.onStateChange = checkForUpdates;\n        subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n        // changed since we began.\n\n        checkForUpdates();\n\n        var unsubscribeWrapper = function unsubscribeWrapper() {\n          didUnsubscribe = true;\n          subscription.tryUnsubscribe();\n\n          if (lastThrownError) {\n            // It's possible that we caught an error due to a bad mapState function, but the\n            // parent re-rendered without this component and we're about to unmount.\n            // This shouldn't happen as long as we do top-down subscriptions correctly, but\n            // if we ever do those wrong, this throw will surface the error in our tests.\n            // In that case, throw the error from here so it doesn't get lost.\n            throw lastThrownError;\n          }\n        };\n\n        return unsubscribeWrapper;\n      }, [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      var renderedWrappedComponent = useMemo(function () {\n        return React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: forwardedRef\n        }));\n      }, [forwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      var renderedChild = useMemo(function () {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return React.createElement(Connect, _extends({}, props, {\n          forwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\n  connect is a facade over connectAdvanced. It turns its args into a compatible\n  selectorFactory, which has the signature:\n\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\n  \n  connect passes its args to connectAdvanced as options, which will in turn pass them to\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\n\n  selectorFactory returns a final props selector from its mapStateToProps,\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\n  mergePropsFactories, and pure args.\n\n  The resulting final props selector is called by the Connect component instance whenever\n  it receives new props or store state.\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default createConnect();","import { useContext } from 'react';\nimport invariant from 'invariant';\nimport { ReactReduxContext } from '../components/Context';\n/**\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\n * hook that you should usually not need to call directly.\n *\n * @returns {any} the value of the `ReactReduxContext`\n *\n * @example\n *\n * import React from 'react'\n * import { useReduxContext } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const { store } = useReduxContext()\n *   return <div>{store.getState()}</div>\n * }\n */\n\nexport function useReduxContext() {\n  var contextValue = useContext(ReactReduxContext);\n  invariant(contextValue, 'could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n  return contextValue;\n}","import { useStore } from './useStore';\n/**\n * A hook to access the redux `dispatch` function. Note that in most cases where you\n * might want to use this hook it is recommended to use `useActions` instead to bind\n * action creators to the `dispatch` function.\n *\n * @returns {any|function} redux store's `dispatch` function\n *\n * @example\n *\n * import React, { useCallback } from 'react'\n * import { useReduxDispatch } from 'react-redux'\n *\n * export const CounterComponent = ({ value }) => {\n *   const dispatch = useDispatch()\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\n *   return (\n *     <div>\n *       <span>{value}</span>\n *       <button onClick={increaseCounter}>Increase counter</button>\n *     </div>\n *   )\n * }\n */\n\nexport function useDispatch() {\n  var store = useStore();\n  return store.dispatch;\n}","import { useReduxContext } from './useReduxContext';\n/**\n * A hook to access the redux store.\n *\n * @returns {any} the redux store\n *\n * @example\n *\n * import React from 'react'\n * import { useStore } from 'react-redux'\n *\n * export const ExampleComponent = () => {\n *   const store = useStore()\n *   return <div>{store.getState()}</div>\n * }\n */\n\nexport function useStore() {\n  var _useReduxContext = useReduxContext(),\n      store = _useReduxContext.store;\n\n  return store;\n}","import { useReducer, useRef, useEffect, useMemo, useLayoutEffect } from 'react';\nimport invariant from 'invariant';\nimport { useReduxContext } from './useReduxContext';\nimport Subscription from '../utils/Subscription'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nvar refEquality = function refEquality(a, b) {\n  return a === b;\n};\n/**\n * A hook to access the redux store's state. This hook takes a selector function\n * as an argument. The selector is called with the store state.\n *\n * This hook takes an optional equality comparison function as the second parameter\n * that allows you to customize the way the selected state is compared to determine\n * whether the component needs to be re-rendered.\n *\n * @param {Function} selector the selector function\n * @param {Function=} equalityFn the function that will be used to determine equality\n *\n * @returns {any} the selected state\n *\n * @example\n *\n * import React from 'react'\n * import { useSelector } from 'react-redux'\n *\n * export const CounterComponent = () => {\n *   const counter = useSelector(state => state.counter)\n *   return <div>{counter}</div>\n * }\n */\n\n\nexport function useSelector(selector, equalityFn) {\n  if (equalityFn === void 0) {\n    equalityFn = refEquality;\n  }\n\n  invariant(selector, \"You must pass a selector to useSelectors\");\n\n  var _useReduxContext = useReduxContext(),\n      store = _useReduxContext.store,\n      contextSub = _useReduxContext.subscription;\n\n  var _useReducer = useReducer(function (s) {\n    return s + 1;\n  }, 0),\n      forceRender = _useReducer[1];\n\n  var subscription = useMemo(function () {\n    return new Subscription(store, contextSub);\n  }, [store, contextSub]);\n  var latestSubscriptionCallbackError = useRef();\n  var latestSelector = useRef();\n  var latestSelectedState = useRef();\n  var selectedState;\n\n  try {\n    if (selector !== latestSelector.current || latestSubscriptionCallbackError.current) {\n      selectedState = selector(store.getState());\n    } else {\n      selectedState = latestSelectedState.current;\n    }\n  } catch (err) {\n    var errorMessage = \"An error occured while selecting the store state: \" + err.message + \".\";\n\n    if (latestSubscriptionCallbackError.current) {\n      errorMessage += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\nOriginal stack trace:\";\n    }\n\n    throw new Error(errorMessage);\n  }\n\n  useIsomorphicLayoutEffect(function () {\n    latestSelector.current = selector;\n    latestSelectedState.current = selectedState;\n    latestSubscriptionCallbackError.current = undefined;\n  });\n  useIsomorphicLayoutEffect(function () {\n    function checkForUpdates() {\n      try {\n        var newSelectedState = latestSelector.current(store.getState());\n\n        if (equalityFn(newSelectedState, latestSelectedState.current)) {\n          return;\n        }\n\n        latestSelectedState.current = newSelectedState;\n      } catch (err) {\n        // we ignore all errors here, since when the component\n        // is re-rendered, the selectors are called again, and\n        // will throw again, if neither props nor store state\n        // changed\n        latestSubscriptionCallbackError.current = err;\n      }\n\n      forceRender({});\n    }\n\n    subscription.onStateChange = checkForUpdates;\n    subscription.trySubscribe();\n    checkForUpdates();\n    return function () {\n      return subscription.tryUnsubscribe();\n    };\n  }, [store, subscription]);\n  return selectedState;\n}","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch } from './hooks/useDispatch';\nimport { useSelector } from './hooks/useSelector';\nimport { useStore } from './hooks/useStore';\nimport { setBatch } from './utils/batch';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport shallowEqual from './utils/shallowEqual';\nsetBatch(batch);\nexport { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, useSelector, useStore, shallowEqual };","//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (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\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key;\n                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(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\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\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\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord = /[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\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n                    matched,\n                    p1,\n                    p2,\n                    p3,\n                    p4\n                ) {\n                    return p1 || p2 || p3 || p4;\n                })\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\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\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // 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\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n            '_'\n        ),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        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\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // 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\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // 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\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\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\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // 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\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        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\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // 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\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\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\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 = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 = /^(?:(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\n        if (match) {\n            getParsingFlags(config).iso = true;\n\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\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\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\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n        input,\n        array,\n        config,\n        token\n    ) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    });\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\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\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    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\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // 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\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // 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\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // 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 =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // 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\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // 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\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","// @flow\n\nimport Platform from '../react/Platform';\n\n/**\n * Returns whether or not the current environment is a mobile device.\n *\n * @returns {boolean}\n */\nexport function isMobileBrowser() {\n    return Platform.OS === 'android' || Platform.OS === 'ios';\n}\n\n\n/**\n * Returns whether or not the current environment is an ios mobile device.\n *\n * @returns {boolean}\n */\nexport function isIosMobileBrowser() {\n    return Platform.OS === 'ios';\n}\n\n/**\n * Checks whether the chrome extensions defined in the config file are installed or not.\n *\n * @param {Object} config - Objects containing info about the configured extensions.\n *\n * @returns {Promise[]}\n */\nexport function checkChromeExtensionsInstalled(config: Object = {}) {\n    const isExtensionInstalled = info => new Promise(resolve => {\n        const img = new Image();\n\n        img.src = `chrome-extension://${info.id}/${info.path}`;\n        img.setAttribute('aria-hidden', 'true');\n        img.onload = function() {\n            resolve(true);\n        };\n        img.onerror = function() {\n            resolve(false);\n        };\n    });\n    const extensionInstalledFunction = info => isExtensionInstalled(info);\n\n    return Promise.all(\n        (config.chromeExtensionsInfo || []).map(info => extensionInstalledFunction(info))\n    );\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport { default as CONFIG_WHITELIST } from './configWhitelist';\nexport * from './functions';\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","// @flow\n\n/**\n * The set of facing modes for camera.\n *\n * @enum {string}\n */\nexport const CAMERA_FACING_MODE = {\n    ENVIRONMENT: 'environment',\n    USER: 'user'\n};\n\nexport type MediaType = 'audio' | 'video' | 'presenter';\n\n/**\n * The set of media types.\n *\n * @enum {string}\n */\nexport const MEDIA_TYPE: { AUDIO: MediaType, PRESENTER: MediaType, VIDEO: MediaType} = {\n    AUDIO: 'audio',\n    PRESENTER: 'presenter',\n    VIDEO: 'video'\n};\n\n\n/* eslint-disable no-bitwise */\n\n/**\n * The types of authorities which may mute/unmute the local video.\n *\n * @enum {number}\n */\nexport const VIDEO_MUTISM_AUTHORITY = {\n    AUDIO_ONLY: 1 << 0,\n    BACKGROUND: 1 << 1,\n    USER: 1 << 2\n};\n\n/* eslint-enable no-bitwise */\n\n/**\n * The types of video tracks.\n *\n * @enum {string}\n */\nexport const VIDEO_TYPE = {\n    CAMERA: 'camera',\n    DESKTOP: 'desktop'\n};\n","// @flow\n\nimport type { AudioElement } from '../media';\n\nimport {\n    _ADD_AUDIO_ELEMENT,\n    _REMOVE_AUDIO_ELEMENT,\n    PLAY_SOUND,\n    REGISTER_SOUND,\n    STOP_SOUND,\n    UNREGISTER_SOUND\n} from './actionTypes';\nimport { getSoundsPath } from './functions';\n\n/**\n * Adds {@link AudioElement} instance to the base/sounds feature state for the\n * {@link Sound} instance identified by the given id. After this action the\n * sound can be played by dispatching the {@link PLAY_SOUND} action.\n *\n * @param {string} soundId - The sound identifier for which the audio element\n * will be stored.\n * @param {AudioElement} audioElement - The audio element which implements the\n * audio playback functionality and which is backed by the sound resource\n * corresponding to the {@link Sound} with the given id.\n * @protected\n * @returns {{\n *     type: PLAY_SOUND,\n *     audioElement: AudioElement,\n *     soundId: string\n * }}\n */\nexport function _addAudioElement(soundId: string, audioElement: AudioElement) {\n    return {\n        type: _ADD_AUDIO_ELEMENT,\n        audioElement,\n        soundId\n    };\n}\n\n/**\n * The opposite of {@link _addAudioElement} which removes {@link AudioElement}\n * for given sound from base/sounds state. It means that the audio resource has\n * been disposed and the sound can no longer be played.\n *\n * @param {string} soundId - The {@link Sound} instance identifier for which the\n * audio element is being removed.\n * @protected\n * @returns {{\n *     type: _REMOVE_AUDIO_ELEMENT,\n *     soundId: string\n * }}\n */\nexport function _removeAudioElement(soundId: string) {\n    return {\n        type: _REMOVE_AUDIO_ELEMENT,\n        soundId\n    };\n}\n\n/**\n * Starts playback of the sound identified by the given sound id. The action\n * will have effect only if the audio resource has been loaded already.\n *\n * @param {string} soundId - The id of the sound to be played (the same one\n * which was used in {@link registerSound} to register the sound).\n * @returns {{\n *     type: PLAY_SOUND,\n *     soundId: string\n * }}\n */\nexport function playSound(soundId: string): Object {\n    return {\n        type: PLAY_SOUND,\n        soundId\n    };\n}\n\n/**\n * Registers a new sound for given id and a source object which can be either a\n * path or a raw object depending on the platform (native vs web). It will make\n * the {@link SoundCollection} render extra HTMLAudioElement which will make it\n * available for playback through the {@link playSound} action.\n *\n * @param {string} soundId - The global identifier which identify the sound\n * created for given source object.\n * @param {string} soundName - The name of bundled audio file that will be\n * associated with the given {@code soundId}.\n * @param {Object} options - Optional parameters.\n * @param {boolean} options.loop - True in order to loop the sound.\n * @returns {{\n *     type: REGISTER_SOUND,\n *     soundId: string,\n *     src: string,\n *     options: {\n *          loop: boolean\n *     }\n * }}\n */\nexport function registerSound(\n        soundId: string, soundName: string, options: Object = {}): Object {\n    return {\n        type: REGISTER_SOUND,\n        soundId,\n        src: `${getSoundsPath()}/${soundName}`,\n        options\n    };\n}\n\n/**\n * Stops playback of the sound identified by the given sound id.\n *\n * @param {string} soundId - The id of the sound to be stopped (the same one\n * which was used in {@link registerSound} to register the sound).\n * @returns {{\n *     type: STOP_SOUND,\n *     soundId: string\n * }}\n */\nexport function stopSound(soundId: string): Object {\n    return {\n        type: STOP_SOUND,\n        soundId\n    };\n}\n\n/**\n * Unregister the sound identified by the given id. It will make the\n * {@link SoundCollection} component stop rendering the corresponding\n * {@code HTMLAudioElement} which then should result in the audio resource\n * disposal.\n *\n * @param {string} soundId - The identifier of the {@link Sound} to be removed.\n * @returns {{\n *     type: UNREGISTER_SOUND,\n *     soundId: string\n * }}\n */\nexport function unregisterSound(soundId: string): Object {\n    return {\n        type: UNREGISTER_SOUND,\n        soundId\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Audio } from '../../media';\nimport type { AudioElement } from '../../media';\nimport { connect } from '../../redux';\nimport { _addAudioElement, _removeAudioElement } from '../actions';\nimport type { Sound } from '../reducer';\n\n/**\n * {@link SoundCollection}'s properties.\n */\ntype Props = {\n\n    /**\n     * Dispatches {@link _ADD_AUDIO_ELEMENT} Redux action which will store the\n     * {@link AudioElement} for a sound in the Redux store.\n     */\n    _addAudioElement: Function,\n\n    /**\n     * Dispatches {@link _REMOVE_AUDIO_ELEMENT} Redux action which will remove\n     * the sound's {@link AudioElement} from the Redux store.\n     */\n    _removeAudioElement: Function,\n\n    /**\n     * It's the 'base/sounds' reducer's state mapped to a property. It's used to\n     * render audio elements for every registered sound.\n     */\n    _sounds: Map<string, Sound>\n}\n\n/**\n * Collections of all global sounds used by the app for playing audio\n * notifications in response to various events. It renders <code>Audio</code>\n * element for each sound registered in the base/sounds feature. When the audio\n * resource is loaded it will emit add/remove audio element actions which will\n * attach the element to the corresponding {@link Sound} instance in the Redux\n * state. When that happens the sound can be played using the {@link playSound}\n * action.\n */\nclass SoundCollection extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let key = 0;\n        const sounds = [];\n\n        for (const [ soundId, sound ] of this.props._sounds.entries()) {\n            const { options, src } = sound;\n\n            sounds.push(\n                React.createElement(\n                    Audio, {\n                        key,\n                        setRef: this._setRef.bind(this, soundId),\n                        src,\n                        loop: options.loop\n                    }));\n            key += 1;\n        }\n\n        return sounds;\n    }\n\n    /**\n     * Set the (reference to the) {@link AudioElement} object which implements\n     * the audio playback functionality.\n     *\n     * @param {string} soundId - The sound Id for the audio element for which\n     * the callback is being executed.\n     * @param {AudioElement} element - The {@link AudioElement} instance\n     * which implements the audio playback functionality.\n     * @protected\n     * @returns {void}\n     */\n    _setRef(soundId: string, element: ?AudioElement) {\n        if (element) {\n            this.props._addAudioElement(soundId, element);\n        } else {\n            this.props._removeAudioElement(soundId);\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to {@code SoundCollection}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _sounds: Map<string, Sound>\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _sounds: state['features/base/sounds']\n    };\n}\n\n/**\n * Maps dispatching of some actions to React component props.\n *\n * @param {Function} dispatch - Redux action dispatcher.\n * @private\n * @returns {{\n *     _addAudioElement: void,\n *     _removeAudioElement: void\n * }}\n */\nexport function _mapDispatchToProps(dispatch: Function) {\n    return {\n        /**\n         * Dispatches action to store the {@link AudioElement} for\n         * a {@link Sound} identified by given <tt>soundId</tt> in the Redux\n         * store, so that the playback can be controlled through the Redux\n         * actions.\n         *\n         * @param {string} soundId - A global identifier which will be used to\n         * identify the {@link Sound} instance for which an audio element will\n         * be added.\n         * @param {AudioElement} audioElement - The {@link AudioElement}\n         * instance that will be stored in the Redux state of the base/sounds\n         * feature, as part of the {@link Sound} object. At that point the sound\n         * will be ready for playback.\n         * @private\n         * @returns {void}\n         */\n        _addAudioElement(soundId: string, audioElement: AudioElement) {\n            dispatch(_addAudioElement(soundId, audioElement));\n        },\n\n        /**\n         * Dispatches action to remove {@link AudioElement} from the Redux\n         * store for specific {@link Sound}, because it is no longer part of\n         * the DOM tree and the audio resource will be released.\n         *\n         * @param {string} soundId - The id of the {@link Sound} instance for\n         * which an {@link AudioElement} will be removed from the Redux store.\n         * @private\n         * @returns {void}\n         */\n        _removeAudioElement(soundId: string) {\n            dispatch(_removeAudioElement(soundId));\n        }\n    };\n}\n\nexport default connect(_mapStateToProps, _mapDispatchToProps)(SoundCollection);\n","// @flow\n\n/**\n * Create an action for when dominant speaker changes.\n *\n * {\n *     type: DOMINANT_SPEAKER_CHANGED,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const DOMINANT_SPEAKER_CHANGED = 'DOMINANT_SPEAKER_CHANGED';\n\n/**\n * Create an action for granting moderator to a participant.\n *\n * {\n *     type: GRANT_MODERATOR,\n *     id: string\n * }\n */\nexport const GRANT_MODERATOR = 'GRANT_MODERATOR';\n\n/**\n * Create an action for removing a participant from the conference.\n *\n * {\n *     type: KICK_PARTICIPANT,\n *     id: string\n * }\n */\nexport const KICK_PARTICIPANT = 'KICK_PARTICIPANT';\n\n/**\n * Create an action for muting a remote participant.\n *\n * {\n *     type: MUTE_REMOTE_PARTICIPANT,\n *     id: string\n * }\n */\nexport const MUTE_REMOTE_PARTICIPANT = 'MUTE_REMOTE_PARTICIPANT';\n\n/**\n * Create an action for when the local participant's display name is updated.\n *\n * {\n *     type: PARTICIPANT_DISPLAY_NAME_CHANGED,\n *     id: string,\n *     name: string\n * }\n */\nexport const PARTICIPANT_DISPLAY_NAME_CHANGED\n    = 'PARTICIPANT_DISPLAY_NAME_CHANGED';\n\n/**\n * Action to signal that ID of participant has changed. This happens when\n * local participant joins a new conference or quits one.\n *\n * {\n *     type: PARTICIPANT_ID_CHANGED,\n *     conference: JitsiConference\n *     newValue: string,\n *     oldValue: string\n * }\n */\nexport const PARTICIPANT_ID_CHANGED = 'PARTICIPANT_ID_CHANGED';\n\n/**\n * Action to signal that participant role has changed. e.\n *\n * {\n *     type: PARTICIPANT_ROLE_CHANGED,\n *     participant: {\n *         id: string\n *     }\n *     role: string\n * }\n */\nexport const PARTICIPANT_ROLE_CHANGED = 'PARTICIPANT_ROLE_CHANGED';\n\n/**\n * Action to signal that a participant has joined.\n *\n * {\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }\n */\nexport const PARTICIPANT_JOINED = 'PARTICIPANT_JOINED';\n\n/**\n * Action to signal that a participant has been removed from a conference by\n * another participant.\n *\n * {\n *     type: PARTICIPANT_KICKED,\n *     kicked: Object,\n *     kicker: Object\n * }\n */\nexport const PARTICIPANT_KICKED = 'PARTICIPANT_KICKED';\n\n/**\n * Action to handle case when participant lefts.\n *\n * {\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const PARTICIPANT_LEFT = 'PARTICIPANT_LEFT';\n\n/**\n * Action to handle case when info about participant changes.\n *\n * {\n *     type: PARTICIPANT_UPDATED,\n *     participant: Participant\n * }\n */\nexport const PARTICIPANT_UPDATED = 'PARTICIPANT_UPDATED';\n\n/**\n * The type of the Redux action which pins a conference participant.\n *\n * {\n *     type: PIN_PARTICIPANT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const PIN_PARTICIPANT = 'PIN_PARTICIPANT';\n\n/**\n * Action to signal that a hidden participant has joined.\n *\n * {\n *     type: HIDDEN_PARTICIPANT_JOINED,\n *     participant: Participant\n * }\n */\nexport const HIDDEN_PARTICIPANT_JOINED = 'HIDDEN_PARTICIPANT_JOINED';\n\n/**\n * Action to handle case when hidden participant leaves.\n *\n * {\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         id: string\n *     }\n * }\n */\nexport const HIDDEN_PARTICIPANT_LEFT = 'HIDDEN_PARTICIPANT_LEFT';\n\n/**\n * The type of Redux action which notifies the app that the loadable avatar URL has changed.\n *\n * {\n *     type: SET_LOADABLE_AVATAR_URL,\n *     participant: {\n *         id: string,\n           loadableAvatarUrl: string\n *     }\n * }\n */\nexport const SET_LOADABLE_AVATAR_URL = 'SET_LOADABLE_AVATAR_URL';\n\n/**\n * Raises hand for the local participant.\n * {\n *     type: LOCAL_PARTICIPANT_RAISE_HAND\n * }\n */\nexport const LOCAL_PARTICIPANT_RAISE_HAND = 'LOCAL_PARTICIPANT_RAISE_HAND';\n","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\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\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties;","\n// @flow\n\nimport { isIconUrl } from './functions';\n\n/**\n * Tries to preload an image.\n *\n * @param {string | Object} src - Source of the avatar.\n * @returns {Promise}\n */\nexport function preloadImage(src: string | Object): Promise<string> {\n    if (isIconUrl(src)) {\n        return Promise.resolve(src);\n    }\n\n    return new Promise((resolve, reject) => {\n        const image = document.createElement('img');\n\n        image.onload = () => resolve(src);\n        image.onerror = reject;\n\n        // $FlowExpectedError\n        image.referrerPolicy = 'no-referrer';\n        image.src = src;\n    });\n}\n","// @flow\n\nimport { getGravatarURL } from '@jitsi/js-utils/avatar';\nimport type { Store } from 'redux';\n\nimport { JitsiParticipantConnectionStatus } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE, shouldRenderVideoTrack } from '../media';\nimport { toState } from '../redux';\nimport { getTrackByMediaTypeAndParticipant } from '../tracks';\nimport { createDeferred } from '../util';\n\nimport {\n    JIGASI_PARTICIPANT_ICON,\n    MAX_DISPLAY_NAME_LENGTH,\n    PARTICIPANT_ROLE\n} from './constants';\nimport { preloadImage } from './preloadImage';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Temp structures for avatar urls to be checked/preloaded.\n */\nconst AVATAR_QUEUE = [];\nconst AVATAR_CHECKED_URLS = new Map();\n/* eslint-disable arrow-body-style, no-unused-vars */\nconst AVATAR_CHECKER_FUNCTIONS = [\n    (participant, _) => {\n        return participant && participant.isJigasi ? JIGASI_PARTICIPANT_ICON : null;\n    },\n    (participant, _) => {\n        return participant && participant.avatarURL ? participant.avatarURL : null;\n    },\n    (participant, store) => {\n        if (participant && participant.email) {\n            // TODO: remove once libravatar has deployed their new scaled up infra. -saghul\n            const gravatarBaseURL\n                = store.getState()['features/base/config'].gravatarBaseURL ?? 'https://www.gravatar.com/avatar/';\n\n            return getGravatarURL(participant.email, gravatarBaseURL);\n        }\n\n        return null;\n    }\n];\n/* eslint-enable arrow-body-style, no-unused-vars */\n\n/**\n * Resolves the first loadable avatar URL for a participant.\n *\n * @param {Object} participant - The participant to resolve avatars for.\n * @param {Store} store - Redux store.\n * @returns {Promise}\n */\nexport function getFirstLoadableAvatarUrl(participant: Object, store: Store<any, any>) {\n    const deferred = createDeferred();\n    const fullPromise = deferred.promise\n        .then(() => _getFirstLoadableAvatarUrl(participant, store))\n        .then(src => {\n\n            if (AVATAR_QUEUE.length) {\n                const next = AVATAR_QUEUE.shift();\n\n                next.resolve();\n            }\n\n            return src;\n        });\n\n    if (AVATAR_QUEUE.length) {\n        AVATAR_QUEUE.push(deferred);\n    } else {\n        deferred.resolve();\n    }\n\n    return fullPromise;\n}\n\n/**\n * Returns local participant from Redux state.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {(Participant|undefined)}\n */\nexport function getLocalParticipant(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n\n    return state.local;\n}\n\n/**\n * Normalizes a display name so then no invalid values (padding, length...etc)\n * can be set.\n *\n * @param {string} name - The display name to set.\n * @returns {string}\n */\nexport function getNormalizedDisplayName(name: string) {\n    if (!name || !name.trim()) {\n        return undefined;\n    }\n\n    return name.trim().substring(0, MAX_DISPLAY_NAME_LENGTH);\n}\n\n/**\n * Returns participant by ID from Redux state.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @param {string} id - The ID of the participant to retrieve.\n * @private\n * @returns {(Participant|undefined)}\n */\nexport function getParticipantById(\n        stateful: Object | Function, id: string): ?Object {\n    const state = toState(stateful)['features/base/participants'];\n    const { local, remote } = state;\n\n    return remote.get(id) || (local?.id === id ? local : undefined);\n}\n\n/**\n * Returns the participant with the ID matching the passed ID or the local participant if the ID is\n * undefined.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @param {string|undefined} [participantID] - An optional partipantID argument.\n * @returns {Participant|undefined}\n */\nexport function getParticipantByIdOrUndefined(stateful: Object | Function, participantID: ?string) {\n    return participantID ? getParticipantById(stateful, participantID) : getLocalParticipant(stateful);\n}\n\n/**\n * Returns a count of the known participants in the passed in redux state,\n * excluding any fake participants.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {number}\n */\nexport function getParticipantCount(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n    const { local, remote, fakeParticipants } = state;\n\n    return remote.size - fakeParticipants.size + (local ? 1 : 0);\n}\n\n/**\n * Returns the Map with fake participants.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {Map<string, Participant>} - The Map with fake participants.\n */\nexport function getFakeParticipants(stateful: Object | Function) {\n    return toState(stateful)['features/base/participants'].fakeParticipants;\n}\n\n/**\n * Returns a count of the known remote participants in the passed in redux state.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {number}\n */\nexport function getRemoteParticipantCount(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n\n    return state.remote.size;\n}\n\n/**\n * Returns a count of the known participants in the passed in redux state,\n * including fake participants.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {number}\n */\nexport function getParticipantCountWithFake(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n    const { local, remote } = state;\n\n    return remote.size + (local ? 1 : 0);\n}\n\n/**\n * Returns participant's display name.\n *\n * FIXME: Remove the hardcoded strings once interfaceConfig is stored in redux\n * and merge with a similarly named method in {@code conference.js}.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @param {string} id - The ID of the participant's display name to retrieve.\n * @returns {string}\n */\nexport function getParticipantDisplayName(\n        stateful: Object | Function,\n        id: string) {\n    const participant = getParticipantById(stateful, id);\n\n    if (participant) {\n        if (participant.name) {\n            return participant.name;\n        }\n\n        if (participant.local) {\n            return typeof interfaceConfig === 'object'\n                ? interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME\n                : 'me';\n        }\n    }\n\n    return typeof interfaceConfig === 'object'\n        ? interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME\n        : 'Fellow Jitster';\n}\n\n/**\n * Returns the presence status of a participant associated with the passed id.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @param {string} id - The id of the participant.\n * @returns {string} - The presence status.\n */\nexport function getParticipantPresenceStatus(\n        stateful: Object | Function, id: string) {\n    if (!id) {\n        return undefined;\n    }\n    const participantById = getParticipantById(stateful, id);\n\n    if (!participantById) {\n        return undefined;\n    }\n\n    return participantById.presence;\n}\n\n/**\n * Returns true if there is at least 1 participant with screen sharing feature and false otherwise.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {boolean}\n */\nexport function haveParticipantWithScreenSharingFeature(stateful: Object | Function) {\n    return toState(stateful)['features/base/participants'].haveParticipantWithScreenSharingFeature;\n}\n\n/**\n * Selectors for getting all remote participants.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {Map<string, Object>}\n */\nexport function getRemoteParticipants(stateful: Object | Function) {\n    return toState(stateful)['features/base/participants'].remote;\n}\n\n/**\n * Returns the participant which has its pinned state set to truthy.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state\n * features/base/participants.\n * @returns {(Participant|undefined)}\n */\nexport function getPinnedParticipant(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n    const { pinnedParticipant } = state;\n\n    if (!pinnedParticipant) {\n        return undefined;\n    }\n\n    return getParticipantById(stateful, pinnedParticipant);\n}\n\n/**\n * Returns true if the participant is a moderator.\n *\n * @param {string} participant - Participant object.\n * @returns {boolean}\n */\nexport function isParticipantModerator(participant: Object) {\n    return participant?.role === PARTICIPANT_ROLE.MODERATOR;\n}\n\n/**\n * Returns the dominant speaker participant.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state or redux's\n * {@code getState} function to be used to retrieve the state features/base/participants.\n * @returns {Participant} - The participant from the redux store.\n */\nexport function getDominantSpeakerParticipant(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n    const { dominantSpeaker } = state;\n\n    if (!dominantSpeaker) {\n        return undefined;\n    }\n\n    return getParticipantById(stateful, dominantSpeaker);\n}\n\n/**\n * Returns true if all of the meeting participants are moderators.\n *\n * @param {Object|Function} stateful -Object or function that can be resolved\n * to the Redux state.\n * @returns {boolean}\n */\nexport function isEveryoneModerator(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n\n    return state.everyoneIsModerator === true;\n}\n\n/**\n * Checks a value and returns true if it's a preloaded icon object.\n *\n * @param {?string | ?Object} icon - The icon to check.\n * @returns {boolean}\n */\nexport function isIconUrl(icon: ?string | ?Object) {\n    return Boolean(icon) && (typeof icon === 'object' || typeof icon === 'function');\n}\n\n/**\n * Returns true if the current local participant is a moderator in the\n * conference.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @returns {boolean}\n */\nexport function isLocalParticipantModerator(stateful: Object | Function) {\n    const state = toState(stateful)['features/base/participants'];\n\n    const { local } = state;\n\n    if (!local) {\n        return false;\n    }\n\n    return isParticipantModerator(local);\n}\n\n/**\n * Returns true if the video of the participant should be rendered.\n * NOTE: This is currently only used on mobile.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @param {string} id - The ID of the participant.\n * @returns {boolean}\n */\nexport function shouldRenderParticipantVideo(stateful: Object | Function, id: string) {\n    const state = toState(stateful);\n    const participant = getParticipantById(state, id);\n\n    if (!participant) {\n        return false;\n    }\n\n    /* First check if we have an unmuted video track. */\n    const videoTrack\n        = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n\n    if (!shouldRenderVideoTrack(videoTrack, /* waitForVideoStarted */ false)) {\n        return false;\n    }\n\n    /* Then check if the participant connection is active. */\n    const connectionStatus = participant.connectionStatus || JitsiParticipantConnectionStatus.ACTIVE;\n\n    if (connectionStatus !== JitsiParticipantConnectionStatus.ACTIVE) {\n        return false;\n    }\n\n    /* Then check if audio-only mode is not active. */\n    const audioOnly = state['features/base/audio-only'].enabled;\n\n    if (!audioOnly) {\n        return true;\n    }\n\n    /* Last, check if the participant is sharing their screen and they are on stage. */\n    const remoteScreenShares = state['features/video-layout'].remoteScreenShares || [];\n    const largeVideoParticipantId = state['features/large-video'].participantId;\n    const participantIsInLargeVideoWithScreen\n        = participant.id === largeVideoParticipantId && remoteScreenShares.includes(participant.id);\n\n    return participantIsInLargeVideoWithScreen;\n}\n\n/**\n * Resolves the first loadable avatar URL for a participant.\n *\n * @param {Object} participant - The participant to resolve avatars for.\n * @param {Store} store - Redux store.\n * @returns {?string}\n */\nasync function _getFirstLoadableAvatarUrl(participant, store) {\n    for (let i = 0; i < AVATAR_CHECKER_FUNCTIONS.length; i++) {\n        const url = AVATAR_CHECKER_FUNCTIONS[i](participant, store);\n\n        if (url !== null) {\n            if (AVATAR_CHECKED_URLS.has(url)) {\n                if (AVATAR_CHECKED_URLS.get(url)) {\n                    return url;\n                }\n            } else {\n                try {\n                    const finalUrl = await preloadImage(url);\n\n                    AVATAR_CHECKED_URLS.set(finalUrl, true);\n\n                    return finalUrl;\n                } catch (e) {\n                    AVATAR_CHECKED_URLS.set(url, false);\n                }\n            }\n        }\n    }\n\n    return undefined;\n}\n","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './constants';\nexport * from './functions';\n","/**\n * The type of remote control messages.\n */\nexport const REMOTE_CONTROL_MESSAGE_NAME = 'remote-control';\n\n/**\n * The value for the \"var\" attribute of feature tag in disco-info packets.\n */\nexport const DISCO_REMOTE_CONTROL_FEATURE = 'http://jitsi.org/meet/remotecontrol';\n\n/**\n * The remote control event.\n * @typedef {object} RemoteControlEvent\n * @property {EVENTS | REQUESTS} type - the type of the message\n * @property {number} x - avaibale for type === mousemove only. The new x\n * coordinate of the mouse\n * @property {number} y - For mousemove type - the new y\n * coordinate of the mouse and for mousescroll - represents the vertical\n * scrolling diff value\n * @property {number} button - 1(left), 2(middle) or 3 (right). Supported by\n * mousedown, mouseup and mousedblclick types.\n * @property {KEYS} key - Represents the key related to the event. Supported by\n * keydown and keyup types.\n * @property {KEYS[]} modifiers - Represents the modifier related to the event.\n * Supported by keydown and keyup types.\n * @property {PERMISSIONS_ACTIONS} action - Supported by type === permissions.\n * Represents the action related to the permissions event.\n *\n * Optional properties. Supported for permissions event for action === request:\n * @property {string} userId - The user id of the participant that has sent the\n * request.\n * @property {string} userJID - The full JID in the MUC of the user that has\n * sent the request.\n * @property {string} displayName - the displayName of the participant that has\n * sent the request.\n * @property {boolean} screenSharing - true if the SS is started for the local\n * participant and false if not.\n */\n\n/**\n * Types of remote-control events.\n  * @readonly\n  * @enum {string}\n */\nexport const EVENTS = {\n    mousemove: 'mousemove',\n    mousedown: 'mousedown',\n    mouseup: 'mouseup',\n    mousedblclick: 'mousedblclick',\n    mousescroll: 'mousescroll',\n    keydown: 'keydown',\n    keyup: 'keyup',\n    permissions: 'permissions',\n    start: 'start',\n    stop: 'stop',\n    supported: 'supported'\n};\n\n/**\n * Types of remote-control requests.\n  * @readonly\n  * @enum {string}\n */\nexport const REQUESTS = {\n    start: 'start'\n};\n\n/**\n * Actions for the remote control permission events.\n * @readonly\n * @enum {string}\n */\nexport const PERMISSIONS_ACTIONS = {\n    request: 'request',\n    grant: 'grant',\n    deny: 'deny',\n    error: 'error'\n};\n\n","// @flow\n\n/**\n * Flag indicating if add-people functionality should be enabled.\n * Default: enabled (true).\n */\nexport const ADD_PEOPLE_ENABLED = 'add-people.enabled';\n\n/**\n * Flag indicating if the SDK should not require the audio focus.\n * Used by apps that do not use Jitsi audio.\n * Default: disabled (false)\n */\nexport const AUDIO_FOCUS_DISABLED = 'audio-focus.disabled';\n\n/**\n * Flag indicating if the audio mute button should be displayed.\n * Default: enabled (true).\n */\nexport const AUDIO_MUTE_BUTTON_ENABLED = 'audio-mute.enabled';\n\n/**\n * Flag indicating that the Audio only button in the overflow menu is enabled.\n * Default: enabled (true).\n */\nexport const AUDIO_ONLY_BUTTON_ENABLED = 'audio-only.enabled';\n\n/**\n * Flag indicating if calendar integration should be enabled.\n * Default: enabled (true) on Android, auto-detected on iOS.\n */\nexport const CALENDAR_ENABLED = 'calendar.enabled';\n\n/**\n * Flag indicating if call integration (CallKit on iOS, ConnectionService on Android)\n * should be enabled.\n * Default: enabled (true).\n */\nexport const CALL_INTEGRATION_ENABLED = 'call-integration.enabled';\n\n/**\n * Flag indicating if close captions should be enabled.\n * Default: enabled (true).\n */\nexport const CLOSE_CAPTIONS_ENABLED = 'close-captions.enabled';\n\n/**\n * Flag indicating if conference timer should be enabled.\n * Default: enabled (true).\n */\nexport const CONFERENCE_TIMER_ENABLED = 'conference-timer.enabled';\n\n/**\n * Flag indicating if chat should be enabled.\n * Default: enabled (true).\n */\nexport const CHAT_ENABLED = 'chat.enabled';\n\n/**\n * Flag indicating if the filmstrip should be enabled.\n * Default: enabled (true).\n */\nexport const FILMSTRIP_ENABLED = 'filmstrip.enabled';\n\n/**\n * Flag indicating if fullscreen (immersive) mode should be enabled.\n * Default: enabled (true).\n */\nexport const FULLSCREEN_ENABLED = 'fullscreen.enabled';\n\n/**\n * Flag indicating if the Help button should be enabled.\n * Default: enabled (true).\n */\nexport const HELP_BUTTON_ENABLED = 'help.enabled';\n\n/**\n * Flag indicating if invite functionality should be enabled.\n * Default: enabled (true).\n */\nexport const INVITE_ENABLED = 'invite.enabled';\n\n/**\n * Flag indicating if recording should be enabled in iOS.\n * Default: disabled (false).\n */\nexport const IOS_RECORDING_ENABLED = 'ios.recording.enabled';\n\n/**\n * Flag indicating if screen sharing should be enabled in iOS.\n * Default: disabled (false).\n */\nexport const IOS_SCREENSHARING_ENABLED = 'ios.screensharing.enabled';\n\n/**\n * Flag indicating if kickout is enabled.\n * Default: enabled (true).\n */\nexport const KICK_OUT_ENABLED = 'kick-out.enabled';\n\n/**\n * Flag indicating if live-streaming should be enabled.\n * Default: auto-detected.\n */\nexport const LIVE_STREAMING_ENABLED = 'live-streaming.enabled';\n\n/**\n * Flag indicating if lobby mode button should be enabled.\n * Default: enabled.\n */\nexport const LOBBY_MODE_ENABLED = 'lobby-mode.enabled';\n\n/**\n * Flag indicating if displaying the meeting name should be enabled.\n * Default: enabled (true).\n */\nexport const MEETING_NAME_ENABLED = 'meeting-name.enabled';\n\n/**\n * Flag indicating if the meeting password button should be enabled.\n * Note that this flag just decides on the button, if a meeting has a password\n * set, the password dialog will still show up.\n * Default: enabled (true).\n */\nexport const MEETING_PASSWORD_ENABLED = 'meeting-password.enabled';\n\n/**\n * Flag indicating if the notifications should be enabled.\n * Default: enabled (true).\n */\nexport const NOTIFICATIONS_ENABLED = 'notifications.enabled';\n\n/**\n * Flag indicating if the audio overflow menu button should be displayed.\n * Default: enabled (true).\n */\nexport const OVERFLOW_MENU_ENABLED = 'overflow-menu.enabled';\n\n/**\n * Flag indicating if Picture-in-Picture should be enabled.\n * Default: auto-detected.\n */\nexport const PIP_ENABLED = 'pip.enabled';\n\n/**\n * Flag indicating if raise hand feature should be enabled.\n * Default: enabled.\n */\nexport const RAISE_HAND_ENABLED = 'raise-hand.enabled';\n\n/**\n * Flag indicating if recording should be enabled.\n * Default: auto-detected.\n */\nexport const RECORDING_ENABLED = 'recording.enabled';\n\n/**\n * Flag indicating if the user should join the conference with the replaceParticipant functionality.\n * Default: (false).\n */\nexport const REPLACE_PARTICIPANT = 'replace.participant';\n\n/**\n * Flag indicating the local and (maximum) remote video resolution. Overrides\n * the server configuration.\n * Default: (unset).\n */\nexport const RESOLUTION = 'resolution';\n\n/**\n * Flag indicating if the security options button should be enabled.\n * Default: enabled (true)\n */\nexport const SECURITY_OPTIONS_ENABLED = 'security-options.enabled';\n\n/**\n * Flag indicating if server URL change is enabled.\n * Default: enabled (true)\n */\nexport const SERVER_URL_CHANGE_ENABLED = 'server-url-change.enabled';\n\n/**\n * Flag indicating if tile view feature should be enabled.\n * Default: enabled.\n */\nexport const TILE_VIEW_ENABLED = 'tile-view.enabled';\n\n/**\n * Flag indicating if the toolbox should be always be visible\n * Default: disabled (false).\n */\nexport const TOOLBOX_ALWAYS_VISIBLE = 'toolbox.alwaysVisible';\n\n/**\n * Flag indicating if the toolbox should be enabled\n * Default: enabled.\n */\nexport const TOOLBOX_ENABLED = 'toolbox.enabled';\n\n/**\n * Flag indicating if the video mute button should be displayed.\n * Default: enabled (true).\n */\nexport const VIDEO_MUTE_BUTTON_ENABLED = 'video-mute.enabled';\n\n/**\n * Flag indicating if the video share button should be enabled\n * Default: enabled (true).\n */\nexport const VIDEO_SHARE_BUTTON_ENABLED = 'video-share.enabled';\n\n/**\n * Flag indicating if the welcome page should be enabled.\n * Default: disabled (false).\n */\nexport const WELCOME_PAGE_ENABLED = 'welcomepage.enabled';\n\n/**\n * Flag indicating if the reactions feature should be enabled.\n * Default: disabled (false).\n */\nexport const REACTIONS_ENABLED = 'reactions.enabled';\n","// @flow\n\ndeclare var JitsiMeetJS: Object;\n\nexport default JitsiMeetJS;\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/app');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { API_ID } from '../../../modules/API/constants';\nimport { setRoom } from '../base/conference';\nimport {\n    configWillLoad,\n    createFakeConfig,\n    loadConfigError,\n    restoreConfig,\n    setConfig,\n    storeConfig\n} from '../base/config';\nimport { connect, disconnect, setLocationURL } from '../base/connection';\nimport { loadConfig } from '../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../base/media';\nimport { toState } from '../base/redux';\nimport { createDesiredLocalTracks, isLocalCameraTrackMuted, isLocalTrackMuted } from '../base/tracks';\nimport {\n    addHashParamsToURL,\n    getBackendSafeRoomName,\n    getLocationContextRoot,\n    parseURIString,\n    toURLString\n} from '../base/util';\nimport { isVpaasMeeting } from '../jaas/functions';\nimport { clearNotifications, showNotification } from '../notifications';\nimport { setFatalError } from '../overlay';\n\nimport {\n    getDefaultURL,\n    getName\n} from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n\n/**\n * Triggers an in-app navigation to a specific route. Allows navigation to be\n * abstracted between the mobile/React Native and Web/React applications.\n *\n * @param {string|undefined} uri - The URI to which to navigate. It may be a\n * full URL with an HTTP(S) scheme, a full or partial URI with the app-specific\n * scheme, or a mere room name.\n * @returns {Function}\n */\nexport function appNavigate(uri: ?string) {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        let location = parseURIString(uri);\n\n        // If the specified location (URI) does not identify a host, use the app's\n        // default.\n        if (!location || !location.host) {\n            const defaultLocation = parseURIString(getDefaultURL(getState));\n\n            if (location) {\n                location.host = defaultLocation.host;\n\n                // FIXME Turn location's host, hostname, and port properties into\n                // setters in order to reduce the risks of inconsistent state.\n                location.hostname = defaultLocation.hostname;\n                location.pathname\n                    = defaultLocation.pathname + location.pathname.substr(1);\n                location.port = defaultLocation.port;\n                location.protocol = defaultLocation.protocol;\n            } else {\n                location = defaultLocation;\n            }\n        }\n\n        location.protocol || (location.protocol = 'https:');\n        const { contextRoot, host, room } = location;\n        const locationURL = new URL(location.toString());\n\n        // Disconnect from any current conference.\n        // FIXME: unify with web.\n        if (navigator.product === 'ReactNative') {\n            dispatch(disconnect());\n        }\n\n        // There are notifications now that gets displayed after we technically left\n        // the conference, but we're still on the conference screen.\n        dispatch(clearNotifications());\n\n        dispatch(configWillLoad(locationURL, room));\n\n        let protocol = location.protocol.toLowerCase();\n\n        // The React Native app supports an app-specific scheme which is sure to not\n        // be supported by fetch.\n        protocol !== 'http:' && protocol !== 'https:' && (protocol = 'https:');\n\n        const baseURL = `${protocol}//${host}${contextRoot || '/'}`;\n        let url = `${baseURL}config.js`;\n\n        // XXX In order to support multiple shards, tell the room to the deployment.\n        room && (url += `?room=${getBackendSafeRoomName(room)}`);\n\n        let config;\n\n        // Avoid (re)loading the config when there is no room.\n        if (!room) {\n            config = restoreConfig(baseURL);\n        }\n\n        if (!config) {\n            try {\n                config = await loadConfig(url);\n                dispatch(storeConfig(baseURL, config));\n            } catch (error) {\n                config = restoreConfig(baseURL);\n\n                if (!config) {\n                    if (room) {\n                        dispatch(loadConfigError(error, locationURL));\n\n                        return;\n                    }\n\n                    // If there is no room (we are on the welcome page), don't fail, just create a fake one.\n                    logger.warn('Failed to load config but there is no room, applying a fake one');\n                    config = createFakeConfig(baseURL);\n                }\n            }\n        }\n\n        if (getState()['features/base/config'].locationURL !== locationURL) {\n            dispatch(loadConfigError(new Error('Config no longer needed!'), locationURL));\n\n            return;\n        }\n\n        dispatch(setLocationURL(locationURL));\n        dispatch(setConfig(config));\n        dispatch(setRoom(room));\n\n        // FIXME: unify with web, currently the connection and track creation happens in conference.js.\n        if (room && navigator.product === 'ReactNative') {\n            dispatch(createDesiredLocalTracks());\n            dispatch(connect());\n        }\n    };\n}\n\n/**\n * Redirects to another page generated by replacing the path in the original URL\n * with the given path.\n *\n * @param {(string)} pathname - The path to navigate to.\n * @returns {Function}\n */\nexport function redirectWithStoredParams(pathname: string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { locationURL } = getState()['features/base/connection'];\n        const newLocationURL = new URL(locationURL.href);\n\n        newLocationURL.pathname = pathname;\n        window.location.assign(newLocationURL.toString());\n    };\n}\n\n/**\n * Assigns a specific pathname to window.location.pathname taking into account\n * the context root of the Web app.\n *\n * @param {string} pathname - The pathname to assign to\n * window.location.pathname. If the specified pathname is relative, the context\n * root of the Web app will be prepended to the specified pathname before\n * assigning it to window.location.pathname.\n * @param {string} hashParam - Optional hash param to assign to\n * window.location.hash.\n * @returns {Function}\n */\nexport function redirectToStaticPage(pathname: string, hashParam: ?string) {\n    return () => {\n        const windowLocation = window.location;\n        let newPathname = pathname;\n\n        if (!newPathname.startsWith('/')) {\n            // A pathname equal to ./ specifies the current directory. It will be\n            // fine but pointless to include it because contextRoot is the current\n            // directory.\n            newPathname.startsWith('./')\n                && (newPathname = newPathname.substring(2));\n            newPathname = getLocationContextRoot(windowLocation) + newPathname;\n        }\n\n        if (hashParam) {\n            windowLocation.hash = hashParam;\n        }\n\n        windowLocation.pathname = newPathname;\n    };\n}\n\n/**\n * Reloads the page.\n *\n * @protected\n * @returns {Function}\n */\nexport function reloadNow() {\n    return (dispatch: Dispatch<Function>, getState: Function) => {\n        dispatch(setFatalError(undefined));\n\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n\n        // Preserve the local tracks muted state after the reload.\n        const newURL = addTrackStateToURL(locationURL, state);\n\n        logger.info(`Reloading the conference using URL: ${locationURL}`);\n\n        if (navigator.product === 'ReactNative') {\n            dispatch(appNavigate(toURLString(newURL)));\n        } else {\n            dispatch(reloadWithStoredParams());\n        }\n    };\n}\n\n/**\n * Adds the current track state to the passed URL.\n *\n * @param {URL} url - The URL that will be modified.\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {URL} - Returns the modified URL.\n */\nfunction addTrackStateToURL(url, stateful) {\n    const state = toState(stateful);\n    const tracks = state['features/base/tracks'];\n    const isVideoMuted = isLocalCameraTrackMuted(tracks);\n    const isAudioMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.AUDIO);\n\n    return addHashParamsToURL(new URL(url), { // use new URL object in order to not pollute the passed parameter.\n        'config.startWithAudioMuted': isAudioMuted,\n        'config.startWithVideoMuted': isVideoMuted\n    });\n\n}\n\n/**\n * Reloads the page by restoring the original URL.\n *\n * @returns {Function}\n */\nexport function reloadWithStoredParams() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n\n        // Preserve the local tracks muted states.\n        const newURL = addTrackStateToURL(locationURL, state);\n        const windowLocation = window.location;\n        const oldSearchString = windowLocation.search;\n\n        windowLocation.replace(newURL.toString());\n\n        if (newURL.search === oldSearchString) {\n            // NOTE: Assuming that only the hash or search part of the URL will\n            // be changed!\n            // location.replace will not trigger redirect/reload when\n            // only the hash params are changed. That's why we need to call\n            // reload in addition to replace.\n            windowLocation.reload();\n        }\n    };\n}\n\n/**\n * Check if the welcome page is enabled and redirects to it.\n * If requested show a thank you dialog before that.\n * If we have a close page enabled, redirect to it without\n * showing any other dialog.\n *\n * @param {Object} options - Used to decide which particular close page to show\n * or if close page is disabled, whether we should show the thankyou dialog.\n * @param {boolean} options.showThankYou - Whether we should\n * show thank you dialog.\n * @param {boolean} options.feedbackSubmitted - Whether feedback was submitted.\n * @returns {Function}\n */\nexport function maybeRedirectToWelcomePage(options: Object = {}) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        const {\n            enableClosePage\n        } = getState()['features/base/config'];\n\n        // if close page is enabled redirect to it, without further action\n        if (enableClosePage) {\n            if (isVpaasMeeting(getState())) {\n                redirectToStaticPage('/');\n\n                return;\n            }\n\n            const { jwt } = getState()['features/base/jwt'];\n\n            let hashParam;\n\n            // save whether current user is guest or not, and pass auth token,\n            // before navigating to close page\n            window.sessionStorage.setItem('guest', !jwt);\n            window.sessionStorage.setItem('jwt', jwt);\n\n            let path = 'close.html';\n\n            if (interfaceConfig.SHOW_PROMOTIONAL_CLOSE_PAGE) {\n                if (Number(API_ID) === API_ID) {\n                    hashParam = `#jitsi_meet_external_api_id=${API_ID}`;\n                }\n                path = 'close3.html';\n            } else if (!options.feedbackSubmitted) {\n                path = 'close2.html';\n            }\n\n            dispatch(redirectToStaticPage(`static/${path}`, hashParam));\n\n            return;\n        }\n\n        // else: show thankYou dialog only if there is no feedback\n        if (options.showThankYou) {\n            dispatch(showNotification({\n                titleArguments: { appName: getName() },\n                titleKey: 'dialog.thankYou'\n            }));\n        }\n\n        // if Welcome page is enabled redirect to welcome page after 3 sec, if\n        // there is a thank you message to be shown, 0.5s otherwise.\n        if (getState()['features/base/config'].enableWelcomePage) {\n            setTimeout(\n                () => {\n                    dispatch(redirectWithStoredParams('/'));\n                },\n                options.showThankYou ? 3000 : 500);\n        }\n    };\n}\n","/**\n * The type of Redux action which sets the noSrcDataNotificationUid state representing the UID of the previous\n * no data from source notification. Used to check if such a notification was previously displayed.\n *\n * {\n *     type: SET_NO_SRC_DATA_NOTIFICATION_UID,\n *     uid: ?number\n * }\n */\nexport const SET_NO_SRC_DATA_NOTIFICATION_UID = 'SET_NO_SRC_DATA_NOTIFICATION_UID';\n\n/**\n * The type of redux action dispatched to disable screensharing or to start the\n * flow for enabling screenshare.\n *\n * {\n *     type: TOGGLE_SCREENSHARING\n * }\n */\nexport const TOGGLE_SCREENSHARING = 'TOGGLE_SCREENSHARING';\n\n/**\n * The type of redux action dispatched when a track has been (locally or\n * remotely) added to the conference.\n *\n * {\n *     type: TRACK_ADDED,\n *     track: Track\n * }\n */\nexport const TRACK_ADDED = 'TRACK_ADDED';\n\n/**\n * The type of redux action dispatched when a canceled {@code getUserMedia}\n * process completes either successfully or with an error (the error is ignored\n * and the track is immediately disposed if it has been created).\n *\n * {\n *     type: TRACK_CREATE_CANCELED,\n *     trackType: MEDIA_TYPE\n * }\n */\nexport const TRACK_CREATE_CANCELED = 'TRACK_CREATE_CANCELED';\n\n/**\n * The type of redux action dispatched when {@code getUserMedia} fails with an\n * error (such as permission denied).\n *\n * {\n *     type: TRACK_CREATE_ERROR,\n *     permissionDenied: Boolean,\n *     trackType: MEDIA_TYPE\n * }\n */\nexport const TRACK_CREATE_ERROR = 'TRACK_CREATE_ERROR';\n\n/**\n * The type of redux action dispatched when a track has triggered no data from source event.\n *\n * {\n *     type: TRACK_NO_DATA_FROM_SOURCE,\n *     track: Track\n * }\n */\nexport const TRACK_NO_DATA_FROM_SOURCE = 'TRACK_NO_DATA_FROM_SOURCE';\n\n/**\n * The type of redux action dispatched when a track has been (locally or\n * remotely) removed from the conference.\n *\n * {\n *     type: TRACK_REMOVED,\n *     track: Track\n * }\n */\nexport const TRACK_REMOVED = 'TRACK_REMOVED';\n\n/**\n * The type of redux action dispatched when a track has stopped.\n *\n * {\n *      type: TRACK_STOPPED,\n *      track: Track\n * }\n */\nexport const TRACK_STOPPED = 'TRACK_STOPPED';\n\n/**\n * The type of redux action dispatched when a track's properties were updated.\n *\n * {\n *     type: TRACK_UPDATED,\n *     track: Track\n * }\n */\nexport const TRACK_UPDATED = 'TRACK_UPDATED';\n\n/**\n * The type of redux action dispatched when a local track starts being created\n * via a WebRTC {@code getUserMedia} call. The action's payload includes an\n * extra {@code gumProcess} property which is a {@code Promise} with an extra\n * {@code cancel} method which can be used to cancel the process. Canceling will\n * result in disposing any {@code JitsiLocalTrack} returned by the\n * {@code getUserMedia} callback. There will be a {@code TRACK_CREATE_CANCELED}\n * action instead of a {@code TRACK_ADDED} or {@code TRACK_CREATE_ERROR} action.\n *\n * {\n *     type: TRACK_WILL_CREATE\n *     track: {\n *         gumProcess: Promise with a `cancel` method to cancel the process,\n *         local: true,\n *         mediaType: MEDIA_TYPE\n *     }\n * }\n */\nexport const TRACK_WILL_CREATE = 'TRACK_WILL_CREATE';\n\n/**\n * Action to update the redux store with the current media event name of the video track.\n *\n * @returns {{\n *     type: TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT,\n *     track: Track,\n *     name: string\n * }}\n */\nexport const TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT = 'TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT';\n","// @flow\n\n\nimport { VPAAS_TENANT_PREFIX } from './constants';\nimport logger from './logger';\n\n/**\n * Returns the full vpaas tenant if available, given a path.\n *\n * @param {string} path - The meeting url path.\n * @returns {string}\n */\nfunction extractVpaasTenantFromPath(path: string) {\n    const [ , tenant ] = path.split('/');\n\n    if (tenant.startsWith(VPAAS_TENANT_PREFIX)) {\n        return tenant;\n    }\n\n    return '';\n}\n\n/**\n * Returns the vpaas tenant.\n *\n * @param {Object} state - The global state.\n * @returns {string}\n */\nexport function getVpaasTenant(state: Object) {\n    return extractVpaasTenantFromPath(state['features/base/connection'].locationURL.pathname);\n}\n\n/**\n * Returns true if the current meeting is a vpaas one.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isVpaasMeeting(state: Object) {\n    const connection = state['features/base/connection'];\n\n    if (connection?.locationURL?.pathname) {\n        return Boolean(\n            extractVpaasTenantFromPath(connection?.locationURL?.pathname)\n        );\n    }\n\n    return false;\n}\n\n/**\n * Sends a request for retrieving jaas customer details.\n *\n * @param {Object} reqData - The request info.\n * @param {string} reqData.appId - The client appId.\n * @param {string} reqData.baseUrl - The base url for the request.\n * @param {string} reqData.jwt - The JWT token.\n * @returns {void}\n */\nexport async function sendGetDetailsRequest({ appId, baseUrl, jwt }: {\n    appId: string,\n    baseUrl: string,\n    jwt: string,\n}) {\n    const fullUrl = `${baseUrl}/v1/customers/${encodeURIComponent(appId)}`;\n    const headers = {\n        'Authorization': `Bearer ${jwt}`\n    };\n\n    try {\n        const res = await fetch(fullUrl, {\n            method: 'GET',\n            headers\n        });\n\n        if (res.ok) {\n            return res.json();\n        }\n\n        throw new Error('Request not successful');\n    } catch (err) {\n        throw new Error(err);\n\n    }\n}\n\n/**\n * Returns the billing id for vpaas meetings.\n *\n * @param {Object} state - The state of the app.\n * @param {string} feature - Feature to be looked up for disable state.\n * @returns {boolean}\n */\nexport function isFeatureDisabled(state: Object, feature: string) {\n    return state['features/jaas'].disabledFeatures.includes(feature);\n}\n\n/**\n * Sends a request for retrieving jaas JWT.\n *\n * @param {Object} reqData - The request info.\n * @param {string} reqData.appId - The client appId.\n * @param {string} reqData.baseUrl - The base url for the request.\n * @returns {void}\n */\nexport async function sendGetJWTRequest({ appId, baseUrl }: {\n    appId: string,\n    baseUrl: string\n}) {\n    const fullUrl = `${baseUrl}/v1/public/token/${encodeURIComponent(appId)}`;\n\n    try {\n        const res = await fetch(fullUrl, {\n            method: 'GET'\n        });\n\n        if (res.ok) {\n            return res.json();\n        }\n\n        throw new Error('Request not successful');\n    } catch (err) {\n        throw new Error(err);\n\n    }\n}\n\n/**\n * Gets a jaas JWT.\n *\n * @param {Object} state - Redux state.\n * @returns {string} The JWT.\n */\nexport async function getJaasJWT(state: Object) {\n    const baseUrl = state['features/base/config'].jaasTokenUrl;\n    const appId = getVpaasTenant(state);\n\n    const shouldSendRequest = Boolean(baseUrl && appId);\n\n    if (shouldSendRequest) {\n        try {\n            const jwt = await sendGetJWTRequest({\n                appId,\n                baseUrl\n            });\n\n            return jwt.token;\n        } catch (err) {\n            logger.error('Could not send request', err);\n        }\n    }\n}\n","// @flow\n\nimport { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\n\n\n/**\n * The identifier of the sound to be played when a live streaming session is stopped.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_OFF_SOUND_ID = 'LIVE_STREAMING_OFF_SOUND';\n\n/**\n * The identifier of the sound to be played when a live streaming session is started.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_ON_SOUND_ID = 'LIVE_STREAMING_ON_SOUND';\n\n/**\n * The identifier of the sound to be played when a recording session is stopped.\n *\n * @type {string}\n */\nexport const RECORDING_OFF_SOUND_ID = 'RECORDING_OFF_SOUND';\n\n/**\n * The identifier of the sound to be played when a recording session is started.\n *\n * @type {string}\n */\nexport const RECORDING_ON_SOUND_ID = 'RECORDING_ON_SOUND';\n\n/**\n * Expected supported recording types.\n *\n * @enum {string}\n */\nexport const RECORDING_TYPES = {\n    JITSI_REC_SERVICE: 'recording-service',\n    DROPBOX: 'dropbox'\n};\n\n/**\n * An array defining the priorities of the recording (or live streaming)\n * statuses, where the index of the array is the priority itself.\n *\n * @type {Array<string>}\n */\nexport const RECORDING_STATUS_PRIORITIES = [\n    JitsiRecordingConstants.status.OFF,\n    JitsiRecordingConstants.status.PENDING,\n    JitsiRecordingConstants.status.ON\n];\n","/* Copyright @ 2015-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Logger = require(\"./Logger\");\nvar LogCollector = require(\"./LogCollector\");\n\n/**\n * Definition of the log method\n * @name log_method\n * @function\n * @param {...*} log_args the arguments to be logged\n */\n/**\n * The logger's transport type definition.\n *\n * @typedef {object} LoggerTransport\n *\n * @property {log_method} trace method called to log on {@link Logger.levels.TRACE} logging level\n * @property {log_method} debug method called to log on {@link Logger.levels.DEBUG} logging level\n * @property {log_method} info method called to log on {@link Logger.levels.INFO} logging level\n * @property {log_method} log method called to log on {@link Logger.levels.LOG} logging level\n * @property {log_method} warn method called to log on {@link Logger.levels.WARN} logging level\n * @property {log_method} error method called to log on {@link Logger.levels.ERROR} logging level\n */\n\n/**\n * Map with the created loggers with ID.\n */\nvar idLoggers = {};\n\n/**\n * Array with the loggers without id.\n */\nvar loggers = [];\n\n/**\n * Log level for the lbrary.\n */\nvar curLevel = Logger.levels.TRACE;\n\n\nmodule.exports = {\n    /**\n     * Adds given {@link LoggerTransport} instance to the list of global\n     * transports which means that it'll be used by all {@link Logger}s\n     * @param {LoggerTransport} transport\n     */\n    addGlobalTransport: function(transport) {\n        Logger.addGlobalTransport(transport);\n    },\n    /**\n     * Removes given {@link LoggerTransport} instance from the list of global\n     * transports\n     * @param {LoggerTransport} transport\n     */\n    removeGlobalTransport: function(transport) {\n        Logger.removeGlobalTransport(transport);\n    },\n    /**\n    * Sets global options which will be used by all loggers. Changing these\n    * works even after other loggers are created.\n    */\n    setGlobalOptions: function(options) {\n        Logger.setGlobalOptions(options);\n    },\n    /**\n     * Creates new logger.\n     * @arguments the same as Logger constructor\n     */\n    getLogger: function(id, transports, options) {\n        var logger = new Logger(curLevel, id, transports, options);\n        if(id) {\n            idLoggers[id] = idLoggers[id] || [];\n            idLoggers[id].push(logger);\n        } else {\n            loggers.push(logger);\n        }\n        return logger;\n    },\n    /**\n     * Changes the log level for the existing loggers by id.\n     * @param level the new log level.\n     * @param id if specified the level will be changed only for loggers with the\n     * same id. Otherwise the operation will affect all loggers that don't\n     * have id.\n     */\n    setLogLevelById: function(level, id) {\n        var l = id? (idLoggers[id] || []) : loggers;\n        for(var i = 0; i < l.length; i++) {\n            l[i].setLevel(level);\n        }\n    },\n    /**\n     * Changes the log level for all existing loggers.\n     * @param level the new log level.\n     */\n    setLogLevel: function (level) {\n        curLevel = level;\n        var i = 0;\n        for(; i < loggers.length; i++) {\n            loggers[i].setLevel(level);\n        }\n\n        for(var id in idLoggers) {\n            var l = idLoggers[id] || [];\n            for(i = 0; i < l.length; i++) {\n                l[i].setLevel(level);\n            }\n        }\n    },\n    /**\n     * The supported log levels.\n     */\n    levels: Logger.levels,\n    /**\n     * Exports the <tt>LogCollector</tt>.\n     */\n    LogCollector: LogCollector\n};\n","// @flow\n\nimport { getRoomName } from '../base/conference';\nimport { getDialOutStatusUrl, getDialOutUrl } from '../base/config/functions';\nimport { isAudioMuted, isVideoMutedByUser } from '../base/media';\n\n/**\n * Selector for the visibility of the 'join by phone' button.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isJoinByPhoneButtonVisible(state: Object): boolean {\n    return Boolean(getDialOutUrl(state) && getDialOutStatusUrl(state));\n}\n\n/**\n * Selector for determining if the device status strip is visible or not.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isDeviceStatusVisible(state: Object): boolean {\n    return !(isAudioMuted(state) && isVideoMutedByUser(state))\n    && !state['features/base/config'].startSilent;\n}\n\n/**\n * Selector for determining if the display name is mandatory.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isDisplayNameRequired(state: Object): boolean {\n    return state['features/prejoin'].isDisplayNameRequired\n        || state['features/base/config'].requireDisplayName;\n}\n\n/**\n * Selector for determining if the user has chosen to skip prejoin page.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinSkipped(state: Object) {\n    return state['features/prejoin'].userSelectedSkipPrejoin;\n}\n\n/**\n * Returns the text for the prejoin status bar.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDeviceStatusText(state: Object): string {\n    return state['features/prejoin']?.deviceStatusText;\n}\n\n/**\n * Returns the type of the prejoin status bar: 'ok'|'warning'.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDeviceStatusType(state: Object): string {\n    return state['features/prejoin']?.deviceStatusType;\n}\n\n/**\n * Returns the 'conferenceUrl' used for dialing out.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDialOutConferenceUrl(state: Object): string {\n    return `${getRoomName(state)}@${state['features/base/config'].hosts.muc}`;\n}\n\n/**\n * Selector for getting the dial out country.\n *\n * @param {Object} state - The state of the app.\n * @returns {Object}\n */\nexport function getDialOutCountry(state: Object): Object {\n    return state['features/prejoin'].dialOutCountry;\n}\n\n/**\n * Selector for getting the dial out number (without prefix).\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDialOutNumber(state: Object): string {\n    return state['features/prejoin'].dialOutNumber;\n}\n\n/**\n * Selector for getting the dial out status while calling.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDialOutStatus(state: Object): string {\n    return state['features/prejoin'].dialOutStatus;\n}\n\n/**\n * Returns the full dial out number (containing country code and +).\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getFullDialOutNumber(state: Object): string {\n    const dialOutNumber = getDialOutNumber(state);\n    const country = getDialOutCountry(state);\n\n    return `+${country.dialCode}${dialOutNumber}`;\n}\n\n/**\n * Selector for getting the error if any while creating streams.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getRawError(state: Object): string {\n    return state['features/prejoin']?.rawError;\n}\n\n/**\n * Selector for getting the visibility state for the 'JoinByPhoneDialog'.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isJoinByPhoneDialogVisible(state: Object): boolean {\n    return state['features/prejoin']?.showJoinByPhoneDialog;\n}\n\n/**\n * Returns true if the prejoin page is enabled and no flag\n * to bypass showing the page is present.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinPageEnabled(state: Object): boolean {\n    return navigator.product !== 'ReactNative'\n        && state['features/base/config'].prejoinPageEnabled\n        && !state['features/base/settings'].userSelectedSkipPrejoin\n        && !(state['features/base/config'].enableForcedReload && state['features/prejoin'].skipPrejoinOnReload);\n}\n\n/**\n * Returns true if the prejoin page is visible & active.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function isPrejoinPageVisible(state: Object): boolean {\n    return isPrejoinPageEnabled(state) && state['features/prejoin']?.showPrejoin;\n}\n\n/**\n * Returns true if we should auto-knock in case lobby is enabled for the room.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function shouldAutoKnock(state: Object): boolean {\n    const { iAmRecorder, iAmSipGateway } = state['features/base/config'];\n\n    return (isPrejoinPageEnabled(state) || (iAmRecorder && iAmSipGateway))\n        && !state['features/lobby'].knocking;\n}\n","// @flow\n\nimport React from 'react';\n\nimport {\n    Icon,\n    IconCameraEmpty,\n    IconCameraEmptyDisabled,\n    IconMicrophoneEmpty,\n    IconMicrophoneEmptySlash\n} from '../base/icons';\n\n/**\n * Reducer key for the feature.\n */\nexport const REDUCER_KEY = 'features/participants-pane';\n\nexport type ActionTrigger = 'Hover' | 'Permanent'\n\n/**\n * Enum of possible participant action triggers.\n */\nexport const ACTION_TRIGGER: {HOVER: ActionTrigger, PERMANENT: ActionTrigger} = {\n    HOVER: 'Hover',\n    PERMANENT: 'Permanent'\n};\n\nexport type MediaState = 'Muted' | 'ForceMuted' | 'Unmuted' | 'None';\n\n/**\n * Enum of possible participant media states.\n */\nexport const MEDIA_STATE: {\n    MUTED: MediaState,\n    FORCE_MUTED: MediaState,\n    UNMUTED: MediaState,\n    NONE: MediaState,\n} = {\n    MUTED: 'Muted',\n    FORCE_MUTED: 'ForceMuted',\n    UNMUTED: 'Unmuted',\n    NONE: 'None'\n};\n\nexport type QuickActionButtonType = 'Mute' | 'AskToUnmute' | 'None';\n\n/**\n * Enum of possible participant mute button states.\n */\nexport const QUICK_ACTION_BUTTON: {\n    MUTE: QuickActionButtonType,\n    ASK_TO_UNMUTE: QuickActionButtonType,\n    NONE: QuickActionButtonType\n} = {\n    MUTE: 'Mute',\n    ASK_TO_UNMUTE: 'AskToUnmute',\n    NONE: 'None'\n};\n\n/**\n * Icon mapping for possible participant audio states.\n */\nexport const AudioStateIcons: {[MediaState]: React$Element<any> | null} = {\n    [MEDIA_STATE.FORCE_MUTED]: (\n        <Icon\n            color = '#E04757'\n            size = { 16 }\n            src = { IconMicrophoneEmptySlash } />\n    ),\n    [MEDIA_STATE.MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconMicrophoneEmptySlash } />\n    ),\n    [MEDIA_STATE.UNMUTED]: (\n        <Icon\n            color = '#1EC26A'\n            size = { 16 }\n            src = { IconMicrophoneEmpty } />\n    ),\n    [MEDIA_STATE.NONE]: null\n};\n\n/**\n * Icon mapping for possible participant video states.\n */\nexport const VideoStateIcons = {\n    [MEDIA_STATE.FORCE_MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmptyDisabled } />\n    ),\n    [MEDIA_STATE.MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmptyDisabled } />\n    ),\n    [MEDIA_STATE.UNMUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmpty } />\n    ),\n    [MEDIA_STATE.NONE]: null\n};\n","export default {\n    NICKNAME_CHANGED: 'UI.nickname_changed',\n\n    /**\n     * Notifies that local user changed email.\n     */\n    EMAIL_CHANGED: 'UI.email_changed',\n\n    /**\n     * Notifies that \"start muted\" settings changed.\n     */\n    AUDIO_MUTED: 'UI.audio_muted',\n    VIDEO_MUTED: 'UI.video_muted',\n    ETHERPAD_CLICKED: 'UI.etherpad_clicked',\n\n    /**\n     * Updates shared video with params: url, state, time(optional)\n     * Where url is the video link, state is stop/start/pause and time is the\n     * current video playing time.\n     */\n    TOGGLE_FULLSCREEN: 'UI.toogle_fullscreen',\n    FULLSCREEN_TOGGLED: 'UI.fullscreen_toggled',\n    AUTH_CLICKED: 'UI.auth_clicked',\n\n    /**\n     * Notifies that the audio only mode was toggled.\n     */\n    TOGGLE_AUDIO_ONLY: 'UI.toggle_audioonly',\n\n    /**\n     * Notifies that a command to toggle the filmstrip has been issued. The\n     * event may optionally specify a {Boolean} (primitive) value to assign to\n     * the visibility of the filmstrip (i.e. the event may act as a setter).\n     * The very toggling of the filmstrip may or may not occurred at the time\n     * of the receipt of the event depending on the position of the receiving\n     * event listener in relation to the event listener which carries out the\n     * command to toggle the filmstrip.\n     *\n     * @see {TOGGLED_FILMSTRIP}\n     */\n    TOGGLE_FILMSTRIP: 'UI.toggle_filmstrip',\n\n    TOGGLE_SCREENSHARING: 'UI.toggle_screensharing',\n    HANGUP: 'UI.hangup',\n    LOGOUT: 'UI.logout',\n    VIDEO_DEVICE_CHANGED: 'UI.video_device_changed',\n    AUDIO_DEVICE_CHANGED: 'UI.audio_device_changed',\n\n    /**\n     * Notifies that the side toolbar container has been toggled. The actual\n     * event must contain the identifier of the container that has been toggled\n     * and information about toggle on or off.\n     */\n    SIDE_TOOLBAR_CONTAINER_TOGGLED: 'UI.side_container_toggled',\n\n    /**\n     * Notifies that the raise hand has been changed.\n     */\n    LOCAL_RAISE_HAND_CHANGED: 'UI.local_raise_hand_changed'\n};\n","// @flow\n\n/**\n * Modal ID for the AddPeopleDialog modal.\n */\nexport const ADD_PEOPLE_DIALOG_VIEW_ID = 'ADD_PEOPLE_DIALOG_VIEW_ID';\n\n/**\n * Modal ID for the DialInSummary modal.\n */\nexport const DIAL_IN_SUMMARY_VIEW_ID = 'DIAL_IN_SUMMARY_VIEW_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is expired.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_EXPIRED_SOUND_ID\n    = 'OUTGOING_CALL_EXPIRED_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is rejected.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_REJECTED_SOUND_ID\n    = 'OUTGOING_CALL_REJECTED_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when the status of an outgoing call\n * is ringing.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_RINGING_SOUND_ID = 'OUTGOING_CALL_RINGING_SOUND_ID';\n\n/**\n * The identifier of the sound to be played when outgoing call is started.\n *\n * @type {string}\n */\nexport const OUTGOING_CALL_START_SOUND_ID = 'OUTGOING_CALL_START_SOUND_ID';\n\n/**\n * Regex for matching sip addresses.\n */\n// eslint-disable-next-line max-len\nexport const SIP_ADDRESS_REGEX = /^[+a-zA-Z0-9]+(?:([^\\s>:@]+)(?::([^\\s@>]+))?@)?([\\w\\-.]+)(?::(\\d+))?((?:;[^\\s=?>;]+(?:=[^\\s?;]+)?)*)(?:\\?(([^\\s&=>]+=[^\\s&=>]+)(&[^\\s&=>]+=[^\\s&=>]+)*))?$/;\n\n/**\n * Different invite types mapping\n */\nexport const INVITE_TYPES = {\n    PHONE: 'phone',\n    ROOM: 'room',\n    SIP: 'sip',\n    USER: 'user',\n    VIDEO_ROOM: 'videosipgw'\n};\n","/**\n * The interface config keys to whitelist, the keys that can be overridden.\n *\n * @private\n * @type Array\n */\nexport default [\n    'AUDIO_LEVEL_PRIMARY_COLOR',\n    'AUDIO_LEVEL_SECONDARY_COLOR',\n    'AUTO_PIN_LATEST_SCREEN_SHARE',\n    'CLOSE_PAGE_GUEST_HINT',\n    'CONNECTION_INDICATOR_AUTO_HIDE_ENABLED',\n    'CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT',\n    'CONNECTION_INDICATOR_DISABLED',\n    'DEFAULT_BACKGROUND',\n    'DISABLE_PRESENCE_STATUS',\n    'DISABLE_JOIN_LEAVE_NOTIFICATIONS',\n    'DEFAULT_LOCAL_DISPLAY_NAME',\n    'DEFAULT_REMOTE_DISPLAY_NAME',\n    'DISABLE_DOMINANT_SPEAKER_INDICATOR',\n    'DISABLE_FOCUS_INDICATOR',\n    'DISABLE_PRIVATE_MESSAGES',\n    'DISABLE_RINGING',\n    'DISABLE_TRANSCRIPTION_SUBTITLES',\n    'DISABLE_VIDEO_BACKGROUND',\n    'DISPLAY_WELCOME_PAGE_CONTENT',\n    'ENABLE_DIAL_OUT',\n    'ENABLE_FEEDBACK_ANIMATION',\n    'ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT',\n    'FILM_STRIP_MAX_HEIGHT',\n    'GENERATE_ROOMNAMES_ON_WELCOME_PAGE',\n    'HIDE_INVITE_MORE_HEADER',\n    'INDICATOR_FONT_SIZES',\n    'INITIAL_TOOLBAR_TIMEOUT',\n    'LANG_DETECTION',\n    'LIVE_STREAMING_HELP_LINK',\n    'LOCAL_THUMBNAIL_RATIO',\n    'MAXIMUM_ZOOMING_COEFFICIENT',\n    'NATIVE_APP_NAME',\n    'OPTIMAL_BROWSERS',\n    'PHONE_NUMBER_REGEX',\n    'PROVIDER_NAME',\n    'RECENT_LIST_ENABLED',\n    'REMOTE_THUMBNAIL_RATIO',\n    'SETTINGS_SECTIONS',\n    'SHARING_FEATURES',\n    'SHOW_CHROME_EXTENSION_BANNER',\n    'SHOW_DEEP_LINKING_IMAGE',\n    'SHOW_POWERED_BY',\n    'SUPPORT_URL',\n    'TILE_VIEW_MAX_COLUMNS',\n    'TOOLBAR_ALWAYS_VISIBLE',\n    'TOOLBAR_BUTTONS',\n    'TOOLBAR_TIMEOUT',\n    'UNSUPPORTED_BROWSERS',\n    'VERTICAL_FILMSTRIP',\n    'VIDEO_LAYOUT_FIT',\n    'VIDEO_QUALITY_LABEL_DISABLED'\n];\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/config');\n","// @flow\n\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport _ from 'lodash';\n\nimport { parseURLParams } from '../util';\n\nimport CONFIG_WHITELIST from './configWhitelist';\nimport { _CONFIG_STORE_PREFIX } from './constants';\nimport INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';\nimport logger from './logger';\n\n// XXX The function getRoomName is split out of\n// functions.js because it is bundled in both app.bundle and\n// do_external_connect, webpack 1 does not support tree shaking, and we don't\n// want all functions to be bundled in do_external_connect.\nexport { default as getRoomName } from './getRoomName';\n\n/**\n * Create a \"fake\" configuration object for the given base URL. This is used in case the config\n * couldn't be loaded in the welcome page, so at least we have something to try with.\n *\n * @param {string} baseURL - URL of the deployment for which we want the fake config.\n * @returns {Object}\n */\nexport function createFakeConfig(baseURL: string) {\n    const url = new URL(baseURL);\n\n    return {\n        hosts: {\n            domain: url.hostname,\n            muc: `conference.${url.hostname}`\n        },\n        bosh: `${baseURL}http-bind`,\n        clientNode: 'https://jitsi.org/jitsi-meet',\n        p2p: {\n            enabled: true\n        }\n    };\n}\n\n/**\n * Selector used to get the meeting region.\n *\n * @param {Object} state - The global state.\n * @returns {string}\n */\nexport function getMeetingRegion(state: Object) {\n    return state['features/base/config']?.deploymentInfo?.region || '';\n}\n\n/**\n * Selector used to get the endpoint used for fetching the recording.\n *\n * @param {Object} state - The global state.\n * @returns {string}\n */\nexport function getRecordingSharingUrl(state: Object) {\n    return state['features/base/config'].recordingSharingUrl;\n}\n\n/**\n * Overrides JSON properties in {@code config} and\n * {@code interfaceConfig} Objects with the values from {@code newConfig}.\n * Overrides only the whitelisted keys.\n *\n * @param {Object} config - The config Object in which we'll be overriding\n * properties.\n * @param {Object} interfaceConfig - The interfaceConfig Object in which we'll\n * be overriding properties.\n * @param {Object} loggingConfig - The loggingConfig Object in which we'll be\n * overriding properties.\n * @param {Object} json - Object containing configuration properties.\n * Destination object is selected based on root property name:\n * {\n *     config: {\n *         // config.js properties here\n *     },\n *     interfaceConfig: {\n *         // interface_config.js properties here\n *     },\n *     loggingConfig: {\n *         // logging_config.js properties here\n *     }\n * }.\n * @returns {void}\n */\nexport function overrideConfigJSON(\n        config: ?Object, interfaceConfig: ?Object, loggingConfig: ?Object,\n        json: Object) {\n    for (const configName of Object.keys(json)) {\n        let configObj;\n\n        if (configName === 'config') {\n            configObj = config;\n        } else if (configName === 'interfaceConfig') {\n            configObj = interfaceConfig;\n        } else if (configName === 'loggingConfig') {\n            configObj = loggingConfig;\n        }\n        if (configObj) {\n            const configJSON\n                = getWhitelistedJSON(configName, json[configName]);\n\n            if (!_.isEmpty(configJSON)) {\n                logger.info(\n                    `Extending ${configName} with: ${\n                        JSON.stringify(configJSON)}`);\n\n                // eslint-disable-next-line arrow-body-style\n                _.mergeWith(configObj, configJSON, (oldValue, newValue) => {\n\n                    // XXX We don't want to merge the arrays, we want to\n                    // overwrite them.\n                    return Array.isArray(oldValue) ? newValue : undefined;\n                });\n            }\n        }\n    }\n}\n\n/* eslint-enable max-params, no-shadow */\n\n/**\n * Apply whitelist filtering for configs with whitelists, skips this for others\n * configs (loggingConfig).\n * Only extracts overridden values for keys we allow to be overridden.\n *\n * @param {string} configName - The config name, one of config,\n * interfaceConfig, loggingConfig.\n * @param {Object} configJSON - The object with keys and values to override.\n * @returns {Object} - The result object only with the keys\n * that are whitelisted.\n */\nexport function getWhitelistedJSON(configName: string, configJSON: Object): Object {\n    if (configName === 'interfaceConfig') {\n        return _.pick(configJSON, INTERFACE_CONFIG_WHITELIST);\n    } else if (configName === 'config') {\n        return _.pick(configJSON, CONFIG_WHITELIST);\n    }\n\n    return configJSON;\n}\n\n/**\n * Restores a Jitsi Meet config.js from {@code localStorage} if it was\n * previously downloaded from a specific {@code baseURL} and stored with\n * {@link storeConfig}.\n *\n * @param {string} baseURL - The base URL from which the config.js was\n * previously downloaded and stored with {@code storeConfig}.\n * @returns {?Object} The Jitsi Meet config.js which was previously downloaded\n * from {@code baseURL} and stored with {@code storeConfig} if it was restored;\n * otherwise, {@code undefined}.\n */\nexport function restoreConfig(baseURL: string): ?Object {\n    const key = `${_CONFIG_STORE_PREFIX}/${baseURL}`;\n    const config = jitsiLocalStorage.getItem(key);\n\n    if (config) {\n        try {\n            return Bourne.parse(config) || undefined;\n        } catch (e) {\n            // Somehow incorrect data ended up in the storage. Clean it up.\n            jitsiLocalStorage.removeItem(key);\n        }\n    }\n\n    return undefined;\n}\n\n/* eslint-disable max-params */\n\n/**\n * Inspects the hash part of the location URI and overrides values specified\n * there in the corresponding config objects given as the arguments. The syntax\n * is: {@code https://server.com/room#config.debug=true\n * &interfaceConfig.showButton=false&loggingConfig.something=1}.\n *\n * In the hash part each parameter will be parsed to JSON and then the root\n * object will be matched with the corresponding config object given as the\n * argument to this function.\n *\n * @param {Object} config - This is the general config.\n * @param {Object} interfaceConfig - This is the interface config.\n * @param {Object} loggingConfig - The logging config.\n * @param {URI} location - The new location to which the app is navigating to.\n * @returns {void}\n */\nexport function setConfigFromURLParams(\n        config: ?Object,\n        interfaceConfig: ?Object,\n        loggingConfig: ?Object,\n        location: Object) {\n    const params = parseURLParams(location);\n    const json = {};\n\n    // At this point we have:\n    // params = {\n    //     \"config.disableAudioLevels\": false,\n    //     \"config.channelLastN\": -1,\n    //     \"interfaceConfig.APP_NAME\": \"Jitsi Meet\"\n    // }\n    // We want to have:\n    // json = {\n    //     config: {\n    //         \"disableAudioLevels\": false,\n    //         \"channelLastN\": -1\n    //     },\n    //     interfaceConfig: {\n    //         \"APP_NAME\": \"Jitsi Meet\"\n    //     }\n    // }\n    config && (json.config = {});\n    interfaceConfig && (json.interfaceConfig = {});\n    loggingConfig && (json.loggingConfig = {});\n\n    for (const param of Object.keys(params)) {\n        let base = json;\n        const names = param.split('.');\n        const last = names.pop();\n\n        for (const name of names) {\n            base = base[name] = base[name] || {};\n        }\n\n        base[last] = params[param];\n    }\n\n    overrideConfigJSON(config, interfaceConfig, loggingConfig, json);\n}\n\n/* eslint-enable max-params */\n","// @flow\n\nimport { TOOLBAR_BUTTONS } from './constants';\n\nexport * from './functions.any';\n\n/**\n * Removes all analytics related options from the given configuration, in case of a libre build.\n *\n * @param {*} config - The configuration which needs to be cleaned up.\n * @returns {void}\n */\nexport function _cleanupConfig(config: Object) { // eslint-disable-line no-unused-vars\n}\n\n/**\n * Returns the dial out url.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDialOutStatusUrl(state: Object): string {\n    return state['features/base/config'].guestDialOutStatusUrl;\n}\n\n/**\n * Returns the dial out status url.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDialOutUrl(state: Object): string {\n    return state['features/base/config'].guestDialOutUrl;\n}\n\n/**\n * Returns the replaceParticipant config.\n *\n * @param {Object} state - The state of the app.\n * @returns {boolean}\n */\nexport function getReplaceParticipant(state: Object): string {\n    return state['features/base/config'].replaceParticipant;\n}\n\n/**\n * Returns the list of enabled toolbar buttons.\n *\n * @param {Object} state - The redux state.\n * @returns {Array<string>} - The list of enabled toolbar buttons.\n */\nexport function getToolbarButtons(state: Object): Array<string> {\n    const { toolbarButtons } = state['features/base/config'];\n\n    return Array.isArray(toolbarButtons) ? toolbarButtons : TOOLBAR_BUTTONS;\n}\n\n/**\n * Checks if the specified button is enabled.\n *\n * @param {string} buttonName - The name of the button.\n * {@link interfaceConfig}.\n * @param {Object|Array<string>} state - The redux state or the array with the enabled buttons.\n * @returns {boolean} - True if the button is enabled and false otherwise.\n */\nexport function isToolbarButtonEnabled(buttonName: string, state: Object | Array<string>) {\n    const buttons = Array.isArray(state) ? state : getToolbarButtons(state);\n\n    return buttons.includes(buttonName);\n}\n","/* global APP  */\n\nimport Logger from 'jitsi-meet-logger';\n\nimport { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';\nimport {\n    getPinnedParticipant,\n    getParticipantById\n} from '../../../react/features/base/participants';\nimport { getTrackByMediaTypeAndParticipant } from '../../../react/features/base/tracks';\n\nimport LargeVideoManager from './LargeVideoManager';\nimport { VIDEO_CONTAINER_TYPE } from './VideoContainer';\n\nconst logger = Logger.getLogger(__filename);\nlet largeVideo;\n\nconst VideoLayout = {\n    /**\n     * Handler for local flip X changed event.\n     */\n    onLocalFlipXChanged() {\n        if (largeVideo) {\n            const { store } = APP;\n            const { localFlipX } = store.getState()['features/base/settings'];\n\n            largeVideo.onLocalFlipXChange(localFlipX);\n        }\n    },\n\n    /**\n     * Cleans up state of this singleton {@code VideoLayout}.\n     *\n     * @returns {void}\n     */\n    reset() {\n        this._resetLargeVideo();\n    },\n\n    initLargeVideo() {\n        this._resetLargeVideo();\n\n        largeVideo = new LargeVideoManager();\n\n        const { store } = APP;\n        const { localFlipX } = store.getState()['features/base/settings'];\n\n        if (typeof localFlipX === 'boolean') {\n            largeVideo.onLocalFlipXChange(localFlipX);\n        }\n        largeVideo.updateContainerSize();\n    },\n\n    /**\n     * Sets the audio level of the video elements associated to the given id.\n     *\n     * @param id the video identifier in the form it comes from the library\n     * @param lvl the new audio level to update to\n     */\n    setAudioLevel(id, lvl) {\n        if (largeVideo && id === largeVideo.id) {\n            largeVideo.updateLargeVideoAudioLevel(lvl);\n        }\n    },\n\n    /**\n     * FIXME get rid of this method once muted indicator are reactified (by\n     * making sure that user with no tracks is displayed as muted )\n     *\n     * If participant has no tracks will make the UI display muted status.\n     * @param {string} participantId\n     */\n    updateVideoMutedForNoTracks(participantId) {\n        const participant = APP.conference.getParticipantById(participantId);\n\n        if (participant && !participant.getTracksByMediaType('video').length) {\n            VideoLayout._updateLargeVideoIfDisplayed(participantId, true);\n        }\n    },\n\n    /**\n     * Return the type of the remote video.\n     * @param id the id for the remote video\n     * @returns {String} the video type video or screen.\n     */\n    getRemoteVideoType(id) {\n        const state = APP.store.getState();\n        const participant = getParticipantById(state, id);\n\n        if (participant?.isFakeParticipant) {\n            return VIDEO_TYPE.CAMERA;\n        }\n\n        const videoTrack = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n\n        return videoTrack?.videoType;\n    },\n\n    getPinnedId() {\n        const { id } = getPinnedParticipant(APP.store.getState()) || {};\n\n        return id || null;\n    },\n\n    /**\n     * Shows/hides warning about a user's connectivity issues.\n     *\n     * @param {string} id - The ID of the remote participant(MUC nickname).\n     * @returns {void}\n     */\n    onParticipantConnectionStatusChanged(id) {\n        if (APP.conference.isLocalId(id)) {\n\n            return;\n        }\n\n        // We have to trigger full large video update to transition from\n        // avatar to video on connectivity restored.\n        this._updateLargeVideoIfDisplayed(id, true);\n    },\n\n    /**\n     * On last N change event.\n     *\n     * @param endpointsLeavingLastN the list currently leaving last N\n     * endpoints\n     * @param endpointsEnteringLastN the list currently entering last N\n     * endpoints\n     */\n    onLastNEndpointsChanged(endpointsLeavingLastN, endpointsEnteringLastN) {\n        if (endpointsLeavingLastN) {\n            endpointsLeavingLastN.forEach(this._updateLargeVideoIfDisplayed, this);\n        }\n\n        if (endpointsEnteringLastN) {\n            endpointsEnteringLastN.forEach(this._updateLargeVideoIfDisplayed, this);\n        }\n    },\n\n    /**\n     * Resizes the video area.\n     */\n    resizeVideoArea() {\n        if (largeVideo) {\n            largeVideo.updateContainerSize();\n            largeVideo.resize(false);\n        }\n    },\n\n    changeUserAvatar(id, avatarUrl) {\n        if (this.isCurrentlyOnLarge(id)) {\n            largeVideo.updateAvatar(avatarUrl);\n        }\n    },\n\n    isLargeVideoVisible() {\n        return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);\n    },\n\n    /**\n     * @return {LargeContainer} the currently displayed container on large\n     * video.\n     */\n    getCurrentlyOnLargeContainer() {\n        return largeVideo.getCurrentContainer();\n    },\n\n    isCurrentlyOnLarge(id) {\n        return largeVideo && largeVideo.id === id;\n    },\n\n    updateLargeVideo(id, forceUpdate) {\n        if (!largeVideo) {\n            return;\n        }\n        const currentContainer = largeVideo.getCurrentContainer();\n        const currentContainerType = largeVideo.getCurrentContainerType();\n        const isOnLarge = this.isCurrentlyOnLarge(id);\n        const state = APP.store.getState();\n        const videoTrack = getTrackByMediaTypeAndParticipant(state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n        const videoStream = videoTrack?.jitsiTrack;\n\n        if (isOnLarge && !forceUpdate\n                && LargeVideoManager.isVideoContainer(currentContainerType)\n                && videoStream) {\n            const currentStreamId = currentContainer.getStreamID();\n            const newStreamId = videoStream?.getId() || null;\n\n            // FIXME it might be possible to get rid of 'forceUpdate' argument\n            if (currentStreamId !== newStreamId) {\n                logger.debug('Enforcing large video update for stream change');\n                forceUpdate = true; // eslint-disable-line no-param-reassign\n            }\n        }\n\n        if (!isOnLarge || forceUpdate) {\n            const videoType = this.getRemoteVideoType(id);\n\n\n            largeVideo.updateLargeVideo(\n                id,\n                videoStream,\n                videoType || VIDEO_TYPE.CAMERA\n            ).catch(() => {\n                // do nothing\n            });\n        }\n    },\n\n    addLargeVideoContainer(type, container) {\n        largeVideo && largeVideo.addContainer(type, container);\n    },\n\n    removeLargeVideoContainer(type) {\n        largeVideo && largeVideo.removeContainer(type);\n    },\n\n    /**\n     * @returns Promise\n     */\n    showLargeVideoContainer(type, show) {\n        if (!largeVideo) {\n            return Promise.reject();\n        }\n\n        const isVisible = this.isLargeContainerTypeVisible(type);\n\n        if (isVisible === show) {\n            return Promise.resolve();\n        }\n\n        let containerTypeToShow = type;\n\n        // if we are hiding a container and there is focusedVideo\n        // (pinned remote video) use its video type,\n        // if not then use default type - large video\n\n        if (!show) {\n            const pinnedId = this.getPinnedId();\n\n            if (pinnedId) {\n                containerTypeToShow = this.getRemoteVideoType(pinnedId);\n            } else {\n                containerTypeToShow = VIDEO_CONTAINER_TYPE;\n            }\n        }\n\n        return largeVideo.showContainer(containerTypeToShow);\n    },\n\n    isLargeContainerTypeVisible(type) {\n        return largeVideo && largeVideo.state === type;\n    },\n\n    /**\n     * Returns the id of the current video shown on large.\n     * Currently used by tests (torture).\n     */\n    getLargeVideoID() {\n        return largeVideo && largeVideo.id;\n    },\n\n    /**\n     * Returns the the current video shown on large.\n     * Currently used by tests (torture).\n     */\n    getLargeVideo() {\n        return largeVideo;\n    },\n\n    /**\n     * Returns the wrapper jquery selector for the largeVideo\n     * @returns {JQuerySelector} the wrapper jquery selector for the largeVideo\n     */\n    getLargeVideoWrapper() {\n        return this.getCurrentlyOnLargeContainer().$wrapper;\n    },\n\n    /**\n     * Helper method to invoke when the video layout has changed and elements\n     * have to be re-arranged and resized.\n     *\n     * @returns {void}\n     */\n    refreshLayout() {\n        VideoLayout.resizeVideoArea();\n    },\n\n    /**\n     * Cleans up any existing largeVideo instance.\n     *\n     * @private\n     * @returns {void}\n     */\n    _resetLargeVideo() {\n        if (largeVideo) {\n            largeVideo.destroy();\n        }\n\n        largeVideo = null;\n    },\n\n    /**\n     * Triggers an update of large video if the passed in participant is\n     * currently displayed on large video.\n     *\n     * @param {string} participantId - The participant ID that should trigger an\n     * update of large video if displayed.\n     * @param {boolean} force - Whether or not the large video update should\n     * happen no matter what.\n     * @returns {void}\n     */\n    _updateLargeVideoIfDisplayed(participantId, force = false) {\n        if (this.isCurrentlyOnLarge(participantId)) {\n            this.updateLargeVideo(participantId, force);\n        }\n    },\n\n    /**\n     * Handles window resizes.\n     */\n    onResize() {\n        VideoLayout.resizeVideoArea();\n    }\n};\n\nexport default VideoLayout;\n","// @flow\n\nimport { getActiveSession } from '../../features/recording/functions';\nimport { getRoomName } from '../base/conference';\nimport { getInviteURL } from '../base/connection';\nimport { isIosMobileBrowser } from '../base/environment/utils';\nimport { i18next } from '../base/i18n';\nimport { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\nimport { getLocalParticipant, isLocalParticipantModerator } from '../base/participants';\nimport { toState } from '../base/redux';\nimport { doGetJSON, parseURIString } from '../base/util';\nimport { isVpaasMeeting } from '../jaas/functions';\n\nimport { INVITE_TYPES, SIP_ADDRESS_REGEX } from './constants';\nimport logger from './logger';\n\ndeclare var $: Function;\ndeclare var interfaceConfig: Object;\n\n/**\n * Sends an ajax request to check if the phone number can be called.\n *\n * @param {string} dialNumber - The dial number to check for validity.\n * @param {string} dialOutAuthUrl - The endpoint to use for checking validity.\n * @returns {Promise} - The promise created by the request.\n */\nexport function checkDialNumber(\n        dialNumber: string,\n        dialOutAuthUrl: string\n): Promise<Object> {\n    const fullUrl = `${dialOutAuthUrl}?phone=${dialNumber}`;\n\n    return new Promise((resolve, reject) => {\n        $.getJSON(fullUrl)\n            .then(resolve)\n            .catch(reject);\n    });\n}\n\n/**\n * Sends a GET request to obtain the conference ID necessary for identifying\n * which conference to join after diaing the dial-in service.\n *\n * @param {string} baseUrl - The url for obtaining the conference ID (pin) for\n * dialing into a conference.\n * @param {string} roomName - The conference name to find the associated\n * conference ID.\n * @param {string} mucURL - In which MUC the conference exists.\n * @returns {Promise} - The promise created by the request.\n */\nexport function getDialInConferenceID(\n        baseUrl: string,\n        roomName: string,\n        mucURL: string\n): Promise<Object> {\n\n    const conferenceIDURL = `${baseUrl}?conference=${roomName}@${mucURL}`;\n\n    return doGetJSON(conferenceIDURL, true);\n}\n\n/**\n * Sends a GET request for phone numbers used to dial into a conference.\n *\n * @param {string} url - The service that returns conference dial-in numbers.\n * @param {string} roomName - The conference name to find the associated\n * conference ID.\n * @param {string} mucURL - In which MUC the conference exists.\n * @returns {Promise} - The promise created by the request. The returned numbers\n * may be an array of Objects containing numbers, with keys countryCode,\n * tollFree, formattedNumber or an object with countries as keys and arrays of\n * phone number strings, as the second one should not be used and is deprecated.\n */\nexport function getDialInNumbers(\n        url: string,\n        roomName: string,\n        mucURL: string\n): Promise<*> {\n\n    const fullUrl = `${url}?conference=${roomName}@${mucURL}`;\n\n    return doGetJSON(fullUrl, true);\n}\n\n/**\n * Removes all non-numeric characters from a string.\n *\n * @param {string} text - The string from which to remove all characters except\n * numbers.\n * @returns {string} A string with only numbers.\n */\nexport function getDigitsOnly(text: string = ''): string {\n    return text.replace(/\\D/g, '');\n}\n\n/**\n * Type of the options to use when sending a search query.\n */\nexport type GetInviteResultsOptions = {\n\n    /**\n     * The endpoint to use for checking phone number validity.\n     */\n    dialOutAuthUrl: string,\n\n    /**\n     * Whether or not to search for people.\n     */\n    addPeopleEnabled: boolean,\n\n    /**\n     * Whether or not to check phone numbers.\n     */\n    dialOutEnabled: boolean,\n\n    /**\n     * Array with the query types that will be executed -\n     * \"conferenceRooms\" | \"user\" | \"room\".\n     */\n    peopleSearchQueryTypes: Array<string>,\n\n    /**\n     * The url to query for people.\n     */\n    peopleSearchUrl: string,\n\n    /**\n     * Whether or not to check sip invites.\n     */\n    sipInviteEnabled: boolean,\n\n    /**\n     * The jwt token to pass to the search service.\n     */\n    jwt: string\n};\n\n/**\n * Combines directory search with phone number validation to produce a single\n * set of invite search results.\n *\n * @param {string} query - Text to search.\n * @param {GetInviteResultsOptions} options - Options to use when searching.\n * @returns {Promise<*>}\n */\nexport function getInviteResultsForQuery(\n        query: string,\n        options: GetInviteResultsOptions\n): Promise<*> {\n\n    const text = query.trim();\n\n    const {\n        dialOutAuthUrl,\n        addPeopleEnabled,\n        dialOutEnabled,\n        peopleSearchQueryTypes,\n        peopleSearchUrl,\n        sipInviteEnabled,\n        jwt\n    } = options;\n\n    let peopleSearchPromise;\n\n    if (addPeopleEnabled && text) {\n        peopleSearchPromise = searchDirectory(\n            peopleSearchUrl,\n            jwt,\n            text,\n            peopleSearchQueryTypes);\n    } else {\n        peopleSearchPromise = Promise.resolve([]);\n    }\n\n\n    let hasCountryCode = text.startsWith('+');\n    let phoneNumberPromise;\n\n    // Phone numbers are handled a specially to enable both cases of restricting\n    // numbers to telephone number-y numbers and accepting any arbitrary string,\n    // which may be valid for SIP (jigasi) calls. If the dialOutAuthUrl is\n    // defined, then it is assumed the call is to a telephone number and\n    // some validation of the number is completed, with the + sign used as a way\n    // for the UI to detect and enforce the usage of a country code. If the\n    // dialOutAuthUrl is not defined, accept anything because this is assumed\n    // to be the SIP (jigasi) case.\n    if (dialOutEnabled && dialOutAuthUrl && isMaybeAPhoneNumber(text)) {\n        let numberToVerify = text;\n\n        // When the number to verify does not start with a +, we assume no\n        // proper country code has been entered. In such a case, prepend 1 for\n        // the country code. The service currently takes care of prepending the\n        // +.\n        if (!hasCountryCode && !text.startsWith('1')) {\n            numberToVerify = `1${numberToVerify}`;\n        }\n\n        // The validation service works properly when the query is digits only\n        // so ensure only digits get sent.\n        numberToVerify = getDigitsOnly(numberToVerify);\n\n        phoneNumberPromise = checkDialNumber(numberToVerify, dialOutAuthUrl);\n    } else if (dialOutEnabled && !dialOutAuthUrl) {\n        // fake having a country code to hide the country code reminder\n        hasCountryCode = true;\n\n        // With no auth url, let's say the text is a valid number\n        phoneNumberPromise = Promise.resolve({\n            allow: true,\n            country: '',\n            phone: text\n        });\n    } else {\n        phoneNumberPromise = Promise.resolve({});\n    }\n\n    return Promise.all([ peopleSearchPromise, phoneNumberPromise ])\n        .then(([ peopleResults, phoneResults ]) => {\n            const results = [\n                ...peopleResults\n            ];\n\n            /**\n             * This check for phone results is for the day the call to searching\n             * people might return phone results as well. When that day comes\n             * this check will make it so the server checks are honored and the\n             * local appending of the number is not done. The local appending of\n             * the phone number can then be cleaned up when convenient.\n             */\n            const hasPhoneResult\n                = peopleResults.find(result => result.type === INVITE_TYPES.PHONE);\n\n            if (!hasPhoneResult && typeof phoneResults.allow === 'boolean') {\n                results.push({\n                    allowed: phoneResults.allow,\n                    country: phoneResults.country,\n                    type: INVITE_TYPES.PHONE,\n                    number: phoneResults.phone,\n                    originalEntry: text,\n                    showCountryCodeReminder: !hasCountryCode\n                });\n            }\n\n            if (sipInviteEnabled && isASipAddress(text)) {\n                results.push({\n                    type: INVITE_TYPES.SIP,\n                    address: text\n                });\n            }\n\n            return results;\n        });\n}\n\n/**\n * Creates a custom no new lines message for iOS default mail describing how to dial in to the conference.\n *\n * @returns {string}\n */\nexport function getInviteTextiOS({\n    state,\n    phoneNumber,\n    t\n}: Object) {\n    if (!isIosMobileBrowser()) {\n        return '';\n    }\n\n    const dialIn = state['features/invite'];\n    const inviteUrl = getInviteURL(state);\n    const localParticipant = getLocalParticipant(state);\n    const localParticipantName = localParticipant?.name;\n\n    const inviteURL = _decodeRoomURI(inviteUrl);\n\n    let invite = localParticipantName\n        ? t('info.inviteTextiOSPersonal', { name: localParticipantName })\n        : t('info.inviteURLFirstPartGeneral');\n\n    invite += ' ';\n\n    invite += t('info.inviteTextiOSInviteUrl', { inviteUrl });\n    invite += ' ';\n\n    if (shouldDisplayDialIn(dialIn)) {\n        invite += t('info.inviteTextiOSPhone', {\n            number: phoneNumber,\n            conferenceID: dialIn.conferenceID,\n            didUrl: getDialInfoPageURL(state)\n        });\n    }\n    invite += ' ';\n    invite += t('info.inviteTextiOSJoinSilent', { silentUrl: `${inviteURL}#config.startSilent=true` });\n\n    return invite;\n}\n\n/**\n * Creates a message describing how to dial in to the conference.\n *\n * @returns {string}\n */\nexport function getInviteText({\n    state,\n    phoneNumber,\n    t\n}: Object) {\n    const dialIn = state['features/invite'];\n    const inviteUrl = getInviteURL(state);\n    const currentLiveStreamingSession = getActiveSession(state, JitsiRecordingConstants.mode.STREAM);\n    const liveStreamViewURL\n        = currentLiveStreamingSession\n            && currentLiveStreamingSession.liveStreamViewURL;\n    const localParticipant = getLocalParticipant(state);\n    const localParticipantName = localParticipant?.name;\n\n    const inviteURL = _decodeRoomURI(inviteUrl);\n    let invite = localParticipantName\n        ? t('info.inviteURLFirstPartPersonal', { name: localParticipantName })\n        : t('info.inviteURLFirstPartGeneral');\n\n    invite += t('info.inviteURLSecondPart', {\n        url: inviteURL\n    });\n\n    if (liveStreamViewURL) {\n        const liveStream = t('info.inviteLiveStream', {\n            url: liveStreamViewURL\n        });\n\n        invite = `${invite}\\n${liveStream}`;\n    }\n\n    if (shouldDisplayDialIn(dialIn)) {\n        const dial = t('info.invitePhone', {\n            number: phoneNumber,\n            conferenceID: dialIn.conferenceID\n        });\n        const moreNumbers = t('info.invitePhoneAlternatives', {\n            url: getDialInfoPageURL(state),\n            silentUrl: `${inviteURL}#config.startSilent=true`\n        });\n\n        invite = `${invite}\\n${dial}\\n${moreNumbers}`;\n    }\n\n    return invite;\n}\n\n/**\n * Helper for determining how many of each type of user is being invited. Used\n * for logging and sending analytics related to invites.\n *\n * @param {Array} inviteItems - An array with the invite items, as created in\n * {@link _parseQueryResults}.\n * @returns {Object} An object with keys as user types and values as the number\n * of invites for that type.\n */\nexport function getInviteTypeCounts(inviteItems: Array<Object> = []) {\n    const inviteTypeCounts = {};\n\n    inviteItems.forEach(({ type }) => {\n        if (!inviteTypeCounts[type]) {\n            inviteTypeCounts[type] = 0;\n        }\n        inviteTypeCounts[type]++;\n    });\n\n    return inviteTypeCounts;\n}\n\n/**\n * Sends a post request to an invite service.\n *\n * @param {string} inviteServiceUrl - The invite service that generates the\n * invitation.\n * @param {string} inviteUrl - The url to the conference.\n * @param {string} jwt - The jwt token to pass to the search service.\n * @param {Immutable.List} inviteItems - The list of the \"user\" or \"room\" type\n * items to invite.\n * @returns {Promise} - The promise created by the request.\n */\nexport function invitePeopleAndChatRooms( // eslint-disable-line max-params\n        inviteServiceUrl: string,\n        inviteUrl: string,\n        jwt: string,\n        inviteItems: Array<Object>\n): Promise<void> {\n\n    if (!inviteItems || inviteItems.length === 0) {\n        return Promise.resolve();\n    }\n\n    return fetch(\n           `${inviteServiceUrl}?token=${jwt}`,\n           {\n               body: JSON.stringify({\n                   'invited': inviteItems,\n                   'url': inviteUrl\n               }),\n               method: 'POST',\n               headers: {\n                   'Content-Type': 'application/json'\n               }\n           }\n    );\n}\n\n/**\n * Determines if adding people is currently enabled.\n *\n * @param {boolean} state - Current state.\n * @returns {boolean} Indication of whether adding people is currently enabled.\n */\nexport function isAddPeopleEnabled(state: Object): boolean {\n    const { peopleSearchUrl } = state['features/base/config'];\n\n    return state['features/base/jwt'].jwt && Boolean(peopleSearchUrl) && !isVpaasMeeting(state);\n}\n\n/**\n * Determines if dial out is currently enabled or not.\n *\n * @param {boolean} state - Current state.\n * @returns {boolean} Indication of whether dial out is currently enabled.\n */\nexport function isDialOutEnabled(state: Object): boolean {\n    const { conference } = state['features/base/conference'];\n\n    return isLocalParticipantModerator(state)\n        && conference && conference.isSIPCallingSupported();\n}\n\n/**\n * Determines if inviting sip endpoints is enabled or not.\n *\n * @param {Object} state - Current state.\n * @returns {boolean} Indication of whether dial out is currently enabled.\n */\nexport function isSipInviteEnabled(state: Object): boolean {\n    const { sipInviteUrl } = state['features/base/config'];\n    const { features = {} } = getLocalParticipant(state);\n\n    return state['features/base/jwt'].jwt\n        && Boolean(sipInviteUrl)\n        && String(features['sip-outbound-call']) === 'true';\n}\n\n/**\n * Checks whether a string looks like it could be for a phone number.\n *\n * @param {string} text - The text to check whether or not it could be a phone\n * number.\n * @private\n * @returns {boolean} True if the string looks like it could be a phone number.\n */\nfunction isMaybeAPhoneNumber(text: string): boolean {\n    if (!isPhoneNumberRegex().test(text)) {\n        return false;\n    }\n\n    const digits = getDigitsOnly(text);\n\n    return Boolean(digits.length);\n}\n\n/**\n * Checks whether a string matches a sip address format.\n *\n * @param {string} text - The text to check.\n * @returns {boolean} True if provided text matches a sip address format.\n */\nfunction isASipAddress(text: string): boolean {\n    return SIP_ADDRESS_REGEX.test(text);\n}\n\n/**\n * RegExp to use to determine if some text might be a phone number.\n *\n * @returns {RegExp}\n */\nfunction isPhoneNumberRegex(): RegExp {\n    let regexString = '^[0-9+()-\\\\s]*$';\n\n    if (typeof interfaceConfig !== 'undefined') {\n        regexString = interfaceConfig.PHONE_NUMBER_REGEX || regexString;\n    }\n\n    return new RegExp(regexString);\n}\n\n/**\n * Sends an ajax request to a directory service.\n *\n * @param {string} serviceUrl - The service to query.\n * @param {string} jwt - The jwt token to pass to the search service.\n * @param {string} text - Text to search.\n * @param {Array<string>} queryTypes - Array with the query types that will be\n * executed - \"conferenceRooms\" | \"user\" | \"room\".\n * @returns {Promise} - The promise created by the request.\n */\nexport function searchDirectory( // eslint-disable-line max-params\n        serviceUrl: string,\n        jwt: string,\n        text: string,\n        queryTypes: Array<string> = [ 'conferenceRooms', 'user', 'room' ]\n): Promise<Array<Object>> {\n\n    const query = encodeURIComponent(text);\n    const queryTypesString = encodeURIComponent(JSON.stringify(queryTypes));\n\n    return fetch(`${serviceUrl}?query=${query}&queryTypes=${\n        queryTypesString}&jwt=${jwt}`)\n            .then(response => {\n                const jsonify = response.json();\n\n                if (response.ok) {\n                    return jsonify;\n                }\n\n                return jsonify\n                    .then(result => Promise.reject(result));\n            })\n            .catch(error => {\n                logger.error(\n                    'Error searching directory:', error);\n\n                return Promise.reject(error);\n            });\n}\n\n/**\n * Returns descriptive text that can be used to invite participants to a meeting\n * (share via mobile or use it for calendar event description).\n *\n * @param {Object} state - The current state.\n * @param {string} inviteUrl - The conference/location URL.\n * @param {boolean} useHtml - Whether to return html text.\n * @returns {Promise<string>} A {@code Promise} resolving with a\n * descriptive text that can be used to invite participants to a meeting.\n */\nexport function getShareInfoText(\n        state: Object, inviteUrl: string, useHtml: ?boolean): Promise<string> {\n    let roomUrl = _decodeRoomURI(inviteUrl);\n    const includeDialInfo = state['features/base/config'] !== undefined;\n\n    if (useHtml) {\n        roomUrl = `<a href=\"${roomUrl}\">${roomUrl}</a>`;\n    }\n\n    let infoText = i18next.t('share.mainText', { roomUrl });\n\n    if (includeDialInfo) {\n        const { room } = parseURIString(inviteUrl);\n        let numbersPromise;\n\n        if (state['features/invite'].numbers\n            && state['features/invite'].conferenceID) {\n            numbersPromise = Promise.resolve(state['features/invite']);\n        } else {\n            // we are requesting numbers and conferenceId directly\n            // not using updateDialInNumbers, because custom room\n            // is specified and we do not want to store the data\n            // in the state\n            const { dialInConfCodeUrl, dialInNumbersUrl, hosts }\n                = state['features/base/config'];\n            const mucURL = hosts && hosts.muc;\n\n            if (!dialInConfCodeUrl || !dialInNumbersUrl || !mucURL) {\n                // URLs for fetching dial in numbers not defined\n                return Promise.resolve(infoText);\n            }\n\n            numbersPromise = Promise.all([\n                getDialInNumbers(dialInNumbersUrl, room, mucURL),\n                getDialInConferenceID(dialInConfCodeUrl, room, mucURL)\n            ]).then(([ numbers, {\n                conference, id, message } ]) => {\n\n                if (!conference || !id) {\n                    return Promise.reject(message);\n                }\n\n                return {\n                    numbers,\n                    conferenceID: id\n                };\n            });\n        }\n\n        return numbersPromise.then(\n            ({ conferenceID, numbers }) => {\n                const phoneNumber = _getDefaultPhoneNumber(numbers) || '';\n\n                return `${\n                    i18next.t('info.dialInNumber')} ${\n                    phoneNumber} ${\n                    i18next.t('info.dialInConferenceID')} ${\n                    conferenceID}#\\n\\n`;\n            })\n            .catch(error =>\n                logger.error('Error fetching numbers or conferenceID', error))\n            .then(defaultDialInNumber => {\n                let dialInfoPageUrl = getDialInfoPageURL(state, room);\n\n                if (useHtml) {\n                    dialInfoPageUrl\n                        = `<a href=\"${dialInfoPageUrl}\">${dialInfoPageUrl}</a>`;\n                }\n\n                infoText += i18next.t('share.dialInfoText', {\n                    defaultDialInNumber,\n                    dialInfoPageUrl });\n\n                return infoText;\n            });\n    }\n\n    return Promise.resolve(infoText);\n}\n\n/**\n * Generates the URL for the static dial in info page.\n *\n * @param {Object} state - The state from the Redux store.\n * @param {string?} roomName - The conference name. Optional name, if missing will be extracted from state.\n * @returns {string}\n */\nexport function getDialInfoPageURL(state: Object, roomName: ?string) {\n    const { didPageUrl } = state['features/dynamic-branding'];\n    const conferenceName = roomName ?? getRoomName(state);\n    const { locationURL } = state['features/base/connection'];\n    const { href } = locationURL;\n    const room = _decodeRoomURI(conferenceName);\n\n    const url = didPageUrl || `${href.substring(0, href.lastIndexOf('/'))}/static/dialInInfo.html`;\n\n    return `${url}?room=${room}`;\n}\n\n/**\n * Generates the URL for the static dial in info page.\n *\n * @param {string} uri - The conference URI string.\n * @returns {string}\n */\nexport function getDialInfoPageURLForURIString(\n        uri: ?string) {\n    if (!uri) {\n        return undefined;\n    }\n    const { protocol, host, contextRoot, room } = parseURIString(uri);\n\n    return `${protocol}//${host}${contextRoot}static/dialInInfo.html?room=${room}`;\n}\n\n/**\n * Returns whether or not dial-in related UI should be displayed.\n *\n * @param {Object} dialIn - Dial in information.\n * @returns {boolean}\n */\nexport function shouldDisplayDialIn(dialIn: Object) {\n    const { conferenceID, numbers, numbersEnabled } = dialIn;\n    const phoneNumber = _getDefaultPhoneNumber(numbers);\n\n    return Boolean(\n            conferenceID\n            && numbers\n            && numbersEnabled\n            && phoneNumber);\n}\n\n/**\n * Returns if multiple dial-in numbers are available.\n *\n * @param {Array<string>|Object} dialInNumbers - The array or object of\n * numbers to check.\n * @private\n * @returns {boolean}\n */\nexport function hasMultipleNumbers(dialInNumbers: ?Object) {\n    if (!dialInNumbers) {\n        return false;\n    }\n\n    if (Array.isArray(dialInNumbers)) {\n        return dialInNumbers.length > 1;\n    }\n\n    // deprecated and will be removed\n    const { numbers } = dialInNumbers;\n\n    // eslint-disable-next-line no-confusing-arrow\n    return Boolean(numbers && Object.values(numbers).map(a => Array.isArray(a) ? a.length : 0)\n        .reduce((a, b) => a + b) > 1);\n}\n\n/**\n * Sets the internal state of which dial-in number to display.\n *\n * @param {Array<string>|Object} dialInNumbers - The array or object of\n * numbers to choose a number from.\n * @private\n * @returns {string|null}\n */\nexport function _getDefaultPhoneNumber(\n        dialInNumbers: ?Object): ?string {\n\n    if (!dialInNumbers) {\n        return null;\n    }\n\n    if (Array.isArray(dialInNumbers)) {\n        // new syntax follows\n        // find the default country inside dialInNumbers, US one\n        // or return the first one\n        const defaultNumber = dialInNumbers.find(number => number.default);\n\n        if (defaultNumber) {\n            return defaultNumber.formattedNumber;\n        }\n\n        return dialInNumbers.length > 0\n            ? dialInNumbers[0].formattedNumber : null;\n    }\n\n    const { numbers } = dialInNumbers;\n\n    if (numbers && Object.keys(numbers).length > 0) {\n        // deprecated and will be removed\n        const firstRegion = Object.keys(numbers)[0];\n\n        return firstRegion && numbers[firstRegion][0];\n    }\n\n    return null;\n}\n\n/**\n * Decodes URI only if doesn't contain a space(' ').\n *\n * @param {string} url - The string to decode.\n * @returns {string} - It the string contains space, encoded value is '%20' returns\n * same string, otherwise decoded one.\n * @private\n */\nexport function _decodeRoomURI(url: string) {\n    let roomUrl = url;\n\n    // we want to decode urls when the do not contain space, ' ', which url encoded is %20\n    if (roomUrl && !roomUrl.includes('%20')) {\n        roomUrl = decodeURI(roomUrl);\n    }\n\n    // Handles a special case where the room name has % encoded, the decoded will have\n    // % followed by a char (non-digit) which is not a valid URL and room name ... so we do not\n    // want to show this decoded\n    if (roomUrl.match(/.*%[^\\d].*/)) {\n        return url;\n    }\n\n    return roomUrl;\n}\n\n/**\n * Returns the stored conference id.\n *\n * @param {Object | Function} stateful - The Object or Function that can be\n * resolved to a Redux state object with the toState function.\n * @returns {string}\n */\nexport function getConferenceId(stateful: Object | Function) {\n    return toState(stateful)['features/invite'].conferenceID;\n}\n\n/**\n * Returns the default dial in number from the store.\n *\n * @param {Object | Function} stateful - The Object or Function that can be\n * resolved to a Redux state object with the toState function.\n * @returns {string | null}\n */\nexport function getDefaultDialInNumber(stateful: Object | Function) {\n    return _getDefaultPhoneNumber(toState(stateful)['features/invite'].numbers);\n}\n\n/**\n * Executes the dial out request.\n *\n * @param {string} url - The url for dialing out.\n * @param {Object} body - The body of the request.\n * @param {string} reqId - The unique request id.\n * @returns {Object}\n */\nexport async function executeDialOutRequest(url: string, body: Object, reqId: string) {\n    const res = await fetch(url, {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application/json',\n            'request-id': reqId\n        },\n        body: JSON.stringify(body)\n    });\n\n    const json = await res.json();\n\n    return res.ok ? json : Promise.reject(json);\n}\n\n/**\n * Executes the dial out status request.\n *\n * @param {string} url - The url for dialing out.\n * @param {string} reqId - The unique request id used on the dial out request.\n * @returns {Object}\n */\nexport async function executeDialOutStatusRequest(url: string, reqId: string) {\n    const res = await fetch(url, {\n        method: 'GET',\n        headers: {\n            'Content-Type': 'application/json',\n            'request-id': reqId\n        }\n    });\n\n    const json = await res.json();\n\n    return res.ok ? json : Promise.reject(json);\n}\n\nexport const sharingFeatures = {\n    email: 'email',\n    url: 'url',\n    dialIn: 'dial-in',\n    embed: 'embed'\n};\n\n/**\n * Returns true if a specific sharing feature is enabled in interface configuration.\n *\n * @param {string} sharingFeature - The sharing feature to check.\n * @returns {boolean}\n */\nexport function isSharingEnabled(sharingFeature: string) {\n    return typeof interfaceConfig === 'undefined'\n        || typeof interfaceConfig.SHARING_FEATURES === 'undefined'\n        || (interfaceConfig.SHARING_FEATURES.length && interfaceConfig.SHARING_FEATURES.indexOf(sharingFeature) > -1);\n}\n\n/**\n * Sends a post request to an invite service.\n *\n * @param {Array} inviteItems - The list of the \"sip\" type items to invite.\n * @param {URL} locationURL - The URL of the location.\n * @param {string} sipInviteUrl - The invite service that generates the invitation.\n * @param {string} jwt - The jwt token.\n * @param {string} roomName - The name to the conference.\n * @param {string} roomPassword - The password of the conference.\n * @param {string} displayName - The user display name.\n * @returns {Promise} - The promise created by the request.\n */\nexport function inviteSipEndpoints( // eslint-disable-line max-params\n        inviteItems: Array<Object>,\n        locationURL: URL,\n        sipInviteUrl: string,\n        jwt: string,\n        roomName: string,\n        roomPassword: String,\n        displayName: string\n): Promise<void> {\n    if (inviteItems.length === 0) {\n        return Promise.resolve();\n    }\n\n    const regex = new RegExp(`/${roomName}`, 'i');\n    const baseUrl = Object.assign(new URL(locationURL.toString()), {\n        pathname: locationURL.pathname.replace(regex, ''),\n        hash: '',\n        search: ''\n    });\n\n    return fetch(\n       sipInviteUrl,\n       {\n           body: JSON.stringify({\n               callParams: {\n                   callUrlInfo: {\n                       baseUrl,\n                       callName: roomName\n                   },\n                   passcode: roomPassword\n               },\n               sipClientParams: {\n                   displayName,\n                   sipAddress: inviteItems.map(item => item.address)\n               }\n           }),\n           method: 'POST',\n           headers: {\n               'Authorization': `Bearer ${jwt}`,\n               'Content-Type': 'application/json'\n           }\n       }\n    );\n}\n","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","/* @flow */\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    SET_OVERFLOW_MENU_VISIBLE,\n    SET_TOOLBAR_HOVERED,\n    SET_TOOLBOX_ALWAYS_VISIBLE,\n    SET_TOOLBOX_ENABLED,\n    SET_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT_MS,\n    SET_TOOLBOX_VISIBLE,\n    TOGGLE_TOOLBOX_VISIBLE\n} from './actionTypes';\n\n\n/**\n * Signals that toolbox timeout should be cleared.\n *\n * @returns {{\n *     type: CLEAR_TOOLBOX_TIMEOUT\n * }}\n */\nexport function clearToolboxTimeout(): Object {\n    return {\n        type: CLEAR_TOOLBOX_TIMEOUT\n    };\n}\n\n/**\n * Shows/hides the overflow menu.\n *\n * @param {boolean} visible - True to show it or false to hide it.\n * @returns {{\n *     type: SET_OVERFLOW_MENU_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setOverflowMenuVisible(visible: boolean): Object {\n    return {\n        type: SET_OVERFLOW_MENU_VISIBLE,\n        visible\n    };\n}\n\n/**\n * Signals that toolbar is hovered value should be changed.\n *\n * @param {boolean} hovered - Flag showing whether toolbar is hovered.\n * @returns {{\n *     type: SET_TOOLBAR_HOVERED,\n *     hovered: boolean\n * }}\n */\nexport function setToolbarHovered(hovered: boolean): Object {\n    return {\n        type: SET_TOOLBAR_HOVERED,\n        hovered\n    };\n}\n\n/**\n * Signals that always visible toolbars value should be changed.\n *\n * @param {boolean} alwaysVisible - Value to be set in redux store.\n * @returns {{\n *     type: SET_TOOLBOX_ALWAYS_VISIBLE,\n *     alwaysVisible: boolean\n * }}\n */\nexport function setToolboxAlwaysVisible(alwaysVisible: boolean): Object {\n    return {\n        type: SET_TOOLBOX_ALWAYS_VISIBLE,\n        alwaysVisible\n    };\n}\n\n/* eslint-disable flowtype/space-before-type-colon */\n\n/**\n * Enables/disables the toolbox.\n *\n * @param {boolean} enabled - True to enable the toolbox or false to disable it.\n * @returns {{\n *     type: SET_TOOLBOX_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setToolboxEnabled(enabled: boolean): Object {\n    return {\n        type: SET_TOOLBOX_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Dispatches an action which sets new timeout and clears the previous one.\n *\n * @param {Function} handler - Function to be invoked after the timeout.\n * @param {number} timeoutMS - Delay.\n * @returns {{\n *     type: SET_TOOLBOX_TIMEOUT,\n *     handler: Function,\n *     timeoutMS: number\n * }}\n */\nexport function setToolboxTimeout(handler: Function, timeoutMS: number)\n      : Object {\n    return {\n        type: SET_TOOLBOX_TIMEOUT,\n        handler,\n        timeoutMS\n    };\n}\n\n/* eslint-enable flowtype/space-before-type-colon */\n\n/**\n * Dispatches an action which sets new toolbox timeout value.\n *\n * @param {number} timeoutMS - Delay.\n * @returns {{\n *     type: SET_TOOLBOX_TIMEOUT_MS,\n *     timeoutMS: number\n * }}\n */\nexport function setToolboxTimeoutMS(timeoutMS: number): Object {\n    return {\n        type: SET_TOOLBOX_TIMEOUT_MS,\n        timeoutMS\n    };\n}\n\n/**\n * Shows/hides the toolbox.\n *\n * @param {boolean} visible - True to show the toolbox or false to hide it.\n * @returns {{\n *     type: SET_TOOLBOX_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setToolboxVisible(visible: boolean): Object {\n    return {\n        type: SET_TOOLBOX_VISIBLE,\n        visible\n    };\n}\n\n/**\n * Action to toggle the toolbox visibility.\n *\n * @returns {{\n *     type: TOGGLE_TOOLBOX_VISIBLE\n * }}\n */\nexport function toggleToolboxVisible() {\n    return {\n        type: TOGGLE_TOOLBOX_VISIBLE\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    FULL_SCREEN_CHANGED,\n    SET_FULL_SCREEN,\n    SET_OVERFLOW_DRAWER\n} from './actionTypes';\nimport {\n    clearToolboxTimeout,\n    setToolboxTimeout,\n    setToolboxTimeoutMS,\n    setToolboxVisible\n} from './actions.native';\n\ndeclare var interfaceConfig: Object;\n\nexport * from './actions.native';\n\n/**\n * Docks/undocks the Toolbox.\n *\n * @param {boolean} dock - True if dock, false otherwise.\n * @returns {Function}\n */\nexport function dockToolbox(dock: boolean): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { timeoutMS, visible } = getState()['features/toolbox'];\n\n        if (dock) {\n            // First make sure the toolbox is shown.\n            visible || dispatch(showToolbox());\n\n            dispatch(clearToolboxTimeout());\n        } else if (visible) {\n            dispatch(\n                setToolboxTimeout(\n                    () => dispatch(hideToolbox()),\n                    timeoutMS));\n        } else {\n            dispatch(showToolbox());\n        }\n    };\n}\n\n/**\n * Signals that full screen mode has been entered or exited.\n *\n * @param {boolean} fullScreen - Whether or not full screen mode is currently\n * enabled.\n * @returns {{\n *     type: FULL_SCREEN_CHANGED,\n *     fullScreen: boolean\n * }}\n */\nexport function fullScreenChanged(fullScreen: boolean) {\n    return {\n        type: FULL_SCREEN_CHANGED,\n        fullScreen\n    };\n}\n\n/**\n * Hides the toolbox.\n *\n * @param {boolean} force - True to force the hiding of the toolbox without\n * caring about the extended toolbar side panels.\n * @returns {Function}\n */\nexport function hideToolbox(force: boolean = false): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const {\n            alwaysVisible,\n            hovered,\n            timeoutMS\n        } = state['features/toolbox'];\n\n        if (alwaysVisible) {\n            return;\n        }\n\n        dispatch(clearToolboxTimeout());\n\n        const focusSelector = '.toolbox-content-items:focus-within,.filmstrip:focus-within,.remotevideomenu:hover';\n\n        if (!force\n                && (hovered\n                    || state['features/invite'].calleeInfoVisible\n                    || state['features/chat'].isOpen\n                    || document.querySelector(focusSelector))) {\n            dispatch(\n                setToolboxTimeout(\n                    () => dispatch(hideToolbox()),\n                    timeoutMS));\n        } else {\n            dispatch(setToolboxVisible(false));\n        }\n    };\n}\n\n/**\n * Signals a request to enter or exit full screen mode.\n *\n * @param {boolean} fullScreen - True to enter full screen mode, false to exit.\n * @returns {{\n *     type: SET_FULL_SCREEN,\n *     fullScreen: boolean\n * }}\n */\nexport function setFullScreen(fullScreen: boolean) {\n    return {\n        type: SET_FULL_SCREEN,\n        fullScreen\n    };\n}\n\n/**\n * Shows the toolbox for specified timeout.\n *\n * @param {number} timeout - Timeout for showing the toolbox.\n * @returns {Function}\n */\nexport function showToolbox(timeout: number = 0): Object {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const {\n            alwaysVisible,\n            enabled,\n            timeoutMS,\n            visible\n        } = state['features/toolbox'];\n\n        if (enabled && !visible) {\n            dispatch(setToolboxVisible(true));\n\n            // If the Toolbox is always visible, there's no need for a timeout\n            // to toggle its visibility.\n            if (!alwaysVisible) {\n                dispatch(\n                    setToolboxTimeout(\n                        () => dispatch(hideToolbox()),\n                        timeout || timeoutMS));\n                dispatch(setToolboxTimeoutMS(interfaceConfig.TOOLBAR_TIMEOUT));\n            }\n        }\n    };\n}\n\n/**\n * Signals a request to display overflow as drawer.\n *\n * @param {boolean} displayAsDrawer - True to display overflow as drawer, false to preserve original behaviour.\n * @returns {{\n *     type: SET_OVERFLOW_DRAWER,\n *     displayAsDrawer: boolean\n * }}\n */\nexport function setOverflowDrawer(displayAsDrawer: boolean) {\n    return {\n        type: SET_OVERFLOW_DRAWER,\n        displayAsDrawer\n    };\n}\n","import { gridSize as akGridSize, borderRadius } from '@atlaskit/theme/constants';\nimport * as colors from '@atlaskit/theme/colors';\nexport var themeNamespace = '@atlaskit-shared-theme/item'; // Used for Group titles and Item descriptions\n\nexport var compactSmallFontSize = 10;\nexport var compactLineHeight = 1.2;\nexport var gridSize = akGridSize();\nexport var defaultTheme = {\n  afterItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  beforeItemSpacing: {\n    compact: akGridSize(),\n    default: akGridSize()\n  },\n  borderRadius: borderRadius(),\n  focus: {\n    outline: colors.B100\n  },\n  height: {\n    compact: 0,\n    default: 0\n  },\n  width: {\n    compact: 'auto',\n    default: 'auto'\n  },\n  padding: {\n    default: {\n      bottom: akGridSize() / 2,\n      left: akGridSize() / 2,\n      right: akGridSize() / 2,\n      top: akGridSize() / 2\n    },\n    compact: {\n      bottom: akGridSize(),\n      left: akGridSize(),\n      right: akGridSize(),\n      top: akGridSize()\n    }\n  },\n  default: {\n    background: colors.background,\n    text: colors.text,\n    secondaryText: colors.N200\n  },\n  selected: {\n    background: colors.backgroundActive,\n    text: colors.N500,\n    secondaryText: colors.N200\n  },\n  active: {\n    background: colors.backgroundActive,\n    text: colors.textActive,\n    secondaryText: colors.N200\n  },\n  hover: {\n    background: colors.backgroundHover,\n    text: colors.textHover,\n    secondaryText: colors.N200\n  },\n  disabled: {\n    background: colors.N0,\n    text: colors.N200,\n    secondaryText: colors.N200\n  },\n  // same as hover in this case\n  dragging: {\n    background: colors.N20,\n    text: colors.N800,\n    secondaryText: colors.N200\n  }\n};\n\nvar isValidCssValue = function isValidCssValue(value) {\n  return value !== undefined && value !== null && value !== '';\n}; // Returns the theme that contains the requested theme key(s), preferring the user-supplied\n// theme if it is provided.\n\n\nexport var themeWithKeys = function themeWithKeys(maybeTheme, key, parentKey) {\n  if (parentKey) {\n    return maybeTheme && maybeTheme[parentKey] && isValidCssValue(maybeTheme[parentKey][key]) ? maybeTheme : defaultTheme;\n  }\n\n  return maybeTheme && isValidCssValue(maybeTheme[key]) ? maybeTheme : defaultTheme;\n}; // Returns the theme value for the requested key(s), falling back to the default theme if the\n// user-supplied theme doesn't exist or doesn't contain the requested key(s)\n\nexport var getThemeStyle = function getThemeStyle(maybeTheme, key, parentKey) {\n  var theme = themeWithKeys(maybeTheme, key, parentKey);\n  return parentKey ? theme[parentKey][key] : theme[key];\n};","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React from 'react';\n\nimport { isMobileBrowser } from '../../environment/utils';\n\ntype Props = {\n\n    /**\n     * Children of the component.\n     */\n    children: React$Node,\n\n    /**\n     * The text to be displayed in the tooltip.\n     */\n    content?: string | null,\n\n    /**\n     * The position of the tooltip relative to the element it contains.\n     */\n    position?: string\n\n}\n\n/**\n * Wrapper of AtlasKit Tooltip that doesn't render the actual tooltip in mobile browsers.\n *\n * @returns {ReactElement}\n */\nfunction TooltipWrapper({\n    children,\n    content,\n    position\n}: Props) {\n    if (isMobileBrowser()) {\n        return children;\n    }\n\n    return (\n        <Tooltip\n            content = { content }\n            position = { position }>\n            {children}\n        </Tooltip>\n    );\n}\n\nexport default TooltipWrapper;\n","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\n\nimport { OPEN_CHAT } from './actionTypes';\nimport { closeChat } from './actions.any';\n\nexport * from './actions.any';\n\n/**\n * Displays the chat panel.\n *\n * @param {Object} participant - The recipient for the private chat.\n * @returns {{\n *     participant: Participant,\n *     type: OPEN_CHAT\n * }}\n */\nexport function openChat(participant: Object) {\n    return function(dispatch: (Object) => Object) {\n        dispatch({\n            participant,\n            type: OPEN_CHAT\n        });\n    };\n}\n\n/**\n * Toggles display of the chat panel.\n *\n * @returns {Function}\n */\nexport function toggleChat() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const isOpen = getState()['features/chat'].isOpen;\n\n        if (isOpen) {\n            dispatch(closeChat());\n        } else {\n            dispatch(openChat());\n        }\n\n        // Recompute the large video size whenever we toggle the chat, as it takes chat state into account.\n        VideoLayout.onResize();\n    };\n}\n","\n/**\n * Action type to signal the start of the conference.\n */\nexport const PREJOIN_START_CONFERENCE = 'PREJOIN_START_CONFERENCE';\n\n/**\n * Action type to signal that prejoin page was initialized.\n */\nexport const PREJOIN_INITIALIZED = 'PREJOIN_INITIALIZED';\n\n/**\n * Action type to set the status of the device.\n */\nexport const SET_DEVICE_STATUS = 'SET_DEVICE_STATUS';\n\n/**\n * Action type to set the visibility of the prejoin page for the future.\n */\nexport const SET_SKIP_PREJOIN = 'SET_SKIP_PREJOIN';\n\n/**\n * Action type to set the visibility of the prejoin page when client is forcefully reloaded.\n */\nexport const SET_SKIP_PREJOIN_RELOAD = 'SET_SKIP_PREJOIN_RELOAD';\n\n/**\n * Action type used to set the mandatory stance of the prejoin display name.\n */\nexport const SET_PREJOIN_DISPLAY_NAME_REQUIRED = 'SET_PREJOIN_DISPLAY_NAME_REQUIRED';\n\n/**\n * Action type to set the country to dial out to.\n */\nexport const SET_DIALOUT_COUNTRY = 'SET_DIALOUT_COUNTRY';\n\n/**\n * Action type to set the dial out number.\n */\nexport const SET_DIALOUT_NUMBER = 'SET_DIALOUT_NUMBER';\n\n/**\n * Action type to set the dial out status while dialing.\n */\nexport const SET_DIALOUT_STATUS = 'SET_DIALOUT_STATUS';\n\n/**\n * Action type to set the visibility of the 'JoinByPhone' dialog.\n */\nexport const SET_JOIN_BY_PHONE_DIALOG_VISIBLITY = 'SET_JOIN_BY_PHONE_DIALOG_VISIBLITY';\n\n/**\n * Action type to set the precall test data.\n */\nexport const SET_PRECALL_TEST_RESULTS = 'SET_PRECALL_TEST_RESULTS';\n\n/**\n * Action type to disable the audio while on prejoin page.\n */\nexport const SET_PREJOIN_AUDIO_DISABLED = 'SET_PREJOIN_AUDIO_DISABLED';\n\n/**\n * Action type to mute/unmute the audio while on prejoin page.\n */\nexport const SET_PREJOIN_AUDIO_MUTED = 'SET_PREJOIN_AUDIO_MUTED';\n\n/**\n * Action type to set the errors while creating the prejoin streams.\n */\nexport const SET_PREJOIN_DEVICE_ERRORS = 'SET_PREJOIN_DEVICE_ERRORS';\n\n/**\n * Action type to set the visibility of the prejoin page.\n */\nexport const SET_PREJOIN_PAGE_VISIBILITY = 'SET_PREJOIN_PAGE_VISIBILITY';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/prejoin');\n","// @flow\n\ndeclare var JitsiMeetJS: Object;\n\nimport uuid from 'uuid';\n\nimport { getDialOutStatusUrl, getDialOutUrl } from '../base/config/functions';\nimport { createLocalTrack } from '../base/lib-jitsi-meet';\nimport { isVideoMutedByUser } from '../base/media';\nimport {\n    getLocalAudioTrack,\n    getLocalVideoTrack,\n    trackAdded,\n    replaceLocalTrack\n} from '../base/tracks';\nimport { createLocalTracksF } from '../base/tracks/functions';\nimport { openURLInBrowser } from '../base/util';\nimport { executeDialOutRequest, executeDialOutStatusRequest, getDialInfoPageURL } from '../invite/functions';\nimport { showErrorNotification } from '../notifications';\n\nimport {\n    PREJOIN_INITIALIZED,\n    PREJOIN_START_CONFERENCE,\n    SET_DEVICE_STATUS,\n    SET_DIALOUT_COUNTRY,\n    SET_DIALOUT_NUMBER,\n    SET_DIALOUT_STATUS,\n    SET_PREJOIN_DISPLAY_NAME_REQUIRED,\n    SET_SKIP_PREJOIN,\n    SET_SKIP_PREJOIN_RELOAD,\n    SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n    SET_PRECALL_TEST_RESULTS,\n    SET_PREJOIN_DEVICE_ERRORS,\n    SET_PREJOIN_PAGE_VISIBILITY\n} from './actionTypes';\nimport {\n    getFullDialOutNumber,\n    getDialOutConferenceUrl,\n    getDialOutCountry,\n    isJoinByPhoneDialogVisible\n} from './functions';\nimport logger from './logger';\n\nconst dialOutStatusToKeyMap = {\n    INITIATED: 'presenceStatus.calling',\n    RINGING: 'presenceStatus.ringing'\n};\n\nconst DIAL_OUT_STATUS = {\n    INITIATED: 'INITIATED',\n    RINGING: 'RINGING',\n    CONNECTED: 'CONNECTED',\n    DISCONNECTED: 'DISCONNECTED',\n    FAILED: 'FAILED'\n};\n\n/**\n * The time interval used between requests while polling for dial out status.\n */\nconst STATUS_REQ_FREQUENCY = 2000;\n\n/**\n * The maximum number of retries while polling for dial out status.\n */\nconst STATUS_REQ_CAP = 45;\n\n/**\n * Polls for status change after dial out.\n * Changes dialog message based on response, closes the dialog if there is an error,\n * joins the meeting when CONNECTED.\n *\n * @param {string} reqId - The request id used to correlate the dial out request with this one.\n * @param {Function} onSuccess - Success handler.\n * @param {Function} onFail - Fail handler.\n * @param {number} count - The number of retried calls. When it hits STATUS_REQ_CAP it should no longer make requests.\n * @returns {Function}\n */\nfunction pollForStatus(\n        reqId: string,\n        onSuccess: Function,\n        onFail: Function,\n        count = 0) {\n    return async function(dispatch: Function, getState: Function) {\n        const state = getState();\n\n        try {\n            if (!isJoinByPhoneDialogVisible(state)) {\n                return;\n            }\n\n            const res = await executeDialOutStatusRequest(getDialOutStatusUrl(state), reqId);\n\n            switch (res) {\n            case DIAL_OUT_STATUS.INITIATED:\n            case DIAL_OUT_STATUS.RINGING: {\n                dispatch(setDialOutStatus(dialOutStatusToKeyMap[res]));\n\n                if (count < STATUS_REQ_CAP) {\n                    return setTimeout(() => {\n                        dispatch(pollForStatus(reqId, onSuccess, onFail, count + 1));\n                    }, STATUS_REQ_FREQUENCY);\n                }\n\n                return onFail();\n            }\n\n            case DIAL_OUT_STATUS.CONNECTED: {\n                return onSuccess();\n            }\n\n            case DIAL_OUT_STATUS.DISCONNECTED: {\n                dispatch(showErrorNotification({\n                    titleKey: 'prejoin.errorDialOutDisconnected'\n                }));\n\n                return onFail();\n            }\n\n            case DIAL_OUT_STATUS.FAILED: {\n                dispatch(showErrorNotification({\n                    titleKey: 'prejoin.errorDialOutFailed'\n                }));\n\n                return onFail();\n            }\n            }\n        } catch (err) {\n            dispatch(showErrorNotification({\n                titleKey: 'prejoin.errorDialOutStatus'\n            }));\n            logger.error('Error getting dial out status', err);\n            onFail();\n        }\n    };\n}\n\n\n/**\n * Action used for joining the meeting with phone audio.\n * A dial out connection is tried and a polling mechanism is used for getting the status.\n * If the connection succeeds the `onSuccess` callback is executed.\n * If the phone connection fails or the number is invalid the `onFail` callback is executed.\n *\n * @param {Function} onSuccess - Success handler.\n * @param {Function} onFail - Fail handler.\n * @returns {Function}\n */\nexport function dialOut(onSuccess: Function, onFail: Function) {\n    return async function(dispatch: Function, getState: Function) {\n        const state = getState();\n        const reqId = uuid.v4();\n        const url = getDialOutUrl(state);\n        const conferenceUrl = getDialOutConferenceUrl(state);\n        const phoneNumber = getFullDialOutNumber(state);\n        const countryCode = getDialOutCountry(state).code.toUpperCase();\n\n        const body = {\n            conferenceUrl,\n            countryCode,\n            name: phoneNumber,\n            phoneNumber\n        };\n\n        try {\n            await executeDialOutRequest(url, body, reqId);\n\n            dispatch(pollForStatus(reqId, onSuccess, onFail));\n        } catch (err) {\n            const notification = {\n                titleKey: 'prejoin.errorDialOut',\n                titleArguments: undefined\n            };\n\n            if (err.status) {\n                if (err.messageKey === 'validation.failed') {\n                    notification.titleKey = 'prejoin.errorValidation';\n                } else {\n                    notification.titleKey = 'prejoin.errorStatusCode';\n                    notification.titleArguments = { status: err.status };\n                }\n            }\n\n            dispatch(showErrorNotification(notification));\n            logger.error('Error dialing out', err);\n            onFail();\n        }\n    };\n}\n\n/**\n * Adds all the newly created tracks to store on init.\n *\n * @param {Object[]} tracks - The newly created tracks.\n * @param {Object} errors - The errors from creating the tracks.\n *\n * @returns {Function}\n */\nexport function initPrejoin(tracks: Object[], errors: Object) {\n    return async function(dispatch: Function) {\n        dispatch(setPrejoinDeviceErrors(errors));\n        dispatch(prejoinInitialized());\n\n        tracks.forEach(track => dispatch(trackAdded(track)));\n    };\n}\n\n/**\n * Action used to start the conference.\n *\n * @param {Object} options - The config options that override the default ones (if any).\n * @returns {Function}\n */\nexport function joinConference(options?: Object) {\n    return {\n        type: PREJOIN_START_CONFERENCE,\n        options\n    };\n}\n\n/**\n * Joins the conference without audio.\n *\n * @returns {Function}\n */\nexport function joinConferenceWithoutAudio() {\n    return async function(dispatch: Function, getState: Function) {\n        const tracks = getState()['features/base/tracks'];\n        const audioTrack = getLocalAudioTrack(tracks)?.jitsiTrack;\n\n        if (audioTrack) {\n            await dispatch(replaceLocalTrack(audioTrack, null));\n        }\n\n        dispatch(joinConference({\n            startSilent: true\n        }));\n    };\n}\n\n/**\n * Initializes the 'precallTest' and executes one test, storing the results.\n *\n * @param {Object} conferenceOptions - The conference options.\n * @returns {Function}\n */\nexport function makePrecallTest(conferenceOptions: Object) {\n    return async function(dispatch: Function) {\n        try {\n            await JitsiMeetJS.precallTest.init(conferenceOptions);\n            const results = await JitsiMeetJS.precallTest.execute();\n\n            dispatch(setPrecallTestResults(results));\n        } catch (error) {\n            logger.debug('Failed to execute pre call test - ', error);\n        }\n    };\n}\n\n/**\n * Opens an external page with all the dial in numbers.\n *\n * @returns {Function}\n */\nexport function openDialInPage() {\n    return function(dispatch: Function, getState: Function) {\n        const dialInPage = getDialInfoPageURL(getState());\n\n        openURLInBrowser(dialInPage, true);\n    };\n}\n\n/**\n * Action used to signal that the prejoin page has been initialized.\n *\n * @returns {Object}\n */\nfunction prejoinInitialized() {\n    return {\n        type: PREJOIN_INITIALIZED\n    };\n}\n\n/**\n * Creates a new audio track based on a device id and replaces the current one.\n *\n * @param {string} deviceId - The deviceId of the microphone.\n * @returns {Function}\n */\nexport function replaceAudioTrackById(deviceId: string) {\n    return async (dispatch: Function, getState: Function) => {\n        try {\n            const tracks = getState()['features/base/tracks'];\n            const newTrack = await createLocalTrack('audio', deviceId);\n            const oldTrack = getLocalAudioTrack(tracks)?.jitsiTrack;\n\n            dispatch(replaceLocalTrack(oldTrack, newTrack));\n        } catch (err) {\n            dispatch(setDeviceStatusWarning('prejoin.audioTrackError'));\n            logger.log('Error replacing audio track', err);\n        }\n    };\n}\n\n/**\n * Creates a new video track based on a device id and replaces the current one.\n *\n * @param {string} deviceId - The deviceId of the camera.\n * @returns {Function}\n */\nexport function replaceVideoTrackById(deviceId: Object) {\n    return async (dispatch: Function, getState: Function) => {\n        try {\n            const tracks = getState()['features/base/tracks'];\n            const wasVideoMuted = isVideoMutedByUser(getState());\n            const [ newTrack ] = await createLocalTracksF(\n                { cameraDeviceId: deviceId,\n                    devices: [ 'video' ] },\n                { dispatch,\n                    getState }\n            );\n            const oldTrack = getLocalVideoTrack(tracks)?.jitsiTrack;\n\n            dispatch(replaceLocalTrack(oldTrack, newTrack));\n            wasVideoMuted && newTrack.mute();\n        } catch (err) {\n            dispatch(setDeviceStatusWarning('prejoin.videoTrackError'));\n            logger.log('Error replacing video track', err);\n        }\n    };\n}\n\n/**\n * Sets the device status as OK with the corresponding text.\n *\n * @param {string} deviceStatusText - The text to be set.\n * @returns {Object}\n */\nexport function setDeviceStatusOk(deviceStatusText: string) {\n    return {\n        type: SET_DEVICE_STATUS,\n        value: {\n            deviceStatusText,\n            deviceStatusType: 'ok'\n        }\n    };\n}\n\n/**\n * Sets the device status as 'warning' with the corresponding text.\n *\n * @param {string} deviceStatusText - The text to be set.\n * @returns {Object}\n */\nexport function setDeviceStatusWarning(deviceStatusText: string) {\n    return {\n        type: SET_DEVICE_STATUS,\n        value: {\n            deviceStatusText,\n            deviceStatusType: 'warning'\n        }\n    };\n}\n\n/**\n * Action used to set the dial out status.\n *\n * @param {string} value - The status.\n * @returns {Object}\n */\nfunction setDialOutStatus(value: string) {\n    return {\n        type: SET_DIALOUT_STATUS,\n        value\n    };\n}\n\n/**\n * Action used to set the dial out country.\n *\n * @param {{ name: string, dialCode: string, code: string }} value - The country.\n * @returns {Object}\n */\nexport function setDialOutCountry(value: Object) {\n    return {\n        type: SET_DIALOUT_COUNTRY,\n        value\n    };\n}\n\n/**\n * Action used to set the stance of the display name.\n *\n * @returns {Object}\n */\nexport function setPrejoinDisplayNameRequired() {\n    return {\n        type: SET_PREJOIN_DISPLAY_NAME_REQUIRED\n    };\n}\n\n/**\n * Action used to set the dial out number.\n *\n * @param {string} value - The dial out number.\n * @returns {Object}\n */\nexport function setDialOutNumber(value: string) {\n    return {\n        type: SET_DIALOUT_NUMBER,\n        value\n    };\n}\n\n/**\n * Sets the visibility of the prejoin page for future uses.\n *\n * @param {boolean} value - The visibility value.\n * @returns {Object}\n */\nexport function setSkipPrejoin(value: boolean) {\n    return {\n        type: SET_SKIP_PREJOIN,\n        value\n    };\n}\n\n/**\n * Sets the visibility of the prejoin page when a client reload\n * is triggered as a result of call migration initiated by Jicofo.\n *\n * @param {boolean} value - The visibility value.\n * @returns {Object}\n */\nexport function setSkipPrejoinOnReload(value: boolean) {\n    return {\n        type: SET_SKIP_PREJOIN_RELOAD,\n        value\n    };\n}\n\n/**\n * Action used to set the visiblitiy of the 'JoinByPhoneDialog'.\n *\n * @param {boolean} value - The value.\n * @returns {Object}\n */\nexport function setJoinByPhoneDialogVisiblity(value: boolean) {\n    return {\n        type: SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n        value\n    };\n}\n\n/**\n * Action used to set data from precall test.\n *\n * @param {Object} value - The precall test results.\n * @returns {Object}\n */\nexport function setPrecallTestResults(value: Object) {\n    return {\n        type: SET_PRECALL_TEST_RESULTS,\n        value\n    };\n}\n\n/**\n * Action used to set the initial errors after creating the tracks.\n *\n * @param {Object} value - The track errors.\n * @returns {Object}\n */\nexport function setPrejoinDeviceErrors(value: Object) {\n    return {\n        type: SET_PREJOIN_DEVICE_ERRORS,\n        value\n    };\n}\n\n/**\n * Action used to set the visibility of the prejoin page.\n *\n * @param {boolean} value - The value.\n * @returns {Object}\n */\nexport function setPrejoinPageVisibility(value: boolean) {\n    return {\n        type: SET_PREJOIN_PAGE_VISIBILITY,\n        value\n    };\n}\n","// @flow\n\nimport { type Dispatch } from 'redux';\n\nimport {\n    getCurrentConference\n} from '../base/conference';\n\n/**\n * Action to toggle lobby mode on or off.\n *\n * @param {boolean} enabled - The desired (new) state of the lobby mode.\n * @returns {Function}\n */\nexport function toggleLobbyMode(enabled: boolean) {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        if (enabled) {\n            conference.enableLobby();\n        } else {\n            conference.disableLobby();\n        }\n    };\n}\n","// @flow\n\nimport { type Dispatch } from 'redux';\n\nimport { appNavigate, maybeRedirectToWelcomePage } from '../app/actions';\nimport {\n    conferenceWillJoin,\n    getCurrentConference,\n    sendLocalParticipant,\n    setPassword\n} from '../base/conference';\nimport { hideDialog, openDialog } from '../base/dialog';\nimport { getLocalParticipant } from '../base/participants';\nexport * from './actions.any';\n\nimport {\n    KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED,\n    KNOCKING_PARTICIPANT_LEFT,\n    SET_KNOCKING_STATE,\n    SET_LOBBY_MODE_ENABLED,\n    SET_PASSWORD_JOIN_FAILED\n} from './actionTypes';\nimport { LobbyScreen } from './components';\n\ndeclare var APP: Object;\n\n/**\n * Cancels the ongoing knocking and abandones the join flow.\n *\n * @returns {Function}\n */\nexport function cancelKnocking() {\n    return async (dispatch: Dispatch<any>) => {\n        if (typeof APP !== 'undefined') {\n            // when we are redirecting the library should handle any\n            // unload and clean of the connection.\n            APP.API.notifyReadyToClose();\n            dispatch(maybeRedirectToWelcomePage());\n\n            return;\n        }\n\n        dispatch(appNavigate(undefined));\n    };\n}\n\n/**\n * Action to hide the lobby screen.\n *\n * @returns {hideDialog}\n */\nexport function hideLobbyScreen() {\n    return hideDialog(LobbyScreen);\n}\n\n/**\n * Tries to join with a preset password.\n *\n * @param {string} password - The password to join with.\n * @returns {Function}\n */\nexport function joinWithPassword(password: string) {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        dispatch(setPassword(conference, conference.join, password));\n    };\n}\n\n/**\n * Action to be dispatched when a knocking poarticipant leaves before any response.\n *\n * @param {string} id - The ID of the participant.\n * @returns {{\n *     id: string,\n *     type: KNOCKING_PARTICIPANT_LEFT\n * }}\n */\nexport function knockingParticipantLeft(id: string) {\n    return {\n        id,\n        type: KNOCKING_PARTICIPANT_LEFT\n    };\n}\n\n/**\n * Action to open the lobby screen.\n *\n * @returns {openDialog}\n */\nexport function openLobbyScreen() {\n    return openDialog(LobbyScreen, {}, true);\n}\n\n/**\n * Action to be executed when a participant starts knocking or an already knocking participant gets updated.\n *\n * @param {Object} participant - The knocking participant.\n * @returns {{\n *     participant: Object,\n *     type: KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED\n * }}\n */\nexport function participantIsKnockingOrUpdated(participant: Object) {\n    return {\n        participant,\n        type: KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED\n    };\n}\n\n/**\n * Approves (lets in) or rejects a knocking participant.\n *\n * @param {string} id - The id of the knocking participant.\n * @param {boolean} approved - True if the participant is approved, false otherwise.\n * @returns {Function}\n */\nexport function setKnockingParticipantApproval(id: string, approved: boolean) {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        if (conference) {\n            if (approved) {\n                conference.lobbyApproveAccess(id);\n            } else {\n                conference.lobbyDenyAccess(id);\n            }\n        }\n    };\n}\n\n/**\n * Action used to admit multiple participants in the conference.\n *\n * @param {Array<Object>} participants - A list of knocking participants.\n * @returns {void}\n */\nexport function admitMultiple(participants: Array<Object>) {\n    return (dispatch: Function, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        participants.forEach(p => {\n            conference.lobbyApproveAccess(p.id);\n        });\n    };\n}\n\n/**\n * Approves the request of a knocking participant to join the meeting.\n *\n * @param {string} id - The id of the knocking participant.\n * @returns {Function}\n */\nexport function approveKnockingParticipant(id: string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        conference && conference.lobbyApproveAccess(id);\n    };\n}\n\n/**\n * Denies the request of a knocking participant to join the meeting.\n *\n * @param {string} id - The id of the knocking participant.\n * @returns {Function}\n */\nexport function rejectKnockingParticipant(id: string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState);\n\n        conference && conference.lobbyDenyAccess(id);\n    };\n}\n\n/**\n * Action to set the knocking state of the participant.\n *\n * @param {boolean} knocking - The new state.\n * @returns {{\n *     state: boolean,\n *     type: SET_KNOCKING_STATE\n * }}\n */\nexport function setKnockingState(knocking: boolean) {\n    return {\n        knocking,\n        type: SET_KNOCKING_STATE\n    };\n}\n\n/**\n * Action to set the new state of the lobby mode.\n *\n * @param {boolean} enabled - The new state to set.\n * @returns {{\n *     enabled: boolean,\n *     type: SET_LOBBY_MODE_ENABLED\n * }}\n */\nexport function setLobbyModeEnabled(enabled: boolean) {\n    return {\n        enabled,\n        type: SET_LOBBY_MODE_ENABLED\n    };\n}\n\n/**\n * Action to be dispatched when we failed to join with a password.\n *\n * @param {boolean} failed - True of recent password join failed.\n * @returns {{\n *     failed: boolean,\n *     type: SET_PASSWORD_JOIN_FAILED\n * }}\n */\nexport function setPasswordJoinFailed(failed: boolean) {\n    return {\n        failed,\n        type: SET_PASSWORD_JOIN_FAILED\n    };\n}\n\n/**\n * Starts knocking and waiting for approval.\n *\n * @returns {Function}\n */\nexport function startKnocking() {\n    return async (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { membersOnly } = state['features/base/conference'];\n        const localParticipant = getLocalParticipant(state);\n\n        dispatch(conferenceWillJoin(membersOnly));\n\n        // We need to update the conference object with the current display name, if approved\n        // we want to send that display name, it was not updated in case when pre-join is disabled\n        sendLocalParticipant(state, membersOnly);\n\n        membersOnly.joinLobby(localParticipant.name, localParticipant.email);\n        dispatch(setKnockingState(true));\n    };\n}\n","/**\n * Default last-n value used to be used for \"HD\" video quality setting when no channelLastN value is specified.\n * @type {number}\n */\nexport const DEFAULT_LAST_N = 20;\n\n/**\n * The supported remote video resolutions. The values are currently based on\n * available simulcast layers.\n *\n * @type {object}\n */\nexport const VIDEO_QUALITY_LEVELS = {\n    ULTRA: 2160,\n    HIGH: 720,\n    STANDARD: 360,\n    LOW: 180,\n    NONE: 0\n};\n\n/**\n * Maps quality level names used in the config.videoQuality.minHeightForQualityLvl to the quality level constants used\n * by the application.\n * @type {Object}\n */\nexport const CFG_LVL_TO_APP_QUALITY_LVL = {\n    'low': VIDEO_QUALITY_LEVELS.LOW,\n    'standard': VIDEO_QUALITY_LEVELS.STANDARD,\n    'high': VIDEO_QUALITY_LEVELS.HIGH\n};\n","/**\n * The type of the action which clears the Toolbox visibility timeout.\n *\n * {\n *     type: CLEAR_TOOLBOX_TIMEOUT\n * }\n */\nexport const CLEAR_TOOLBOX_TIMEOUT = 'CLEAR_TOOLBOX_TIMEOUT';\n\n/**\n * The type of (redux) action which updates whether the conference is or is not\n * currently in full screen view.\n *\n * {\n *     type: FULL_SCREEN_CHANGED,\n *     fullScreen: boolean\n * }\n */\nexport const FULL_SCREEN_CHANGED = 'FULL_SCREEN_CHANGED';\n\n/**\n * The type of (redux) action which requests full screen mode be entered or\n * exited.\n *\n * {\n *     type: SET_FULL_SCREEN,\n *     fullScreen: boolean\n * }\n */\nexport const SET_FULL_SCREEN = 'SET_FULL_SCREEN';\n\n/**\n * The type of the redux action that toggles whether the overflow menu(s) should be shown as drawers.\n */\nexport const SET_OVERFLOW_DRAWER = 'SET_OVERFLOW_DRAWER';\n\n/**\n * The type of the (redux) action which shows/hides the OverflowMenu.\n *\n * {\n *     type: SET_OVERFLOW_MENU_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_OVERFLOW_MENU_VISIBLE = 'SET_OVERFLOW_MENU_VISIBLE';\n\n/**\n * The type of the action which sets the indicator which determiens whether a\n * fToolbar in the Toolbox is hovered.\n *\n * {\n *     type: SET_TOOLBAR_HOVERED,\n *     hovered: boolean\n * }\n */\nexport const SET_TOOLBAR_HOVERED = 'SET_TOOLBAR_HOVERED';\n\n/**\n * The type of the action which sets the permanent visibility of the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_ALWAYS_VISIBLE,\n *     alwaysVisible: boolean\n * }\n */\nexport const SET_TOOLBOX_ALWAYS_VISIBLE = 'SET_TOOLBOX_ALWAYS_VISIBLE';\n\n/**\n * The type of the (redux) action which enables/disables the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_ENABLED,\n *     enabled: boolean\n * }\n */\nexport const SET_TOOLBOX_ENABLED = 'SET_TOOLBOX_ENABLED';\n\n/**\n * The type of the action which sets a new Toolbox visibility timeout and its\n * delay.\n *\n * {\n *     type: SET_TOOLBOX_TIMEOUT,\n *     handler: Function,\n *     timeoutMS: number\n * }\n */\nexport const SET_TOOLBOX_TIMEOUT = 'SET_TOOLBOX_TIMEOUT';\n\n/**\n * The type of the action which sets the delay in milliseconds after which\n * the Toolbox visibility is to be changed.\n *\n * {\n *     type: SET_TOOLBOX_TIMEOUT_MS,\n *     timeoutMS: number\n * }\n */\nexport const SET_TOOLBOX_TIMEOUT_MS = 'SET_TOOLBOX_TIMEOUT_MS';\n\n/**\n * The type of the (redux) action which shows/hides the Toolbox.\n *\n * {\n *     type: SET_TOOLBOX_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_TOOLBOX_VISIBLE = 'SET_TOOLBOX_VISIBLE';\n\n/**\n * The type of the redux action which toggles the toolbox visibility regardless of it's current state.\n *\n * {\n *     type: TOGGLE_TOOLBOX_VISIBLE\n * }\n */\nexport const TOGGLE_TOOLBOX_VISIBLE = 'TOGGLE_TOOLBOX_VISIBLE';\n","// @flow\n\nimport { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\nimport { isEnabled as isDropboxEnabled } from '../dropbox';\n\nimport { RECORDING_STATUS_PRIORITIES, RECORDING_TYPES } from './constants';\n\n/**\n * Searches in the passed in redux state for an active recording session of the\n * passed in mode.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} mode - Find an active recording session of the given mode.\n * @returns {Object|undefined}\n */\nexport function getActiveSession(state: Object, mode: string) {\n    const { sessionDatas } = state['features/recording'];\n    const { status: statusConstants } = JitsiRecordingConstants;\n\n    return sessionDatas.find(sessionData => sessionData.mode === mode\n        && (sessionData.status === statusConstants.ON\n            || sessionData.status === statusConstants.PENDING));\n}\n\n/**\n * Returns an estimated recording duration based on the size of the video file\n * in MB. The estimate is calculated under the assumption that 1 min of recorded\n * video needs 10MB of storage on average.\n *\n * @param {number} size - The size in MB of the recorded video.\n * @returns {number} - The estimated duration in minutes.\n */\nexport function getRecordingDurationEstimation(size: ?number) {\n    return Math.floor((size || 0) / 10);\n}\n\n/**\n * Searches in the passed in redux state for a recording session that matches\n * the passed in recording session ID.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} id - The ID of the recording session to find.\n * @returns {Object|undefined}\n */\nexport function getSessionById(state: Object, id: string) {\n    return state['features/recording'].sessionDatas.find(\n        sessionData => sessionData.id === id);\n}\n\n/**\n * Fetches the recording link from the server.\n *\n * @param {string} url - The base url.\n * @param {string} recordingSessionId - The ID of the recording session to find.\n * @param {string} region - The meeting region.\n * @param {string} tenant - The meeting tenant.\n * @returns {Promise<any>}\n */\nexport async function getRecordingLink(url: string, recordingSessionId: string, region: string, tenant: string) {\n    const fullUrl = `${url}?recordingSessionId=${recordingSessionId}&region=${region}&tenant=${tenant}`;\n    const res = await fetch(fullUrl, {\n        headers: {\n            'Content-Type': 'application/json'\n        }\n    });\n    const json = await res.json();\n\n    return res.ok ? json.url : Promise.reject(json);\n}\n\n/**\n * Selector used for determining if recording is saved on dropbox.\n *\n * @param {Object} state - The redux state to search in.\n * @returns {string}\n */\nexport function isSavingRecordingOnDropbox(state: Object) {\n    return isDropboxEnabled(state)\n        && state['features/recording'].selectedRecordingService === RECORDING_TYPES.DROPBOX;\n}\n\n/**\n * Returns the recording session status that is to be shown in a label. E.g. If\n * there is a session with the status OFF and one with PENDING, then the PENDING\n * one will be shown, because that is likely more important for the user to see.\n *\n * @param {Object} state - The redux state to search in.\n * @param {string} mode - The recording mode to get status for.\n * @returns {string|undefined}\n */\nexport function getSessionStatusToShow(state: Object, mode: string): ?string {\n    const recordingSessions = state['features/recording'].sessionDatas;\n    let status;\n\n    if (Array.isArray(recordingSessions)) {\n        for (const session of recordingSessions) {\n            if (session.mode === mode\n                    && (!status\n                        || (RECORDING_STATUS_PRIORITIES.indexOf(session.status)\n                            > RECORDING_STATUS_PRIORITIES.indexOf(status)))) {\n                status = session.status;\n            }\n        }\n    }\n\n    return status;\n}\n\n\n/**\n * Returns the resource id.\n *\n * @param {Object | string} recorder - A participant or it's resource.\n * @returns {string|undefined}\n */\nexport function getResourceId(recorder: string | Object) {\n    if (recorder) {\n        return typeof recorder === 'string'\n            ? recorder\n            : recorder.getId();\n    }\n}\n","/* global APP */\n\nimport { isMobileBrowser } from '../environment/utils';\nimport JitsiMeetJS, { JitsiTrackErrors, browser } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE, VIDEO_TYPE, setAudioMuted } from '../media';\nimport { toState } from '../redux';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId\n} from '../settings';\n\nimport loadEffects from './loadEffects';\nimport logger from './logger';\n\n/**\n * Returns root tracks state.\n *\n * @param {Object} state - Global state.\n * @returns {Object} Tracks state.\n */\nexport const getTrackState = state => state['features/base/tracks'];\n\n/**\n * Checks if the passed media type is muted for the participant.\n *\n * @param {Object} participant - Participant reference.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @param {Object} state - Global state.\n * @returns {boolean} - Is the media type muted for the participant.\n */\nexport function isParticipantMediaMuted(participant, mediaType, state) {\n    if (!participant) {\n        return false;\n    }\n\n    const tracks = getTrackState(state);\n\n    if (participant?.local) {\n        return isLocalTrackMuted(tracks, mediaType);\n    } else if (!participant?.isFakeParticipant) {\n        return isRemoteTrackMuted(tracks, mediaType, participant.id);\n    }\n\n    return true;\n}\n\n/**\n * Checks if the participant is audio muted.\n *\n * @param {Object} participant - Participant reference.\n * @param {Object} state - Global state.\n * @returns {boolean} - Is audio muted for the participant.\n */\nexport function isParticipantAudioMuted(participant, state) {\n    return isParticipantMediaMuted(participant, MEDIA_TYPE.AUDIO, state);\n}\n\n/**\n * Checks if the participant is video muted.\n *\n * @param {Object} participant - Participant reference.\n * @param {Object} state - Global state.\n * @returns {boolean} - Is video muted for the participant.\n */\nexport function isParticipantVideoMuted(participant, state) {\n    return isParticipantMediaMuted(participant, MEDIA_TYPE.VIDEO, state);\n}\n\n/**\n * Creates a local video track for presenter. The constraints are computed based\n * on the height of the desktop that is being shared.\n *\n * @param {Object} options - The options with which the local presenter track\n * is to be created.\n * @param {string|null} [options.cameraDeviceId] - Camera device id or\n * {@code undefined} to use app's settings.\n * @param {number} desktopHeight - The height of the desktop that is being\n * shared.\n * @returns {Promise<JitsiLocalTrack>}\n */\nexport async function createLocalPresenterTrack(options, desktopHeight) {\n    const { cameraDeviceId } = options;\n\n    // compute the constraints of the camera track based on the resolution\n    // of the desktop screen that is being shared.\n    const cameraHeights = [ 180, 270, 360, 540, 720 ];\n    const proportion = 5;\n    const result = cameraHeights.find(\n            height => (desktopHeight / proportion) < height);\n    const constraints = {\n        video: {\n            aspectRatio: 4 / 3,\n            height: {\n                ideal: result\n            }\n        }\n    };\n    const [ videoTrack ] = await JitsiMeetJS.createLocalTracks(\n        {\n            cameraDeviceId,\n            constraints,\n            devices: [ 'video' ]\n        });\n\n    videoTrack.type = MEDIA_TYPE.PRESENTER;\n\n    return videoTrack;\n}\n\n/**\n * Create local tracks of specific types.\n *\n * @param {Object} options - The options with which the local tracks are to be\n * created.\n * @param {string|null} [options.cameraDeviceId] - Camera device id or\n * {@code undefined} to use app's settings.\n * @param {string[]} options.devices - Required track types such as 'audio'\n * and/or 'video'.\n * @param {string|null} [options.micDeviceId] - Microphone device id or\n * {@code undefined} to use app's settings.\n * @param {number|undefined} [oprions.timeout] - A timeout for JitsiMeetJS.createLocalTracks used to create the tracks.\n * @param {boolean} [options.firePermissionPromptIsShownEvent] - Whether lib-jitsi-meet\n * should check for a {@code getUserMedia} permission prompt and fire a\n * corresponding event.\n * @param {boolean} [options.fireSlowPromiseEvent] - Whether lib-jitsi-meet\n * should check for a slow {@code getUserMedia} request and fire a\n * corresponding event.\n * @param {Object} store - The redux store in the context of which the function\n * is to execute and from which state such as {@code config} is to be retrieved.\n * @returns {Promise<JitsiLocalTrack[]>}\n */\nexport function createLocalTracksF(options = {}, store) {\n    let { cameraDeviceId, micDeviceId } = options;\n    const {\n        desktopSharingSourceDevice,\n        desktopSharingSources,\n        firePermissionPromptIsShownEvent,\n        fireSlowPromiseEvent,\n        timeout\n    } = options;\n\n    if (typeof APP !== 'undefined') {\n        // TODO The app's settings should go in the redux store and then the\n        // reliance on the global variable APP will go away.\n        store || (store = APP.store); // eslint-disable-line no-param-reassign\n\n        const state = store.getState();\n\n        if (typeof cameraDeviceId === 'undefined' || cameraDeviceId === null) {\n            cameraDeviceId = getUserSelectedCameraDeviceId(state);\n        }\n        if (typeof micDeviceId === 'undefined' || micDeviceId === null) {\n            micDeviceId = getUserSelectedMicDeviceId(state);\n        }\n    }\n\n    const state = store.getState();\n    const {\n        desktopSharingFrameRate,\n        firefox_fake_device, // eslint-disable-line camelcase\n        resolution\n    } = state['features/base/config'];\n    const constraints = options.constraints ?? state['features/base/config'].constraints;\n\n    return (\n        loadEffects(store).then(effectsArray => {\n            // Filter any undefined values returned by Promise.resolve().\n            const effects = effectsArray.filter(effect => Boolean(effect));\n\n            return JitsiMeetJS.createLocalTracks(\n                {\n                    cameraDeviceId,\n                    constraints,\n                    desktopSharingFrameRate,\n                    desktopSharingSourceDevice,\n                    desktopSharingSources,\n\n                    // Copy array to avoid mutations inside library.\n                    devices: options.devices.slice(0),\n                    effects,\n                    firefox_fake_device, // eslint-disable-line camelcase\n                    firePermissionPromptIsShownEvent,\n                    fireSlowPromiseEvent,\n                    micDeviceId,\n                    resolution,\n                    timeout\n                })\n            .catch(err => {\n                logger.error('Failed to create local tracks', options.devices, err);\n\n                return Promise.reject(err);\n            });\n        }));\n}\n\n/**\n * Returns an object containing a promise which resolves with the created tracks &\n * the errors resulting from that process.\n *\n * @returns {Promise<JitsiLocalTrack>}\n *\n * @todo Refactor to not use APP\n */\nexport function createPrejoinTracks() {\n    const errors = {};\n    const initialDevices = [ 'audio' ];\n    const requestedAudio = true;\n    let requestedVideo = false;\n    const { startAudioOnly, startWithAudioMuted, startWithVideoMuted } = APP.store.getState()['features/base/settings'];\n\n    // Always get a handle on the audio input device so that we have statistics even if the user joins the\n    // conference muted. Previous implementation would only acquire the handle when the user first unmuted,\n    // which would results in statistics ( such as \"No audio input\" or \"Are you trying to speak?\") being available\n    // only after that point.\n    if (startWithAudioMuted) {\n        APP.store.dispatch(setAudioMuted(true));\n    }\n\n    if (!startWithVideoMuted && !startAudioOnly) {\n        initialDevices.push('video');\n        requestedVideo = true;\n    }\n\n    let tryCreateLocalTracks;\n\n    if (!requestedAudio && !requestedVideo) {\n        // Resolve with no tracks\n        tryCreateLocalTracks = Promise.resolve([]);\n    } else {\n        tryCreateLocalTracks = createLocalTracksF({\n            devices: initialDevices,\n            firePermissionPromptIsShownEvent: true\n        })\n                .catch(err => {\n                    if (requestedAudio && requestedVideo) {\n\n                        // Try audio only...\n                        errors.audioAndVideoError = err;\n\n                        return (\n                            createLocalTracksF({\n                                devices: [ 'audio' ],\n                                firePermissionPromptIsShownEvent: true\n                            }));\n                    } else if (requestedAudio && !requestedVideo) {\n                        errors.audioOnlyError = err;\n\n                        return [];\n                    } else if (requestedVideo && !requestedAudio) {\n                        errors.videoOnlyError = err;\n\n                        return [];\n                    }\n                    logger.error('Should never happen');\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedAudio) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.audioOnlyError = err;\n\n                    // Try video only...\n                    return requestedVideo\n                        ? createLocalTracksF({\n                            devices: [ 'video' ],\n                            firePermissionPromptIsShownEvent: true\n                        })\n                        : [];\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedVideo) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.videoOnlyError = err;\n\n                    return [];\n                });\n    }\n\n    return {\n        tryCreateLocalTracks,\n        errors\n    };\n}\n\n/**\n * Returns local audio track.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {(Track|undefined)}\n */\nexport function getLocalAudioTrack(tracks) {\n    return getLocalTrack(tracks, MEDIA_TYPE.AUDIO);\n}\n\n/**\n * Returns local track by media type.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @returns {(Track|undefined)}\n */\nexport function getLocalTrack(tracks, mediaType, includePending = false) {\n    return (\n        getLocalTracks(tracks, includePending)\n            .find(t => t.mediaType === mediaType));\n}\n\n/**\n * Returns an array containing the local tracks with or without a (valid)\n * {@code JitsiTrack}.\n *\n * @param {Track[]} tracks - An array containing all local tracks.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @returns {Track[]}\n */\nexport function getLocalTracks(tracks, includePending = false) {\n    // XXX A local track is considered ready only once it has its `jitsiTrack`\n    // property set by the `TRACK_ADDED` action. Until then there is a stub\n    // added just before the `getUserMedia` call with a cancellable\n    // `gumInProgress` property which then can be used to destroy the track that\n    // has not yet been added to the redux store. Once GUM is cancelled, it will\n    // never make it to the store nor there will be any\n    // `TRACK_ADDED`/`TRACK_REMOVED` actions dispatched for it.\n    return tracks.filter(t => t.local && (t.jitsiTrack || includePending));\n}\n\n/**\n * Returns local video track.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {(Track|undefined)}\n */\nexport function getLocalVideoTrack(tracks) {\n    return getLocalTrack(tracks, MEDIA_TYPE.VIDEO);\n}\n\n/**\n * Returns the media type of the local video, presenter or video.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {MEDIA_TYPE}\n */\nexport function getLocalVideoType(tracks) {\n    const presenterTrack = getLocalTrack(tracks, MEDIA_TYPE.PRESENTER);\n\n    return presenterTrack ? MEDIA_TYPE.PRESENTER : MEDIA_TYPE.VIDEO;\n}\n\n/**\n * Returns the stored local video track.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nexport function getLocalJitsiVideoTrack(state) {\n    const track = getLocalVideoTrack(getTrackState(state));\n\n    return track?.jitsiTrack;\n}\n\n/**\n * Returns the stored local audio track.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nexport function getLocalJitsiAudioTrack(state) {\n    const track = getLocalAudioTrack(getTrackState(state));\n\n    return track?.jitsiTrack;\n}\n\n/**\n * Returns track of specified media type for specified participant id.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @param {string} participantId - Participant ID.\n * @returns {(Track|undefined)}\n */\nexport function getTrackByMediaTypeAndParticipant(\n        tracks,\n        mediaType,\n        participantId) {\n    return tracks.find(\n        t => Boolean(t.jitsiTrack) && t.participantId === participantId && t.mediaType === mediaType\n    );\n}\n\n/**\n * Returns the track if any which corresponds to a specific instance\n * of JitsiLocalTrack or JitsiRemoteTrack.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} jitsiTrack - JitsiTrack instance.\n * @returns {(Track|undefined)}\n */\nexport function getTrackByJitsiTrack(tracks, jitsiTrack) {\n    return tracks.find(t => t.jitsiTrack === jitsiTrack);\n}\n\n/**\n * Returns tracks of specified media type.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - Media type.\n * @returns {Track[]}\n */\nexport function getTracksByMediaType(tracks, mediaType) {\n    return tracks.filter(t => t.mediaType === mediaType);\n}\n\n/**\n * Checks if the local video camera track in the given set of tracks is muted.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @returns {Track[]}\n */\nexport function isLocalCameraTrackMuted(tracks) {\n    const presenterTrack = getLocalTrack(tracks, MEDIA_TYPE.PRESENTER);\n    const videoTrack = getLocalTrack(tracks, MEDIA_TYPE.VIDEO);\n\n    // Make sure we check the mute status of only camera tracks, i.e.,\n    // presenter track when it exists, camera track when the presenter\n    // track doesn't exist.\n    if (presenterTrack) {\n        return isLocalTrackMuted(tracks, MEDIA_TYPE.PRESENTER);\n    } else if (videoTrack) {\n        return videoTrack.videoType === 'camera'\n            ? isLocalTrackMuted(tracks, MEDIA_TYPE.VIDEO) : true;\n    }\n\n    return true;\n}\n\n/**\n * Checks if the first local track in the given tracks set is muted.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - The media type of tracks to be checked.\n * @returns {boolean} True if local track is muted or false if the track is\n * unmuted or if there are no local tracks of the given media type in the given\n * set of tracks.\n */\nexport function isLocalTrackMuted(tracks, mediaType) {\n    const track = getLocalTrack(tracks, mediaType);\n\n    return !track || track.muted;\n}\n\n/**\n * Checks if the local video track is of type DESKtOP.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isLocalVideoTrackDesktop(state) {\n    const videoTrack = getLocalVideoTrack(getTrackState(state));\n\n    return videoTrack && videoTrack.videoType === VIDEO_TYPE.DESKTOP;\n}\n\n\n/**\n * Returns true if the remote track of the given media type and the given\n * participant is muted, false otherwise.\n *\n * @param {Track[]} tracks - List of all tracks.\n * @param {MEDIA_TYPE} mediaType - The media type of tracks to be checked.\n * @param {*} participantId - Participant ID.\n * @returns {boolean}\n */\nexport function isRemoteTrackMuted(tracks, mediaType, participantId) {\n    const track = getTrackByMediaTypeAndParticipant(\n        tracks, mediaType, participantId);\n\n    return !track || track.muted;\n}\n\n/**\n * Returns whether or not the current environment needs a user interaction with\n * the page before any unmute can occur.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isUserInteractionRequiredForUnmute(state) {\n    return browser.isUserInteractionRequiredForUnmute()\n        && window\n        && window.self !== window.top\n        && !state['features/base/user-interaction'].interacted;\n}\n\n/**\n * Mutes or unmutes a specific {@code JitsiLocalTrack}. If the muted state of\n * the specified {@code track} is already in accord with the specified\n * {@code muted} value, then does nothing.\n *\n * @param {JitsiLocalTrack} track - The {@code JitsiLocalTrack} to mute or\n * unmute.\n * @param {boolean} muted - If the specified {@code track} is to be muted, then\n * {@code true}; otherwise, {@code false}.\n * @returns {Promise}\n */\nexport function setTrackMuted(track, muted) {\n    muted = Boolean(muted); // eslint-disable-line no-param-reassign\n\n    if (track.isMuted() === muted) {\n        return Promise.resolve();\n    }\n\n    const f = muted ? 'mute' : 'unmute';\n\n    return track[f]().catch(error => {\n        // Track might be already disposed so ignore such an error.\n        if (error.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n            // FIXME Emit mute failed, so that the app can show error dialog.\n            logger.error(`set track ${f} failed`, error);\n        }\n    });\n}\n\n/**\n * Determines whether toggle camera should be enabled or not.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {boolean} - Whether toggle camera should be enabled.\n */\nexport function isToggleCameraEnabled(stateful) {\n    const state = toState(stateful);\n    const { videoInput } = state['features/base/devices'].availableDevices;\n\n    return isMobileBrowser() && videoInput.length > 1;\n}\n","// @flow\n\nimport { createScreenshotCaptureEffect } from '../../stream-effects/screenshot-capture';\nimport { createVirtualBackgroundEffect } from '../../stream-effects/virtual-background';\n\nimport logger from './logger';\n\n/**\n * Loads the enabled stream effects.\n *\n * @param {Object} store - The Redux store.\n * @returns {Promsie} - A Promise which resolves when all effects are created.\n */\nexport default function loadEffects(store: Object): Promise<any> {\n    const state = store.getState();\n    const virtualBackground = state['features/virtual-background'];\n\n    const backgroundPromise = virtualBackground.backgroundEffectEnabled\n        ? createVirtualBackgroundEffect(virtualBackground)\n            .catch(error => {\n                logger.error('Failed to obtain the background effect instance with error: ', error);\n\n                return Promise.resolve();\n            })\n        : Promise.resolve();\n    const screenshotCapturePromise = state['features/screenshot-capture']?.capturesEnabled\n        ? createScreenshotCaptureEffect(state)\n            .catch(error => {\n                logger.error('Failed to obtain the screenshot capture effect effect instance with error: ', error);\n\n                return Promise.resolve();\n            })\n        : Promise.resolve();\n\n    return Promise.all([ backgroundPromise, screenshotCapturePromise ]);\n}\n","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","// @flow\n\nimport { getToolbarButtons } from '../base/config';\nimport { hasAvailableDevices } from '../base/devices';\n\n/**\n * Helper for getting the height of the toolbox.\n *\n * @returns {number} The height of the toolbox.\n */\nexport function getToolboxHeight() {\n    const toolbox = document.getElementById('new-toolbox');\n\n    return (toolbox && toolbox.clientHeight) || 0;\n}\n\n/**\n * Indicates if a toolbar button is enabled.\n *\n * @param {string} name - The name of the setting section as defined in\n * interface_config.js.\n * @param {Object} state - The redux state.\n * @returns {boolean|undefined} - True to indicate that the given toolbar button\n * is enabled, false - otherwise.\n */\nexport function isButtonEnabled(name: string, state: Object) {\n    const toolbarButtons = getToolbarButtons(state);\n\n    return toolbarButtons.indexOf(name) !== -1;\n}\n\n/**\n * Indicates if the toolbox is visible or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean} - True to indicate that the toolbox is visible, false -\n * otherwise.\n */\nexport function isToolboxVisible(state: Object) {\n    const { iAmSipGateway } = state['features/base/config'];\n    const {\n        alwaysVisible,\n        timeoutID,\n        visible\n    } = state['features/toolbox'];\n    const { audioSettingsVisible, videoSettingsVisible } = state['features/settings'];\n\n    return Boolean(!iAmSipGateway && (timeoutID || visible || alwaysVisible\n                                      || audioSettingsVisible || videoSettingsVisible));\n}\n\n/**\n * Indicates if the audio settings button is disabled or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean}\n */\nexport function isAudioSettingsButtonDisabled(state: Object) {\n    return (!hasAvailableDevices(state, 'audioInput')\n          && !hasAvailableDevices(state, 'audioOutput'))\n          || state['features/base/config'].startSilent;\n}\n\n/**\n * Indicates if the video settings button is disabled or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean}\n */\nexport function isVideoSettingsButtonDisabled(state: Object) {\n    return !hasAvailableDevices(state, 'videoInput');\n}\n\n/**\n * Indicates if the video mute button is disabled or not.\n *\n * @param {string} state - The state from the Redux store.\n * @returns {boolean}\n */\nexport function isVideoMuteButtonDisabled(state: Object) {\n    return !hasAvailableDevices(state, 'videoInput');\n}\n","// @flow\n\nexport const CHAT_VIEW_MODAL_ID = 'chatView';\n\n/**\n * The size of the chat.\n */\nexport const CHAT_SIZE = 315;\n\n/**\n * The audio ID of the audio element for which the {@link playAudio} action is\n * triggered when new chat message is received.\n *\n * @type {string}\n */\nexport const INCOMING_MSG_SOUND_ID = 'INCOMING_MSG_SOUND';\n\n/**\n * The {@code messageType} of error (system) messages.\n */\nexport const MESSAGE_TYPE_ERROR = 'error';\n\n/**\n * The {@code messageType} of local messages.\n */\nexport const MESSAGE_TYPE_LOCAL = 'local';\n\n/**\n * The {@code messageType} of remote messages.\n */\nexport const MESSAGE_TYPE_REMOTE = 'remote';\n\nexport const SMALL_WIDTH_THRESHOLD = 580;\n","/**\n * An enumeration of the different virtual background types.\n *\n * @enum {string}\n */\nexport const VIRTUAL_BACKGROUND_TYPE = {\n    IMAGE: 'image',\n    DESKTOP_SHARE: 'desktop-share',\n    BLUR: 'blur',\n    NONE: 'none'\n};\n","import { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = visuallyHidden;\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","/**\n * The type of Redux action which signals that an error occurred while obtaining\n * a camera.\n *\n * {\n *     type: NOTIFY_CAMERA_ERROR,\n *     error: Object\n * }\n */\nexport const NOTIFY_CAMERA_ERROR = 'NOTIFY_CAMERA_ERROR';\n\n/**\n * The type of Redux action which signals that an error occurred while obtaining\n * a microphone.\n *\n * {\n *     type: NOTIFY_MIC_ERROR,\n *     error: Object\n * }\n */\nexport const NOTIFY_MIC_ERROR = 'NOTIFY_MIC_ERROR';\n\n/**\n * The type of Redux action which signals that the currently used audio\n * input device should be changed.\n *\n * {\n *     type: SET_AUDIO_INPUT_DEVICE,\n *     deviceId: string,\n * }\n */\nexport const SET_AUDIO_INPUT_DEVICE = 'SET_AUDIO_INPUT_DEVICE';\n\n/**\n * The type of Redux action which signals that the currently used video\n * input device should be changed.\n *\n * {\n *     type: SET_VIDEO_INPUT_DEVICE,\n *     deviceId: string,\n * }\n */\nexport const SET_VIDEO_INPUT_DEVICE = 'SET_VIDEO_INPUT_DEVICE';\n\n/**\n * The type of Redux action which signals that the list of known available\n * audio and video sources has changed.\n *\n * {\n *     type: UPDATE_DEVICE_LIST,\n *     devices: Array<MediaDeviceInfo>,\n * }\n */\nexport const UPDATE_DEVICE_LIST = 'UPDATE_DEVICE_LIST';\n\n/**\n * The type of Redux action which will add a pending device requests that will\n * be executed later when it is possible (when the conference is joined).\n *\n * {\n *     type: ADD_PENDING_DEVICE_REQUEST,\n *     request: Object\n * }\n */\nexport const ADD_PENDING_DEVICE_REQUEST = 'ADD_PENDING_DEVICE_REQUEST';\n\n/**\n * The type of Redux action which will remove all pending device requests.\n *\n * {\n *     type: REMOVE_PENDING_DEVICE_REQUESTS\n * }\n */\nexport const REMOVE_PENDING_DEVICE_REQUESTS = 'REMOVE_PENDING_DEVICE_REQUESTS';\n\n/**\n * The type of Redux action which will check passed old and passed new devices\n * and if needed will show notifications asking the user whether to use those.\n *\n * {\n *     type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE\n *     newDevices: Array<MediaDeviceInfo>\n *     oldDevices: Array<MediaDeviceInfo>\n * }\n */\nexport const CHECK_AND_NOTIFY_FOR_NEW_DEVICE = 'CHECK_AND_NOTIFY_FOR_NEW_DEVICE';\n\n/**\n * The type of Redux action which signals that the device permissions have changed.\n *\n * {\n *     type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE\n *     permissions: Object\n * }\n */\nexport const DEVICE_PERMISSIONS_CHANGED = 'DEVICE_PERMISSIONS_CHANGED';\n","export * from './components';\nexport * from './functions';\n","import {\n    API_URL_BROADCAST_STREAMS,\n    API_URL_LIVE_BROADCASTS,\n    DISCOVERY_DOCS,\n    GOOGLE_SCOPE_CALENDAR,\n    GOOGLE_SCOPE_YOUTUBE\n} from './constants';\n\nconst GOOGLE_API_CLIENT_LIBRARY_URL = 'https://apis.google.com/js/api.js';\n\n/**\n * A promise for dynamically loading the Google API Client Library.\n *\n * @private\n * @type {Promise}\n */\nlet googleClientLoadPromise;\n\n/**\n * A singleton for loading and interacting with the Google API.\n */\nconst googleApi = {\n    /**\n     * Obtains Google API Client Library, loading the library dynamically if\n     * needed.\n     *\n     * @returns {Promise}\n     */\n    get() {\n        const globalGoogleApi = this._getGoogleApiClient();\n\n        if (!globalGoogleApi) {\n            return this.load();\n        }\n\n        return Promise.resolve(globalGoogleApi);\n    },\n\n    /**\n     * Gets the profile for the user signed in to the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    getCurrentUserProfile() {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                return this._getGoogleApiClient()\n                    .auth2.getAuthInstance()\n                    .currentUser.get()\n                    .getBasicProfile();\n            });\n    },\n\n    /**\n     * Sets the Google Web Client ID used for authenticating with Google and\n     * making Google API requests.\n     *\n     * @param {string} clientId - The client ID to be used with the API library.\n     * @param {boolean} enableYoutube - Whether youtube scope is enabled.\n     * @param {boolean} enableCalendar - Whether calendar scope is enabled.\n     * @returns {Promise}\n     */\n    initializeClient(clientId, enableYoutube, enableCalendar) {\n        return this.get()\n            .then(api => new Promise((resolve, reject) => {\n                const scope\n                    = `${enableYoutube ? GOOGLE_SCOPE_YOUTUBE : ''} ${enableCalendar ? GOOGLE_SCOPE_CALENDAR : ''}`\n                        .trim();\n\n                // setTimeout is used as a workaround for api.client.init not\n                // resolving consistently when the Google API Client Library is\n                // loaded asynchronously. See:\n                // github.com/google/google-api-javascript-client/issues/399\n                setTimeout(() => {\n                    api.client.init({\n                        clientId,\n                        discoveryDocs: DISCOVERY_DOCS,\n                        scope\n                    })\n                    .then(resolve)\n                    .catch(reject);\n                }, 500);\n            }));\n    },\n\n    /**\n     * Checks whether a user is currently authenticated with Google through an\n     * initialized Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    isSignedIn() {\n        return this.get()\n            .then(api => Boolean(api\n                && api.auth2\n                && api.auth2.getAuthInstance\n                && api.auth2.getAuthInstance()\n                && api.auth2.getAuthInstance().isSignedIn\n                && api.auth2.getAuthInstance().isSignedIn.get()));\n    },\n\n    /**\n     * Generates a script tag and downloads the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    load() {\n        if (googleClientLoadPromise) {\n            return googleClientLoadPromise;\n        }\n\n        googleClientLoadPromise = new Promise((resolve, reject) => {\n            const scriptTag = document.createElement('script');\n\n            scriptTag.async = true;\n            scriptTag.addEventListener('error', () => {\n                scriptTag.remove();\n\n                googleClientLoadPromise = null;\n\n                reject();\n            });\n            scriptTag.addEventListener('load', resolve);\n            scriptTag.type = 'text/javascript';\n\n            scriptTag.src = GOOGLE_API_CLIENT_LIBRARY_URL;\n\n            document.head.appendChild(scriptTag);\n        })\n            .then(() => new Promise((resolve, reject) =>\n                this._getGoogleApiClient().load('client:auth2', {\n                    callback: resolve,\n                    onerror: reject\n                })))\n            .then(() => this._getGoogleApiClient());\n\n        return googleClientLoadPromise;\n    },\n\n    /**\n     * Executes a request for a list of all YouTube broadcasts associated with\n     * user currently signed in to the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    requestAvailableYouTubeBroadcasts() {\n        return this.get()\n            .then(api => api.client.request(API_URL_LIVE_BROADCASTS));\n    },\n\n    /**\n     * Executes a request to get all live streams associated with a broadcast\n     * in YouTube.\n     *\n     * @param {string} boundStreamID - The bound stream ID associated with a\n     * broadcast in YouTube.\n     * @returns {Promise}\n     */\n    requestLiveStreamsForYouTubeBroadcast(boundStreamID) {\n        return this.get()\n            .then(api => api.client.request(\n                `${API_URL_BROADCAST_STREAMS}${boundStreamID}`));\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library, even\n     * if already signed in.\n     *\n     * @returns {Promise}\n     */\n    showAccountSelection() {\n        return this.get()\n            .then(api => api.auth2.getAuthInstance().signIn());\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library, if\n     * not already signed in.\n     *\n     * @returns {Promise}\n     */\n    signInIfNotSignedIn() {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return this.showAccountSelection();\n                }\n            });\n    },\n\n    /**\n     * Sign out from the Google API Client Library.\n     *\n     * @returns {Promise}\n     */\n    signOut() {\n        return this.get()\n            .then(api =>\n                api.auth2\n                && api.auth2.getAuthInstance\n                && api.auth2.getAuthInstance()\n                && api.auth2.getAuthInstance().signOut());\n    },\n\n    /**\n     * Parses the google calendar entries to a known format.\n     *\n     * @param {Object} entry - The google calendar entry.\n     * @returns {{\n     *  calendarId: string,\n     *  description: string,\n     *  endDate: string,\n     *  id: string,\n     *  location: string,\n     *  startDate: string,\n     *  title: string}}\n     * @private\n     */\n    _convertCalendarEntry(entry) {\n        return {\n            calendarId: entry.calendarId,\n            description: entry.description,\n            endDate: entry.end.dateTime,\n            id: entry.id,\n            location: entry.location,\n            startDate: entry.start.dateTime,\n            title: entry.summary,\n            url: this._getConferenceDataVideoUri(entry.conferenceData)\n        };\n    },\n\n    /**\n     * Checks conference data for jitsi conference solution and returns\n     * its video url.\n     *\n     * @param {Object} conferenceData - The conference data of the event.\n     * @returns {string|undefined} Returns the found video uri or undefined.\n     */\n    _getConferenceDataVideoUri(conferenceData = {}) {\n        try {\n            // check conference data coming from calendar addons\n            if (conferenceData.parameters.addOnParameters.parameters\n                    .conferenceSolutionType === 'jitsi') {\n                const videoEntry = conferenceData.entryPoints.find(\n                    e => e.entryPointType === 'video');\n\n                if (videoEntry) {\n                    return videoEntry.uri;\n                }\n            }\n        } catch (error) {\n            // we don't care about undefined fields\n        }\n    },\n\n    /**\n     * Retrieves calendar entries from all available calendars.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {Promise<CalendarEntry>}\n     * @private\n     */\n    _getCalendarEntries(fetchStartDays, fetchEndDays) {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                // user can edit the events, so we want only those that\n                // can be edited\n                return this._getGoogleApiClient()\n                    .client.calendar.calendarList.list();\n            })\n            .then(calendarList => {\n\n                // no result, maybe not signed in\n                if (!calendarList) {\n                    return Promise.resolve();\n                }\n\n                const calendarIds\n                    = calendarList.result.items.map(en => {\n                        return {\n                            id: en.id,\n                            accessRole: en.accessRole\n                        };\n                    });\n                const promises = calendarIds.map(({ id, accessRole }) => {\n                    const startDate = new Date();\n                    const endDate = new Date();\n\n                    startDate.setDate(startDate.getDate() + fetchStartDays);\n                    endDate.setDate(endDate.getDate() + fetchEndDays);\n\n                    // retrieve the events and adds to the result the calendarId\n                    return this._getGoogleApiClient()\n                        .client.calendar.events.list({\n                            'calendarId': id,\n                            'timeMin': startDate.toISOString(),\n                            'timeMax': endDate.toISOString(),\n                            'showDeleted': false,\n                            'singleEvents': true,\n                            'orderBy': 'startTime'\n                        })\n                        .then(result => result.result.items\n                            .map(item => {\n                                const resultItem = { ...item };\n\n                                // add the calendarId only for the events\n                                // we can edit\n                                if (accessRole === 'writer'\n                                    || accessRole === 'owner') {\n                                    resultItem.calendarId = id;\n                                }\n\n                                return resultItem;\n                            }));\n                });\n\n                return Promise.all(promises)\n                    .then(results => [].concat(...results))\n                    .then(entries =>\n                        entries.map(e => this._convertCalendarEntry(e)));\n            });\n    },\n\n    /* eslint-disable max-params */\n    /**\n     * Updates the calendar event and adds a location and text.\n     *\n     * @param {string} id - The event id to update.\n     * @param {string} calendarId - The calendar id to use.\n     * @param {string} location - The location to add to the event.\n     * @param {string} text - The description text to set/append.\n     * @returns {Promise<T | never>}\n     * @private\n     */\n    _updateCalendarEntry(id, calendarId, location, text) {\n        return this.get()\n            .then(() => this.isSignedIn())\n            .then(isSignedIn => {\n                if (!isSignedIn) {\n                    return null;\n                }\n\n                return this._getGoogleApiClient()\n                    .client.calendar.events.get({\n                        'calendarId': calendarId,\n                        'eventId': id\n                    }).then(event => {\n                        let newDescription = text;\n\n                        if (event.result.description) {\n                            newDescription = `${event.result.description}\\n\\n${\n                                text}`;\n                        }\n\n                        return this._getGoogleApiClient()\n                            .client.calendar.events.patch({\n                                'calendarId': calendarId,\n                                'eventId': id,\n                                'description': newDescription,\n                                'location': location\n                            });\n                    });\n\n            });\n    },\n    /* eslint-enable max-params */\n\n    /**\n     * Returns the global Google API Client Library object. Direct use of this\n     * method is discouraged; instead use the {@link get} method.\n     *\n     * @private\n     * @returns {Object|undefined}\n     */\n    _getGoogleApiClient() {\n        return window.gapi;\n    }\n};\n\nexport default googleApi;\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { getShareInfoText } from '../invite';\n\nimport {\n    SET_GOOGLE_API_PROFILE,\n    SET_GOOGLE_API_STATE\n} from './actionTypes';\nimport { GOOGLE_API_STATES } from './constants';\nimport googleApi from './googleApi';\n\n/**\n * Retrieves the current calendar events.\n *\n * @param {number} fetchStartDays - The number of days to go back when fetching.\n * @param {number} fetchEndDays - The number of days to fetch.\n * @returns {function(Dispatch<any>): Promise<CalendarEntries>}\n */\nexport function getCalendarEntries(\n        fetchStartDays: ?number, fetchEndDays: ?number) {\n    return () =>\n        googleApi.get()\n        .then(() =>\n            googleApi._getCalendarEntries(fetchStartDays, fetchEndDays));\n}\n\n/**\n * Loads Google API.\n *\n * @returns {Function}\n */\nexport function loadGoogleAPI() {\n    return (dispatch: Dispatch<any>, getState: Function) =>\n        googleApi.get()\n        .then(() => {\n            const {\n                liveStreamingEnabled,\n                enableCalendarIntegration,\n                googleApiApplicationClientID\n            } = getState()['features/base/config'];\n\n            if (getState()['features/google-api'].googleAPIState\n                    === GOOGLE_API_STATES.NEEDS_LOADING) {\n                return googleApi.initializeClient(\n                    googleApiApplicationClientID, liveStreamingEnabled, enableCalendarIntegration);\n            }\n\n            return Promise.resolve();\n        })\n        .then(() => dispatch(setGoogleAPIState(GOOGLE_API_STATES.LOADED)))\n        .then(() => googleApi.isSignedIn())\n        .then(isSignedIn => {\n            if (isSignedIn) {\n                dispatch(setGoogleAPIState(GOOGLE_API_STATES.SIGNED_IN));\n            }\n        });\n}\n\n/**\n * Executes a request for a list of all YouTube broadcasts associated with\n * user currently signed in to the Google API Client Library.\n *\n * @returns {function(): (Promise<*>|Promise<any[] | never>)}\n */\nexport function requestAvailableYouTubeBroadcasts() {\n    return () =>\n        googleApi.requestAvailableYouTubeBroadcasts()\n        .then(response => {\n            // Takes in a list of broadcasts from the YouTube API,\n            // removes dupes, removes broadcasts that cannot get a stream key,\n            // and parses the broadcasts into flat objects.\n            const broadcasts = response.result.items;\n\n            const parsedBroadcasts = {};\n\n            for (let i = 0; i < broadcasts.length; i++) {\n                const broadcast = broadcasts[i];\n                const boundStreamID = broadcast.contentDetails.boundStreamId;\n\n                if (boundStreamID && !parsedBroadcasts[boundStreamID]) {\n                    parsedBroadcasts[boundStreamID] = {\n                        boundStreamID,\n                        id: broadcast.id,\n                        status: broadcast.status.lifeCycleStatus,\n                        title: broadcast.snippet.title\n                    };\n                }\n            }\n\n            return Object.values(parsedBroadcasts);\n        });\n}\n\n/**\n * Fetches the stream key for a YouTube broadcast and updates the internal\n * state to display the associated stream key as being entered.\n *\n * @param {string} boundStreamID - The bound stream ID associated with the\n * broadcast from which to get the stream key.\n * @returns {function(): (Promise<*>|Promise<{\n *  streamKey: (*|string),\n *  selectedBoundStreamID: *} | never>)}\n */\nexport function requestLiveStreamsForYouTubeBroadcast(boundStreamID: string) {\n    return () =>\n        googleApi.requestLiveStreamsForYouTubeBroadcast(boundStreamID)\n            .then(response => {\n                const broadcasts = response.result.items;\n                const streamName = broadcasts\n                    && broadcasts[0]\n                    && broadcasts[0].cdn.ingestionInfo.streamName;\n                const streamKey = streamName || '';\n\n                return {\n                    streamKey,\n                    selectedBoundStreamID: boundStreamID\n                };\n            });\n}\n\n/**\n * Sets the current Google API state.\n *\n * @param {number} googleAPIState - The state to be set.\n * @param {Object} googleResponse - The last response from Google.\n * @returns {{\n *     type: SET_GOOGLE_API_STATE,\n *     googleAPIState: number\n * }}\n */\nexport function setGoogleAPIState(\n        googleAPIState: number, googleResponse: ?Object) {\n    return {\n        type: SET_GOOGLE_API_STATE,\n        googleAPIState,\n        googleResponse\n    };\n}\n\n/**\n * Forces the Google web client application to prompt for a sign in, such as\n * when changing account, and will then fetch available YouTube broadcasts.\n *\n * @returns {function(): (Promise<*>|Promise<{\n *  streamKey: (*|string),\n *  selectedBoundStreamID: *} | never>)}\n */\nexport function showAccountSelection() {\n    return () =>\n        googleApi.showAccountSelection();\n}\n\n/**\n * Prompts the participant to sign in to the Google API Client Library.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function signIn() {\n    return (dispatch: Dispatch<any>) => googleApi.get()\n            .then(() => googleApi.signInIfNotSignedIn())\n            .then(() => dispatch({\n                type: SET_GOOGLE_API_STATE,\n                googleAPIState: GOOGLE_API_STATES.SIGNED_IN\n            }));\n}\n\n/**\n * Logs out the user.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function signOut() {\n    return (dispatch: Dispatch<any>) =>\n        googleApi.get()\n            .then(() => googleApi.signOut())\n            .then(() => {\n                dispatch({\n                    type: SET_GOOGLE_API_STATE,\n                    googleAPIState: GOOGLE_API_STATES.LOADED\n                });\n                dispatch({\n                    type: SET_GOOGLE_API_PROFILE,\n                    profileEmail: ''\n                });\n            });\n}\n\n/**\n * Updates the profile data that is currently used.\n *\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function updateProfile() {\n    return (dispatch: Dispatch<any>) => googleApi.get()\n        .then(() => googleApi.signInIfNotSignedIn())\n        .then(() => dispatch({\n            type: SET_GOOGLE_API_STATE,\n            googleAPIState: GOOGLE_API_STATES.SIGNED_IN\n        }))\n        .then(() => googleApi.getCurrentUserProfile())\n        .then(profile => {\n            dispatch({\n                type: SET_GOOGLE_API_PROFILE,\n                profileEmail: profile.getEmail()\n            });\n\n            return profile.getEmail();\n        });\n}\n\n/**\n * Updates the calendar event and adds a location and text.\n *\n * @param {string} id - The event id to update.\n * @param {string} calendarId - The calendar id to use.\n * @param {string} location - The location to add to the event.\n * @returns {function(Dispatch<any>): Promise<string | never>}\n */\nexport function updateCalendarEvent(\n        id: string, calendarId: string, location: string) {\n    return (dispatch: Dispatch<any>, getState: Function) =>\n        getShareInfoText(getState(), location)\n            .then(text =>\n                googleApi._updateCalendarEntry(id, calendarId, location, text));\n}\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * {@code AbstractGoogleSignInButton} component's property types.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the button is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * True if the user is signed in, so it needs to render a different label\n     * and maybe different style (for the future).\n     */\n    signedIn?: boolean,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract class of the {@code GoogleSignInButton} to share platform\n * independent code.\n *\n * @inheritdoc\n */\nexport default class AbstractGoogleSignInButton extends Component<Props> {\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\n\nimport AbstractGoogleSignInButton from './AbstractGoogleSignInButton';\n\n/**\n * A React Component showing a button to sign in with Google.\n *\n * @extends Component\n */\nclass GoogleSignInButton extends AbstractGoogleSignInButton {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div\n                className = 'google-sign-in'\n                onClick = { this.props.onClick }>\n                <img\n                    alt = { t('welcomepage.logo.googleLogo') }\n                    className = 'google-logo'\n                    src = 'images/googleLogo.svg' />\n                <div className = 'google-cta'>\n                    {\n                        t(this.props.signedIn\n                            ? 'liveStreaming.signOut'\n                            : 'liveStreaming.signIn')\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(GoogleSignInButton);\n","/**\n * The type of (redux) action which signals that A/V Moderation had been disabled.\n *\n * {\n *     type: DISABLE_MODERATION\n * }\n */\nexport const DISABLE_MODERATION = 'DISABLE_MODERATION';\n\n/**\n * The type of (redux) action which signals that the notification for audio/video unmute should\n * be dismissed.\n *\n * {\n *     type: DISMISS_PARTICIPANT_PENDING_AUDIO\n * }\n */\nexport const DISMISS_PENDING_PARTICIPANT = 'DISMISS_PENDING_PARTICIPANT';\n\n\n/**\n * The type of (redux) action which signals that A/V Moderation had been enabled.\n *\n * {\n *     type: ENABLE_MODERATION\n * }\n */\nexport const ENABLE_MODERATION = 'ENABLE_MODERATION';\n\n\n/**\n * The type of (redux) action which signals that A/V Moderation disable has been requested.\n *\n * {\n *     type: REQUEST_DISABLE_MODERATION\n * }\n */\nexport const REQUEST_DISABLE_MODERATION = 'REQUEST_DISABLE_MODERATION';\n\n/**\n * The type of (redux) action which signals that A/V Moderation enable has been requested.\n *\n * {\n *     type: REQUEST_ENABLE_MODERATION\n * }\n */\nexport const REQUEST_ENABLE_MODERATION = 'REQUEST_ENABLE_MODERATION';\n\n/**\n * The type of (redux) action which signals that the local participant had been approved.\n *\n * {\n *     type: LOCAL_PARTICIPANT_APPROVED,\n *     mediaType: MediaType\n * }\n */\nexport const LOCAL_PARTICIPANT_APPROVED = 'LOCAL_PARTICIPANT_APPROVED';\n\n/**\n * The type of (redux) action which signals to show notification to the local participant.\n *\n * {\n *     type: LOCAL_PARTICIPANT_MODERATION_NOTIFICATION\n * }\n */\nexport const LOCAL_PARTICIPANT_MODERATION_NOTIFICATION = 'LOCAL_PARTICIPANT_MODERATION_NOTIFICATION';\n\n/**\n * The type of (redux) action which signals that a participant was approved for a media type.\n *\n * {\n *     type: PARTICIPANT_APPROVED,\n *     mediaType: MediaType\n *     participantId: String\n * }\n */\nexport const PARTICIPANT_APPROVED = 'PARTICIPANT_APPROVED';\n\n\n/**\n * The type of (redux) action which signals that a participant asked to have its audio umuted.\n *\n * {\n *     type: PARTICIPANT_PENDING_AUDIO\n * }\n */\nexport const PARTICIPANT_PENDING_AUDIO = 'PARTICIPANT_PENDING_AUDIO';\n","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","// @flow\n\nimport _ from 'lodash';\n\nimport { JitsiTrackErrors } from '../lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    hiddenParticipantJoined,\n    hiddenParticipantLeft,\n    participantJoined,\n    participantLeft\n} from '../participants';\nimport { toState } from '../redux';\nimport { safeDecodeURIComponent } from '../util';\n\nimport {\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    JITSI_CONFERENCE_URL_KEY\n} from './constants';\nimport logger from './logger';\n\n/**\n * Returns root conference state.\n *\n * @param {Object} state - Global state.\n * @returns {Object} Conference state.\n */\nexport const getConferenceState = (state: Object) => state['features/base/conference'];\n\n/**\n * Is the conference joined or not.\n *\n * @param {Object} state - Global state.\n * @returns {boolean}\n */\nexport const getIsConferenceJoined = (state: Object) => Boolean(getConferenceState(state).conference);\n\n/**\n * Attach a set of local tracks to a conference.\n *\n * @param {JitsiConference} conference - Conference instance.\n * @param {JitsiLocalTrack[]} localTracks - List of local media tracks.\n * @protected\n * @returns {Promise}\n */\nexport function _addLocalTracksToConference(\n        conference: { addTrack: Function, getLocalTracks: Function },\n        localTracks: Array<Object>) {\n    const conferenceLocalTracks = conference.getLocalTracks();\n    const promises = [];\n\n    for (const track of localTracks) {\n        // XXX The library lib-jitsi-meet may be draconian, for example, when\n        // adding one and the same video track multiple times.\n        if (conferenceLocalTracks.indexOf(track) === -1) {\n            promises.push(\n                conference.addTrack(track).catch(err => {\n                    _reportError(\n                        'Failed to add local track to conference',\n                        err);\n                }));\n        }\n    }\n\n    return Promise.all(promises);\n}\n\n/**\n * Logic shared between web and RN which processes the {@code USER_JOINED}\n * conference event and dispatches either {@link participantJoined} or\n * {@link hiddenParticipantJoined}.\n *\n * @param {Object} store - The redux store.\n * @param {JitsiMeetConference} conference - The conference for which the\n * {@code USER_JOINED} event is being processed.\n * @param {JitsiParticipant} user - The user who has just joined.\n * @returns {void}\n */\nexport function commonUserJoinedHandling(\n        { dispatch }: Object,\n        conference: Object,\n        user: Object) {\n    const id = user.getId();\n    const displayName = user.getDisplayName();\n\n    if (user.isHidden()) {\n        dispatch(hiddenParticipantJoined(id, displayName));\n    } else {\n        const isReplacing = user.isReplacing && user.isReplacing();\n\n        dispatch(participantJoined({\n            botType: user.getBotType(),\n            connectionStatus: user.getConnectionStatus(),\n            conference,\n            id,\n            name: displayName,\n            presence: user.getStatus(),\n            role: user.getRole(),\n            isReplacing\n        }));\n    }\n}\n\n/**\n * Logic shared between web and RN which processes the {@code USER_LEFT}\n * conference event and dispatches either {@link participantLeft} or\n * {@link hiddenParticipantLeft}.\n *\n * @param {Object} store - The redux store.\n * @param {JitsiMeetConference} conference - The conference for which the\n * {@code USER_LEFT} event is being processed.\n * @param {JitsiParticipant} user - The user who has just left.\n * @returns {void}\n */\nexport function commonUserLeftHandling(\n        { dispatch }: Object,\n        conference: Object,\n        user: Object) {\n    const id = user.getId();\n\n    if (user.isHidden()) {\n        dispatch(hiddenParticipantLeft(id));\n    } else {\n        const isReplaced = user.isReplaced && user.isReplaced();\n\n        dispatch(participantLeft(id, conference, isReplaced));\n    }\n}\n\n/**\n * Evaluates a specific predicate for each {@link JitsiConference} known to the\n * redux state features/base/conference while it returns {@code true}.\n *\n * @param {Function | Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {Function} predicate - The predicate to evaluate for each\n * {@code JitsiConference} know to the redux state features/base/conference\n * while it returns {@code true}.\n * @returns {boolean} If the specified {@code predicate} returned {@code true}\n * for all {@code JitsiConference} instances known to the redux state\n * features/base/conference.\n */\nexport function forEachConference(\n        stateful: Function | Object,\n        predicate: (Object, URL) => boolean) {\n    const state = getConferenceState(toState(stateful));\n\n    for (const v of Object.values(state)) {\n        // Does the value of the base/conference's property look like a\n        // JitsiConference?\n        if (v && typeof v === 'object') {\n            // $FlowFixMe\n            const url: URL = v[JITSI_CONFERENCE_URL_KEY];\n\n            // XXX The Web version of Jitsi Meet does not utilize\n            // JITSI_CONFERENCE_URL_KEY at the time of this writing. An\n            // alternative is necessary then to recognize JitsiConference\n            // instances and myUserId is as good as any other property.\n            if ((url || typeof v.myUserId === 'function')\n                    && !predicate(v, url)) {\n                return false;\n            }\n        }\n    }\n\n    return true;\n}\n\n/**\n * Returns the display name of the conference.\n *\n * @param {Function | Object} stateful - Reference that can be resolved to Redux\n * state with the {@code toState} function.\n * @returns {string}\n */\nexport function getConferenceName(stateful: Function | Object): string {\n    const state = toState(stateful);\n    const { callee } = state['features/base/jwt'];\n    const { callDisplayName } = state['features/base/config'];\n    const { pendingSubjectChange, room, subject } = getConferenceState(state);\n\n    return pendingSubjectChange\n        || subject\n        || callDisplayName\n        || (callee && callee.name)\n        || safeStartCase(safeDecodeURIComponent(room));\n}\n\n/**\n * Returns the name of the conference formatted for the title.\n *\n * @param {Function | Object} stateful - Reference that can be resolved to Redux state with the {@code toState}\n * function.\n * @returns {string} - The name of the conference formatted for the title.\n */\nexport function getConferenceNameForTitle(stateful: Function | Object) {\n    return safeStartCase(safeDecodeURIComponent(getConferenceState(toState(stateful)).room));\n}\n\n/**\n* Returns the UTC timestamp when the first participant joined the conference.\n*\n* @param {Function | Object} stateful - Reference that can be resolved to Redux\n* state with the {@code toState} function.\n* @returns {number}\n*/\nexport function getConferenceTimestamp(stateful: Function | Object): number {\n    const state = toState(stateful);\n    const { conferenceTimestamp } = getConferenceState(state);\n\n    return conferenceTimestamp;\n}\n\n/**\n * Returns the current {@code JitsiConference} which is joining or joined and is\n * not leaving. Please note the contrast with merely reading the\n * {@code conference} state of the feature base/conference which is not joining\n * but may be leaving already.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {JitsiConference|undefined}\n */\nexport function getCurrentConference(stateful: Function | Object) {\n    const { conference, joining, leaving, membersOnly, passwordRequired }\n        = getConferenceState(toState(stateful));\n\n    // There is a precedence\n    if (conference) {\n        return conference === leaving ? undefined : conference;\n    }\n\n    return joining || passwordRequired || membersOnly;\n}\n\n/**\n * Returns the stored room name.\n *\n * @param {Object} state - The current state of the app.\n * @returns {string}\n */\nexport function getRoomName(state: Object): string {\n    return getConferenceState(state).room;\n}\n\n/**\n * Handle an error thrown by the backend (i.e. {@code lib-jitsi-meet}) while\n * manipulating a conference participant (e.g. Pin or select participant).\n *\n * @param {Error} err - The Error which was thrown by the backend while\n * manipulating a conference participant and which is to be handled.\n * @protected\n * @returns {void}\n */\nexport function _handleParticipantError(err: { message: ?string }) {\n    // XXX DataChannels are initialized at some later point when the conference\n    // has multiple participants, but code that pins or selects a participant\n    // might be executed before. So here we're swallowing a particular error.\n    // TODO Lib-jitsi-meet should be fixed to not throw such an exception in\n    // these scenarios.\n    if (err.message !== 'Data channels support is disabled!') {\n        throw err;\n    }\n}\n\n/**\n * Determines whether a specific string is a valid room name.\n *\n * @param {(string|undefined)} room - The name of the conference room to check\n * for validity.\n * @returns {boolean} If the specified room name is valid, then true; otherwise,\n * false.\n */\nexport function isRoomValid(room: ?string) {\n    return typeof room === 'string' && room !== '';\n}\n\n/**\n * Remove a set of local tracks from a conference.\n *\n * @param {JitsiConference} conference - Conference instance.\n * @param {JitsiLocalTrack[]} localTracks - List of local media tracks.\n * @protected\n * @returns {Promise}\n */\nexport function _removeLocalTracksFromConference(\n        conference: { removeTrack: Function },\n        localTracks: Array<Object>) {\n    return Promise.all(localTracks.map(track =>\n        conference.removeTrack(track)\n            .catch(err => {\n                // Local track might be already disposed by direct\n                // JitsiTrack#dispose() call. So we should ignore this error\n                // here.\n                if (err.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n                    _reportError(\n                        'Failed to remove local track from conference',\n                        err);\n                }\n            })\n    ));\n}\n\n/**\n * Reports a specific Error with a specific error message. While the\n * implementation merely logs the specified msg and err via the console at the\n * time of this writing, the intention of the function is to abstract the\n * reporting of errors and facilitate elaborating on it in the future.\n *\n * @param {string} msg - The error message to report.\n * @param {Error} err - The Error to report.\n * @private\n * @returns {void}\n */\nfunction _reportError(msg, err) {\n    // TODO This is a good point to call some global error handler when we have\n    // one.\n    logger.error(msg, err);\n}\n\n/**\n * Sends a representation of the local participant such as her avatar (URL),\n * e-mail address, and display name to (the remote participants of) a specific\n * conference.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {JitsiConference} conference - The {@code JitsiConference} to which\n * the representation of the local participant is to be sent.\n * @returns {void}\n */\nexport function sendLocalParticipant(\n        stateful: Function | Object,\n        conference: {\n            sendCommand: Function,\n            setDisplayName: Function,\n            setLocalParticipantProperty: Function }) {\n    const {\n        avatarURL,\n        email,\n        features,\n        name\n    } = getLocalParticipant(stateful);\n\n    avatarURL && conference.sendCommand(AVATAR_URL_COMMAND, {\n        value: avatarURL\n    });\n    email && conference.sendCommand(EMAIL_COMMAND, {\n        value: email\n    });\n\n    if (features && features['screen-sharing'] === 'true') {\n        conference.setLocalParticipantProperty('features_screen-sharing', true);\n    }\n\n    conference.setDisplayName(name);\n}\n\n/**\n * A safe implementation of lodash#startCase that doesn't deburr the string.\n *\n * NOTE: According to lodash roadmap, lodash v5 will have this function.\n *\n * Code based on https://github.com/lodash/lodash/blob/master/startCase.js.\n *\n * @param {string} s - The string to do start case on.\n * @returns {string}\n */\nfunction safeStartCase(s = '') {\n    return _.words(`${s}`.replace(/['\\u2019]/g, '')).reduce(\n        (result, word, index) => result + (index ? ' ' : '') + _.upperFirst(word)\n        , '');\n}\n","// @flow\n\n/**\n * Placeholder for web share video input.\n * @type {string}\n */\nexport const defaultSharedVideoLink = 'Youtube link or direct video link';\n\n/**\n * Fixed name of the video player fake participant.\n * @type {string}\n */\nexport const VIDEO_PLAYER_PARTICIPANT_NAME = 'Video';\n\n/**\n * Fixed name of the youtube player fake participant.\n * @type {string}\n */\nexport const YOUTUBE_PLAYER_PARTICIPANT_NAME = 'YouTube';\n\n\n/**\n * Shared video command.\n * @type {string}\n */\nexport const SHARED_VIDEO = 'shared-video';\n\n/**\n * Available playback statuses\n */\nexport const PLAYBACK_STATUSES = {\n    PLAYING: 'playing',\n    PAUSED: 'pause',\n    STOPPED: 'stop'\n};\n","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}","/**\n * Enumerates the supported keys.\n * NOTE: The maps represents physical keys on the keyboard, not chars.\n * @readonly\n * @enum {string}\n */\nexport const KEYS = {\n    BACKSPACE: 'backspace',\n    DELETE: 'delete',\n    RETURN: 'enter',\n    TAB: 'tab',\n    ESCAPE: 'escape',\n    UP: 'up',\n    DOWN: 'down',\n    RIGHT: 'right',\n    LEFT: 'left',\n    HOME: 'home',\n    END: 'end',\n    PAGEUP: 'pageup',\n    PAGEDOWN: 'pagedown',\n\n    F1: 'f1',\n    F2: 'f2',\n    F3: 'f3',\n    F4: 'f4',\n    F5: 'f5',\n    F6: 'f6',\n    F7: 'f7',\n    F8: 'f8',\n    F9: 'f9',\n    F10: 'f10',\n    F11: 'f11',\n    F12: 'f12',\n    META: 'command',\n    CMD_L: 'command',\n    CMD_R: 'command',\n    ALT: 'alt',\n    CONTROL: 'control',\n    SHIFT: 'shift',\n    CAPS_LOCK: 'caps_lock', // not supported by robotjs\n    SPACE: 'space',\n    PRINTSCREEN: 'printscreen',\n    INSERT: 'insert',\n\n    NUMPAD_0: 'numpad_0',\n    NUMPAD_1: 'numpad_1',\n    NUMPAD_2: 'numpad_2',\n    NUMPAD_3: 'numpad_3',\n    NUMPAD_4: 'numpad_4',\n    NUMPAD_5: 'numpad_5',\n    NUMPAD_6: 'numpad_6',\n    NUMPAD_7: 'numpad_7',\n    NUMPAD_8: 'numpad_8',\n    NUMPAD_9: 'numpad_9',\n\n    COMMA: ',',\n\n    PERIOD: '.',\n    SEMICOLON: ';',\n    QUOTE: '\\'',\n    BRACKET_LEFT: '[',\n    BRACKET_RIGHT: ']',\n    BACKQUOTE: '`',\n    BACKSLASH: '\\\\',\n    MINUS: '-',\n    EQUAL: '=',\n    SLASH: '/'\n};\n\n/* eslint-disable max-len */\n/**\n * Mapping between the key codes and keys defined in KEYS.\n * The mappings are based on\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Specifications\n */\n/* eslint-enable max-len */\nconst keyCodeToKey = {\n    8: KEYS.BACKSPACE,\n    9: KEYS.TAB,\n    13: KEYS.RETURN,\n    16: KEYS.SHIFT,\n    17: KEYS.CONTROL,\n    18: KEYS.ALT,\n    20: KEYS.CAPS_LOCK,\n    27: KEYS.ESCAPE,\n    32: KEYS.SPACE,\n    33: KEYS.PAGEUP,\n    34: KEYS.PAGEDOWN,\n    35: KEYS.END,\n    36: KEYS.HOME,\n    37: KEYS.LEFT,\n    38: KEYS.UP,\n    39: KEYS.RIGHT,\n    40: KEYS.DOWN,\n    42: KEYS.PRINTSCREEN,\n    44: KEYS.PRINTSCREEN,\n    45: KEYS.INSERT,\n    46: KEYS.DELETE,\n    59: KEYS.SEMICOLON,\n    61: KEYS.EQUAL,\n    91: KEYS.CMD_L,\n    92: KEYS.CMD_R,\n    93: KEYS.CMD_R,\n    96: KEYS.NUMPAD_0,\n    97: KEYS.NUMPAD_1,\n    98: KEYS.NUMPAD_2,\n    99: KEYS.NUMPAD_3,\n    100: KEYS.NUMPAD_4,\n    101: KEYS.NUMPAD_5,\n    102: KEYS.NUMPAD_6,\n    103: KEYS.NUMPAD_7,\n    104: KEYS.NUMPAD_8,\n    105: KEYS.NUMPAD_9,\n    112: KEYS.F1,\n    113: KEYS.F2,\n    114: KEYS.F3,\n    115: KEYS.F4,\n    116: KEYS.F5,\n    117: KEYS.F6,\n    118: KEYS.F7,\n    119: KEYS.F8,\n    120: KEYS.F9,\n    121: KEYS.F10,\n    122: KEYS.F11,\n    123: KEYS.F12,\n    124: KEYS.PRINTSCREEN,\n    173: KEYS.MINUS,\n    186: KEYS.SEMICOLON,\n    187: KEYS.EQUAL,\n    188: KEYS.COMMA,\n    189: KEYS.MINUS,\n    190: KEYS.PERIOD,\n    191: KEYS.SLASH,\n    192: KEYS.BACKQUOTE,\n    219: KEYS.BRACKET_LEFT,\n    220: KEYS.BACKSLASH,\n    221: KEYS.BRACKET_RIGHT,\n    222: KEYS.QUOTE,\n    224: KEYS.META,\n    229: KEYS.SEMICOLON\n};\n\n/**\n * Generate codes for digit keys (0-9)\n */\nfor (let i = 0; i < 10; i++) {\n    keyCodeToKey[i + 48] = `${i}`;\n}\n\n/**\n * Generate codes for letter keys (a-z)\n */\nfor (let i = 0; i < 26; i++) {\n    const keyCode = i + 65;\n\n    keyCodeToKey[keyCode] = String.fromCharCode(keyCode).toLowerCase();\n}\n\n/**\n * Returns key associated with the keyCode from the passed event.\n *\n * @param {KeyboardEvent} event - The event.\n * @returns {KEYS} - The key on the keyboard.\n */\nexport function keyboardEventToKey(event) {\n    return keyCodeToKey[event.which];\n}\n","// @flow\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\nimport JitsiMeetJS from '../base/lib-jitsi-meet';\n\nimport { enableReceiver, stopReceiver } from './actions';\nimport { REMOTE_CONTROL_MESSAGE_NAME, EVENTS } from './constants';\nimport { keyboardEventToKey } from './keycodes';\nimport logger from './logger';\n\n/**\n * Checks if the remote contrrol is enabled.\n *\n * @param {*} state - The redux state.\n * @returns {boolean} - True if the remote control is enabled and false otherwise.\n */\nexport function isRemoteControlEnabled(state: Object) {\n    return !state['features/base/config'].disableRemoteControl && JitsiMeetJS.isDesktopSharingEnabled();\n}\n\n/**\n * Sends remote control message to other participant through data channel.\n *\n * @param {JitsiConference} conference - The JitsiConference object.\n * @param {string} to - The participant who will receive the event.\n * @param {RemoteControlEvent} event - The remote control event.\n * @returns {boolean} - True if the message was sent successfully and false otherwise.\n */\nexport function sendRemoteControlEndpointMessage(\n        conference: Object,\n        to: ?string,\n        event: Object) {\n    if (!to) {\n        logger.warn('Remote control: Skip sending remote control event. Params:', to);\n\n        return false;\n    }\n\n    try {\n        conference.sendEndpointMessage(to, {\n            name: REMOTE_CONTROL_MESSAGE_NAME,\n            ...event\n        });\n\n        return true;\n    } catch (error) {\n        logger.error('Failed to send EndpointMessage via the datachannels', error);\n\n        return false;\n    }\n}\n\n/**\n* Handles remote control events from the external app. Currently only\n* events with type EVENTS.supported and EVENTS.stop are\n* supported.\n*\n* @param {RemoteControlEvent} event - The remote control event.\n* @param {Store} store - The redux store.\n* @returns {void}\n*/\nexport function onRemoteControlAPIEvent(event: Object, { getState, dispatch }: Object) {\n    switch (event.type) {\n    case EVENTS.supported:\n        logger.log('Remote Control supported.');\n        if (isRemoteControlEnabled(getState())) {\n            dispatch(enableReceiver());\n        } else {\n            logger.log('Remote Control disabled.');\n        }\n        break;\n    case EVENTS.stop: {\n        dispatch(stopReceiver());\n\n        break;\n    }\n    }\n}\n\n/**\n * Returns the area used for capturing mouse and key events.\n *\n * @returns {JQuery} - A JQuery selector.\n */\nexport function getRemoteConrolEventCaptureArea() {\n    return VideoLayout.getLargeVideoWrapper();\n}\n\n\n/**\n * Extract the keyboard key from the keyboard event.\n *\n * @param {KeyboardEvent} event - The event.\n * @returns {KEYS} The key that is pressed or undefined.\n */\nexport function getKey(event: Object) {\n    return keyboardEventToKey(event);\n}\n\n/**\n * Extract the modifiers from the keyboard event.\n *\n * @param {KeyboardEvent} event - The event.\n * @returns {Array} With possible values: \"shift\", \"control\", \"alt\", \"command\".\n */\nexport function getModifiers(event: Object) {\n    const modifiers = [];\n\n    if (event.shiftKey) {\n        modifiers.push('shift');\n    }\n\n    if (event.ctrlKey) {\n        modifiers.push('control');\n    }\n\n\n    if (event.altKey) {\n        modifiers.push('alt');\n    }\n\n    if (event.metaKey) {\n        modifiers.push('command');\n    }\n\n    return modifiers;\n}\n\n","// @flow\n\nimport { SERVER_URL_CHANGE_ENABLED, getFeatureFlag } from '../base/flags';\nimport { i18next, DEFAULT_LANGUAGE, LANGUAGES } from '../base/i18n';\nimport { createLocalTrack } from '../base/lib-jitsi-meet/functions';\nimport {\n    getLocalParticipant,\n    isLocalParticipantModerator\n} from '../base/participants';\nimport { toState } from '../base/redux';\nimport { parseStandardURIString } from '../base/util';\nimport { isFollowMeActive } from '../follow-me';\n\nimport { SS_DEFAULT_FRAME_RATE, SS_SUPPORTED_FRAMERATES } from './constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Used for web. Indicates if the setting section is enabled.\n *\n * @param {string} settingName - The name of the setting section as defined in\n * interface_config.js and SettingsMenu.js.\n * @returns {boolean} True to indicate that the given setting section\n * is enabled, false otherwise.\n */\nexport function isSettingEnabled(settingName: string) {\n    return interfaceConfig.SETTINGS_SECTIONS.includes(settingName);\n}\n\n/**\n * Returns true if user is allowed to change Server URL.\n *\n * @param {(Function|Object)} stateful - The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {boolean} True to indicate that user can change Server URL, false otherwise.\n */\nexport function isServerURLChangeEnabled(stateful: Object | Function) {\n    const state = toState(stateful);\n    const flag = getFeatureFlag(state, SERVER_URL_CHANGE_ENABLED, true);\n\n    return flag;\n}\n\n/**\n * Normalizes a URL entered by the user.\n * FIXME: Consider adding this to base/util/uri.\n *\n * @param {string} url - The URL to validate.\n * @returns {string|null} - The normalized URL, or null if the URL is invalid.\n */\nexport function normalizeUserInputURL(url: string) {\n    /* eslint-disable no-param-reassign */\n\n    if (url) {\n        url = url.replace(/\\s/g, '').toLowerCase();\n\n        const urlRegExp = new RegExp('^(\\\\w+://)?(.+)$');\n        const urlComponents = urlRegExp.exec(url);\n\n        if (urlComponents && (!urlComponents[1]\n                || !urlComponents[1].startsWith('http'))) {\n            url = `https://${urlComponents[2]}`;\n        }\n\n        const parsedURI = parseStandardURIString(url);\n\n        if (!parsedURI.host) {\n            return null;\n        }\n\n        return parsedURI.toString();\n    }\n\n    return url;\n\n    /* eslint-enable no-param-reassign */\n}\n\n/**\n * Used for web. Returns whether or not only Device Selection is configured to\n * display as a setting.\n *\n * @returns {boolean}\n */\nexport function shouldShowOnlyDeviceSelection() {\n    return interfaceConfig.SETTINGS_SECTIONS.length === 1\n        && isSettingEnabled('devices');\n}\n\n/**\n * Returns the properties for the \"More\" tab from settings dialog from Redux\n * state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the \"More\" tab from settings dialog.\n */\nexport function getMoreTabProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const framerate = state['features/screen-share'].captureFrameRate ?? SS_DEFAULT_FRAME_RATE;\n    const language = i18next.language || DEFAULT_LANGUAGE;\n    const {\n        conference,\n        followMeEnabled,\n        startAudioMutedPolicy,\n        startVideoMutedPolicy\n    } = state['features/base/conference'];\n    const followMeActive = isFollowMeActive(state);\n    const configuredTabs = interfaceConfig.SETTINGS_SECTIONS || [];\n\n    // The settings sections to display.\n    const showModeratorSettings = Boolean(\n        conference\n            && configuredTabs.includes('moderator')\n            && isLocalParticipantModerator(state));\n\n    return {\n        currentFramerate: framerate,\n        currentLanguage: language,\n        desktopShareFramerates: SS_SUPPORTED_FRAMERATES,\n        followMeActive: Boolean(conference && followMeActive),\n        followMeEnabled: Boolean(conference && followMeEnabled),\n        languages: LANGUAGES,\n        showLanguageSettings: configuredTabs.includes('language'),\n        showModeratorSettings,\n        showPrejoinSettings: state['features/base/config'].prejoinPageEnabled,\n        showPrejoinPage: !state['features/base/settings'].userSelectedSkipPrejoin,\n        startAudioMuted: Boolean(conference && startAudioMutedPolicy),\n        startVideoMuted: Boolean(conference && startVideoMutedPolicy)\n    };\n}\n\n/**\n * Returns the properties for the \"Profile\" tab from settings dialog from Redux\n * state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the \"Profile\" tab from settings\n * dialog.\n */\nexport function getProfileTabProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        authEnabled,\n        authLogin,\n        conference\n    } = state['features/base/conference'];\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        authEnabled: Boolean(conference && authEnabled),\n        authLogin,\n        displayName: localParticipant.name,\n        email: localParticipant.email\n    };\n}\n\n/**\n * Returns the properties for the \"Sounds\" tab from settings dialog from Redux\n * state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the \"Sounds\" tab from settings\n * dialog.\n */\nexport function getSoundsTabProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        soundsIncomingMessage,\n        soundsParticipantJoined,\n        soundsParticipantLeft,\n        soundsTalkWhileMuted\n    } = state['features/base/settings'];\n\n    return {\n        soundsIncomingMessage,\n        soundsParticipantJoined,\n        soundsParticipantLeft,\n        soundsTalkWhileMuted\n    };\n}\n\n/**\n * Returns a promise which resolves with a list of objects containing\n * all the video jitsiTracks and appropriate errors for the given device ids.\n *\n * @param {string[]} ids - The list of the camera ids for which to create tracks.\n * @param {number} [timeout] - A timeout for the createLocalTrack function call.\n *\n * @returns {Promise<Object[]>}\n */\nexport function createLocalVideoTracks(ids: string[], timeout: ?number) {\n    return Promise.all(ids.map(deviceId => createLocalTrack('video', deviceId, timeout)\n                   .then(jitsiTrack => {\n                       return {\n                           jitsiTrack,\n                           deviceId\n                       };\n                   })\n                   .catch(() => {\n                       return {\n                           jitsiTrack: null,\n                           deviceId,\n                           error: 'deviceSelection.previewUnavailable'\n                       };\n                   })));\n}\n\n\n/**\n * Returns a promise which resolves with a list of objects containing\n * the audio track and the corresponding audio device information.\n *\n * @param {Object[]} devices - A list of microphone devices.\n * @param {number} [timeout] - A timeout for the createLocalTrack function call.\n * @returns {Promise<{\n *   deviceId: string,\n *   hasError: boolean,\n *   jitsiTrack: Object,\n *   label: string\n * }[]>}\n */\nexport function createLocalAudioTracks(devices: Object[], timeout: ?number) {\n    return Promise.all(\n        devices.map(async ({ deviceId, label }) => {\n            let jitsiTrack = null;\n            let hasError = false;\n\n            try {\n                jitsiTrack = await createLocalTrack('audio', deviceId, timeout);\n            } catch (err) {\n                hasError = true;\n            }\n\n            return {\n                deviceId,\n                hasError,\n                jitsiTrack,\n                label\n            };\n        }));\n}\n\n/**\n * Returns the visibility state of the audio settings.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getAudioSettingsVisibility(state: Object) {\n    return state['features/settings'].audioSettingsVisible;\n}\n\n/**\n * Returns the visibility state of the video settings.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getVideoSettingsVisibility(state: Object) {\n    return state['features/settings'].videoSettingsVisible;\n}\n","// @flow\n\nimport {\n    isParticipantApproved,\n    isEnabledFromState,\n    isLocalParticipantApprovedFromState\n} from '../av-moderation/functions';\nimport { getFeatureFlag, INVITE_ENABLED } from '../base/flags';\nimport { MEDIA_TYPE, type MediaType } from '../base/media/constants';\nimport {\n    getParticipantCount,\n    isLocalParticipantModerator,\n    isParticipantModerator\n} from '../base/participants/functions';\nimport { toState } from '../base/redux';\n\nimport { QUICK_ACTION_BUTTON, REDUCER_KEY, MEDIA_STATE } from './constants';\n\n/**\n * Generates a class attribute value.\n *\n * @param {Iterable<string>} args - String iterable.\n * @returns {string} Class attribute value.\n */\nexport const classList = (...args: Array<string | boolean>) => args.filter(Boolean).join(' ');\n\n\n/**\n * Find the first styled ancestor component of an element.\n *\n * @param {Element} target - Element to look up.\n * @param {StyledComponentClass} component - Styled component reference.\n * @returns {Element|null} Ancestor.\n */\nexport const findStyledAncestor = (target: Object, component: any) => {\n    if (!target || target.matches(`.${component.styledComponentId}`)) {\n        return target;\n    }\n\n    return findStyledAncestor(target.parentElement, component);\n};\n\n/**\n * Checks if a participant is force muted.\n *\n * @param {Object} participant - The participant.\n * @param {MediaType} mediaType - The media type.\n * @param {Object} state - The redux state.\n * @returns {MediaState}\n */\nexport function isForceMuted(participant: Object, mediaType: MediaType, state: Object) {\n    if (getParticipantCount(state) > 2 && isEnabledFromState(mediaType, state)) {\n        if (participant.local) {\n            return !isLocalParticipantApprovedFromState(mediaType, state);\n        }\n\n        // moderators cannot be force muted\n        if (isParticipantModerator(participant)) {\n            return false;\n        }\n\n        return !isParticipantApproved(participant.id, mediaType)(state);\n    }\n\n    return false;\n}\n\n/**\n * Determines the audio media state (the mic icon) for a participant.\n *\n * @param {Object} participant - The participant.\n * @param {boolean} muted - The mute state of the participant.\n * @param {Object} state - The redux state.\n * @returns {MediaState}\n */\nexport function getParticipantAudioMediaState(participant: Object, muted: Boolean, state: Object) {\n    if (muted) {\n        if (isForceMuted(participant, MEDIA_TYPE.AUDIO, state)) {\n            return MEDIA_STATE.FORCE_MUTED;\n        }\n\n        return MEDIA_STATE.MUTED;\n    }\n\n    return MEDIA_STATE.UNMUTED;\n}\n\n\n/**\n * Get a style property from a style declaration as a float.\n *\n * @param {CSSStyleDeclaration} styles - Style declaration.\n * @param {string} name - Property name.\n * @returns {number} Float value.\n */\nexport const getFloatStyleProperty = (styles: Object, name: string) =>\n    parseFloat(styles.getPropertyValue(name));\n\n/**\n * Gets the outer height of an element, including margins.\n *\n * @param {Element} element - Target element.\n * @returns {number} Computed height.\n */\nexport const getComputedOuterHeight = (element: HTMLElement) => {\n    const computedStyle = getComputedStyle(element);\n\n    return element.offsetHeight\n    + getFloatStyleProperty(computedStyle, 'margin-top')\n    + getFloatStyleProperty(computedStyle, 'margin-bottom');\n};\n\n/**\n * Returns this feature's root state.\n *\n * @param {Object} state - Global state.\n * @returns {Object} Feature state.\n */\nconst getState = (state: Object) => state[REDUCER_KEY];\n\n/**\n * Is the participants pane open.\n *\n * @param {Object} state - Global state.\n * @returns {boolean} Is the participants pane open.\n */\nexport const getParticipantsPaneOpen = (state: Object) => Boolean(getState(state)?.isOpen);\n\n/**\n * Returns the type of quick action button to be displayed for a participant.\n * The button is displayed when hovering a participant from the participant list.\n *\n * @param {Object} participant - The participant.\n * @param {boolean} isAudioMuted - If audio is muted for the participant.\n * @param {Object} state - The redux state.\n * @returns {string} - The type of the quick action button.\n */\nexport function getQuickActionButtonType(participant: Object, isAudioMuted: Boolean, state: Object) {\n    // handled only by moderators\n    if (isLocalParticipantModerator(state)) {\n        if (isForceMuted(participant, MEDIA_TYPE.AUDIO, state)) {\n            return QUICK_ACTION_BUTTON.ASK_TO_UNMUTE;\n        }\n        if (!isAudioMuted) {\n            return QUICK_ACTION_BUTTON.MUTE;\n        }\n    }\n\n    return QUICK_ACTION_BUTTON.NONE;\n}\n\n/**\n * Returns true if the invite button should be rendered.\n *\n * @param {Object} state - Global state.\n * @returns {boolean}\n */\nexport const shouldRenderInviteButton = (state: Object) => {\n    const { disableInviteFunctions } = toState(state)['features/base/config'];\n    const flagEnabled = getFeatureFlag(state, INVITE_ENABLED, true);\n\n    return flagEnabled && !disableInviteFunctions;\n};\n","// @flow\n\nimport {\n    SET_FILMSTRIP_ENABLED,\n    SET_FILMSTRIP_VISIBLE,\n    SET_TILE_VIEW_DIMENSIONS\n} from './actionTypes';\n\n/**\n * Sets whether the filmstrip is enabled.\n *\n * @param {boolean} enabled - Whether the filmstrip is enabled.\n * @returns {{\n *     type: SET_FILMSTRIP_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setFilmstripEnabled(enabled: boolean) {\n    return {\n        type: SET_FILMSTRIP_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Sets whether the filmstrip is visible.\n *\n * @param {boolean} visible - Whether the filmstrip is visible.\n * @returns {{\n *     type: SET_FILMSTRIP_VISIBLE,\n *     visible: boolean\n * }}\n */\nexport function setFilmstripVisible(visible: boolean) {\n    return {\n        type: SET_FILMSTRIP_VISIBLE,\n        visible\n    };\n}\n\n/**\n * Sets the dimensions of the tile view grid. The action is only partially implemented on native as not all\n * of the values are currently used. Check the description of {@link SET_TILE_VIEW_DIMENSIONS} for the full set\n * of properties.\n *\n * @param {Object} dimensions - The tile view dimensions.\n * @param {Object} thumbnailSize - The size of an individual video thumbnail.\n * @param {number} thumbnailSize.height - The height of an individual video thumbnail.\n * @param {number} thumbnailSize.width - The width of an individual video thumbnail.\n * @returns {{\n *     type: SET_TILE_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }}\n */\nexport function setTileViewDimensions({ thumbnailSize }: Object) {\n    return {\n        type: SET_TILE_VIEW_DIMENSIONS,\n        dimensions: {\n            thumbnailSize\n        }\n    };\n}\n","// @flow\nimport type { Dispatch } from 'redux';\n\nimport { getLocalParticipant, getRemoteParticipants, pinParticipant } from '../base/participants';\n\nimport {\n    SET_HORIZONTAL_VIEW_DIMENSIONS,\n    SET_TILE_VIEW_DIMENSIONS,\n    SET_VERTICAL_VIEW_DIMENSIONS,\n    SET_VISIBLE_REMOTE_PARTICIPANTS,\n    SET_VOLUME\n} from './actionTypes';\nimport {\n    HORIZONTAL_FILMSTRIP_MARGIN,\n    SCROLL_SIZE,\n    STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER,\n    STAGE_VIEW_THUMBNAIL_VERTICAL_BORDER,\n    TILE_HORIZONTAL_MARGIN,\n    TILE_VERTICAL_MARGIN,\n    VERTICAL_FILMSTRIP_VERTICAL_MARGIN\n} from './constants';\nimport {\n    calculateThumbnailSizeForHorizontalView,\n    calculateThumbnailSizeForTileView,\n    calculateThumbnailSizeForVerticalView\n} from './functions';\n\n/**\n * Sets the dimensions of the tile view grid.\n *\n * @param {Object} dimensions - Whether the filmstrip is visible.\n * @param {Object | Function} stateful - An object or function that can be\n * resolved to Redux state using the {@code toState} function.\n * @returns {Function}\n */\nexport function setTileViewDimensions(dimensions: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n        const { disableResponsiveTiles } = state['features/base/config'];\n        const {\n            height,\n            width\n        } = calculateThumbnailSizeForTileView({\n            ...dimensions,\n            clientWidth,\n            clientHeight,\n            disableResponsiveTiles\n        });\n        const { columns, rows } = dimensions;\n        const thumbnailsTotalHeight = rows * (TILE_VERTICAL_MARGIN + height);\n        const hasScroll = clientHeight < thumbnailsTotalHeight;\n        const filmstripWidth = (columns * (TILE_HORIZONTAL_MARGIN + width)) + (hasScroll ? SCROLL_SIZE : 0);\n        const filmstripHeight = Math.min(clientHeight, thumbnailsTotalHeight);\n\n        dispatch({\n            type: SET_TILE_VIEW_DIMENSIONS,\n            dimensions: {\n                gridDimensions: dimensions,\n                thumbnailSize: {\n                    height,\n                    width\n                },\n                filmstripHeight,\n                filmstripWidth\n            }\n        });\n    };\n}\n\n/**\n * Sets the dimensions of the thumbnails in vertical view.\n *\n * @returns {Function}\n */\nexport function setVerticalViewDimensions() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { clientHeight = 0, clientWidth = 0 } = state['features/base/responsive-ui'];\n        const thumbnails = calculateThumbnailSizeForVerticalView(clientWidth);\n\n        dispatch({\n            type: SET_VERTICAL_VIEW_DIMENSIONS,\n            dimensions: {\n                ...thumbnails,\n                remoteVideosContainer: {\n                    width: thumbnails?.local?.width\n                        + TILE_HORIZONTAL_MARGIN + STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER + SCROLL_SIZE,\n                    height: clientHeight - thumbnails?.local?.height - VERTICAL_FILMSTRIP_VERTICAL_MARGIN\n                }\n            }\n\n        });\n    };\n}\n\n/**\n * Sets the dimensions of the thumbnails in horizontal view.\n *\n * @returns {Function}\n */\nexport function setHorizontalViewDimensions() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { clientHeight = 0, clientWidth = 0 } = state['features/base/responsive-ui'];\n        const thumbnails = calculateThumbnailSizeForHorizontalView(clientHeight);\n\n        dispatch({\n            type: SET_HORIZONTAL_VIEW_DIMENSIONS,\n            dimensions: {\n                ...thumbnails,\n                remoteVideosContainer: {\n                    width: clientWidth - thumbnails?.local?.width - HORIZONTAL_FILMSTRIP_MARGIN,\n                    height: thumbnails?.local?.height\n                        + TILE_VERTICAL_MARGIN + STAGE_VIEW_THUMBNAIL_VERTICAL_BORDER + SCROLL_SIZE\n                }\n            }\n        });\n    };\n}\n\n/**\n * Emulates a click on the n-th video.\n *\n * @param {number} n - Number that identifies the video.\n * @returns {Function}\n */\nexport function clickOnVideo(n: number) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const participants = [ getLocalParticipant(state), ...getRemoteParticipants(state).values() ];\n        const nThParticipant = participants[n];\n        const { id, pinned } = nThParticipant;\n\n        dispatch(pinParticipant(pinned ? null : id));\n    };\n}\n\n/**\n * Sets the volume for a thumbnail's audio.\n *\n * @param {string} participantId - The participant ID asociated with the audio.\n * @param {string} volume - The volume level.\n * @returns {{\n *     type: SET_VOLUME,\n *     participantId: string,\n *     volume: number\n * }}\n */\nexport function setVolume(participantId: string, volume: number) {\n    return {\n        type: SET_VOLUME,\n        participantId,\n        volume\n    };\n}\n\n/**\n * Sets the list of the visible participants in the filmstrip by storing the start and end index from the remote\n * participants array.\n *\n * @param {number} startIndex - The start index from the remote participants array.\n * @param {number} endIndex - The end index from the remote participants array.\n * @returns {{\n *      type: SET_VISIBLE_REMOTE_PARTICIPANTS,\n *      startIndex: number,\n *      endIndex: number\n * }}\n */\nexport function setVisibleRemoteParticipants(startIndex: number, endIndex: number) {\n    return {\n        type: SET_VISIBLE_REMOTE_PARTICIPANTS,\n        startIndex,\n        endIndex\n    };\n}\n\nexport * from './actions.native';\n","// @flow\n\nimport { getConferenceState } from '../base/conference';\nimport { MEDIA_TYPE, type MediaType } from '../base/media/constants';\n\nimport {\n    DISMISS_PENDING_PARTICIPANT,\n    DISABLE_MODERATION,\n    ENABLE_MODERATION,\n    LOCAL_PARTICIPANT_APPROVED,\n    LOCAL_PARTICIPANT_MODERATION_NOTIFICATION,\n    PARTICIPANT_APPROVED,\n    PARTICIPANT_PENDING_AUDIO,\n    REQUEST_DISABLE_MODERATION,\n    REQUEST_ENABLE_MODERATION\n} from './actionTypes';\n\n/**\n * Action used by moderator to approve audio and video for a participant.\n *\n * @param {staring} id - The id of the participant to be approved.\n * @returns {void}\n */\nexport const approveParticipant = (id: string) => (dispatch: Function, getState: Function) => {\n    const { conference } = getConferenceState(getState());\n\n    conference.avModerationApprove(MEDIA_TYPE.AUDIO, id);\n    conference.avModerationApprove(MEDIA_TYPE.VIDEO, id);\n};\n\n/**\n * Audio or video moderation is disabled.\n *\n * @param {MediaType} mediaType - The media type that was disabled.\n * @param {JitsiParticipant} actor - The actor disabling.\n * @returns {{\n *     type: REQUEST_DISABLE_MODERATED_AUDIO\n * }}\n */\nexport const disableModeration = (mediaType: MediaType, actor: Object) => {\n    return {\n        type: DISABLE_MODERATION,\n        mediaType,\n        actor\n    };\n};\n\n\n/**\n * Hides the notification with the participant that asked to unmute audio.\n *\n * @param {Object} participant - The participant for which the notification to be hidden.\n * @returns {Object}\n */\nexport function dismissPendingAudioParticipant(participant: Object) {\n    return dismissPendingParticipant(participant, MEDIA_TYPE.AUDIO);\n}\n\n/**\n * Hides the notification with the participant that asked to unmute.\n *\n * @param {Object} participant - The participant for which the notification to be hidden.\n * @param {MediaType} mediaType - The media type.\n * @returns {Object}\n */\nexport function dismissPendingParticipant(participant: Object, mediaType: MediaType) {\n    return {\n        type: DISMISS_PENDING_PARTICIPANT,\n        participant,\n        mediaType\n    };\n}\n\n/**\n * Audio or video moderation is enabled.\n *\n * @param {MediaType} mediaType - The media type that was enabled.\n * @param {JitsiParticipant} actor - The actor enabling.\n * @returns {{\n *     type: REQUEST_ENABLE_MODERATED_AUDIO\n * }}\n */\nexport const enableModeration = (mediaType: MediaType, actor: Object) => {\n    return {\n        type: ENABLE_MODERATION,\n        mediaType,\n        actor\n    };\n};\n\n/**\n * Requests disable of audio and video moderation.\n *\n * @returns {{\n *     type: REQUEST_DISABLE_MODERATED_AUDIO\n * }}\n */\nexport const requestDisableModeration = () => {\n    return {\n        type: REQUEST_DISABLE_MODERATION\n    };\n};\n\n/**\n * Requests enabled audio & video moderation.\n *\n * @returns {{\n *     type: REQUEST_ENABLE_MODERATED_AUDIO\n * }}\n */\nexport const requestEnableModeration = () => {\n    return {\n        type: REQUEST_ENABLE_MODERATION\n    };\n};\n\n/**\n * Local participant was approved to be able to unmute audio and video.\n *\n * @param {MediaType} mediaType - The media type to disable.\n * @returns {{\n *     type: LOCAL_PARTICIPANT_APPROVED\n * }}\n */\nexport const localParticipantApproved = (mediaType: MediaType) => {\n    return {\n        type: LOCAL_PARTICIPANT_APPROVED,\n        mediaType\n    };\n};\n\n/**\n * Shows notification when A/V moderation is enabled and local participant is still not approved.\n *\n * @param {MediaType} mediaType - Audio or video media type.\n * @returns {Object}\n */\nexport function showModeratedNotification(mediaType: MediaType) {\n    return {\n        type: LOCAL_PARTICIPANT_MODERATION_NOTIFICATION,\n        mediaType\n    };\n}\n\n/**\n * Shows a notification with the participant that asked to audio unmute.\n *\n * @param {Object} participant - The participant for which is the notification.\n * @returns {Object}\n */\nexport function participantPendingAudio(participant: Object) {\n    return {\n        type: PARTICIPANT_PENDING_AUDIO,\n        participant\n    };\n}\n\n/**\n * A participant was approved to unmute for a mediaType.\n *\n * @param {string} id - The id of the approved participant.\n * @param {MediaType} mediaType - The media type which was approved.\n * @returns {{\n *     type: PARTICIPANT_APPROVED,\n * }}\n */\nexport function participantApproved(id: string, mediaType: MediaType) {\n    return {\n        type: PARTICIPANT_APPROVED,\n        id,\n        mediaType\n    };\n}\n","/**\n * The type of (redux) action which sets whether the filmstrip is enabled.\n *\n * {\n *     type: SET_FILMSTRIP_ENABLED,\n *     enabled: boolean\n * }\n */\nexport const SET_FILMSTRIP_ENABLED = 'SET_FILMSTRIP_ENABLED';\n\n/**\n * The type of (redux) action which sets whether the filmstrip is visible.\n *\n * {\n *     type: SET_FILMSTRIP_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_FILMSTRIP_VISIBLE = 'SET_FILMSTRIP_VISIBLE';\n\n/**\n * The type of (redux) action which sets the dimensions of the tile view grid.\n *\n * {\n *     type: SET_TILE_VIEW_DIMENSIONS,\n *     dimensions: {\n *         gridDimensions: {\n *             columns: number,\n *             height: number,\n *             minVisibleRows: number,\n *             width: number\n *         },\n *         thumbnailSize: {\n *             height: number,\n *             width: number\n *         },\n *         filmstripWidth: number\n *     }\n * }\n */\nexport const SET_TILE_VIEW_DIMENSIONS = 'SET_TILE_VIEW_DIMENSIONS';\n\n/**\n * The type of (redux) action which sets the dimensions of the thumbnails in horizontal view.\n *\n * {\n *     type: SET_HORIZONTAL_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }\n */\nexport const SET_HORIZONTAL_VIEW_DIMENSIONS = 'SET_HORIZONTAL_VIEW_DIMENSIONS';\n\n/**\n * The type of (redux) action which sets the dimensions of the thumbnails in vertical view.\n *\n * {\n *     type: SET_VERTICAL_VIEW_DIMENSIONS,\n *     dimensions: Object\n * }\n */\nexport const SET_VERTICAL_VIEW_DIMENSIONS = 'SET_VERTICAL_VIEW_DIMENSIONS';\n\n/**\n * The type of (redux) action which sets the volume for a thumnail's audio.\n *\n * {\n *     type: SET_VOLUME,\n *     participantId: string,\n *     volume: number\n * }\n */\nexport const SET_VOLUME = 'SET_VOLUME';\n\n/**\n * The type of the action which sets the list of visible remote participants in the filmstrip by storing the start and\n * end index in the remote participants array.\n *\n * {\n *      type: SET_VISIBLE_REMOTE_PARTICIPANTS,\n *      startIndex: number,\n *      endIndex: number\n * }\n */\nexport const SET_VISIBLE_REMOTE_PARTICIPANTS = 'SET_VISIBLE_REMOTE_PARTICIPANTS';\n","// @flow\n\n/**\n * Resets the state of calendar integration so stored events and selected\n * calendar type are cleared.\n *\n * {\n *     type: CLEAR_CALENDAR_INTEGRATION\n * }\n */\nexport const CLEAR_CALENDAR_INTEGRATION = 'CLEAR_CALENDAR_INTEGRATION';\n\n/**\n * Action to refresh (re-fetch) the entry list.\n *\n * {\n *     type: REFRESH_CALENDAR,\n *     forcePermission: boolean,\n *     isInteractive: boolean\n * }\n */\nexport const REFRESH_CALENDAR = 'REFRESH_CALENDAR';\n\n/**\n * Action to signal that calendar access has already been requested since the\n * app started, so no new request should be done unless the user explicitly\n * tries to refresh the calendar view.\n *\n * {\n *     type: SET_CALENDAR_AUTHORIZATION,\n *     authorization: ?string\n * }\n */\nexport const SET_CALENDAR_AUTHORIZATION = 'SET_CALENDAR_AUTHORIZATION';\n\n/**\n * Action to update the last error that occurred while trying to authenticate\n * with or fetch data from the calendar integration.\n *\n * {\n *     type: SET_CALENDAR_ERROR,\n *     error: ?Object\n * }\n */\nexport const SET_CALENDAR_ERROR = 'SET_CALENDAR_ERROR';\n\n/**\n * Action to update the current calendar entry list in the store.\n *\n * {\n *     type: SET_CALENDAR_EVENTS,\n *     events: Array<Object>\n * }\n */\nexport const SET_CALENDAR_EVENTS = 'SET_CALENDAR_EVENTS';\n\n/**\n * Action to update calendar type to be used for web.\n *\n * {\n *     type: SET_CALENDAR_INTEGRATION,\n *     integrationReady: boolean,\n *     integrationType: string\n * }\n */\nexport const SET_CALENDAR_INTEGRATION = 'SET_CALENDAR_INTEGRATION';\n\n/**\n * The type of Redux action which changes Calendar API auth state.\n *\n * {\n *     type: SET_CALENDAR_AUTH_STATE\n * }\n * @public\n */\nexport const SET_CALENDAR_AUTH_STATE = 'SET_CALENDAR_AUTH_STATE';\n\n/**\n * The type of Redux action which changes Calendar Profile email state.\n *\n * {\n *     type: SET_CALENDAR_PROFILE_EMAIL,\n *     email: string\n * }\n * @public\n */\nexport const SET_CALENDAR_PROFILE_EMAIL = 'SET_CALENDAR_PROFILE_EMAIL';\n\n/**\n * The type of Redux action which denotes whether a request is in flight to get\n * updated calendar events.\n *\n * {\n *     type: SET_LOADING_CALENDAR_EVENTS,\n *     isLoadingEvents: string\n * }\n * @public\n */\nexport const SET_LOADING_CALENDAR_EVENTS\n    = 'SET_LOADING_CALENDAR_EVENTS';\n","export * from './actions';\nexport * from './components';\nexport * from './functions';\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","// @flow\n\nimport { IconPhone } from '../icons';\n\n/**\n * The relative path to the default/stock avatar (image) file used on both\n * Web/React and mobile/React Native (for the purposes of consistency).\n *\n * XXX (1) Web/React utilizes relativity on the Jitsi Meet deployment.\n * (2) Mobile/React Native utilizes relativity on the local file system at build\n * time. Unfortunately, the packager of React Native cannot deal with the\n * {@code const} early enough for {@code require} to succeed at runtime.\n * Anyway, be sure to synchronize the relative path on Web and mobile for the\n * purposes of consistency.\n *\n * @type {string}\n */\nexport const DEFAULT_AVATAR_RELATIVE_PATH = 'images/avatar.png';\n\n/**\n * The value for the \"var\" attribute of feature tag in disco-info packets.\n */\nexport const DISCO_REMOTE_CONTROL_FEATURE = 'http://jitsi.org/meet/remotecontrol';\n\n/**\n * Icon URL for jigasi participants.\n *\n * @type {string}\n */\nexport const JIGASI_PARTICIPANT_ICON = IconPhone;\n\n/**\n * The local participant might not have real ID until she joins a conference,\n * so use 'local' as her default ID.\n *\n * @type {string}\n */\nexport const LOCAL_PARTICIPANT_DEFAULT_ID = 'local';\n\n/**\n * Max length of the display names.\n *\n * @type {string}\n */\nexport const MAX_DISPLAY_NAME_LENGTH = 50;\n\n/**\n * The identifier of the sound to be played when new remote participant joins\n * the room.\n * @type {string}\n */\nexport const PARTICIPANT_JOINED_SOUND_ID = 'PARTICIPANT_JOINED_SOUND';\n\n/**\n * The identifier of the sound to be played when remote participant leaves\n * the room.\n * @type {string}\n */\nexport const PARTICIPANT_LEFT_SOUND_ID = 'PARTICIPANT_LEFT_SOUND';\n\n/**\n * The set of possible XMPP MUC roles for conference participants.\n *\n * @enum {string}\n */\nexport const PARTICIPANT_ROLE = {\n    MODERATOR: 'moderator',\n    NONE: 'none',\n    PARTICIPANT: 'participant'\n};\n","// @flow\n\n/**\n * The type of the action which signals to add a new chat message.\n *\n * {\n *     type: ADD_MESSAGE,\n *     displayName: string\n *     hasRead: boolean,\n *     id: string,\n *     messageType: string,\n *     message: string,\n *     timestamp: string,\n * }\n */\nexport const ADD_MESSAGE = 'ADD_MESSAGE';\n\n/**\n * The type of the action which signals to clear messages in Redux.\n *\n * {\n *     type: CLEAR_MESSAGES\n * }\n */\nexport const CLEAR_MESSAGES = 'CLEAR_MESSAGES';\n\n/**\n * The type of the action which signals the cancellation the chat panel.\n *\n * {\n *     type: CLOSE_CHAT\n * }\n */\nexport const CLOSE_CHAT = 'CLOSE_CHAT';\n\n/**\n * The type of the action which signals to display the chat panel.\n *\n * {\n *     type: OPEN_CHAT\n * }\n */\nexport const OPEN_CHAT = 'OPEN_CHAT';\n\n/**\n * The type of the action which signals a send a chat message to everyone in the\n * conference.\n *\n * {\n *     type: SEND_MESSAGE,\n *     ignorePrivacy: boolean,\n *     message: string\n * }\n */\nexport const SEND_MESSAGE = 'SEND_MESSAGE';\n\n/**\n * The type of action which signals the initiation of sending of as private message to the\n * supplied recipient.\n *\n * {\n *     participant: Participant,\n *     type: SET_PRIVATE_MESSAGE_RECIPIENT\n * }\n */\nexport const SET_PRIVATE_MESSAGE_RECIPIENT = 'SET_PRIVATE_MESSAGE_RECIPIENT';\n","/**\n * The type of the (redux) action which shows/hides the reactions menu.\n *\n * {\n *     type: TOGGLE_REACTIONS_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const TOGGLE_REACTIONS_VISIBLE = 'TOGGLE_REACTIONS_VISIBLE';\n\n/**\n * The type of the action which adds a new reaction to the reactions message and sets\n * a new timeout.\n *\n * {\n *     type: ADD_REACTION_BUFFER,\n *     message: string,\n *     timeoutID: number\n * }\n */\nexport const ADD_REACTION_BUFFER = 'ADD_REACTION_BUFFER';\n\n/**\n * The type of the action which sends the reaction buffer and resets it.\n *\n * {\n *     type: FLUSH_REACTION_BUFFER\n * }\n */\nexport const FLUSH_REACTION_BUFFER = 'FLUSH_REACTION_BUFFER';\n\n/**\n * The type of the action which adds a new reaction message to the chat.\n *\n * {\n *     type: ADD_REACTION_MESSAGE,\n *     message: string,\n * }\n */\nexport const ADD_REACTION_MESSAGE = 'ADD_REACTION_MESSAGE';\n\n/**\n * The type of the action which sets the reactions queue.\n *\n * {\n *     type: SET_REACTION_QUEUE,\n *     value: Array\n * }\n */\nexport const SET_REACTION_QUEUE = 'SET_REACTION_QUEUE';\n\n/**\n * The type of the action which signals a send reaction to everyone in the conference.\n */\nexport const SEND_REACTIONS = 'SEND_REACTIONS';\n\n/**\n * The type of action to adds reactions to the queue.\n */\nexport const PUSH_REACTIONS = 'PUSH_REACTIONS';\n","// @flow\n\n/**\n * The type of (redux) action which signals that the controller is capturing mouse and keyboard events.\n *\n * {\n *     type: CAPTURE_EVENTS,\n *     isCapturingEvents: boolean\n * }\n */\nexport const CAPTURE_EVENTS = 'CAPTURE_EVENTS';\n\n/**\n * The type of (redux) action which signals that a remote control active state has changed.\n *\n * {\n *     type: REMOTE_CONTROL_ACTIVE,\n *     active: boolean\n * }\n */\nexport const REMOTE_CONTROL_ACTIVE = 'REMOTE_CONTROL_ACTIVE';\n\n/**\n * The type of (redux) action which sets the receiver transport object.\n *\n * {\n *     type: SET_RECEIVER_TRANSPORT,\n *     transport: Transport\n * }\n */\nexport const SET_RECEIVER_TRANSPORT = 'SET_RECEIVER_TRANSPORT';\n\n/**\n * The type of (redux) action which enables the receiver.\n *\n * {\n *     type: SET_RECEIVER_ENABLED,\n *     enabled: boolean\n * }\n */\nexport const SET_RECEIVER_ENABLED = 'SET_RECEIVER_ENABLED';\n\n/**\n * The type of (redux) action which sets the controller participant on the receiver side.\n * {\n *     type: SET_CONTROLLER,\n *     controller: string\n * }\n */\nexport const SET_CONTROLLER = 'SET_CONTROLLER';\n\n/**\n * The type of (redux) action which sets the controlled participant on the controller side.\n * {\n *     type: SET_CONTROLLED_PARTICIPANT,\n *     controlled: string\n * }\n */\nexport const SET_CONTROLLED_PARTICIPANT = 'SET_CONTROLLED_PARTICIPANT';\n\n\n/**\n * The type of (redux) action which sets the requested participant on the controller side.\n * {\n *     type: SET_REQUESTED_PARTICIPANT,\n *     requestedParticipant: string\n * }\n */\nexport const SET_REQUESTED_PARTICIPANT = 'SET_REQUESTED_PARTICIPANT';\n\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/remote-control');\n","// XXX The function parseURLParams is exported by the feature base/util (as\n// defined in the terminology of react/). However, this file is (very likely)\n// bundled in external_api in addition to app.bundle and, consequently, it is\n// best to import as little as possible here (rather than the whole feature\n// base/util) in order to minimize the amount of source code bundled into\n// multiple bundles.\nimport { parseURLParams } from '../../react/features/base/util/parseURLParams';\n\n/**\n * JitsiMeetExternalAPI id - unique for a webpage.\n */\nexport const API_ID = parseURLParams(window.location).jitsi_meet_external_api_id;\n\n/**\n * The payload name for the datachannel/endpoint text message event\n */\nexport const ENDPOINT_TEXT_MESSAGE_NAME = 'endpoint-text-message';\n\n/**\n * The payload name for the datachannel/endpoint reaction event\n */\nexport const ENDPOINT_REACTION_NAME = 'endpoint-reaction';\n","// @flow\n\nimport {\n    REFRESH_CALENDAR,\n    SET_CALENDAR_AUTHORIZATION,\n    SET_CALENDAR_EVENTS\n} from './actionTypes';\n\n/**\n * Sends an action to refresh the entry list (fetches new data).\n *\n * @param {boolean} forcePermission - Whether to force to re-ask for\n * the permission or not.\n * @param {boolean} isInteractive - If true this refresh was caused by\n * direct user interaction, false otherwise.\n * @returns {{\n *     type: REFRESH_CALENDAR,\n *     forcePermission: boolean,\n *     isInteractive: boolean\n * }}\n */\nexport function refreshCalendar(\n        forcePermission: boolean = false, isInteractive: boolean = true) {\n    return {\n        type: REFRESH_CALENDAR,\n        forcePermission,\n        isInteractive\n    };\n}\n\n/**\n * Sends an action to signal that a calendar access has been requested. For more\n * info, see {@link SET_CALENDAR_AUTHORIZATION}.\n *\n * @param {string | undefined} authorization - The result of the last calendar\n * authorization request.\n * @returns {{\n *     type: SET_CALENDAR_AUTHORIZATION,\n *     authorization: ?string\n * }}\n */\nexport function setCalendarAuthorization(authorization: ?string) {\n    return {\n        type: SET_CALENDAR_AUTHORIZATION,\n        authorization\n    };\n}\n\n/**\n * Sends an action to update the current calendar list in redux.\n *\n * @param {Array<Object>} events - The new list.\n * @returns {{\n *     type: SET_CALENDAR_EVENTS,\n *     events: Array<Object>\n * }}\n */\nexport function setCalendarEvents(events: Array<Object>) {\n    return {\n        type: SET_CALENDAR_EVENTS,\n        events\n    };\n}\n","// @flow\n\nimport { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';\nimport type { Dispatch } from 'redux';\n\nimport { createCalendarConnectedEvent, sendAnalytics } from '../analytics';\nimport { loadGoogleAPI } from '../google-api';\n\nimport {\n    CLEAR_CALENDAR_INTEGRATION,\n    SET_CALENDAR_AUTH_STATE,\n    SET_CALENDAR_ERROR,\n    SET_CALENDAR_INTEGRATION,\n    SET_CALENDAR_PROFILE_EMAIL,\n    SET_LOADING_CALENDAR_EVENTS\n} from './actionTypes';\nimport { refreshCalendar, setCalendarEvents } from './actions';\nimport { _getCalendarIntegration, isCalendarEnabled } from './functions';\nimport logger from './logger';\n\nexport * from './actions.any';\n\n/**\n * Sets the initial state of calendar integration by loading third party APIs\n * and filling out any data that needs to be fetched.\n *\n * @returns {Function}\n */\nexport function bootstrapCalendarIntegration(): Function {\n    return (dispatch, getState) => {\n        const state = getState();\n\n        if (!isCalendarEnabled(state)) {\n            return Promise.reject();\n        }\n\n        const {\n            googleApiApplicationClientID\n        } = state['features/base/config'];\n        const {\n            integrationReady,\n            integrationType\n        } = state['features/calendar-sync'];\n\n        return Promise.resolve()\n            .then(() => {\n                if (googleApiApplicationClientID) {\n                    return dispatch(loadGoogleAPI());\n                }\n            })\n            .then(() => {\n                if (!integrationType || integrationReady) {\n                    return;\n                }\n\n                const integrationToLoad\n                    = _getCalendarIntegration(integrationType);\n\n                if (!integrationToLoad) {\n                    dispatch(clearCalendarIntegration());\n\n                    return;\n                }\n\n                return dispatch(integrationToLoad._isSignedIn())\n                    .then(signedIn => {\n                        if (signedIn) {\n                            dispatch(setIntegrationReady(integrationType));\n                            dispatch(updateProfile(integrationType));\n                        } else {\n                            dispatch(clearCalendarIntegration());\n                        }\n                    });\n            });\n    };\n}\n\n/**\n * Resets the state of calendar integration so stored events and selected\n * calendar type are cleared.\n *\n * @returns {{\n *     type: CLEAR_CALENDAR_INTEGRATION\n * }}\n */\nexport function clearCalendarIntegration() {\n    return {\n        type: CLEAR_CALENDAR_INTEGRATION\n    };\n}\n\n/**\n * Asks confirmation from the user to add a Jitsi link to the calendar event.\n *\n * NOTE: Currently there is no confirmation prompted on web, so this is just\n * a relaying method to avoid flow problems.\n *\n * @param {string} eventId - The event id.\n * @param {string} calendarId - The calendar id.\n * @returns {Function}\n */\nexport function openUpdateCalendarEventDialog(\n        eventId: string, calendarId: string) {\n    return updateCalendarEvent(eventId, calendarId);\n}\n\n/**\n * Sends an action to update the current calendar api auth state in redux.\n * This is used only for microsoft implementation to store it auth state.\n *\n * @param {number} newState - The new state.\n * @returns {{\n *     type: SET_CALENDAR_AUTH_STATE,\n *     msAuthState: Object\n * }}\n */\nexport function setCalendarAPIAuthState(newState: ?Object) {\n    return {\n        type: SET_CALENDAR_AUTH_STATE,\n        msAuthState: newState\n    };\n}\n\n/**\n * Sends an action to update the calendar error state in redux.\n *\n * @param {Object} error - An object with error details.\n * @returns {{\n *     type: SET_CALENDAR_ERROR,\n *     error: Object\n * }}\n */\nexport function setCalendarError(error: ?Object) {\n    return {\n        type: SET_CALENDAR_ERROR,\n        error\n    };\n}\n\n/**\n * Sends an action to update the current calendar profile email state in redux.\n *\n * @param {number} newEmail - The new email.\n * @returns {{\n *     type: SET_CALENDAR_PROFILE_EMAIL,\n *     email: string\n * }}\n */\nexport function setCalendarProfileEmail(newEmail: ?string) {\n    return {\n        type: SET_CALENDAR_PROFILE_EMAIL,\n        email: newEmail\n    };\n}\n\n/**\n * Sends an to denote a request in is flight to get calendar events.\n *\n * @param {boolean} isLoadingEvents - Whether or not calendar events are being\n * fetched.\n * @returns {{\n *     type: SET_LOADING_CALENDAR_EVENTS,\n *     isLoadingEvents: boolean\n * }}\n */\nexport function setLoadingCalendarEvents(isLoadingEvents: boolean) {\n    return {\n        type: SET_LOADING_CALENDAR_EVENTS,\n        isLoadingEvents\n    };\n}\n\n/**\n * Sets the calendar integration type to be used by web and signals that the\n * integration is ready to be used.\n *\n * @param {string|undefined} integrationType - The calendar type.\n * @returns {{\n *      type: SET_CALENDAR_INTEGRATION,\n *      integrationReady: boolean,\n *      integrationType: string\n * }}\n */\nexport function setIntegrationReady(integrationType: string) {\n    return {\n        type: SET_CALENDAR_INTEGRATION,\n        integrationReady: true,\n        integrationType\n    };\n}\n\n/**\n * Signals signing in to the specified calendar integration.\n *\n * @param {string} calendarType - The calendar integration which should be\n * signed into.\n * @returns {Function}\n */\nexport function signIn(calendarType: string): Function {\n    return (dispatch: Dispatch<any>) => {\n        const integration = _getCalendarIntegration(calendarType);\n\n        if (!integration) {\n            return Promise.reject('No supported integration found');\n        }\n\n        return dispatch(integration.load())\n            .then(() => dispatch(integration.signIn()))\n            .then(() => dispatch(setIntegrationReady(calendarType)))\n            .then(() => dispatch(updateProfile(calendarType)))\n            .then(() => dispatch(refreshCalendar()))\n            .then(() => sendAnalytics(createCalendarConnectedEvent()))\n            .catch(error => {\n                logger.error(\n                    'Error occurred while signing into calendar integration',\n                    error);\n\n                return Promise.reject(error);\n            });\n    };\n}\n\n/**\n * Updates calendar event by generating new invite URL and editing the event\n * adding some descriptive text and location.\n *\n * @param {string} id - The event id.\n * @param {string} calendarId - The id of the calendar to use.\n * @returns {Function}\n */\nexport function updateCalendarEvent(id: string, calendarId: string): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        const { integrationType } = getState()['features/calendar-sync'];\n        const integration = _getCalendarIntegration(integrationType);\n\n        if (!integration) {\n            return Promise.reject('No integration found');\n        }\n\n        const { locationURL } = getState()['features/base/connection'];\n        const newRoomName = generateRoomWithoutSeparator();\n        let href = locationURL.href;\n\n        href.endsWith('/') || (href += '/');\n\n        const roomURL = `${href}${newRoomName}`;\n\n        return dispatch(integration.updateCalendarEvent(\n                id, calendarId, roomURL))\n            .then(() => {\n                // make a copy of the array\n                const events\n                    = getState()['features/calendar-sync'].events.slice(0);\n\n                const eventIx = events.findIndex(\n                    e => e.id === id && e.calendarId === calendarId);\n\n                // clone the event we will modify\n                const newEvent = Object.assign({}, events[eventIx]);\n\n                newEvent.url = roomURL;\n                events[eventIx] = newEvent;\n\n                return dispatch(setCalendarEvents(events));\n            });\n    };\n}\n\n/**\n * Signals to get current profile data linked to the current calendar\n * integration that is in use.\n *\n * @param {string} calendarType - The calendar integration to which the profile\n * should be updated.\n * @returns {Function}\n */\nexport function updateProfile(calendarType: string): Function {\n    return (dispatch: Dispatch<any>) => {\n        const integration = _getCalendarIntegration(calendarType);\n\n        if (!integration) {\n            return Promise.reject('No integration found');\n        }\n\n        return dispatch(integration.getCurrentEmail())\n            .then(email => {\n                dispatch(setCalendarProfileEmail(email));\n            });\n    };\n}\n","// @flow\n\n/**\n * The standard time when auto-disappearing notifications should disappear.\n */\nexport const NOTIFICATION_TIMEOUT = 2500;\n\n/**\n * The set of possible notification types.\n *\n * @enum {string}\n */\nexport const NOTIFICATION_TYPE = {\n    ERROR: 'error',\n    INFO: 'info',\n    NORMAL: 'normal',\n    SUCCESS: 'success',\n    WARNING: 'warning'\n};\n\n/**\n * A mapping of notification type to priority of display.\n *\n * @enum {number}\n */\nexport const NOTIFICATION_TYPE_PRIORITIES = {\n    [NOTIFICATION_TYPE.ERROR]: 5,\n    [NOTIFICATION_TYPE.INFO]: 3,\n    [NOTIFICATION_TYPE.NORMAL]: 3,\n    [NOTIFICATION_TYPE.SUCCESS]: 3,\n    [NOTIFICATION_TYPE.WARNING]: 4\n};\n","/**\n * The type of (redux) action to set the muted state of the local audio.\n *\n * {\n *     type: SET_AUDIO_MUTED,\n *     muted: boolean\n * }\n */\nexport const SET_AUDIO_MUTED = 'SET_AUDIO_MUTED';\n\n/**\n * The type of (redux) action to adjust the availability of the local audio.\n *\n * {\n *     type: SET_AUDIO_AVAILABLE,\n *     muted: boolean\n * }\n */\nexport const SET_AUDIO_AVAILABLE = 'SET_AUDIO_AVAILABLE';\n\n/**\n * The type of (redux) action to set the facing mode of the local video camera\n * to a specific value.\n *\n * {\n *     type: SET_CAMERA_FACING_MODE,\n *     cameraFacingMode: CAMERA_FACING_MODE\n * }\n */\nexport const SET_CAMERA_FACING_MODE = 'SET_CAMERA_FACING_MODE';\n\n/**\n * The type of (redux) action to adjust the availability of the local video.\n *\n * {\n *     type: SET_VIDEO_AVAILABLE,\n *     available: boolean\n * }\n */\nexport const SET_VIDEO_AVAILABLE = 'SET_VIDEO_AVAILABLE';\n\n/**\n * The type of (redux) action to set the muted state of the local video.\n *\n * {\n *     type: SET_VIDEO_MUTED,\n *     muted: boolean\n * }\n */\nexport const SET_VIDEO_MUTED = 'SET_VIDEO_MUTED';\n\n/**\n * The type of (redux) action to store the last video {@link Transform} applied\n * to a stream.\n *\n * {\n *     type: STORE_VIDEO_TRANSFORM,\n *     streamId: string,\n *     transform: Transform\n * }\n */\nexport const STORE_VIDEO_TRANSFORM = 'STORE_VIDEO_TRANSFORM';\n\n/**\n * The type of (redux) action to toggle the local video camera facing mode. In\n * contrast to SET_CAMERA_FACING_MODE, allows the toggling to be optimally\n * and/or natively implemented without the overhead of separate reads and writes\n * of the current/effective camera facing mode.\n *\n * {\n *     type: TOGGLE_CAMERA_FACING_MODE\n * }\n */\nexport const TOGGLE_CAMERA_FACING_MODE = 'TOGGLE_CAMERA_FACING_MODE';\n","/**\n * The type of redux action which will add pending invite request to the redux\n * store.\n *\n * {\n *     type: ADD_PENDING_INVITE_REQUEST,\n *     request: Object\n * }\n */\nexport const ADD_PENDING_INVITE_REQUEST = 'ADD_PENDING_INVITE_REQUEST';\n\n/**\n * The type of the (redux) action which signals that a click/tap has been\n * performed on {@link InviteButton} and that the execution flow for\n * adding/inviting people to the current conference/meeting is to begin.\n *\n * {\n *     type: BEGIN_ADD_PEOPLE\n * }\n */\nexport const BEGIN_ADD_PEOPLE = 'BEGIN_ADD_PEOPLE';\n\n/**\n * The type of redux action which will remove pending invite requests from the\n * redux store.\n *\n * {\n *     type: REMOVE_PENDING_INVITE_REQUESTS\n * }\n */\nexport const REMOVE_PENDING_INVITE_REQUESTS\n    = 'REMOVE_PENDING_INVITE_REQUESTS';\n\n/**\n * The type of redux action which sets the visibility of {@code CalleeInfo}.\n *\n * {\n *     type: SET_CALLEE_INFO_VISIBLE,\n *     calleeInfoVisible: boolean\n * }\n */\nexport const SET_CALLEE_INFO_VISIBLE = 'SET_CALLEE_INFO_VISIBLE';\n\n/**\n * The type of redux action to signal that the {@code AddPeopleDialog} should close.\n */\nexport const HIDE_ADD_PEOPLE_DIALOG = 'HIDE_ADD_PEOPLE_DIALOG';\n\n/**\n * The type of the action which signals an error occurred while requesting dial-\n * in numbers.\n *\n * {\n *     type: UPDATE_DIAL_IN_NUMBERS_FAILED,\n *     error: Object\n * }\n */\nexport const UPDATE_DIAL_IN_NUMBERS_FAILED\n    = 'UPDATE_DIAL_IN_NUMBERS_FAILED';\n\n/**\n * The type of the action which signals a request for dial-in numbers has\n * succeeded.\n *\n * {\n *     type: UPDATE_DIAL_IN_NUMBERS_SUCCESS,\n *     conferenceID: Object,\n *     dialInNumbers: Object\n * }\n */\nexport const UPDATE_DIAL_IN_NUMBERS_SUCCESS\n    = 'UPDATE_DIAL_IN_NUMBERS_SUCCESS';\n","import { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = visuallyHidden;\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { HIDE_DIALOG, OPEN_DIALOG } from './actionTypes';\nimport { isDialogOpen } from './functions';\n\n/**\n * Signals Dialog to close its dialog.\n *\n * @param {Object} [component] - The {@code Dialog} component to close/hide. If\n * {@code undefined}, closes/hides {@code Dialog} regardless of which\n * component it's rendering; otherwise, closes/hides {@code Dialog} only if\n * it's rendering the specified {@code component}.\n * @returns {{\n *     type: HIDE_DIALOG,\n *     component: (React.Component | undefined)\n * }}\n */\nexport function hideDialog(component: ?Object) {\n    return {\n        type: HIDE_DIALOG,\n        component\n    };\n}\n\n/**\n * Signals Dialog to open dialog.\n *\n * @param {Object} component - The component to display as dialog.\n * @param {Object} [componentProps] - The React {@code Component} props of the\n * specified {@code component}.\n * @param {boolean} rawDialog - True if the dialog is a raw dialog.\n * (Doesn't inherit behavior from other common frameworks).\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: React.Component,\n *     componentProps: (Object | undefined)\n * }}\n */\nexport function openDialog(component: Object, componentProps: ?Object, rawDialog?: boolean) {\n    return {\n        rawDialog,\n        type: OPEN_DIALOG,\n        component,\n        componentProps\n    };\n}\n\n/**\n * Signals Dialog to open a dialog with the specified component if the component\n * is not already open. If it is open, then Dialog is signaled to close its\n * dialog.\n *\n * @param {Object} component - The component to display as dialog.\n * @param {Object} [componentProps] - The React {@code Component} props of the\n * specified {@code component}.\n * @returns {Function}\n */\nexport function toggleDialog(component: Object, componentProps: ?Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        if (isDialogOpen(getState, component)) {\n            dispatch(hideDialog(component));\n        } else {\n            dispatch(openDialog(component, componentProps));\n        }\n    };\n}\n","// @flow\n\nimport { MEDIA_TYPE, type MediaType } from '../base/media/constants';\nimport { isLocalParticipantModerator } from '../base/participants/functions';\n\nimport { MEDIA_TYPE_TO_WHITELIST_STORE_KEY, MEDIA_TYPE_TO_PENDING_STORE_KEY } from './constants';\n\n/**\n * Returns this feature's root state.\n *\n * @param {Object} state - Global state.\n * @returns {Object} Feature state.\n */\nconst getState = state => state['features/av-moderation'];\n\n/**\n * We use to construct once the empty array so we can keep the same instance between calls\n * of getParticipantsAskingToAudioUnmute.\n *\n * @type {*[]}\n */\nconst EMPTY_ARRAY = [];\n\n/**\n * Returns whether moderation is enabled per media type.\n *\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @param {Object} state - Global state.\n * @returns {null|boolean|*}\n */\nexport const isEnabledFromState = (mediaType: MediaType, state: Object) =>\n    (mediaType === MEDIA_TYPE.AUDIO\n        ? getState(state)?.audioModerationEnabled\n        : getState(state)?.videoModerationEnabled) === true;\n\n/**\n * Returns whether moderation is enabled per media type.\n *\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @returns {null|boolean|*}\n */\nexport const isEnabled = (mediaType: MediaType) => (state: Object) => isEnabledFromState(mediaType, state);\n\n/**\n * Returns whether moderation is supported by the backend.\n *\n * @returns {null|boolean}\n */\nexport const isSupported = () => (state: Object) => {\n    const { conference } = state['features/base/conference'];\n\n    return conference ? conference.isAVModerationSupported() : false;\n};\n\n/**\n * Returns whether local participant is approved to unmute a media type.\n *\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @param {Object} state - Global state.\n * @returns {boolean}\n */\nexport const isLocalParticipantApprovedFromState = (mediaType: MediaType, state: Object) => {\n    const approved = (mediaType === MEDIA_TYPE.AUDIO\n        ? getState(state).audioUnmuteApproved\n        : getState(state).videoUnmuteApproved) === true;\n\n    return approved || isLocalParticipantModerator(state);\n};\n\n/**\n * Returns whether local participant is approved to unmute a media type.\n *\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @returns {null|boolean|*}\n */\nexport const isLocalParticipantApproved = (mediaType: MediaType) =>\n    (state: Object) =>\n        isLocalParticipantApprovedFromState(mediaType, state);\n\n/**\n * Returns a selector creator which determines if the participant is approved or not for a media type.\n *\n * @param {string} id - The participant id.\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @returns {boolean}\n */\nexport const isParticipantApproved = (id: string, mediaType: MediaType) => (state: Object) => {\n    const storeKey = MEDIA_TYPE_TO_WHITELIST_STORE_KEY[mediaType];\n\n    return Boolean(getState(state)[storeKey][id]);\n};\n\n/**\n * Returns a selector creator which determines if the participant is pending or not for a media type.\n *\n * @param {Participant} participant - The participant.\n * @param {MEDIA_TYPE} mediaType - The media type to check.\n * @returns {boolean}\n */\nexport const isParticipantPending = (participant: Object, mediaType: MediaType) => (state: Object) => {\n    const storeKey = MEDIA_TYPE_TO_PENDING_STORE_KEY[mediaType];\n    const arr = getState(state)[storeKey];\n\n    return Boolean(arr.find(pending => pending.id === participant.id));\n};\n\n/**\n * Selector which returns a list with all the participants asking to audio unmute.\n * This is visible ony for the moderator.\n *\n * @param {Object} state - The global state.\n * @returns {Array<Object>}\n */\nexport const getParticipantsAskingToAudioUnmute = (state: Object) => {\n    if (isLocalParticipantModerator(state)) {\n        return getState(state).pendingAudio;\n    }\n\n    return EMPTY_ARRAY;\n};\n\n/**\n * Returns true if a special notification can be displayed when a participant\n * tries to unmute.\n *\n * @param {MediaType} mediaType - 'audio' or 'video' media type.\n * @param {Object} state - The global state.\n * @returns {boolean}\n */\nexport const shouldShowModeratedNotification = (mediaType: MediaType, state: Object) =>\n    isEnabledFromState(mediaType, state)\n    && !isLocalParticipantApprovedFromState(mediaType, state);\n","// @flow\n\n/**\n * The type of (redux) action which signals that a connection disconnected.\n *\n * {\n *     type: CONNECTION_DISCONNECTED,\n *     connection: JitsiConnection\n * }\n */\nexport const CONNECTION_DISCONNECTED = 'CONNECTION_DISCONNECTED';\n\n/**\n * The type of (redux) action which signals that a connection was successfully\n * established.\n *\n * {\n *     type: CONNECTION_ESTABLISHED,\n *     connection: JitsiConnection,\n *     timeEstablished: number,\n * }\n */\nexport const CONNECTION_ESTABLISHED = 'CONNECTION_ESTABLISHED';\n\n/**\n * The type of (redux) action which signals that a connection failed.\n *\n * {\n *     type: CONNECTION_FAILED,\n *     connection: JitsiConnection,\n *     error: Object | string\n * }\n */\nexport const CONNECTION_FAILED = 'CONNECTION_FAILED';\n\n/**\n * The type of (redux) action which signals that a connection will connect.\n *\n * {\n *     type: CONNECTION_WILL_CONNECT,\n *     connection: JitsiConnection\n * }\n */\nexport const CONNECTION_WILL_CONNECT = 'CONNECTION_WILL_CONNECT';\n\n/**\n * The type of (redux) action which sets the location URL of the application,\n * connection, conference, etc.\n *\n * {\n *     type: SET_LOCATION_URL,\n *     locationURL: ?URL\n * }\n */\nexport const SET_LOCATION_URL = 'SET_LOCATION_URL';\n\nexport const SHOW_CONNECTION_INFO = 'SHOW_CONNECTION_INFO';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/local-recording');\n","import JitsiMeetJS from '../../base/lib-jitsi-meet';\n\n/**\n * Base class for recording backends.\n */\nexport class RecordingAdapter {\n\n    /**\n     * Starts recording.\n     *\n     * @param {string} micDeviceId - The microphone to record on.\n     * @returns {Promise}\n     */\n    start(/* eslint-disable no-unused-vars */\n            micDeviceId/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Stops recording.\n     *\n     * @returns {Promise}\n     */\n    stop() {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Export the recorded and encoded audio file.\n     *\n     * @returns {Promise<Object>}\n     */\n    exportRecordedData() {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Mutes or unmutes the current recording.\n     *\n     * @param {boolean} muted - Whether to mute or to unmute.\n     * @returns {Promise}\n     */\n    setMuted(/* eslint-disable no-unused-vars */\n            muted/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Changes the current microphone.\n     *\n     * @param {string} micDeviceId - The new microphone device ID.\n     * @returns {Promise}\n     */\n    setMicDevice(/* eslint-disable no-unused-vars */\n            micDeviceId/* eslint-enable no-unused-vars */) {\n        throw new Error('Not implemented');\n    }\n\n    /**\n     * Helper method for getting an audio {@code MediaStream}. Use this instead\n     * of calling browser APIs directly.\n     *\n     * @protected\n     * @param {number} micDeviceId - The ID of the current audio device.\n     * @returns {Promise}\n     */\n    _getAudioStream(micDeviceId) {\n        return JitsiMeetJS.createLocalTracks({\n            devices: [ 'audio' ],\n            micDeviceId\n        }).then(result => {\n            if (result.length !== 1) {\n                throw new Error('Unexpected number of streams '\n                    + 'from createLocalTracks.');\n            }\n            const mediaStream = result[0].stream;\n\n            if (mediaStream === undefined) {\n                throw new Error('Failed to create local track.');\n            }\n\n            return mediaStream;\n        });\n    }\n}\n","import logger from '../logger';\n\nimport { RecordingAdapter } from './RecordingAdapter';\n\n/**\n * Recording adapter that uses {@code MediaRecorder} (default browser encoding\n * with Opus codec).\n */\nexport class OggAdapter extends RecordingAdapter {\n\n    /**\n     * Instance of MediaRecorder.\n     * @private\n     */\n    _mediaRecorder = null;\n\n    /**\n     * Initialization promise.\n     * @private\n     */\n    _initPromise = null;\n\n    /**\n     * The recorded audio file.\n     * @private\n     */\n    _recordedData = null;\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() =>\n            new Promise(resolve => {\n                this._mediaRecorder.start();\n                resolve();\n            })\n        );\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        return new Promise(\n            resolve => {\n                this._mediaRecorder.onstop = () => resolve();\n                this._mediaRecorder.stop();\n            }\n        );\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._recordedData !== null) {\n            return Promise.resolve({\n                data: this._recordedData,\n                format: 'ogg'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._mediaRecorder) {\n            return Promise.resolve();\n        }\n\n        return new Promise((resolve, error) => {\n            this._getAudioStream(micDeviceId)\n            .then(stream => {\n                this._stream = stream;\n                this._mediaRecorder = new MediaRecorder(stream);\n                this._mediaRecorder.ondataavailable\n                    = e => this._saveMediaData(e.data);\n                resolve();\n            })\n            .catch(err => {\n                logger.error(`Error calling getUserMedia(): ${err}`);\n                error();\n            });\n        });\n    }\n\n    /**\n     * Callback for storing the encoded data.\n     *\n     * @private\n     * @param {Blob} data - Encoded data.\n     * @returns {void}\n     */\n    _saveMediaData(data) {\n        this._recordedData = data;\n    }\n}\n","import logger from '../logger';\n\nimport { RecordingAdapter } from './RecordingAdapter';\n\n/**\n * Base class for {@code AudioContext}-based recording adapters.\n */\nexport class AbstractAudioContextAdapter extends RecordingAdapter {\n    /**\n     * The {@code AudioContext} instance.\n     */\n    _audioContext = null;\n\n    /**\n     * The {@code ScriptProcessorNode} instance.\n     */\n    _audioProcessingNode = null;\n\n    /**\n     * The {@code MediaStreamAudioSourceNode} instance.\n     */\n    _audioSource = null;\n\n    /**\n     * The {@code MediaStream} instance, representing the current audio device.\n     */\n    _stream = null;\n\n    /**\n     * Sample rate.\n     */\n    _sampleRate = 44100;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n\n        // sampleRate is browser and OS dependent.\n        // Setting sampleRate explicitly is in the specs but not implemented\n        // by browsers.\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/\n        //    AudioContext#Browser_compatibility\n        // And https://bugs.chromium.org/p/chromium/issues/detail?id=432248\n\n        this._audioContext = new AudioContext();\n        this._sampleRate = this._audioContext.sampleRate;\n        logger.log(`Current sampleRate ${this._sampleRate}.`);\n    }\n\n    /**\n     * Sets up the audio graph in the AudioContext.\n     *\n     * @protected\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @param {Function} callback - Callback function to\n     * handle AudioProcessingEvents.\n     * @returns {Promise}\n     */\n    _initializeAudioContext(micDeviceId, callback) {\n        if (typeof callback !== 'function') {\n            return Promise.reject('a callback function is required.');\n        }\n\n        return this._getAudioStream(micDeviceId)\n        .then(stream => {\n            this._stream = stream;\n            this._audioSource\n                = this._audioContext.createMediaStreamSource(stream);\n            this._audioProcessingNode\n                = this._audioContext.createScriptProcessor(4096, 1, 1);\n            this._audioProcessingNode.onaudioprocess = callback;\n            logger.debug('AudioContext is set up.');\n        })\n        .catch(err => {\n            logger.error(`Error calling getUserMedia(): ${err}`);\n\n            return Promise.reject(err);\n        });\n    }\n\n    /**\n     * Connects the nodes in the {@code AudioContext} to start the flow of\n     * audio data.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _connectAudioGraph() {\n        this._audioSource.connect(this._audioProcessingNode);\n        this._audioProcessingNode.connect(this._audioContext.destination);\n    }\n\n    /**\n     * Disconnects the nodes in the {@code AudioContext}.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _disconnectAudioGraph() {\n        this._audioProcessingNode.onaudioprocess = undefined;\n        this._audioProcessingNode.disconnect();\n        this._audioSource.disconnect();\n    }\n\n    /**\n     * Replaces the current microphone MediaStream.\n     *\n     * @protected\n     * @param {string} micDeviceId - New microphone ID.\n     * @returns {Promise}\n     */\n    _replaceMic(micDeviceId) {\n        if (this._audioContext && this._audioProcessingNode) {\n            return this._getAudioStream(micDeviceId).then(newStream => {\n                const newSource = this._audioContext\n                    .createMediaStreamSource(newStream);\n\n                this._audioSource.disconnect();\n                newSource.connect(this._audioProcessingNode);\n                this._stream = newStream;\n                this._audioSource = newSource;\n            });\n        }\n\n        return Promise.resolve();\n    }\n}\n","import logger from '../logger';\n\nimport { AbstractAudioContextAdapter } from './AbstractAudioContextAdapter';\n\nconst WAV_BITS_PER_SAMPLE = 16;\n\n/**\n * Recording adapter for raw WAVE format.\n */\nexport class WavAdapter extends AbstractAudioContextAdapter {\n\n    /**\n     * Length of the WAVE file, in number of samples.\n     */\n    _wavLength = 0;\n\n    /**\n     * The {@code ArrayBuffer}s that stores the PCM bits.\n     */\n    _wavBuffers = [];\n\n    /**\n     * Whether or not the {@code WavAdapter} is in a ready state.\n     */\n    _isInitialized = false;\n\n    /**\n     * Initialization promise.\n     */\n    _initPromise = null;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n        this._onAudioProcess = this._onAudioProcess.bind(this);\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() => {\n            this._wavBuffers = [];\n            this._wavLength = 0;\n\n            this._connectAudioGraph();\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        this._disconnectAudioGraph();\n        this._data = this._exportMonoWAV(this._wavBuffers, this._wavLength);\n        this._audioProcessingNode = null;\n        this._audioSource = null;\n        this._isInitialized = false;\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._data !== null) {\n            return Promise.resolve({\n                data: this._data,\n                format: 'wav'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMicDevice()}.\n     *\n     * @inheritdoc\n     */\n    setMicDevice(micDeviceId) {\n        return this._replaceMic(micDeviceId);\n    }\n\n    /**\n     * Creates a WAVE file header.\n     *\n     * @private\n     * @param {number} dataLength - Length of the payload (PCM data), in bytes.\n     * @returns {Uint8Array}\n     */\n    _createWavHeader(dataLength) {\n        // adapted from\n        // https://github.com/mmig/speech-to-flac/blob/master/encoder.js\n\n        // ref: http://soundfile.sapp.org/doc/WaveFormat/\n\n        // create our WAVE file header\n        const buffer = new ArrayBuffer(44);\n        const view = new DataView(buffer);\n\n        // RIFF chunk descriptor\n        writeUTFBytes(view, 0, 'RIFF');\n\n        // set file size at the end\n        writeUTFBytes(view, 8, 'WAVE');\n\n        // FMT sub-chunk\n        writeUTFBytes(view, 12, 'fmt ');\n        view.setUint32(16, 16, true);\n        view.setUint16(20, 1, true);\n\n        // NumChannels\n        view.setUint16(22, 1, true);\n\n        // SampleRate\n        view.setUint32(24, this._sampleRate, true);\n\n        // ByteRate\n        view.setUint32(28,\n            Number(this._sampleRate) * 1 * WAV_BITS_PER_SAMPLE / 8, true);\n\n        // BlockAlign\n        view.setUint16(32, 1 * Number(WAV_BITS_PER_SAMPLE) / 8, true);\n\n        view.setUint16(34, WAV_BITS_PER_SAMPLE, true);\n\n        // data sub-chunk\n        writeUTFBytes(view, 36, 'data');\n\n        // file length\n        view.setUint32(4, 32 + dataLength, true);\n\n        // data chunk length\n        view.setUint32(40, dataLength, true);\n\n        return new Uint8Array(buffer);\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._isInitialized) {\n            return Promise.resolve();\n        }\n\n        return this._initializeAudioContext(micDeviceId, this._onAudioProcess)\n            .then(() => {\n                this._isInitialized = true;\n            });\n    }\n\n    /**\n     * Callback function for handling AudioProcessingEvents.\n     *\n     * @private\n     * @param {AudioProcessingEvent} e - The event containing the raw PCM.\n     * @returns {void}\n     */\n    _onAudioProcess(e) {\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/\n        //      AudioBuffer/getChannelData\n        // The returned value is an Float32Array.\n        const channelLeft = e.inputBuffer.getChannelData(0);\n\n        // Need to copy the Float32Array:\n        // unlike passing to WebWorker, this data is passed by reference,\n        // so we need to copy it, otherwise the resulting audio file will be\n        // just repeating the last segment.\n        this._wavBuffers.push(new Float32Array(channelLeft));\n        this._wavLength += channelLeft.length;\n    }\n\n    /**\n     * Combines buffers and export to a wav file.\n     *\n     * @private\n     * @param {Float32Array[]} buffers - The stored buffers.\n     * @param {number} length - Total length (number of samples).\n     * @returns {Blob}\n     */\n    _exportMonoWAV(buffers, length) {\n        const dataLength = length * 2; // each sample = 16 bit = 2 bytes\n        const buffer = new ArrayBuffer(44 + dataLength);\n        const view = new DataView(buffer);\n\n        // copy WAV header data into the array buffer\n        const header = this._createWavHeader(dataLength);\n        const len = header.length;\n\n        for (let i = 0; i < len; ++i) {\n            view.setUint8(i, header[i]);\n        }\n\n        // write audio data\n        floatTo16BitPCM(view, 44, buffers);\n\n        return new Blob([ view ], { type: 'audio/wav' });\n    }\n}\n\n\n/**\n * Helper function. Writes a UTF string to memory\n * using big endianness. Required by WAVE headers.\n *\n * @param {ArrayBuffer} view - The view to memory.\n * @param {number} offset - Offset.\n * @param {string} string - The string to be written.\n * @returns {void}\n */\nfunction writeUTFBytes(view, offset, string) {\n    const lng = string.length;\n\n    // convert to big endianness\n    for (let i = 0; i < lng; ++i) {\n        view.setUint8(offset + i, string.charCodeAt(i));\n    }\n}\n\n/**\n * Helper function for converting Float32Array to Int16Array.\n *\n * @param {DataView} output - View to the output buffer.\n * @param {number} offset - The offset in output buffer to write from.\n * @param {Float32Array[]} inputBuffers - The input buffers.\n * @returns {void}\n */\nfunction floatTo16BitPCM(output, offset, inputBuffers) {\n\n    let i, j;\n    let input, s, sampleCount;\n    const bufferCount = inputBuffers.length;\n    let o = offset;\n\n    for (i = 0; i < bufferCount; ++i) {\n        input = inputBuffers[i];\n        sampleCount = input.length;\n        for (j = 0; j < sampleCount; ++j, o += 2) {\n            s = Math.max(-1, Math.min(1, input[j]));\n            output.setInt16(o, s < 0 ? s * 0x8000 : s * 0x7FFF, true);\n        }\n    }\n}\n","import logger from '../../logger';\nimport { AbstractAudioContextAdapter } from '../AbstractAudioContextAdapter';\n\nimport {\n    DEBUG,\n    MAIN_THREAD_FINISH,\n    MAIN_THREAD_INIT,\n    MAIN_THREAD_NEW_DATA_ARRIVED,\n    WORKER_BLOB_READY,\n    WORKER_LIBFLAC_READY\n} from './messageTypes';\n\n\n/**\n * Recording adapter that uses libflac.js in the background.\n */\nexport class FlacAdapter extends AbstractAudioContextAdapter {\n\n    /**\n     * Instance of WebWorker (flacEncodeWorker).\n     */\n    _encoder = null;\n\n    /**\n     * Resolve function of the Promise returned by {@code stop()}.\n     * This is called after the WebWorker sends back {@code WORKER_BLOB_READY}.\n     */\n    _stopPromiseResolver = null;\n\n    /**\n     * Resolve function of the Promise that initializes the flacEncodeWorker.\n     */\n    _initWorkerPromiseResolver = null;\n\n    /**\n     * Initialization promise.\n     */\n    _initPromise = null;\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        super();\n        this._onAudioProcess = this._onAudioProcess.bind(this);\n        this._onWorkerMessage = this._onWorkerMessage.bind(this);\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#start()}.\n     *\n     * @inheritdoc\n     */\n    start(micDeviceId) {\n        if (!this._initPromise) {\n            this._initPromise = this._initialize(micDeviceId);\n        }\n\n        return this._initPromise.then(() => {\n            this._connectAudioGraph();\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#stop()}.\n     *\n     * @inheritdoc\n     */\n    stop() {\n        if (!this._encoder) {\n            logger.error('Attempting to stop but has nothing to stop.');\n\n            return Promise.reject();\n        }\n\n        return new Promise(resolve => {\n            this._initPromise = null;\n            this._disconnectAudioGraph();\n            this._stopPromiseResolver = resolve;\n            this._encoder.postMessage({\n                command: MAIN_THREAD_FINISH\n            });\n        });\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#exportRecordedData()}.\n     *\n     * @inheritdoc\n     */\n    exportRecordedData() {\n        if (this._data !== null) {\n            return Promise.resolve({\n                data: this._data,\n                format: 'flac'\n            });\n        }\n\n        return Promise.reject('No audio data recorded.');\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMuted()}.\n     *\n     * @inheritdoc\n     */\n    setMuted(muted) {\n        const shouldEnable = !muted;\n\n        if (!this._stream) {\n            return Promise.resolve();\n        }\n\n        const track = this._stream.getAudioTracks()[0];\n\n        if (!track) {\n            logger.error('Cannot mute/unmute. Track not found!');\n\n            return Promise.resolve();\n        }\n\n        if (track.enabled !== shouldEnable) {\n            track.enabled = shouldEnable;\n            logger.log(muted ? 'Mute' : 'Unmute');\n        }\n\n        return Promise.resolve();\n    }\n\n    /**\n     * Implements {@link RecordingAdapter#setMicDevice()}.\n     *\n     * @inheritdoc\n     */\n    setMicDevice(micDeviceId) {\n        return this._replaceMic(micDeviceId);\n    }\n\n    /**\n     * Initialize the adapter.\n     *\n     * @private\n     * @param {string} micDeviceId - The current microphone device ID.\n     * @returns {Promise}\n     */\n    _initialize(micDeviceId) {\n        if (this._encoder !== null) {\n            return Promise.resolve();\n        }\n\n        const promiseInitWorker = new Promise((resolve, reject) => {\n            try {\n                this._loadWebWorker();\n            } catch (e) {\n                reject();\n            }\n\n            // Save the Promise's resolver to resolve it later.\n            // This Promise is only resolved in _onWorkerMessage when we\n            // receive WORKER_LIBFLAC_READY from the WebWorker.\n            this._initWorkerPromiseResolver = resolve;\n\n            // set up listener for messages from the WebWorker\n            this._encoder.onmessage = this._onWorkerMessage;\n\n            this._encoder.postMessage({\n                command: MAIN_THREAD_INIT,\n                config: {\n                    sampleRate: this._sampleRate,\n                    bps: 16\n                }\n            });\n        });\n\n        // Arrow function is used here because we want AudioContext to be\n        // initialized only **after** promiseInitWorker is resolved.\n        return promiseInitWorker\n            .then(() =>\n                this._initializeAudioContext(\n                    micDeviceId,\n                    this._onAudioProcess\n                ));\n    }\n\n    /**\n     * Callback function for handling AudioProcessingEvents.\n     *\n     * @private\n     * @param {AudioProcessingEvent} e - The event containing the raw PCM.\n     * @returns {void}\n     */\n    _onAudioProcess(e) {\n        // Delegates to the WebWorker to do the encoding.\n        // The return of getChannelData() is a Float32Array,\n        // each element representing one sample.\n        const channelLeft = e.inputBuffer.getChannelData(0);\n\n        this._encoder.postMessage({\n            command: MAIN_THREAD_NEW_DATA_ARRIVED,\n            buf: channelLeft\n        });\n    }\n\n    /**\n     * Handler for messages from flacEncodeWorker.\n     *\n     * @private\n     * @param {MessageEvent} e - The event sent by the WebWorker.\n     * @returns {void}\n     */\n    _onWorkerMessage(e) {\n        switch (e.data.command) {\n        case WORKER_BLOB_READY:\n            // Received a Blob representing an encoded FLAC file.\n            this._data = e.data.buf;\n            if (this._stopPromiseResolver !== null) {\n                this._stopPromiseResolver();\n                this._stopPromiseResolver = null;\n                this._encoder.terminate();\n                this._encoder = null;\n            }\n            break;\n        case DEBUG:\n            logger.log(e.data);\n            break;\n        case WORKER_LIBFLAC_READY:\n            logger.log('libflac is ready.');\n            this._initWorkerPromiseResolver();\n            break;\n        default:\n            logger.error(\n                `Unknown event\n                from encoder (WebWorker): \"${e.data.command}\"!`);\n            break;\n        }\n    }\n\n    /**\n     * Loads the WebWorker.\n     *\n     * @private\n     * @returns {void}\n     */\n    _loadWebWorker() {\n        // FIXME: Workaround for different file names in development/\n        // production environments.\n        // We cannot import flacEncodeWorker as a webpack module,\n        // because it is in a different bundle and should be lazy-loaded\n        // only when flac recording is in use.\n        try {\n            // try load the minified version first\n            this._encoder = new Worker('/libs/flacEncodeWorker.min.js', { name: 'FLAC encoder worker' });\n        } catch (exception1) {\n            // if failed, try unminified version\n            try {\n                this._encoder = new Worker('/libs/flacEncodeWorker.js', { name: 'FLAC encoder worker' });\n            } catch (exception2) {\n                throw new Error('Failed to load flacEncodeWorker.');\n            }\n        }\n    }\n}\n","/**\n * Types of messages that are passed between the main thread and the WebWorker\n * ({@code flacEncodeWorker})\n */\n\n// Messages sent by the main thread\n\n/**\n * Message type that signals the termination of encoding,\n * after which no new audio bits should be sent to the\n * WebWorker.\n */\nexport const MAIN_THREAD_FINISH = 'MAIN_THREAD_FINISH';\n\n/**\n * Message type that carries initial parameters for\n * the WebWorker.\n */\nexport const MAIN_THREAD_INIT = 'MAIN_THREAD_INIT';\n\n/**\n * Message type that carries the newly received raw audio bits\n * for the WebWorker to encode.\n */\nexport const MAIN_THREAD_NEW_DATA_ARRIVED = 'MAIN_THREAD_NEW_DATA_ARRIVED';\n\n// Messages sent by the WebWorker\n\n/**\n * Message type that signals libflac is ready to receive audio bits.\n */\nexport const WORKER_LIBFLAC_READY = 'WORKER_LIBFLAC_READY';\n\n/**\n * Message type that carries the encoded FLAC file as a Blob.\n */\nexport const WORKER_BLOB_READY = 'WORKER_BLOB_READY';\n\n// Messages sent by either the main thread or the WebWorker\n\n/**\n * Debug messages.\n */\nexport const DEBUG = 'DEBUG';\n","/* @flow */\n\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\n\nimport logger from '../logger';\n\n/**\n * Gets high precision system time.\n *\n * @returns {number}\n */\nfunction highPrecisionTime(): number {\n    return window.performance\n        && window.performance.now\n        && window.performance.timing\n        && window.performance.timing.navigationStart\n        ? window.performance.now() + window.performance.timing.navigationStart\n        : Date.now();\n}\n\n// Have to use string literal here, instead of Symbols,\n// because these values need to be JSON-serializible.\n\n/**\n * Types of SessionEvents.\n */\nconst SessionEventType = Object.freeze({\n    /**\n     * Start of local recording session. This is recorded when the\n     * {@code RecordingController} receives the signal to start local recording,\n     * before the actual adapter is engaged.\n     */\n    SESSION_STARTED: 'SESSION_STARTED',\n\n    /**\n     * Start of a continuous segment. This is recorded when the adapter is\n     * engaged. Can happen multiple times in a local recording session,\n     * due to browser reloads or switching of recording device.\n     */\n    SEGMENT_STARTED: 'SEGMENT_STARTED',\n\n    /**\n     * End of a continuous segment. This is recorded when the adapter unengages.\n     */\n    SEGMENT_ENDED: 'SEGMENT_ENDED'\n});\n\n/**\n * Represents an event during a local recording session.\n * The event can be either that the adapter started recording, or stopped\n * recording.\n */\ntype SessionEvent = {\n\n    /**\n     * The type of the event.\n     * Should be one of the values in {@code SessionEventType}.\n     */\n    type: string,\n\n    /**\n     * The timestamp of the event.\n     */\n    timestamp: number\n};\n\n/**\n * Representation of the metadata of a segment.\n */\ntype SegmentInfo = {\n\n    /**\n     * The length of gap before this segment, in milliseconds.\n     * mull if unknown.\n     */\n    gapBefore?: ?number,\n\n    /**\n     * The duration of this segment, in milliseconds.\n     * null if unknown or the segment is not finished.\n     */\n    duration?: ?number,\n\n    /**\n     * The start time, in milliseconds.\n     */\n    start?: ?number,\n\n    /**\n     * The end time, in milliseconds.\n     * null if unknown, the segment is not finished, or the recording is\n     * interrupted (e.g. browser reload).\n     */\n    end?: ?number\n};\n\n/**\n * Representation of metadata of a local recording session.\n */\ntype SessionInfo = {\n\n    /**\n     * The session token.\n     */\n    sessionToken: string,\n\n    /**\n     * The start time of the session.\n     */\n    start: ?number,\n\n    /**\n     * The recording format.\n     */\n    format: string,\n\n    /**\n     * Array of segments in the session.\n     */\n    segments: SegmentInfo[]\n}\n\n/**\n * {@code localStorage} key.\n */\nconst LOCAL_STORAGE_KEY = 'localRecordingMetadataVersion1';\n\n/**\n * SessionManager manages the metadata of each segment during each local\n * recording session.\n *\n * A segment is a continuous portion of recording done using the same adapter\n * on the same microphone device.\n *\n * Browser refreshes, switching of microphone will cause new segments to be\n * created.\n *\n * A recording session can consist of one or more segments.\n */\nclass SessionManager {\n\n    /**\n     * The metadata.\n     */\n    _sessionsMetadata = {\n    };\n\n    /**\n     * Constructor.\n     */\n    constructor() {\n        this._loadMetadata();\n    }\n\n    /**\n     * Loads metadata from localStorage.\n     *\n     * @private\n     * @returns {void}\n     */\n    _loadMetadata() {\n        const dataStr = jitsiLocalStorage.getItem(LOCAL_STORAGE_KEY);\n\n        if (dataStr !== null) {\n            try {\n                const dataObject = Bourne.parse(dataStr);\n\n                this._sessionsMetadata = dataObject;\n            } catch (e) {\n                logger.warn('Failed to parse localStorage item.');\n\n                return;\n            }\n        }\n    }\n\n    /**\n     * Persists metadata to localStorage.\n     *\n     * @private\n     * @returns {void}\n     */\n    _saveMetadata() {\n        jitsiLocalStorage.setItem(LOCAL_STORAGE_KEY,\n            JSON.stringify(this._sessionsMetadata));\n    }\n\n    /**\n     * Creates a session if not exists.\n     *\n     * @param {string} sessionToken - The local recording session token.\n     * @param {string} format - The local recording format.\n     * @returns {void}\n     */\n    createSession(sessionToken: string, format: string) {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            this._sessionsMetadata[sessionToken] = {\n                format,\n                events: []\n            };\n            this._sessionsMetadata[sessionToken].events.push({\n                type: SessionEventType.SESSION_STARTED,\n                timestamp: highPrecisionTime()\n            });\n            this._saveMetadata();\n        } else {\n            logger.warn(`Session ${sessionToken} already exists`);\n        }\n    }\n\n    /**\n     * Gets all the Sessions.\n     *\n     * @returns {SessionInfo[]}\n     */\n    getSessions(): SessionInfo[] {\n        const sessionTokens = Object.keys(this._sessionsMetadata);\n        const output = [];\n\n        for (let i = 0; i < sessionTokens.length; ++i) {\n            const thisSession = this._sessionsMetadata[sessionTokens[i]];\n            const newSessionInfo: SessionInfo = {\n                start: thisSession.events[0].timestamp,\n                format: thisSession.format,\n                sessionToken: sessionTokens[i],\n                segments: this.getSegments(sessionTokens[i])\n            };\n\n            output.push(newSessionInfo);\n        }\n\n        output.sort((a, b) => (a.start || 0) - (b.start || 0));\n\n        return output;\n    }\n\n    /**\n     * Removes session metadata.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {void}\n     */\n    removeSession(sessionToken: string) {\n        delete this._sessionsMetadata[sessionToken];\n        this._saveMetadata();\n    }\n\n    /**\n     * Get segments of a given Session.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {SegmentInfo[]}\n     */\n    getSegments(sessionToken: string): SegmentInfo[] {\n        const thisSession = this._sessionsMetadata[sessionToken];\n\n        if (thisSession) {\n            return this._constructSegments(thisSession.events);\n        }\n\n        return [];\n    }\n\n    /**\n     * Marks the start of a new segment.\n     * This should be invoked by {@code RecordingAdapter}s when they need to\n     * start asynchronous operations (such as switching tracks) that interrupts\n     * recording.\n     *\n     * @param {string} sessionToken - The token of the session to start a new\n     * segment in.\n     * @returns {number} - Current segment index.\n     */\n    beginSegment(sessionToken: string): number {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            logger.warn('Attempting to add segments to nonexistent'\n                + ` session ${sessionToken}`);\n\n            return -1;\n        }\n        this._sessionsMetadata[sessionToken].events.push({\n            type: SessionEventType.SEGMENT_STARTED,\n            timestamp: highPrecisionTime()\n        });\n        this._saveMetadata();\n\n        return this.getSegments(sessionToken).length - 1;\n    }\n\n    /**\n     * Gets the current segment index. Starting from 0 for the first\n     * segment.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {number}\n     */\n    getCurrentSegmentIndex(sessionToken: string): number {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            return -1;\n        }\n        const segments = this.getSegments(sessionToken);\n\n        if (segments.length === 0) {\n            return -1;\n        }\n\n        const lastSegment = segments[segments.length - 1];\n\n        if (lastSegment.end) {\n            // last segment is already ended\n            return -1;\n        }\n\n        return segments.length - 1;\n    }\n\n    /**\n     * Marks the end of the last segment in a session.\n     *\n     * @param {string} sessionToken - The session token.\n     * @returns {void}\n     */\n    endSegment(sessionToken: string) {\n        if (this._sessionsMetadata[sessionToken] === undefined) {\n            logger.warn('Attempting to end a segment in nonexistent'\n                + ` session ${sessionToken}`);\n        } else {\n            this._sessionsMetadata[sessionToken].events.push({\n                type: SessionEventType.SEGMENT_ENDED,\n                timestamp: highPrecisionTime()\n            });\n            this._saveMetadata();\n        }\n    }\n\n    /**\n     * Constructs an array of {@code SegmentInfo} from an array of\n     * {@code SessionEvent}s.\n     *\n     * @private\n     * @param {SessionEvent[]} events - The array of {@code SessionEvent}s.\n     * @returns {SegmentInfo[]}\n     */\n    _constructSegments(events: SessionEvent[]): SegmentInfo[] {\n        if (events.length === 0) {\n            return [];\n        }\n\n        const output = [];\n        let sessionStartTime = null;\n        let currentSegment: SegmentInfo = {};\n\n        /**\n         * Helper function for adding a new {@code SegmentInfo} object to the\n         * output.\n         *\n         * @returns {void}\n         */\n        function commit() {\n            if (currentSegment.gapBefore === undefined\n                || currentSegment.gapBefore === null) {\n                if (output.length > 0 && output[output.length - 1].end) {\n                    const lastSegment = output[output.length - 1];\n\n                    if (currentSegment.start && lastSegment.end) {\n                        currentSegment.gapBefore = currentSegment.start\n                            - lastSegment.end;\n                    } else {\n                        currentSegment.gapBefore = null;\n                    }\n                } else if (sessionStartTime !== null && output.length === 0) {\n                    currentSegment.gapBefore = currentSegment.start\n                        ? currentSegment.start - sessionStartTime\n                        : null;\n                } else {\n                    currentSegment.gapBefore = null;\n                }\n            }\n            currentSegment.duration = currentSegment.end && currentSegment.start\n                ? currentSegment.end - currentSegment.start\n                : null;\n            output.push(currentSegment);\n            currentSegment = {};\n        }\n\n        for (let i = 0; i < events.length; ++i) {\n            const currentEvent = events[i];\n\n            switch (currentEvent.type) {\n            case SessionEventType.SESSION_STARTED:\n                if (sessionStartTime === null) {\n                    sessionStartTime = currentEvent.timestamp;\n                } else {\n                    logger.warn('Unexpected SESSION_STARTED event.'\n                        , currentEvent);\n                }\n                break;\n            case SessionEventType.SEGMENT_STARTED:\n                if (currentSegment.start === undefined\n                    || currentSegment.start === null) {\n                    currentSegment.start = currentEvent.timestamp;\n                } else {\n                    commit();\n                    currentSegment.start = currentEvent.timestamp;\n                }\n                break;\n\n            case SessionEventType.SEGMENT_ENDED:\n                if (currentSegment.start === undefined\n                    || currentSegment.start === null) {\n                    logger.warn('Unexpected SEGMENT_ENDED event', currentEvent);\n                } else {\n                    currentSegment.end = currentEvent.timestamp;\n                    commit();\n                }\n                break;\n\n            default:\n                logger.warn('Unexpected error during _constructSegments');\n                break;\n            }\n        }\n        if (currentSegment.start) {\n            commit();\n        }\n\n        return output;\n    }\n\n}\n\n/**\n * Global singleton of {@code SessionManager}.\n */\nexport const sessionManager = new SessionManager();\n\n// For debug only. To remove later.\nwindow.sessionManager = sessionManager;\n","/* @flow */\n\nimport Bourne from '@hapi/bourne';\n\nimport { i18next } from '../../base/i18n';\nimport logger from '../logger';\nimport {\n    FlacAdapter,\n    OggAdapter,\n    WavAdapter,\n    downloadBlob\n} from '../recording';\nimport { sessionManager } from '../session';\n\n/**\n * XMPP command for signaling the start of local recording to all clients.\n * Should be sent by the moderator only.\n */\nconst COMMAND_START = 'localRecStart';\n\n/**\n * XMPP command for signaling the stop of local recording to all clients.\n * Should be sent by the moderator only.\n */\nconst COMMAND_STOP = 'localRecStop';\n\n/**\n * One-time command used to trigger the moderator to resend the commands.\n * This is a workaround for newly-joined clients to receive remote presence.\n */\nconst COMMAND_PING = 'localRecPing';\n\n/**\n * One-time command sent upon receiving a {@code COMMAND_PING}.\n * Only the moderator sends this command.\n * This command does not carry any information itself, but rather forces the\n * XMPP server to resend the remote presence.\n */\nconst COMMAND_PONG = 'localRecPong';\n\n/**\n * Participant property key for local recording stats.\n */\nconst PROPERTY_STATS = 'localRecStats';\n\n/**\n * Supported recording formats.\n */\nconst RECORDING_FORMATS = new Set([ 'flac', 'wav', 'ogg' ]);\n\n/**\n * Default recording format.\n */\nconst DEFAULT_RECORDING_FORMAT = 'flac';\n\n/**\n * States of the {@code RecordingController}.\n */\nconst ControllerState = Object.freeze({\n    /**\n     * Idle (not recording).\n     */\n    IDLE: Symbol('IDLE'),\n\n    /**\n     * Starting.\n     */\n    STARTING: Symbol('STARTING'),\n\n    /**\n     * Engaged (recording).\n     */\n    RECORDING: Symbol('RECORDING'),\n\n    /**\n     * Stopping.\n     */\n    STOPPING: Symbol('STOPPING'),\n\n    /**\n     * Failed, due to error during starting / stopping process.\n     */\n    FAILED: Symbol('FAILED')\n});\n\n/**\n * Type of the stats reported by each participant (client).\n */\ntype RecordingStats = {\n\n    /**\n     * Current local recording session token used by the participant.\n     */\n    currentSessionToken: number,\n\n    /**\n     * Whether local recording is engaged on the participant's device.\n     */\n    isRecording: boolean,\n\n    /**\n     * Total recorded bytes. (Reserved for future use.)\n     */\n    recordedBytes: number,\n\n    /**\n     * Total recording duration. (Reserved for future use.)\n     */\n    recordedLength: number\n}\n\n/**\n * The component responsible for the coordination of local recording, across\n * multiple participants.\n * Current implementation requires that there is only one moderator in a room.\n */\nclass RecordingController {\n\n    /**\n     * For each recording session, there is a separate @{code RecordingAdapter}\n     * instance so that encoded bits from the previous sessions can still be\n     * retrieved after they ended.\n     *\n     * @private\n     */\n    _adapters = {};\n\n    /**\n     * The {@code JitsiConference} instance.\n     *\n     * @private\n     */\n    _conference: * = null;\n\n    /**\n     * Current recording session token.\n     * Session token is a number generated by the moderator, to ensure every\n     * client is in the same recording state.\n     *\n     * @private\n     */\n    _currentSessionToken: number = -1;\n\n    /**\n     * Current state of {@code RecordingController}.\n     *\n     * @private\n     */\n    _state = ControllerState.IDLE;\n\n    /**\n     * Whether or not the audio is muted in the UI. This is stored as internal\n     * state of {@code RecordingController} because we might have recording\n     * sessions that start muted.\n     */\n    _isMuted = false;\n\n    /**\n     * The ID of the active microphone.\n     *\n     * @private\n     */\n    _micDeviceId = 'default';\n\n    /**\n     * Current recording format. This will be in effect from the next\n     * recording session, i.e., if this value is changed during an on-going\n     * recording session, that on-going session will not use the new format.\n     *\n     * @private\n     */\n    _format = DEFAULT_RECORDING_FORMAT;\n\n    /**\n     * Whether or not the {@code RecordingController} has registered for\n     * XMPP events. Prevents initialization from happening multiple times.\n     *\n     * @private\n     */\n    _registered = false;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI it wants to display a notice. Keeps {@code RecordingController}\n     * decoupled from UI.\n     */\n    _onNotify: ?(messageKey: string, messageParams?: Object) => void;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI it wants to display a warning. Keeps {@code RecordingController}\n     * decoupled from UI.\n     */\n    _onWarning: ?(messageKey: string, messageParams?: Object) => void;\n\n    /**\n     * FIXME: callback function for the {@code RecordingController} to notify\n     * UI that the local recording state has changed.\n     */\n    _onStateChanged: ?(boolean) => void;\n\n    /**\n     * Constructor.\n     *\n     * @returns {void}\n     */\n    constructor() {\n        this.registerEvents = this.registerEvents.bind(this);\n        this.getParticipantsStats = this.getParticipantsStats.bind(this);\n        this._onStartCommand = this._onStartCommand.bind(this);\n        this._onStopCommand = this._onStopCommand.bind(this);\n        this._onPingCommand = this._onPingCommand.bind(this);\n        this._doStartRecording = this._doStartRecording.bind(this);\n        this._doStopRecording = this._doStopRecording.bind(this);\n        this._updateStats = this._updateStats.bind(this);\n        this._switchToNewSession = this._switchToNewSession.bind(this);\n    }\n\n    registerEvents: () => void;\n\n    /**\n     * Registers listeners for XMPP events.\n     *\n     * @param {JitsiConference} conference - A {@code JitsiConference} instance.\n     * @returns {void}\n     */\n    registerEvents(conference: Object) {\n        if (!this._registered) {\n            this._conference = conference;\n            if (this._conference) {\n                this._conference\n                    .addCommandListener(COMMAND_STOP, this._onStopCommand);\n                this._conference\n                    .addCommandListener(COMMAND_START, this._onStartCommand);\n                this._conference\n                    .addCommandListener(COMMAND_PING, this._onPingCommand);\n                this._registered = true;\n            }\n            if (!this._conference.isModerator()) {\n                this._conference.sendCommandOnce(COMMAND_PING, {});\n            }\n        }\n    }\n\n    /**\n     * Sets the event handler for {@code onStateChanged}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onStateChanged(delegate: Function) {\n        this._onStateChanged = delegate;\n    }\n\n    /**\n     * Sets the event handler for {@code onNotify}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onNotify(delegate: Function) {\n        this._onNotify = delegate;\n    }\n\n    /**\n     * Sets the event handler for {@code onWarning}.\n     *\n     * @param {Function} delegate - The event handler.\n     * @returns {void}\n     */\n    set onWarning(delegate: Function) {\n        this._onWarning = delegate;\n    }\n\n    /**\n     * Signals the participants to start local recording.\n     *\n     * @returns {void}\n     */\n    startRecording() {\n        this.registerEvents();\n        if (this._conference && this._conference.isModerator()) {\n            this._conference.removeCommand(COMMAND_STOP);\n            this._conference.sendCommand(COMMAND_START, {\n                attributes: {\n                    sessionToken: this._getRandomToken(),\n                    format: this._format\n                }\n            });\n        } else if (this._onWarning) {\n            this._onWarning('localRecording.messages.notModerator');\n        }\n    }\n\n    /**\n     * Signals the participants to stop local recording.\n     *\n     * @returns {void}\n     */\n    stopRecording() {\n        if (this._conference) {\n            if (this._conference.isModerator()) {\n                this._conference.removeCommand(COMMAND_START);\n                this._conference.sendCommand(COMMAND_STOP, {\n                    attributes: {\n                        sessionToken: this._currentSessionToken\n                    }\n                });\n            } else if (this._onWarning) {\n                this._onWarning('localRecording.messages.notModerator');\n            }\n        }\n    }\n\n    /**\n     * Triggers the download of recorded data.\n     * Browser only.\n     *\n     * @param {number} sessionToken - The token of the session to download.\n     * @returns {void}\n     */\n    downloadRecordedData(sessionToken: number) {\n        if (this._adapters[sessionToken]) {\n            this._adapters[sessionToken].exportRecordedData()\n                .then(args => {\n                    const { data, format } = args;\n\n                    const filename = `session_${sessionToken}`\n                        + `_${this._conference.myUserId()}.${format}`;\n\n                    downloadBlob(data, filename);\n                })\n                .catch(error => {\n                    logger.error('Failed to download audio for'\n                        + ` session ${sessionToken}. Error: ${error}`);\n                });\n        } else {\n            logger.error(`Invalid session token for download ${sessionToken}`);\n        }\n    }\n\n    /**\n     * Changes the current microphone.\n     *\n     * @param {string} micDeviceId - The new microphone device ID.\n     * @returns {void}\n     */\n    setMicDevice(micDeviceId: string) {\n        if (micDeviceId !== this._micDeviceId) {\n            this._micDeviceId = String(micDeviceId);\n\n            if (this._state === ControllerState.RECORDING) {\n                // sessionManager.endSegment(this._currentSessionToken);\n                logger.log('Before switching microphone...');\n                this._adapters[this._currentSessionToken]\n                    .setMicDevice(this._micDeviceId)\n                    .then(() => {\n                        logger.log('Finished switching microphone.');\n\n                        // sessionManager.beginSegment(this._currentSesoken);\n                    })\n                    .catch(() => {\n                        logger.error('Failed to switch microphone');\n                    });\n            }\n            logger.log(`Switch microphone to ${this._micDeviceId}`);\n        }\n    }\n\n    /**\n     * Mute or unmute audio. When muted, the ongoing local recording should\n     * produce silence.\n     *\n     * @param {boolean} muted - If the audio should be muted.\n     * @returns {void}\n     */\n    setMuted(muted: boolean) {\n        this._isMuted = Boolean(muted);\n\n        if (this._state === ControllerState.RECORDING) {\n            this._adapters[this._currentSessionToken].setMuted(this._isMuted);\n        }\n    }\n\n    /**\n     * Switches the recording format.\n     *\n     * @param {string} newFormat - The new format.\n     * @returns {void}\n     */\n    switchFormat(newFormat: string) {\n        if (!RECORDING_FORMATS.has(newFormat)) {\n            logger.log(`Unknown format ${newFormat}. Ignoring...`);\n\n            return;\n        }\n        this._format = newFormat;\n        logger.log(`Recording format switched to ${newFormat}`);\n\n        // the new format will be used in the next recording session\n    }\n\n    /**\n     * Returns the local recording stats.\n     *\n     * @returns {RecordingStats}\n     */\n    getLocalStats(): RecordingStats {\n        return {\n            currentSessionToken: this._currentSessionToken,\n            isRecording: this._state === ControllerState.RECORDING,\n            recordedBytes: 0,\n            recordedLength: 0\n        };\n    }\n\n    getParticipantsStats: () => *;\n\n    /**\n     * Returns the remote participants' local recording stats.\n     *\n     * @returns {*}\n     */\n    getParticipantsStats() {\n        const members\n            = this._conference.getParticipants()\n            .map(member => {\n                return {\n                    id: member.getId(),\n                    displayName: member.getDisplayName(),\n                    recordingStats:\n                        Bourne.parse(member.getProperty(PROPERTY_STATS) || '{}'),\n                    isSelf: false\n                };\n            });\n\n        // transform into a dictionary for consistent ordering\n        const result = {};\n\n        for (let i = 0; i < members.length; ++i) {\n            result[members[i].id] = members[i];\n        }\n        const localId = this._conference.myUserId();\n\n        result[localId] = {\n            id: localId,\n            displayName: i18next.t('localRecording.me'),\n            recordingStats: this.getLocalStats(),\n            isSelf: true\n        };\n\n        return result;\n    }\n\n    _changeState: (Symbol) => void;\n\n    /**\n     * Changes the current state of {@code RecordingController}.\n     *\n     * @private\n     * @param {Symbol} newState - The new state.\n     * @returns {void}\n     */\n    _changeState(newState: Symbol) {\n        if (this._state !== newState) {\n            logger.log(`state change: ${this._state.toString()} -> `\n                + `${newState.toString()}`);\n            this._state = newState;\n        }\n    }\n\n    _updateStats: () => void;\n\n    /**\n     * Sends out updates about the local recording stats via XMPP.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateStats() {\n        if (this._conference) {\n            this._conference.setLocalParticipantProperty(PROPERTY_STATS,\n                JSON.stringify(this.getLocalStats()));\n        }\n    }\n\n    _onStartCommand: (*) => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @param {*} value - The event args.\n     * @returns {void}\n     */\n    _onStartCommand(value) {\n        const { sessionToken, format } = value.attributes;\n\n        if (this._state === ControllerState.IDLE) {\n            this._changeState(ControllerState.STARTING);\n            this._switchToNewSession(sessionToken, format);\n            this._doStartRecording();\n        } else if (this._state === ControllerState.RECORDING\n            && this._currentSessionToken !== sessionToken) {\n            // There is local recording going on, but not for the same session.\n            // This means the current state might be out-of-sync with the\n            // moderator's, so we need to restart the recording.\n            this._changeState(ControllerState.STOPPING);\n            this._doStopRecording().then(() => {\n                this._changeState(ControllerState.STARTING);\n                this._switchToNewSession(sessionToken, format);\n                this._doStartRecording();\n            });\n        }\n    }\n\n    _onStopCommand: (*) => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @param {*} value - The event args.\n     * @returns {void}\n     */\n    _onStopCommand(value) {\n        if (this._state === ControllerState.RECORDING\n            && this._currentSessionToken === value.attributes.sessionToken) {\n            this._changeState(ControllerState.STOPPING);\n            this._doStopRecording();\n        }\n    }\n\n    _onPingCommand: () => void;\n\n    /**\n     * Callback function for XMPP event.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onPingCommand() {\n        if (this._conference.isModerator()) {\n            logger.log('Received ping, sending pong.');\n            this._conference.sendCommandOnce(COMMAND_PONG, {});\n        }\n    }\n\n    /**\n     * Generates a token that can be used to distinguish each local recording\n     * session.\n     *\n     * @returns {number}\n     */\n    _getRandomToken() {\n        return Math.floor(Math.random() * 100000000) + 1;\n    }\n\n    _doStartRecording: () => void;\n\n    /**\n     * Starts the recording locally.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doStartRecording() {\n        if (this._state === ControllerState.STARTING) {\n            const delegate = this._adapters[this._currentSessionToken];\n\n            delegate.start(this._micDeviceId)\n            .then(() => {\n                this._changeState(ControllerState.RECORDING);\n                sessionManager.beginSegment(this._currentSessionToken);\n                logger.log('Local recording engaged.');\n\n                if (this._onNotify) {\n                    this._onNotify('localRecording.messages.engaged');\n                }\n                if (this._onStateChanged) {\n                    this._onStateChanged(true);\n                }\n\n                delegate.setMuted(this._isMuted);\n                this._updateStats();\n            })\n            .catch(err => {\n                logger.error('Failed to start local recording.', err);\n            });\n        }\n\n    }\n\n    _doStopRecording: () => Promise<void>;\n\n    /**\n     * Stops the recording locally.\n     *\n     * @private\n     * @returns {Promise<void>}\n     */\n    _doStopRecording() {\n        if (this._state === ControllerState.STOPPING) {\n            const token = this._currentSessionToken;\n\n            return this._adapters[this._currentSessionToken]\n                .stop()\n                .then(() => {\n                    this._changeState(ControllerState.IDLE);\n                    sessionManager.endSegment(this._currentSessionToken);\n                    logger.log('Local recording unengaged.');\n                    this.downloadRecordedData(token);\n\n                    const messageKey\n                        = this._conference.isModerator()\n                            ? 'localRecording.messages.finishedModerator'\n                            : 'localRecording.messages.finished';\n                    const messageParams = {\n                        token\n                    };\n\n                    if (this._onNotify) {\n                        this._onNotify(messageKey, messageParams);\n                    }\n                    if (this._onStateChanged) {\n                        this._onStateChanged(false);\n                    }\n                    this._updateStats();\n                })\n                .catch(err => {\n                    logger.error('Failed to stop local recording.', err);\n                });\n        }\n\n        /* eslint-disable */\n        return (Promise.resolve(): Promise<void>);\n        // FIXME: better ways to satisfy flow and ESLint at the same time?\n        /* eslint-enable */\n\n    }\n\n    _switchToNewSession: (string, string) => void;\n\n    /**\n     * Switches to a new local recording session.\n     *\n     * @param {string} sessionToken - The session Token.\n     * @param {string} format - The recording format for the session.\n     * @returns {void}\n     */\n    _switchToNewSession(sessionToken, format) {\n        this._format = format;\n        this._currentSessionToken = sessionToken;\n        logger.log(`New session: ${this._currentSessionToken}, `\n            + `format: ${this._format}`);\n        this._adapters[sessionToken]\n             = this._createRecordingAdapter();\n        sessionManager.createSession(sessionToken, this._format);\n    }\n\n    /**\n     * Creates a recording adapter according to the current recording format.\n     *\n     * @private\n     * @returns {RecordingAdapter}\n     */\n    _createRecordingAdapter() {\n        logger.debug('[RecordingController] creating recording'\n            + ` adapter for ${this._format} format.`);\n\n        switch (this._format) {\n        case 'ogg':\n            return new OggAdapter();\n        case 'flac':\n            return new FlacAdapter();\n        case 'wav':\n            return new WavAdapter();\n        default:\n            throw new Error(`Unknown format: ${this._format}`);\n        }\n    }\n}\n\n/**\n * Global singleton of {@code RecordingController}.\n */\nexport const recordingController = new RecordingController();\n","/**\n * Force download of Blob in browser by faking an <a> tag.\n *\n * @param {Blob} blob - Base64 URL.\n * @param {string} fileName - The filename to appear in the download dialog.\n * @returns {void}\n */\nexport function downloadBlob(blob, fileName = 'recording.ogg') {\n    const base64Url = window.URL.createObjectURL(blob);\n\n    // fake a anchor tag\n    const a = document.createElement('a');\n\n    a.style = 'display: none';\n    a.href = base64Url;\n    a.download = fileName;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n}\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { Icon, IconArrowDown } from '../../../icons';\n\ntype Props = {\n\n    /**\n     * Text of the button.\n     */\n    children: React$Node,\n\n    /**\n     * Text css class of the button.\n     */\n    className?: string,\n\n    /**\n     * If the button is disabled or not.\n     */\n    disabled?: boolean,\n\n    /**\n     * If the button has options.\n     */\n    hasOptions?: boolean,\n\n    /**\n     * Icon to display in the options section.\n     */\n    OptionsIcon?: React$Node,\n\n    /**\n     * TestId of the button. Can be used to locate element when testing UI.\n     */\n    testId?: string,\n\n    /**\n     * The type of th button: primary, secondary, text.\n     */\n    type: string,\n\n    /**\n     * OnClick button handler.\n     */\n    onClick: Function,\n\n\n    /**\n     * Click handler for options.\n     */\n    onOptionsClick?: Function,\n\n    /**\n     * to navigate with the keyboard.\n     */\n    tabIndex?: number,\n\n    /**\n     * to give a role to the icon.\n     */\n    role?: string,\n\n    /**\n     * to give a aria-pressed to the icon.\n     */\n    ariaPressed?: boolean,\n\n    /**\n     * The Label of the current element\n     */\n    ariaLabel?: string,\n\n    /**\n     * The Label of the child element\n     */\n    ariaDropDownLabel?: string\n};\n\n/**\n * Button used for pre meeting actions.\n *\n * @returns {ReactElement}\n */\nfunction ActionButton({\n    children,\n    className = '',\n    disabled,\n    hasOptions,\n    OptionsIcon = IconArrowDown,\n    testId,\n    type = 'primary',\n    onClick,\n    onOptionsClick,\n    tabIndex,\n    role,\n    ariaPressed,\n    ariaLabel,\n    ariaDropDownLabel\n}: Props) {\n\n    const onKeyPressHandler = useCallback(e => {\n        if (onClick && !disabled && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            onClick(e);\n        }\n    }, [ onClick, disabled ]);\n\n    const onOptionsKeyPressHandler = useCallback(e => {\n        if (onOptionsClick && !disabled && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            e.stopPropagation();\n            onOptionsClick(e);\n        }\n    }, [ onOptionsClick, disabled ]);\n\n    return (\n        <div\n            aria-disabled = { disabled }\n            aria-label = { ariaLabel }\n            className = { `action-btn ${className} ${type} ${disabled ? 'disabled' : ''}` }\n            data-testid = { testId ? testId : undefined }\n            onClick = { disabled ? undefined : onClick }\n            onKeyPress = { onKeyPressHandler }\n            role = 'button'\n            tabIndex = { 0 } >\n            {children}\n            { hasOptions\n                  && <div\n                      aria-disabled = { disabled }\n                      aria-haspopup = 'true'\n                      aria-label = { ariaDropDownLabel }\n                      aria-pressed = { ariaPressed }\n                      className = 'options'\n                      data-testid = 'prejoin.joinOptions'\n                      onClick = { disabled ? undefined : onOptionsClick }\n                      onKeyPress = { onOptionsKeyPressHandler }\n                      role = { role }\n                      tabIndex = { tabIndex }>\n                      <Icon\n                          className = 'icon'\n                          size = { 14 }\n                          src = { OptionsIcon } />\n                  </div>\n            }\n        </div>\n    );\n}\n\nexport default ActionButton;\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { getFieldValue } from '../../../react';\n\ntype Props = {\n\n    /**\n     * If the input should be focused on display.\n     */\n    autoFocus?: boolean,\n\n    /**\n     * Class name to be appended to the default class list.\n     */\n    className?: string,\n\n    /**\n     * TestId of the button. Can be used to locate element when testing UI.\n     */\n    testId?: string,\n\n    /**\n     * Callback for the onChange event of the field.\n     */\n    onChange: Function,\n\n    /**\n     * Callback to be used when the user hits Enter in the field.\n     */\n    onSubmit?: Function,\n\n    /**\n     * Placeholder text for the field.\n     */\n    placeHolder: string,\n\n    /**\n     * The field type (e.g. text, password...etc).\n     */\n    type: string,\n\n    /**\n     * Externally provided value.\n     */\n    value?: string,\n    id?: string,\n    autoComplete?: string\n};\n\ntype State = {\n\n    /**\n     * True if the field is focused, false otherwise.\n     */\n    focused: boolean,\n\n    /**\n     * The current value of the field.\n     */\n    value: string\n}\n\n/**\n * Implements a pre-styled input field to be used on pre-meeting screens.\n */\nexport default class InputField extends PureComponent<Props, State> {\n    static defaultProps: {\n        className: '',\n        type: 'text'\n    };\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            focused: false,\n            value: props.value || ''\n        };\n\n        this._onBlur = this._onBlur.bind(this);\n        this._onChange = this._onChange.bind(this);\n        this._onFocus = this._onFocus.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n    }\n\n    /**\n     * Implements {@code PureComponent.getDerivedStateFromProps}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: State) {\n        const { value } = props;\n\n        if (state.value !== value) {\n            return {\n                ...state,\n                value\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <input\n                autoComplete = { this.props.autoComplete }\n                autoFocus = { this.props.autoFocus }\n                className = { `field ${this.state.focused ? 'focused' : ''} ${this.props.className || ''}` }\n                data-testid = { this.props.testId ? this.props.testId : undefined }\n                id = { this.props.id }\n                onBlur = { this._onBlur }\n                onChange = { this._onChange }\n                onFocus = { this._onFocus }\n                onKeyDown = { this._onKeyDown }\n                placeholder = { this.props.placeHolder }\n                type = { this.props.type }\n                value = { this.state.value } />\n        );\n    }\n\n    _onBlur: () => void;\n\n    /**\n     * Callback for the onBlur event of the field.\n     *\n     * @returns {void}\n     */\n    _onBlur() {\n        this.setState({\n            focused: false\n        });\n    }\n\n    _onChange: Object => void;\n\n    /**\n     * Callback for the onChange event of the field.\n     *\n     * @param {Object} evt - The static event.\n     * @returns {void}\n     */\n    _onChange(evt) {\n        const value = getFieldValue(evt);\n\n        this.setState({\n            value\n        });\n\n        const { onChange } = this.props;\n\n        onChange && onChange(value);\n    }\n\n    _onFocus: () => void;\n\n    /**\n     * Callback for the onFocus event of the field.\n     *\n     * @returns {void}\n     */\n    _onFocus() {\n        this.setState({\n            focused: true\n        });\n    }\n\n    _onKeyDown: Object => void;\n\n    /**\n     * Joins the conference on 'Enter'.\n     *\n     * @param {Event} event - Key down event object.\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        const { onSubmit } = this.props;\n\n        onSubmit && event.key === 'Enter' && onSubmit();\n    }\n}\n","// @flow\n\nexport const CONNECTION_TYPE = {\n    GOOD: 'good',\n    NON_OPTIMAL: 'nonOptimal',\n    NONE: 'none',\n    POOR: 'poor'\n};\n","// @flow\n\nimport { findIndex } from 'lodash';\n\nimport { CONNECTION_TYPE } from './constants';\n\ndeclare var interfaceConfig: Object;\n\nconst LOSS_AUDIO_THRESHOLDS = [ 0.33, 0.05 ];\nconst LOSS_VIDEO_THRESHOLDS = [ 0.33, 0.1, 0.05 ];\n\nconst THROUGHPUT_AUDIO_THRESHOLDS = [ 8, 20 ];\nconst THROUGHPUT_VIDEO_THRESHOLDS = [ 60, 750 ];\n\n/**\n * The avatar size to container size ration.\n */\nconst ratio = 1 / 3;\n\n/**\n * The max avatar size.\n */\nconst maxSize = 190;\n\n/**\n * The window limit height over which the avatar should have the default dimension.\n */\nconst upperHeightLimit = 760;\n\n/**\n * The window limit height under which the avatar should not be resized anymore.\n */\nconst lowerHeightLimit = 460;\n\n/**\n * The default top margin of the avatar.\n */\nconst defaultMarginTop = '10%';\n\n/**\n * The top margin of the avatar when its dimension is small.\n */\nconst smallMarginTop = '5%';\n\n/**\n * Calculates avatar dimensions based on window height and position.\n *\n * @param {number} height - The window height.\n * @returns {{\n *   marginTop: string,\n *   size: number\n * }}\n */\nexport function calculateAvatarDimensions(height: number) {\n    if (height > upperHeightLimit) {\n        return {\n            size: maxSize,\n            marginTop: defaultMarginTop\n        };\n    }\n\n    if (height > lowerHeightLimit) {\n        const diff = height - lowerHeightLimit;\n        const percent = diff * ratio;\n        const size = Math.floor(maxSize * percent / 100);\n        let marginTop = defaultMarginTop;\n\n        if (height < 600) {\n            marginTop = smallMarginTop;\n        }\n\n        return {\n            size,\n            marginTop\n        };\n    }\n\n    return {\n        size: 0,\n        marginTop: '0'\n    };\n}\n\n/**\n * Returns the level based on a list of thresholds.\n *\n * @param {number[]} thresholds - The thresholds array.\n * @param {number} value - The value against which the level is calculated.\n * @param {boolean} descending - The order based on which the level is calculated.\n *\n * @returns {number}\n */\nfunction _getLevel(thresholds, value, descending = true) {\n    let predicate;\n\n    if (descending) {\n        predicate = function(threshold) {\n            return value > threshold;\n        };\n    } else {\n        predicate = function(threshold) {\n            return value < threshold;\n        };\n    }\n\n    const i = findIndex(thresholds, predicate);\n\n    if (i === -1) {\n        return thresholds.length;\n    }\n\n    return i;\n}\n\n/**\n * Returns the connection details from the test results.\n *\n * @param {{\n *   fractionalLoss: number,\n *   throughput: number\n * }} testResults - The state of the app.\n *\n * @returns {{\n *   connectionType: string,\n *   connectionDetails: string[]\n * }}\n */\nfunction _getConnectionDataFromTestResults({ fractionalLoss: l, throughput: t }) {\n    const loss = {\n        audioQuality: _getLevel(LOSS_AUDIO_THRESHOLDS, l),\n        videoQuality: _getLevel(LOSS_VIDEO_THRESHOLDS, l)\n    };\n    const throughput = {\n        audioQuality: _getLevel(THROUGHPUT_AUDIO_THRESHOLDS, t, false),\n        videoQuality: _getLevel(THROUGHPUT_VIDEO_THRESHOLDS, t, false)\n    };\n    let connectionType = CONNECTION_TYPE.NONE;\n    const connectionDetails = [];\n\n    if (throughput.audioQuality === 0 || loss.audioQuality === 0) {\n        // Calls are impossible.\n        connectionType = CONNECTION_TYPE.POOR;\n        connectionDetails.push('prejoin.connectionDetails.veryPoorConnection');\n    } else if (\n        throughput.audioQuality === 2\n        && throughput.videoQuality === 2\n        && loss.audioQuality === 2\n        && loss.videoQuality === 3\n    ) {\n        // Ideal conditions for both audio and video. Show only one message.\n        connectionType = CONNECTION_TYPE.GOOD;\n        connectionDetails.push('prejoin.connectionDetails.goodQuality');\n    } else {\n        connectionType = CONNECTION_TYPE.NON_OPTIMAL;\n\n        if (throughput.audioQuality === 1) {\n            // Minimum requirements for a call are met.\n            connectionDetails.push('prejoin.connectionDetails.audioLowNoVideo');\n        } else {\n            // There are two paragraphs: one saying something about audio and the other about video.\n            if (loss.audioQuality === 1) {\n                connectionDetails.push('prejoin.connectionDetails.audioClipping');\n            } else {\n                connectionDetails.push('prejoin.connectionDetails.audioHighQuality');\n            }\n\n            if (throughput.videoQuality === 0 || loss.videoQuality === 0) {\n                connectionDetails.push('prejoin.connectionDetails.noVideo');\n            } else if (throughput.videoQuality === 1) {\n                connectionDetails.push('prejoin.connectionDetails.videoLowQuality');\n            } else if (loss.videoQuality === 1) {\n                connectionDetails.push('prejoin.connectionDetails.videoFreezing');\n            } else if (loss.videoQuality === 2) {\n                connectionDetails.push('prejoin.connectionDetails.videoTearing');\n            } else {\n                connectionDetails.push('prejoin.connectionDetails.videoHighQuality');\n            }\n        }\n        connectionDetails.push('prejoin.connectionDetails.undetectable');\n    }\n\n    return {\n        connectionType,\n        connectionDetails\n    };\n}\n\n/**\n * Selector for determining the connection type & details.\n *\n * @param {Object} state - The state of the app.\n * @returns {{\n *   connectionType: string,\n *   connectionDetails: string[]\n * }}\n */\nexport function getConnectionData(state: Object) {\n    const { precallTestResults } = state['features/prejoin'];\n\n    if (precallTestResults) {\n        if (precallTestResults.mediaConnectivity) {\n            return _getConnectionDataFromTestResults(precallTestResults);\n        }\n\n        return {\n            connectionType: CONNECTION_TYPE.POOR,\n            connectionDetails: [ 'prejoin.connectionDetails.noMediaConnectivity' ]\n        };\n    }\n\n    return {\n        connectionType: CONNECTION_TYPE.NONE,\n        connectionDetails: []\n    };\n}\n\n/**\n * Returns if url sharing is enabled in interface configuration.\n *\n * @returns {boolean}\n */\nexport function allowUrlSharing() {\n    return typeof interfaceConfig === 'undefined'\n        || typeof interfaceConfig.SHARING_FEATURES === 'undefined'\n        || (interfaceConfig.SHARING_FEATURES.length && interfaceConfig.SHARING_FEATURES.indexOf('url') > -1);\n}\n","// @flow\n\nimport React, { useCallback, useState } from 'react';\n\nimport { translate } from '../../../i18n';\nimport { Icon, IconArrowDownSmall, IconWifi1Bar, IconWifi2Bars, IconWifi3Bars } from '../../../icons';\nimport { connect } from '../../../redux';\nimport { CONNECTION_TYPE } from '../../constants';\nimport { getConnectionData } from '../../functions';\n\ntype Props = {\n\n    /**\n     * List of strings with details about the connection.\n     */\n    connectionDetails: string[],\n\n    /**\n     * The type of the connection. Can be: 'none', 'poor', 'nonOptimal' or 'good'.\n     */\n    connectionType: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function\n}\n\nconst CONNECTION_TYPE_MAP = {\n    [CONNECTION_TYPE.POOR]: {\n        connectionClass: 'con-status--poor',\n        icon: IconWifi1Bar,\n        connectionText: 'prejoin.connection.poor'\n    },\n    [CONNECTION_TYPE.NON_OPTIMAL]: {\n        connectionClass: 'con-status--non-optimal',\n        icon: IconWifi2Bars,\n        connectionText: 'prejoin.connection.nonOptimal'\n    },\n    [CONNECTION_TYPE.GOOD]: {\n        connectionClass: 'con-status--good',\n        icon: IconWifi3Bars,\n        connectionText: 'prejoin.connection.good'\n    }\n};\n\n/**\n * Component displaying information related to the connection & audio/video quality.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nfunction ConnectionStatus({ connectionDetails, t, connectionType }: Props) {\n    if (connectionType === CONNECTION_TYPE.NONE) {\n        return null;\n    }\n\n    const { connectionClass, icon, connectionText } = CONNECTION_TYPE_MAP[connectionType];\n    const [ showDetails, toggleDetails ] = useState(false);\n    const arrowClassName = showDetails\n        ? 'con-status-arrow con-status-arrow--up'\n        : 'con-status-arrow';\n    const detailsText = connectionDetails.map(t).join(' ');\n    const detailsClassName = showDetails\n        ? 'con-status-details-visible'\n        : 'con-status-details-hidden';\n\n    const onToggleDetails = useCallback(e => {\n        e.preventDefault();\n        toggleDetails(!showDetails);\n    }, [ showDetails, toggleDetails ]);\n\n    const onKeyPressToggleDetails = useCallback(e => {\n        if (toggleDetails && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            toggleDetails(!showDetails);\n        }\n    }, [ showDetails, toggleDetails ]);\n\n    return (\n        <div className = 'con-status'>\n            <div className = 'con-status-container'>\n                <div\n                    aria-level = { 1 }\n                    className = 'con-status-header'\n                    role = 'heading'>\n                    <div className = { `con-status-circle ${connectionClass}` }>\n                        <Icon\n                            size = { 16 }\n                            src = { icon } />\n                    </div>\n                    <span\n                        aria-hidden = { !showDetails }\n                        className = 'con-status-text'\n                        id = 'connection-status-description'>{t(connectionText)}</span>\n                    <Icon\n                        ariaDescribedBy = 'connection-status-description'\n                        ariaPressed = { showDetails }\n                        className = { arrowClassName }\n                        onClick = { onToggleDetails }\n                        onKeyPress = { onKeyPressToggleDetails }\n                        role = 'button'\n                        size = { 24 }\n                        src = { IconArrowDownSmall }\n                        tabIndex = { 0 } />\n                </div>\n                <div\n                    aria-level = '2'\n                    className = { `con-status-details ${detailsClassName}` }\n                    role = 'heading'>\n                    {detailsText}</div>\n            </div>\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state): Object {\n    const { connectionDetails, connectionType } = getConnectionData(state);\n\n    return {\n        connectionDetails,\n        connectionType\n    };\n}\n\nexport default translate(connect(mapStateToProps)(ConnectionStatus));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport CopyMeetingLinkSection\n    from '../../../../invite/components/add-people-dialog/web/CopyMeetingLinkSection';\nimport { getCurrentConferenceUrl } from '../../../connection';\nimport { translate } from '../../../i18n';\nimport { connect } from '../../../redux';\n\ntype Props = {\n\n    /**\n     * The meeting url.\n     */\n    url: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n\n    /**\n     * Used to determine if invitation link should be automatically copied\n     * after creating a meeting.\n     */\n    _enableAutomaticUrlCopy: boolean,\n};\n\n\n/**\n * Component used to copy meeting url on prejoin page.\n */\nclass CopyMeetingUrl extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = 'copy-meeting'>\n                <CopyMeetingLinkSection url = { this.props.url } />\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const { enableAutomaticUrlCopy } = state['features/base/config'];\n    const { customizationReady } = state['features/dynamic-branding'];\n\n    return {\n        url: customizationReady ? getCurrentConferenceUrl(state) : '',\n        _enableAutomaticUrlCopy: enableAutomaticUrlCopy || false\n    };\n}\n\nexport default connect(mapStateToProps)(translate(CopyMeetingUrl));\n","// @flow\n\nimport React from 'react';\n\nimport { Video } from '../../../media';\nimport { connect } from '../../../redux';\nimport { getLocalVideoTrack } from '../../../tracks';\n\nexport type Props = {\n\n    /**\n     * Flag controlling whether the video should be flipped or not.\n     */\n    flipVideo: boolean,\n\n    /**\n     * Flag signaling the visibility of camera preview.\n     */\n    videoMuted: boolean,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    videoTrack: ?Object,\n};\n\n/**\n * Component showing the video preview and device status.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nfunction Preview(props: Props) {\n    const { videoMuted, videoTrack, flipVideo } = props;\n    const className = flipVideo ? 'flipVideoX' : '';\n\n    if (!videoMuted && videoTrack) {\n        return (\n            <div id = 'preview'>\n                <Video\n                    className = { className }\n                    videoTrack = {{ jitsiTrack: videoTrack }} />\n            </div>\n        );\n    }\n\n    return null;\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    return {\n        flipVideo: state['features/base/settings'].localFlipX,\n        videoMuted: ownProps.videoTrack ? ownProps.videoMuted : state['features/base/media'].video.muted,\n        videoTrack: ownProps.videoTrack || (getLocalVideoTrack(state['features/base/tracks']) || {}).jitsiTrack\n    };\n}\n\nexport default connect(_mapStateToProps)(Preview);\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { AudioSettingsButton, VideoSettingsButton } from '../../../../toolbox/components/web';\nimport { VideoBackgroundButton } from '../../../../virtual-background';\nimport { checkBlurSupport } from '../../../../virtual-background/functions';\nimport { Avatar } from '../../../avatar';\nimport { allowUrlSharing } from '../../functions';\n\nimport ConnectionStatus from './ConnectionStatus';\nimport CopyMeetingUrl from './CopyMeetingUrl';\nimport Preview from './Preview';\n\ntype Props = {\n\n    /**\n     * Children component(s) to be rendered on the screen.\n     */\n    children: React$Node,\n\n    /**\n     * Footer to be rendered for the page (if any).\n     */\n    footer?: React$Node,\n\n    /**\n     * The name of the participant.\n     */\n    name?: string,\n\n    /**\n     * Indicates whether the copy url button should be shown\n     */\n    showCopyUrlButton: boolean,\n\n    /**\n     * Indicates whether the avatar should be shown when video is off\n     */\n    showAvatar: boolean,\n\n    /**\n     * Indicates whether the label and copy url action should be shown\n     */\n    showConferenceInfo: boolean,\n\n    /**\n     * Title of the screen.\n     */\n    title: string,\n\n    /**\n     * The 'Skip prejoin' button to be rendered (if any).\n     */\n     skipPrejoinButton?: React$Node,\n\n    /**\n     * True if the preview overlay should be muted, false otherwise.\n     */\n    videoMuted?: boolean,\n\n    /**\n     * The video track to render as preview (if omitted, the default local track will be rendered).\n     */\n    videoTrack?: Object,\n\n    /**\n     * Array with the buttons which this Toolbox should display.\n     */\n    visibleButtons?: Array<string>\n}\n\n/**\n * Implements a pre-meeting screen that can be used at various pre-meeting phases, for example\n * on the prejoin screen (pre-connection) or lobby (post-connection).\n */\nexport default class PreMeetingScreen extends PureComponent<Props> {\n    /**\n     * Default values for {@code Prejoin} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        showAvatar: true,\n        showCopyUrlButton: true,\n        showConferenceInfo: true\n    };\n\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            name,\n            showAvatar,\n            showConferenceInfo,\n            showCopyUrlButton,\n            title,\n            videoMuted,\n            videoTrack,\n            visibleButtons\n        } = this.props;\n        const showSharingButton = allowUrlSharing() && showCopyUrlButton;\n\n        return (\n            <div\n                className = 'premeeting-screen'\n                id = 'lobby-screen'>\n                <ConnectionStatus />\n                <Preview\n                    videoMuted = { videoMuted }\n                    videoTrack = { videoTrack } />\n                <div className = 'content'>\n                    {showAvatar && videoMuted && (\n                        <Avatar\n                            className = 'premeeting-screen-avatar'\n                            displayName = { name }\n                            dynamicColor = { false }\n                            participantId = 'local'\n                            size = { 80 } />\n                    )}\n                    {showConferenceInfo && (\n                        <>\n                            <h1 className = 'title'>\n                                { title }\n                            </h1>\n                            {showSharingButton ? <CopyMeetingUrl /> : null}\n                        </>\n                    )}\n                    { this.props.children }\n                    <div className = 'media-btn-container'>\n                        <div className = 'toolbox-content'>\n                            <div className = 'toolbox-content-items'>\n                                <AudioSettingsButton visible = { true } />\n                                <VideoSettingsButton visible = { true } />\n                                { ((visibleButtons && visibleButtons.includes('select-background'))\n                                   || (visibleButtons && visibleButtons.includes('videobackgroundblur')))\n                                   && <VideoBackgroundButton visible = { checkBlurSupport() } /> }\n                            </div>\n                        </div>\n                    </div>\n                    { this.props.skipPrejoinButton }\n                    { this.props.footer }\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { Icon, IconCheck } from '../../../icons';\n\nconst mainClass = 'toggle-button';\n\ntype Props = {\n\n    /**\n     * Text of the button.\n     */\n    children: React$Node,\n\n    /**\n     * If the button is toggled or not.\n     */\n    isToggled?: boolean,\n\n    /**\n     * OnClick button handler.\n     */\n    onClick: Function\n}\n\n/**\n * Button used as a toggle.\n *\n * @returns {ReactElement}\n */\nfunction ToggleButton({ children, isToggled, onClick }: Props) {\n    const className = isToggled ? `${mainClass} ${mainClass}--toggled` : mainClass;\n\n    const onKeyPressHandler = useCallback(e => {\n        if (onClick && (e.key === ' ')) {\n            e.preventDefault();\n            onClick();\n        }\n    }, [ onClick ]);\n\n    return (\n        <div\n            aria-checked = { isToggled }\n            className = { className }\n            id = 'toggle-button'\n            onClick = { onClick }\n            onKeyPress = { onKeyPressHandler }\n            role = 'switch'\n            tabIndex = { 0 }>\n            <div className = 'toggle-button-container'>\n                <div className = 'toggle-button-icon-container'>\n                    <Icon\n                        className = 'toggle-button-icon'\n                        size = { 10 }\n                        src = { IconCheck } />\n                </div>\n                <label htmlFor = 'toggle-button'>{children}</label>\n            </div>\n        </div>\n    );\n}\n\nexport default ToggleButton;\n","// @flow\nimport { SHOW_CONNECTION_INFO } from '../base/connection/actionTypes';\n\nexport * from './actions.any';\n\n/**\n * Sets whether to render the connnection status info into the Popover of the thumbnail or the context menu buttons.\n *\n * @param {boolean} showConnectionInfo - Whether it should show the connection\n * info or the context menu buttons on thumbnail popover.\n * @returns {Object}\n */\nexport function renderConnectionStatus(showConnectionInfo: boolean) {\n    return {\n        type: SHOW_CONNECTION_INFO,\n        showConnectionInfo\n    };\n}\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport React from 'react';\nvar defaultOptions = {\n  bindI18n: 'languageChanging languageChanged',\n  bindI18nStore: '',\n  // nsMode: 'fallback' // loop through all namespaces given to hook, HOC, render prop for key lookup\n  transEmptyNodeValue: '',\n  transSupportBasicHtmlNodes: true,\n  transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n  // hashTransKey: key => key // calculate a key for Trans component based on defaultValue\n  useSuspense: true\n};\nvar i18nInstance;\nvar hasUsedI18nextProvider;\nexport var I18nContext = React.createContext();\nexport function usedI18nextProvider(used) {\n  hasUsedI18nextProvider = used;\n}\nexport function getHasUsedI18nextProvider() {\n  return hasUsedI18nextProvider;\n}\nexport function setDefaults() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  defaultOptions = _objectSpread({}, defaultOptions, options);\n}\nexport function getDefaults() {\n  return defaultOptions;\n}\nexport var ReportNamespaces =\n/*#__PURE__*/\nfunction () {\n  function ReportNamespaces() {\n    _classCallCheck(this, ReportNamespaces);\n\n    this.usedNamespaces = {};\n  }\n\n  _createClass(ReportNamespaces, [{\n    key: \"addUsedNamespaces\",\n    value: function addUsedNamespaces(namespaces) {\n      var _this = this;\n\n      namespaces.forEach(function (ns) {\n        if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n      });\n    }\n  }, {\n    key: \"getUsedNamespaces\",\n    value: function getUsedNamespaces() {\n      return Object.keys(this.usedNamespaces);\n    }\n  }]);\n\n  return ReportNamespaces;\n}();\nexport function setI18n(instance) {\n  i18nInstance = instance;\n}\nexport function getI18n() {\n  return i18nInstance;\n}\nexport var initReactI18next = {\n  type: '3rdParty',\n  init: function init(instance) {\n    setDefaults(instance.options.react);\n    setI18n(instance);\n  }\n};\nexport function composeInitialProps(ForComponent) {\n  return function (ctx) {\n    return new Promise(function (resolve) {\n      var i18nInitialProps = getInitialProps();\n\n      if (ForComponent.getInitialProps) {\n        ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n          resolve(_objectSpread({}, componentsInitialProps, i18nInitialProps));\n        });\n      } else {\n        resolve(i18nInitialProps);\n      }\n    });\n  }; // Avoid async for now - so we do not need to pull in regenerator\n  // return async ctx => {\n  //   const componentsInitialProps = ForComponent.getInitialProps\n  //     ? await ForComponent.getInitialProps(ctx)\n  //     : {};\n  //   const i18nInitialProps = getInitialProps();\n  //   return {\n  //     ...componentsInitialProps,\n  //     ...i18nInitialProps,\n  //   };\n  // };\n}\nexport function getInitialProps() {\n  var i18n = getI18n();\n  var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n  var ret = {};\n  var initialI18nStore = {};\n  i18n.languages.forEach(function (l) {\n    initialI18nStore[l] = {};\n    namespaces.forEach(function (ns) {\n      initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n    });\n  });\n  ret.initialI18nStore = initialI18nStore;\n  ret.initialLanguage = i18n.language;\n  return ret;\n}","export function warn() {\n  if (console && console.warn) {\n    var _console;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n    (_console = console).warn.apply(_console, args);\n  }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n  if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n  warn.apply(void 0, args);\n} // not needed right now\n//\n// export function deprecated(...args) {\n//   if (process && process.env && (!process.env.NODE_ENV || process.env.NODE_ENV === 'development')) {\n//     if (typeof args[0] === 'string') args[0] = `deprecation warning -> ${args[0]}`;\n//     warnOnce(...args);\n//   }\n// }\n\nexport function loadNamespaces(i18n, ns, cb) {\n  i18n.loadNamespaces(ns, function () {\n    // delay ready if not yet initialized i18n instance\n    if (i18n.isInitialized) {\n      cb();\n    } else {\n      var initialized = function initialized() {\n        // due to emitter removing issue in i18next we need to delay remove\n        setTimeout(function () {\n          i18n.off('initialized', initialized);\n        }, 0);\n        cb();\n      };\n\n      i18n.on('initialized', initialized);\n    }\n  });\n}\nexport function hasLoadedNamespace(ns, i18n) {\n  if (!i18n.languages || !i18n.languages.length) {\n    warnOnce('i18n.languages were undefined or empty', i18n.languages);\n    return true;\n  }\n\n  var lng = i18n.languages[0];\n  var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n  var lastLng = i18n.languages[i18n.languages.length - 1]; // we're in cimode so this shall pass\n\n  if (lng.toLowerCase() === 'cimode') return true;\n\n  var loadNotPending = function loadNotPending(l, n) {\n    var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n    return loadState === -1 || loadState === 2;\n  }; // loaded -> SUCCESS\n\n\n  if (i18n.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS\n\n  if (!i18n.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS\n\n  if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n  return false;\n}\nexport function getDisplayName(Component) {\n  return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport { useState, useEffect, useContext } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, getHasUsedI18nextProvider, I18nContext } from './context';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';\nexport function useTranslation(ns) {\n  var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // assert we have the needed i18nInstance\n  var i18nFromProps = props.i18n;\n\n  var _ref = getHasUsedI18nextProvider() ? useContext(I18nContext) || {} : {},\n      i18nFromContext = _ref.i18n,\n      defaultNSFromContext = _ref.defaultNS;\n\n  var i18n = i18nFromProps || i18nFromContext || getI18n();\n  if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n  if (!i18n) {\n    warnOnce('You will need pass in an i18next instance by using initReactI18next');\n    var retNotReady = [function (k) {\n      return k;\n    }, {}, true];\n\n    retNotReady.t = function (k) {\n      return k;\n    };\n\n    retNotReady.i18n = {};\n    retNotReady.ready = true;\n    return retNotReady;\n  }\n\n  var i18nOptions = _objectSpread({}, getDefaults(), i18n.options.react);\n\n  var _props$useSuspense = props.useSuspense,\n      useSuspense = _props$useSuspense === void 0 ? i18nOptions.useSuspense : _props$useSuspense; // prepare having a namespace\n\n  var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n  namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; // report namespaces as used\n\n  if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); // are we ready? yes if all namespaces in first language are loaded already (either with data or empty object on failed load)\n\n  var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n    return hasLoadedNamespace(n, i18n);\n  }); // binding t function to namespace (acts also as rerender trigger)\n\n  function getT() {\n    return {\n      t: i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0])\n    };\n  }\n\n  var _useState = useState(getT()),\n      _useState2 = _slicedToArray(_useState, 2),\n      t = _useState2[0],\n      setT = _useState2[1]; // seems we can't have functions as value -> wrap it in obj\n\n\n  useEffect(function () {\n    var isMounted = true;\n    var bindI18n = i18nOptions.bindI18n,\n        bindI18nStore = i18nOptions.bindI18nStore; // if not ready and not using suspense load the namespaces\n    // in side effect and do not call resetT if unmounted\n\n    if (!ready && !useSuspense) {\n      loadNamespaces(i18n, namespaces, function () {\n        if (isMounted) setT(getT());\n      });\n    }\n\n    function boundReset() {\n      if (isMounted) setT(getT());\n    } // bind events to trigger change, like languageChanged\n\n\n    if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n    if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); // unbinding on unmount\n\n    return function () {\n      isMounted = false;\n      if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n        return i18n.off(e, boundReset);\n      });\n      if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n        return i18n.store.off(e, boundReset);\n      });\n    };\n  }, [namespaces.join()]); // re-run effect whenever list of namespaces changes\n\n  var ret = [t.t, i18n, ready];\n  ret.t = t.t;\n  ret.i18n = i18n;\n  ret.ready = ready; // return hook stuff if ready\n\n  if (ready) return ret; // not yet loaded namespaces -> load them -> and return if useSuspense option set false\n\n  if (!ready && !useSuspense) return ret; // not yet loaded namespaces -> load them -> and trigger suspense\n\n  throw new Promise(function (resolve) {\n    loadNamespaces(i18n, namespaces, function () {\n      setT(getT());\n      resolve();\n    });\n  });\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport React from 'react';\nimport { useTranslation } from './useTranslation';\nimport { getDisplayName } from './utils';\nexport function withTranslation(ns) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function Extend(WrappedComponent) {\n    function I18nextWithTranslation(props, ref) {\n      var _useTranslation = useTranslation(ns, props),\n          _useTranslation2 = _slicedToArray(_useTranslation, 3),\n          t = _useTranslation2[0],\n          i18n = _useTranslation2[1],\n          ready = _useTranslation2[2];\n\n      var passDownProps = _objectSpread({}, props, {\n        t: t,\n        i18n: i18n,\n        tReady: ready\n      });\n\n      if (options.withRef && ref) {\n        passDownProps.ref = ref;\n      }\n\n      return React.createElement(WrappedComponent, passDownProps);\n    }\n\n    I18nextWithTranslation.displayName = \"withI18nextTranslation(\".concat(getDisplayName(WrappedComponent), \")\");\n    I18nextWithTranslation.WrappedComponent = WrappedComponent;\n    return options.withRef ? React.forwardRef(I18nextWithTranslation) : I18nextWithTranslation;\n  };\n}","import React from 'react';\nimport { I18nContext, usedI18nextProvider } from './context';\nexport function I18nextProvider(_ref) {\n  var i18n = _ref.i18n,\n      defaultNS = _ref.defaultNS,\n      children = _ref.children;\n  usedI18nextProvider(true);\n  return React.createElement(I18nContext.Provider, {\n    value: {\n      i18n: i18n,\n      defaultNS: defaultNS\n    }\n  }, children);\n}","// @flow\n\nimport { PureComponent } from 'react';\n\nexport type Props = {\n\n    /**\n     * Color of the (initials based) avatar, if needed.\n     */\n    color?: string,\n\n    /**\n     * Initials to be used to render the initials based avatars.\n     */\n    initials?: string,\n\n    /**\n     * Callback to signal the failure of the loading of the URL.\n     */\n    onAvatarLoadError?: Function,\n\n    /**\n     * Expected size of the avatar.\n     */\n    size?: number;\n\n    /**\n     * The URL of the avatar to render.\n     */\n    url?: ?string | Object\n};\n\n/**\n * Implements an abstract stateless avatar component that renders an avatar purely from what gets passed through\n * props.\n */\nexport default class AbstractStatelessAvatar<P: Props> extends PureComponent<P> {\n    /**\n     * Checks if the passed prop is a loaded icon or not.\n     *\n     * @param {string? | Object?} iconProp - The prop to check.\n     * @returns {boolean}\n     */\n    _isIcon(iconProp: ?string | ?Object): boolean {\n        return Boolean(iconProp) && (typeof iconProp === 'object' || typeof iconProp === 'function');\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Icon } from '../../../icons';\nimport AbstractStatelessAvatar, { type Props as AbstractProps } from '../AbstractStatelessAvatar';\n\ntype Props = AbstractProps & {\n\n    /**\n     * External class name passed through props.\n     */\n    className?: string,\n\n    /**\n     * The default avatar URL if we want to override the app bundled one (e.g. AlwaysOnTop)\n     */\n    defaultAvatar?: string,\n\n    /**\n     * ID of the component to be rendered.\n     */\n    id?: string,\n\n    /**\n     * One of the expected status strings (e.g. 'available') to render a badge on the avatar, if necessary.\n     */\n    status?: ?string,\n\n    /**\n     * TestId of the element, if any.\n     */\n    testId?: string\n};\n\n/**\n * Implements a stateless avatar component that renders an avatar purely from what gets passed through\n * props.\n */\nexport default class StatelessAvatar extends AbstractStatelessAvatar<Props> {\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { initials, url } = this.props;\n\n        if (this._isIcon(url)) {\n            return (\n                <div\n                    className = { `${this._getAvatarClassName()} ${this._getBadgeClassName()}` }\n                    data-testid = { this.props.testId }\n                    id = { this.props.id }\n                    style = { this._getAvatarStyle(this.props.color) }>\n                    <Icon\n                        size = '50%'\n                        src = { url } />\n                </div>\n            );\n        }\n\n        if (url) {\n            return (\n                <div className = { this._getBadgeClassName() }>\n                    <img\n                        alt = 'avatar'\n                        className = { this._getAvatarClassName() }\n                        data-testid = { this.props.testId }\n                        id = { this.props.id }\n                        onError = { this.props.onAvatarLoadError }\n                        src = { url }\n                        style = { this._getAvatarStyle() } />\n                </div>\n            );\n        }\n\n        if (initials) {\n            return (\n                <div\n                    className = { `${this._getAvatarClassName()} ${this._getBadgeClassName()}` }\n                    data-testid = { this.props.testId }\n                    id = { this.props.id }\n                    style = { this._getAvatarStyle(this.props.color) }>\n                    <svg\n                        className = 'avatar-svg'\n                        viewBox = '0 0 100 100'\n                        xmlns = 'http://www.w3.org/2000/svg'\n                        xmlnsXlink = 'http://www.w3.org/1999/xlink'>\n                        <text\n                            dominantBaseline = 'central'\n                            fill = 'rgba(255,255,255,1)'\n                            fontSize = '40pt'\n                            textAnchor = 'middle'\n                            x = '50'\n                            y = '50'>\n                            { initials }\n                        </text>\n                    </svg>\n                </div>\n            );\n        }\n\n        // default avatar\n        return (\n            <div className = { this._getBadgeClassName() }>\n                <img\n                    alt = 'avatar'\n                    className = { this._getAvatarClassName('defaultAvatar') }\n                    data-testid = { this.props.testId }\n                    id = { this.props.id }\n                    src = { this.props.defaultAvatar || 'images/avatar.png' }\n                    style = { this._getAvatarStyle() } />\n            </div>\n        );\n    }\n\n    /**\n     * Constructs a style object to be used on the avatars.\n     *\n     * @param {string?} color - The desired background color.\n     * @returns {Object}\n     */\n    _getAvatarStyle(color) {\n        const { size } = this.props;\n\n        return {\n            background: color || undefined,\n            fontSize: size ? size * 0.5 : '180%',\n            height: size || '100%',\n            width: size || '100%'\n        };\n    }\n\n    /**\n     * Constructs a list of class names required for the avatar component.\n     *\n     * @param {string} additional - Any additional class to add.\n     * @returns {string}\n     */\n    _getAvatarClassName(additional) {\n        return `avatar ${additional || ''} ${this.props.className || ''}`;\n    }\n\n    /**\n     * Generates a class name to render a badge on the avatar, if necessary.\n     *\n     * @returns {string}\n     */\n    _getBadgeClassName() {\n        const { status } = this.props;\n\n        if (status) {\n            return `avatar-badge avatar-badge-${status}`;\n        }\n\n        return '';\n    }\n\n    _isIcon: (?string | ?Object) => boolean\n}\n","// @flow\n\nimport _ from 'lodash';\n\nconst AVATAR_COLORS = [\n    '232, 105, 156',\n    '255, 198, 115',\n    '128, 128, 255',\n    '105, 232, 194',\n    '234, 255, 128'\n];\n\nconst AVATAR_OPACITY = 0.4;\n\n/**\n * Generates the background color of an initials based avatar.\n *\n * @param {string?} initials - The initials of the avatar.\n * @param {Array<strig>} customAvatarBackgrounds - Custom avatar background values.\n * @returns {string}\n */\nexport function getAvatarColor(initials: ?string, customAvatarBackgrounds: Array<string>) {\n    const hasCustomAvatarBackgronds = customAvatarBackgrounds && customAvatarBackgrounds.length;\n    const colorsBase = hasCustomAvatarBackgronds ? customAvatarBackgrounds : AVATAR_COLORS;\n\n    let colorIndex = 0;\n\n    if (initials) {\n        let nameHash = 0;\n\n        for (const s of initials) {\n            nameHash += s.codePointAt(0);\n        }\n\n        colorIndex = nameHash % colorsBase.length;\n    }\n\n    return hasCustomAvatarBackgronds ? colorsBase[colorIndex] : `rgba(${colorsBase[colorIndex]}, ${AVATAR_OPACITY})`;\n}\n\n/**\n * Generates initials for a simple string.\n *\n * @param {string?} s - The string to generate initials for.\n * @returns {string?}\n */\nexport function getInitials(s: ?string) {\n    // We don't want to use the domain part of an email address, if it is one\n    const initialsBasis = _.split(s, '@')[0];\n    const words = _.words(initialsBasis);\n    let initials = '';\n\n    for (const w of words) {\n        (initials.length < 2) && (initials += w.substr(0, 1).toUpperCase());\n    }\n\n    return initials;\n}\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { getParticipantById } from '../../participants';\nimport { connect } from '../../redux';\nimport { getAvatarColor, getInitials } from '../functions';\n\nimport { StatelessAvatar } from '.';\n\nexport type Props = {\n\n    /**\n     * Custom avatar backgrounds from branding.\n     */\n    _customAvatarBackgrounds: Array<string>,\n\n    /**\n     * The string we base the initials on (this is generated from a list of precedences).\n     */\n    _initialsBase: ?string,\n\n    /**\n     * An URL that we validated that it can be loaded.\n     */\n    _loadableAvatarUrl: ?string,\n\n    /**\n     * A prop to maintain compatibility with web.\n     */\n    className?: string,\n\n    /**\n     * A string to override the initials to generate a color of. This is handy if you don't want to make\n     * the background color match the string that the initials are generated from.\n     */\n    colorBase?: string,\n\n    /**\n     * Display name of the entity to render an avatar for (if any). This is handy when we need\n     * an avatar for a non-participasnt entity (e.g. a recent list item).\n     */\n    displayName?: string,\n\n    /**\n     * Whether or not to update the background color of the avatar\n     */\n    dynamicColor?: Boolean,\n\n    /**\n     * ID of the element, if any.\n     */\n    id?: string,\n\n    /**\n     * The ID of the participant to render an avatar for (if it's a participant avatar).\n     */\n    participantId?: string,\n\n    /**\n     * The size of the avatar.\n     */\n    size: number,\n\n    /**\n     * One of the expected status strings (e.g. 'available') to render a badge on the avatar, if necessary.\n     */\n    status?: ?string,\n\n    /**\n     * TestId of the element, if any.\n     */\n    testId?: string,\n\n    /**\n     * URL of the avatar, if any.\n     */\n    url: ?string,\n}\n\ntype State = {\n    avatarFailed: boolean\n}\n\nexport const DEFAULT_SIZE = 65;\n\n/**\n * Implements a class to render avatars in the app.\n */\nclass Avatar<P: Props> extends PureComponent<P, State> {\n    /**\n     * Default values for {@code Avatar} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        dynamicColor: true\n    };\n\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            avatarFailed: false\n        };\n\n        this._onAvatarLoadError = this._onAvatarLoadError.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        if (prevProps.url !== this.props.url) {\n\n            // URI changed, so we need to try to fetch it again.\n            // Eslint doesn't like this statement, but based on the React doc, it's safe if it's\n            // wrapped in a condition: https://reactjs.org/docs/react-component.html#componentdidupdate\n\n            // eslint-disable-next-line react/no-did-update-set-state\n            this.setState({\n                avatarFailed: false\n            });\n        }\n    }\n\n    /**\n     * Implements {@code Componenr#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            _customAvatarBackgrounds,\n            _initialsBase,\n            _loadableAvatarUrl,\n            className,\n            colorBase,\n            dynamicColor,\n            id,\n            size,\n            status,\n            testId,\n            url\n        } = this.props;\n        const { avatarFailed } = this.state;\n\n        const avatarProps = {\n            className,\n            color: undefined,\n            id,\n            initials: undefined,\n            onAvatarLoadError: undefined,\n            size,\n            status,\n            testId,\n            url: undefined\n        };\n\n        // _loadableAvatarUrl is validated that it can be loaded, but uri (if present) is not, so\n        // we still need to do a check for that. And an explicitly provided URI is higher priority than\n        // an avatar URL anyhow.\n        const effectiveURL = (!avatarFailed && url) || _loadableAvatarUrl;\n\n        if (effectiveURL) {\n            avatarProps.onAvatarLoadError = this._onAvatarLoadError;\n            avatarProps.url = effectiveURL;\n        }\n\n        const initials = getInitials(_initialsBase);\n\n        if (initials) {\n            if (dynamicColor) {\n                avatarProps.color = getAvatarColor(colorBase || _initialsBase, _customAvatarBackgrounds);\n            }\n\n            avatarProps.initials = initials;\n        }\n\n        return (\n            <StatelessAvatar\n                { ...avatarProps } />\n        );\n    }\n\n    _onAvatarLoadError: () => void;\n\n    /**\n     * Callback to handle the error while loading of the avatar URI.\n     *\n     * @returns {void}\n     */\n    _onAvatarLoadError() {\n        this.setState({\n            avatarFailed: true\n        });\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { colorBase, displayName, participantId } = ownProps;\n    const _participant: ?Object = participantId && getParticipantById(state, participantId);\n    const _initialsBase = _participant?.name ?? displayName;\n\n    return {\n        _customAvatarBackgrounds: state['features/dynamic-branding'].avatarBackgrounds,\n        _initialsBase,\n        _loadableAvatarUrl: _participant?.loadableAvatarUrl,\n        colorBase: !colorBase && _participant ? _participant.id : colorBase\n    };\n}\n\nexport default connect(_mapStateToProps)(Avatar);\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\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\n  return target;\n}","// @flow\n\nimport { openDialog } from '../base/dialog';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { getParticipantDisplayName, getPinnedParticipant, pinParticipant } from '../base/participants';\nimport { getLocalVideoTrack } from '../base/tracks';\nimport { showNotification } from '../notifications';\n\nimport {\n    CAPTURE_EVENTS,\n    REMOTE_CONTROL_ACTIVE,\n    SET_REQUESTED_PARTICIPANT,\n    SET_CONTROLLER,\n    SET_RECEIVER_ENABLED,\n    SET_RECEIVER_TRANSPORT,\n    SET_CONTROLLED_PARTICIPANT\n} from './actionTypes';\nimport { RemoteControlAuthorizationDialog } from './components';\nimport {\n    DISCO_REMOTE_CONTROL_FEATURE,\n    EVENTS,\n    REMOTE_CONTROL_MESSAGE_NAME,\n    PERMISSIONS_ACTIONS,\n    REQUESTS\n} from './constants';\nimport {\n    getKey,\n    getModifiers,\n    getRemoteConrolEventCaptureArea,\n    isRemoteControlEnabled,\n    sendRemoteControlEndpointMessage\n} from './functions';\nimport logger from './logger';\n\n/**\n * Listeners.\n */\nlet permissionsReplyListener, receiverEndpointMessageListener, stopListener;\n\ndeclare var APP: Object;\ndeclare var $: Function;\n\n/**\n * Signals that the remote control authorization dialog should be displayed.\n *\n * @param {string} participantId - The id of the participant who is requesting\n * the authorization.\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: {RemoteControlAuthorizationDialog},\n *     componentProps: {\n *         participantId: {string}\n *      }\n * }}\n * @public\n */\nexport function openRemoteControlAuthorizationDialog(participantId: string) {\n    return openDialog(RemoteControlAuthorizationDialog, { participantId });\n}\n\n/**\n * Sets the remote control active property.\n *\n * @param {boolean} active - The new value for the active property.\n * @returns {Function}\n */\nexport function setRemoteControlActive(active: boolean) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { active: oldActive } = state['features/remote-control'];\n        const { conference } = state['features/base/conference'];\n\n        if (active !== oldActive) {\n            dispatch({\n                type: REMOTE_CONTROL_ACTIVE,\n                active\n            });\n            conference.setLocalParticipantProperty('remoteControlSessionStatus', active);\n        }\n    };\n}\n\n/**\n * Requests permissions from the remote control receiver side.\n *\n * @param {string} userId - The user id of the participant that will be\n * requested.\n * @returns {Function}\n */\nexport function requestRemoteControl(userId: string) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const enabled = isRemoteControlEnabled(state);\n\n        if (!enabled) {\n            return Promise.reject(new Error('Remote control is disabled!'));\n        }\n\n        dispatch(setRemoteControlActive(true));\n\n        logger.log(`Requsting remote control permissions from: ${userId}`);\n\n        const { conference } = state['features/base/conference'];\n\n\n        permissionsReplyListener = (participant, event) => {\n            dispatch(processPermissionRequestReply(participant.getId(), event));\n        };\n\n        conference.on(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, permissionsReplyListener);\n\n        dispatch({\n            type: SET_REQUESTED_PARTICIPANT,\n            requestedParticipant: userId\n        });\n\n        if (!sendRemoteControlEndpointMessage(\n            conference,\n            userId,\n            {\n                type: EVENTS.permissions,\n                action: PERMISSIONS_ACTIONS.request\n            })) {\n            dispatch(clearRequest());\n        }\n    };\n}\n\n/**\n * Handles permission request replies on the controller side.\n *\n * @param {string} participantId - The participant that sent the request.\n * @param {EndpointMessage} event - The permission request event.\n * @returns {Function}\n */\nexport function processPermissionRequestReply(participantId: string, event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { action, name, type } = event;\n        const { requestedParticipant } = state['features/remote-control'].controller;\n\n        if (isRemoteControlEnabled(state) && name === REMOTE_CONTROL_MESSAGE_NAME && type === EVENTS.permissions\n                && participantId === requestedParticipant) {\n            let descriptionKey, permissionGranted = false;\n\n            switch (action) {\n            case PERMISSIONS_ACTIONS.grant: {\n                dispatch({\n                    type: SET_CONTROLLED_PARTICIPANT,\n                    controlled: participantId\n                });\n\n                logger.log('Remote control permissions granted!', participantId);\n                logger.log('Starting remote control controller.');\n\n                const { conference } = state['features/base/conference'];\n\n                stopListener = (participant, stopEvent) => {\n                    dispatch(handleRemoteControlStoppedEvent(participant.getId(), stopEvent));\n                };\n\n                conference.on(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, stopListener);\n\n                dispatch(resume());\n\n                permissionGranted = true;\n                descriptionKey = 'dialog.remoteControlAllowedMessage';\n                break;\n            }\n            case PERMISSIONS_ACTIONS.deny:\n                logger.log('Remote control permissions denied!', participantId);\n                descriptionKey = 'dialog.remoteControlDeniedMessage';\n                break;\n            case PERMISSIONS_ACTIONS.error:\n                logger.error('Error occurred on receiver side');\n                descriptionKey = 'dialog.remoteControlErrorMessage';\n                break;\n            default:\n                logger.error('Unknown reply received!');\n                descriptionKey = 'dialog.remoteControlErrorMessage';\n            }\n\n            dispatch(clearRequest());\n\n            if (!permissionGranted) {\n                dispatch(setRemoteControlActive(false));\n            }\n\n            dispatch(showNotification({\n                descriptionArguments: { user: getParticipantDisplayName(state, participantId) },\n                descriptionKey,\n                titleKey: 'dialog.remoteControlTitle'\n            }));\n\n            if (permissionGranted) {\n                // the remote control permissions has been granted\n                // pin the controlled participant\n                const pinnedParticipant = getPinnedParticipant(state);\n                const pinnedId = pinnedParticipant?.id;\n\n                if (pinnedId !== participantId) {\n                    dispatch(pinParticipant(participantId));\n                }\n            }\n        } else {\n            // different message type or another user -> ignoring the message\n        }\n    };\n}\n\n/**\n * Handles remote control stopped.\n *\n * @param {string} participantId - The ID of the participant that has sent the event.\n * @param {EndpointMessage} event - EndpointMessage event from the data channels.\n * @property {string} type - The function process only events with name REMOTE_CONTROL_MESSAGE_NAME.\n * @returns {void}\n */\nexport function handleRemoteControlStoppedEvent(participantId: Object, event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { name, type } = event;\n        const { controlled } = state['features/remote-control'].controller;\n\n        if (isRemoteControlEnabled(state) && name === REMOTE_CONTROL_MESSAGE_NAME && type === EVENTS.stop\n                && participantId === controlled) {\n            dispatch(stopController());\n        }\n    };\n}\n\n/**\n * Stops processing the mouse and keyboard events. Removes added listeners.\n * Enables the keyboard shortcuts. Displays dialog to notify the user that remote control session has ended.\n *\n * @param {boolean} notifyRemoteParty - If true a endpoint message to the controlled participant will be sent.\n * @returns {void}\n */\nexport function stopController(notifyRemoteParty: boolean = false) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { controlled } = state['features/remote-control'].controller;\n\n        if (!controlled) {\n            return;\n        }\n\n        const { conference } = state['features/base/conference'];\n\n        if (notifyRemoteParty) {\n            sendRemoteControlEndpointMessage(conference, controlled, {\n                type: EVENTS.stop\n            });\n        }\n\n        logger.log('Stopping remote control controller.');\n\n        conference.off(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, stopListener);\n        stopListener = undefined;\n\n        dispatch(pause());\n\n        dispatch({\n            type: SET_CONTROLLED_PARTICIPANT,\n            controlled: undefined\n        });\n\n        dispatch(setRemoteControlActive(false));\n        dispatch(showNotification({\n            descriptionKey: 'dialog.remoteControlStopMessage',\n            titleKey: 'dialog.remoteControlTitle'\n        }));\n    };\n}\n\n/**\n * Clears a pending permission request.\n *\n * @returns {Function}\n */\nexport function clearRequest() {\n    return (dispatch: Function, getState: Function) => {\n        const { conference } = getState()['features/base/conference'];\n\n        dispatch({\n            type: SET_REQUESTED_PARTICIPANT,\n            requestedParticipant: undefined\n        });\n\n        conference.off(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, permissionsReplyListener);\n        permissionsReplyListener = undefined;\n    };\n}\n\n\n/**\n * Sets that transport object that is used by the receiver to communicate with the native part of the remote control\n * implementation.\n *\n * @param {Transport} transport - The transport to be set.\n * @returns {{\n *      type: SET_RECEIVER_TRANSPORT,\n *      transport: Transport\n * }}\n */\nexport function setReceiverTransport(transport: Object) {\n    return {\n        type: SET_RECEIVER_TRANSPORT,\n        transport\n    };\n}\n\n/**\n * Enables the receiver functionality.\n *\n * @returns {Function}\n */\nexport function enableReceiver() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { enabled } = state['features/remote-control'].receiver;\n\n        if (enabled) {\n            return;\n        }\n\n        const { connection } = state['features/base/connection'];\n        const { conference } = state['features/base/conference'];\n\n        if (!connection || !conference) {\n            logger.error('Couldn\\'t enable the remote receiver! The connection or conference instance is undefined!');\n\n            return;\n        }\n\n        dispatch({\n            type: SET_RECEIVER_ENABLED,\n            enabled: true\n        });\n\n        connection.addFeature(DISCO_REMOTE_CONTROL_FEATURE, true);\n        receiverEndpointMessageListener = (participant, message) => {\n            dispatch(endpointMessageReceived(participant.getId(), message));\n        };\n        conference.on(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, receiverEndpointMessageListener);\n    };\n}\n\n/**\n * Disables the receiver functionality.\n *\n * @returns {Function}\n */\nexport function disableReceiver() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { enabled } = state['features/remote-control'].receiver;\n\n        if (!enabled) {\n            return;\n        }\n\n        const { connection } = state['features/base/connection'];\n        const { conference } = state['features/base/conference'];\n\n        if (!connection || !conference) {\n            logger.error('Couldn\\'t enable the remote receiver! The connection or conference instance is undefined!');\n\n            return;\n        }\n\n        logger.log('Remote control receiver disabled.');\n\n        dispatch({\n            type: SET_RECEIVER_ENABLED,\n            enabled: false\n        });\n\n        dispatch(stopReceiver(true));\n\n        connection.removeFeature(DISCO_REMOTE_CONTROL_FEATURE);\n        conference.off(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, receiverEndpointMessageListener);\n    };\n}\n\n/**\n * Stops a remote control session on the receiver side.\n *\n * @param {boolean} [dontNotifyLocalParty] - If true - a notification about stopping\n * the remote control won't be displayed.\n * @param {boolean} [dontNotifyRemoteParty] - If true a endpoint message to the controller participant will be sent.\n * @returns {Function}\n */\nexport function stopReceiver(dontNotifyLocalParty: boolean = false, dontNotifyRemoteParty: boolean = false) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { receiver } = state['features/remote-control'];\n        const { controller, transport } = receiver;\n\n        if (!controller) {\n            return;\n        }\n\n        const { conference } = state['features/base/conference'];\n\n        if (!dontNotifyRemoteParty) {\n            sendRemoteControlEndpointMessage(conference, controller, {\n                type: EVENTS.stop\n            });\n        }\n\n        dispatch({\n            type: SET_CONTROLLER,\n            controller: undefined\n        });\n\n        transport.sendEvent({\n            name: REMOTE_CONTROL_MESSAGE_NAME,\n            type: EVENTS.stop\n        });\n\n        dispatch(setRemoteControlActive(false));\n\n        if (!dontNotifyLocalParty) {\n            dispatch(showNotification({\n                descriptionKey: 'dialog.remoteControlStopMessage',\n                titleKey: 'dialog.remoteControlTitle'\n            }));\n        }\n    };\n}\n\n\n/**\n * Handles only remote control endpoint messages.\n *\n * @param {string} participantId - The controller participant ID.\n * @param {Object} message - EndpointMessage from the data channels.\n * @param {string} message.name - The function processes only messages with\n * name REMOTE_CONTROL_MESSAGE_NAME.\n * @returns {Function}\n */\nexport function endpointMessageReceived(participantId: string, message: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const { action, name, type } = message;\n\n        if (name !== REMOTE_CONTROL_MESSAGE_NAME) {\n            return;\n        }\n\n        const state = getState();\n        const { receiver } = state['features/remote-control'];\n        const { enabled, transport } = receiver;\n\n        if (enabled) {\n            const { controller } = receiver;\n\n            if (!controller && type === EVENTS.permissions && action === PERMISSIONS_ACTIONS.request) {\n                dispatch(setRemoteControlActive(true));\n                dispatch(openRemoteControlAuthorizationDialog(participantId));\n            } else if (controller === participantId) {\n                if (type === EVENTS.stop) {\n                    dispatch(stopReceiver(false, true));\n                } else { // forward the message\n                    transport.sendEvent(message);\n                }\n            } // else ignore\n        } else {\n            logger.log('Remote control message is ignored because remote control is disabled', message);\n        }\n    };\n}\n\n/**\n * Denies remote control access for user associated with the passed user id.\n *\n * @param {string} participantId - The id associated with the user who sent the\n * request for remote control authorization.\n * @returns {Function}\n */\nexport function deny(participantId: string) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n\n        dispatch(setRemoteControlActive(false));\n        sendRemoteControlEndpointMessage(conference, participantId, {\n            type: EVENTS.permissions,\n            action: PERMISSIONS_ACTIONS.deny\n        });\n    };\n}\n\n/**\n * Sends start remote control request to the native implementation.\n *\n * @returns {Function}\n */\nexport function sendStartRequest() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const tracks = state['features/base/tracks'];\n        const track = getLocalVideoTrack(tracks);\n        const { sourceId } = track?.jitsiTrack || {};\n        const { transport } = state['features/remote-control'].receiver;\n\n        return transport.sendRequest({\n            name: REMOTE_CONTROL_MESSAGE_NAME,\n            type: REQUESTS.start,\n            sourceId\n        });\n    };\n}\n\n/**\n * Grants remote control access to user associated with the passed user id.\n *\n * @param {string} participantId - The id associated with the user who sent the\n * request for remote control authorization.\n * @returns {Function}\n */\nexport function grant(participantId: string) {\n    return (dispatch: Function, getState: Function) => {\n        dispatch({\n            type: SET_CONTROLLER,\n            controller: participantId\n        });\n        logger.log(`Remote control permissions granted to: ${participantId}`);\n\n        let promise;\n        const state = getState();\n        const tracks = state['features/base/tracks'];\n        const track = getLocalVideoTrack(tracks);\n        const isScreenSharing = track?.videoType === 'desktop';\n        const { sourceType } = track?.jitsiTrack || {};\n\n        if (isScreenSharing && sourceType === 'screen') {\n            promise = dispatch(sendStartRequest());\n        } else {\n            // FIXME: Use action here once toggleScreenSharing is moved to redux.\n            promise = APP.conference.toggleScreenSharing(\n                true,\n                {\n                    desktopSharingSources: [ 'screen' ]\n                })\n                .then(() => dispatch(sendStartRequest()));\n        }\n\n        const { conference } = state['features/base/conference'];\n\n        promise\n            .then(() => sendRemoteControlEndpointMessage(conference, participantId, {\n                type: EVENTS.permissions,\n                action: PERMISSIONS_ACTIONS.grant\n            }))\n            .catch(error => {\n                logger.error(error);\n\n                sendRemoteControlEndpointMessage(conference, participantId, {\n                    type: EVENTS.permissions,\n                    action: PERMISSIONS_ACTIONS.error\n                });\n\n                dispatch(showNotification({\n                    descriptionKey: 'dialog.startRemoteControlErrorMessage',\n                    titleKey: 'dialog.remoteControlTitle'\n                }));\n\n                dispatch(stopReceiver(true));\n            });\n    };\n}\n\n/**\n * Handler for mouse click events on the controller side.\n *\n * @param {string} type - The type of event (\"mousedown\"/\"mouseup\").\n * @param {Event} event - The mouse event.\n * @returns {Function}\n */\nexport function mouseClicked(type: string, event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n        const { controller } = state['features/remote-control'];\n\n        sendRemoteControlEndpointMessage(conference, controller.controlled, {\n            type,\n            button: event.which\n        });\n    };\n}\n\n/**\n * Handles mouse moved events on the controller side.\n *\n * @param {Event} event - The mouse event.\n * @returns {Function}\n */\nexport function mouseMoved(event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const area = getRemoteConrolEventCaptureArea();\n\n        if (!area) {\n            return;\n        }\n\n        const position = area.position();\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n        const { controller } = state['features/remote-control'];\n\n        sendRemoteControlEndpointMessage(conference, controller.controlled, {\n            type: EVENTS.mousemove,\n            x: (event.pageX - position.left) / area.width(),\n            y: (event.pageY - position.top) / area.height()\n        });\n    };\n}\n\n/**\n * Handles mouse scroll events on the controller side.\n *\n * @param {Event} event - The mouse event.\n * @returns {Function}\n */\nexport function mouseScrolled(event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n        const { controller } = state['features/remote-control'];\n\n        sendRemoteControlEndpointMessage(conference, controller.controlled, {\n            type: EVENTS.mousescroll,\n            x: event.deltaX,\n            y: event.deltaY\n        });\n    };\n}\n\n/**\n * Handles key press events on the controller side..\n *\n * @param {string} type - The type of event (\"keydown\"/\"keyup\").\n * @param {Event} event - The key event.\n * @returns {Function}\n */\nexport function keyPressed(type: string, event: Object) {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { conference } = state['features/base/conference'];\n        const { controller } = state['features/remote-control'];\n\n        sendRemoteControlEndpointMessage(conference, controller.controlled, {\n            type,\n            key: getKey(event),\n            modifiers: getModifiers(event)\n        });\n    };\n}\n\n/**\n* Disables the keyboatd shortcuts. Starts collecting remote control\n* events. It can be used to resume an active remote control session which\n* was paused with the pause action.\n*\n* @returns {Function}\n*/\nexport function resume() {\n    return (dispatch: Function, getState: Function) => {\n        const area = getRemoteConrolEventCaptureArea();\n        const state = getState();\n        const { controller } = state['features/remote-control'];\n        const { controlled, isCapturingEvents } = controller;\n\n        if (!isRemoteControlEnabled(state) || !area || !controlled || isCapturingEvents) {\n            return;\n        }\n\n        logger.log('Resuming remote control controller.');\n\n        // FIXME: Once the keyboard shortcuts are using react/redux.\n        APP.keyboardshortcut.enable(false);\n\n        area.mousemove(event => {\n            dispatch(mouseMoved(event));\n        });\n        area.mousedown(event => dispatch(mouseClicked(EVENTS.mousedown, event)));\n        area.mouseup(event => dispatch(mouseClicked(EVENTS.mouseup, event)));\n        area.dblclick(event => dispatch(mouseClicked(EVENTS.mousedblclick, event)));\n        area.contextmenu(() => false);\n        area[0].onwheel = event => {\n            event.preventDefault();\n            event.stopPropagation();\n            dispatch(mouseScrolled(event));\n\n            return false;\n        };\n        $(window).keydown(event => dispatch(keyPressed(EVENTS.keydown, event)));\n        $(window).keyup(event => dispatch(keyPressed(EVENTS.keyup, event)));\n\n        dispatch({\n            type: CAPTURE_EVENTS,\n            isCapturingEvents: true\n        });\n    };\n}\n\n\n/**\n * Pauses the collecting of events and enables the keyboard shortcus. But\n * it doesn't removes any other listeners. Basically the remote control\n * session will be still active after the pause action, but no events from the\n * controller side will be captured and sent. You can resume the collecting\n * of the events with the resume action.\n *\n * @returns {Function}\n */\nexport function pause() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { controller } = state['features/remote-control'];\n        const { controlled, isCapturingEvents } = controller;\n\n        if (!isRemoteControlEnabled(state) || !controlled || !isCapturingEvents) {\n            return;\n        }\n\n        logger.log('Pausing remote control controller.');\n\n        // FIXME: Once the keyboard shortcuts are using react/redux.\n        APP.keyboardshortcut.enable(true);\n\n        const area = getRemoteConrolEventCaptureArea();\n\n        if (area) {\n            area.off('contextmenu');\n            area.off('dblclick');\n            area.off('mousedown');\n            area.off('mousemove');\n            area.off('mouseup');\n            area[0].onwheel = undefined;\n        }\n\n        $(window).off('keydown');\n        $(window).off('keyup');\n\n        dispatch({\n            type: CAPTURE_EVENTS,\n            isCapturingEvents: false\n        });\n    };\n}\n","// @flow\n\nimport { SET_EVERYONE_ENABLED_E2EE, SET_EVERYONE_SUPPORT_E2EE, TOGGLE_E2EE } from './actionTypes';\n\n/**\n * Dispatches an action to enable / disable E2EE.\n *\n * @param {boolean} enabled - Whether E2EE is to be enabled or not.\n * @returns {Object}\n */\nexport function toggleE2EE(enabled: boolean) {\n    return {\n        type: TOGGLE_E2EE,\n        enabled\n    };\n}\n\n/**\n * Set new value whether everyone has E2EE enabled.\n *\n * @param {boolean} everyoneEnabledE2EE - The new value.\n * @returns {{\n *     type: SET_EVERYONE_ENABLED_E2EE,\n *     everyoneEnabledE2EE: boolean\n * }}\n */\nexport function setEveryoneEnabledE2EE(everyoneEnabledE2EE: boolean) {\n    return {\n        type: SET_EVERYONE_ENABLED_E2EE,\n        everyoneEnabledE2EE\n    };\n}\n\n/**\n * Set new value whether everyone support E2EE.\n *\n * @param {boolean} everyoneSupportE2EE - The new value.\n * @returns {{\n *     type: SET_EVERYONE_SUPPORT_E2EE,\n *     everyoneSupportE2EE: boolean\n * }}\n */\nexport function setEveryoneSupportE2EE(everyoneSupportE2EE: boolean) {\n    return {\n        type: SET_EVERYONE_SUPPORT_E2EE,\n        everyoneSupportE2EE\n    };\n}\n","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? Object(arguments[i]) : {};\n    var ownKeys = Object.keys(source);\n\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\n    ownKeys.forEach(function (key) {\n      defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\nmodule.exports = _objectSpread;","/**\n * The type of a feature/internal/protected (redux) action to add an audio\n * element to the sounds collection state.\n *\n * {\n *     type: _ADD_AUDIO_ELEMENT,\n *     ref: AudioElement,\n *     soundId: string\n * }\n */\nexport const _ADD_AUDIO_ELEMENT = '_ADD_AUDIO_ELEMENT';\n\n/**\n * The type of feature/internal/protected (redux) action to remove an audio\n * element for given sound identifier from the sounds collection state.\n *\n * {\n *     type: _REMOVE_AUDIO_ELEMENT,\n *     soundId: string\n * }\n */\nexport const _REMOVE_AUDIO_ELEMENT = '_REMOVE_AUDIO_ELEMENT';\n\n/**\n * The type of (redux) action to play a sound from the sounds collection.\n *\n * {\n *     type: PLAY_SOUND,\n *     soundId: string\n * }\n */\nexport const PLAY_SOUND = 'PLAY_SOUND';\n\n/**\n * The type of (redux) action to register a new sound with the sounds\n * collection.\n *\n * {\n *     type: REGISTER_SOUND,\n *     soundId: string\n * }\n */\nexport const REGISTER_SOUND = 'REGISTER_SOUND';\n\n/**\n * The type of (redux) action to stop a sound from the sounds collection.\n *\n * {\n *     type: STOP_SOUND,\n *     soundId: string\n * }\n */\nexport const STOP_SOUND = 'STOP_SOUND';\n\n/**\n * The type of (redux) action to unregister an existing sound from the sounds\n * collection.\n *\n * {\n *     type: UNREGISTER_SOUND,\n *     soundId: string\n * }\n */\nexport const UNREGISTER_SOUND = 'UNREGISTER_SOUND';\n","// @flow\n\nimport JitsiMeetJS from '../lib-jitsi-meet';\nimport { updateSettings } from '../settings';\nimport { parseURLParams } from '../util';\n\nimport logger from './logger';\n\ndeclare var APP: Object;\n\nconst webrtcKindToJitsiKindTranslator = {\n    audioinput: 'audioInput',\n    audiooutput: 'audioOutput',\n    videoinput: 'videoInput'\n};\n\n/**\n * Detects the use case when the labels are not available if the A/V permissions\n * are not yet granted.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean} - True if the labels are already initialized and false\n * otherwise.\n */\nexport function areDeviceLabelsInitialized(state: Object) {\n    // TODO: Replace with something that doesn't use APP when the conference.js logic is reactified.\n    if (APP.conference._localTracksInitialized) {\n        return true;\n    }\n\n    for (const type of [ 'audioInput', 'audioOutput', 'videoInput' ]) {\n        if ((state['features/base/devices'].availableDevices[type] || []).find(d => Boolean(d.label))) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/**\n * Get device id of the audio output device which is currently in use.\n * Empty string stands for default device.\n *\n * @returns {string}\n */\nexport function getAudioOutputDeviceId() {\n    return JitsiMeetJS.mediaDevices.getAudioOutputDevice();\n}\n\n/**\n * Finds the real device id of the default device of the given type.\n *\n * @param {Object} state - The redux state.\n * @param {*} kind - The type of the device. One of \"audioInput\",\n * \"audioOutput\", and \"videoInput\". Also supported is all lowercase versions\n * of the preceding types.\n * @returns {string|undefined}\n */\nexport function getDefaultDeviceId(state: Object, kind: string) {\n    const kindToSearch = webrtcKindToJitsiKindTranslator[kind] || kind;\n    const defaultDevice = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n        .find(d => d.deviceId === 'default');\n\n    // Find the device with a matching group id.\n    const matchingDevice = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n        .find(d => d.deviceId !== 'default' && d.groupId === defaultDevice.groupId);\n\n    if (matchingDevice) {\n        return matchingDevice.deviceId;\n    }\n}\n\n/**\n * Finds a device with a label that matches the passed label and returns its id.\n *\n * @param {Object} state - The redux state.\n * @param {string} label - The label.\n * @param {string} kind - The type of the device. One of \"audioInput\",\n * \"audioOutput\", and \"videoInput\". Also supported is all lowercase versions\n * of the preceding types.\n * @returns {string|undefined}\n */\nexport function getDeviceIdByLabel(state: Object, label: string, kind: string) {\n    const kindToSearch = webrtcKindToJitsiKindTranslator[kind] || kind;\n\n    const device\n        = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n            .find(d => d.label === label);\n\n    if (device) {\n        return device.deviceId;\n    }\n}\n\n/**\n * Finds a device with a label that matches the passed id and returns its label.\n *\n * @param {Object} state - The redux state.\n * @param {string} id - The device id.\n * @param {string} kind - The type of the device. One of \"audioInput\",\n * \"audioOutput\", and \"videoInput\". Also supported is all lowercase versions\n * of the preceding types.\n * @returns {string|undefined}\n */\nexport function getDeviceLabelById(state: Object, id: string, kind: string) {\n    const kindToSearch = webrtcKindToJitsiKindTranslator[kind] || kind;\n\n    const device\n        = (state['features/base/devices'].availableDevices[kindToSearch] || [])\n        .find(d => d.deviceId === id);\n\n    if (device) {\n        return device.label;\n    }\n}\n\n/**\n * Returns the devices set in the URL.\n *\n * @param {Object} state - The redux state.\n * @returns {Object|undefined}\n */\nexport function getDevicesFromURL(state: Object) {\n    const urlParams\n        = parseURLParams(state['features/base/connection'].locationURL);\n\n    const audioOutput = urlParams['devices.audioOutput'];\n    const videoInput = urlParams['devices.videoInput'];\n    const audioInput = urlParams['devices.audioInput'];\n\n    if (!audioOutput && !videoInput && !audioInput) {\n        return undefined;\n    }\n\n    const devices = {};\n\n    audioOutput && (devices.audioOutput = audioOutput);\n    videoInput && (devices.videoInput = videoInput);\n    audioInput && (devices.audioInput = audioInput);\n\n    return devices;\n}\n\n/**\n * Converts an array of media devices into an object organized by device kind.\n *\n * @param {Array<MediaDeviceInfo>} devices - Available media devices.\n * @private\n * @returns {Object} An object with the media devices split by type. The keys\n * are device type and the values are arrays with devices matching the device\n * type.\n */\nexport function groupDevicesByKind(devices: Object[]): Object {\n    return {\n        audioInput: devices.filter(device => device.kind === 'audioinput'),\n        audioOutput: devices.filter(device => device.kind === 'audiooutput'),\n        videoInput: devices.filter(device => device.kind === 'videoinput')\n    };\n}\n\n/**\n * Filters audio devices from a list of MediaDeviceInfo objects.\n *\n * @param {Array<MediaDeviceInfo>} devices - Unfiltered media devices.\n * @private\n * @returns {Array<MediaDeviceInfo>} Filtered audio devices.\n */\nexport function filterAudioDevices(devices: Object[]): Object {\n    return devices.filter(device => device.kind === 'audioinput');\n}\n\n/**\n * We want to strip any device details that are not very user friendly, like usb ids put in brackets at the end.\n *\n * @param {string} label - Device label to format.\n *\n * @returns {string} - Formatted string.\n */\nexport function formatDeviceLabel(label: string) {\n\n    let formattedLabel = label;\n\n    // Remove braked description at the end as it contains non user friendly strings i.e.\n    // Microsoft® LifeCam HD-3000 (045e:0779:31dg:d1231)\n    const ix = formattedLabel.lastIndexOf('(');\n\n    if (ix !== -1) {\n        formattedLabel = formattedLabel.substr(0, ix);\n    }\n\n    return formattedLabel;\n}\n\n/**\n * Returns a list of objects containing all the microphone device ids and labels.\n *\n * @param {Object} state - The state of the application.\n * @returns {Object[]}\n */\nexport function getAudioInputDeviceData(state: Object) {\n    return state['features/base/devices'].availableDevices.audioInput.map(\n        ({ deviceId, label }) => {\n            return {\n                deviceId,\n                label\n            };\n        });\n}\n\n/**\n * Returns a list of objectes containing all the output device ids and labels.\n *\n * @param {Object} state - The state of the application.\n * @returns {Object[]}\n */\nexport function getAudioOutputDeviceData(state: Object) {\n    return state['features/base/devices'].availableDevices.audioOutput.map(\n        ({ deviceId, label }) => {\n            return {\n                deviceId,\n                label\n            };\n        });\n}\n\n/**\n * Returns a list of all the camera device ids.\n *\n * @param {Object} state - The state of the application.\n * @returns {string[]}\n */\nexport function getVideoDeviceIds(state: Object) {\n    return state['features/base/devices'].availableDevices.videoInput.map(({ deviceId }) => deviceId);\n}\n\n/**\n * Returns true if there are devices of a specific type or on native platform.\n *\n * @param {Object} state - The state of the application.\n * @param {string} type - The type of device: VideoOutput | audioOutput | audioInput.\n *\n * @returns {boolean}\n */\nexport function hasAvailableDevices(state: Object, type: string) {\n    if (state['features/base/devices'] === undefined) {\n        return true;\n    }\n\n    return state['features/base/devices'].availableDevices[type].length > 0;\n}\n\n/**\n * Set device id of the audio output device which is currently in use.\n * Empty string stands for default device.\n *\n * @param {string} newId - New audio output device id.\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {boolean} userSelection - Whether this is a user selection update.\n * @param {?string} newLabel - New audio output device label to store.\n * @returns {Promise}\n */\nexport function setAudioOutputDeviceId(\n        newId: string = 'default',\n        dispatch: Function,\n        userSelection: boolean = false,\n        newLabel: ?string): Promise<*> {\n\n    logger.debug(`setAudioOutputDevice: ${String(newLabel)}[${newId}]`);\n\n    if (!JitsiMeetJS.mediaDevices.isDeviceChangeAvailable('output')) {\n        logger.warn('Adjusting audio output is not supported');\n\n        return Promise.resolve();\n    }\n\n    return JitsiMeetJS.mediaDevices.setAudioOutputDevice(newId)\n        .then(() => {\n            const newSettings = {\n                audioOutputDeviceId: newId,\n                userSelectedAudioOutputDeviceId: undefined,\n                userSelectedAudioOutputDeviceLabel: undefined\n            };\n\n            if (userSelection) {\n                newSettings.userSelectedAudioOutputDeviceId = newId;\n                newSettings.userSelectedAudioOutputDeviceLabel = newLabel;\n            } else {\n                // a flow workaround, I needed to add 'userSelectedAudioOutputDeviceId: undefined'\n                delete newSettings.userSelectedAudioOutputDeviceId;\n                delete newSettings.userSelectedAudioOutputDeviceLabel;\n            }\n\n            return dispatch(updateSettings(newSettings));\n        });\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/authentication');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { checkIfCanJoin } from '../base/conference';\nimport { openDialog } from '../base/dialog';\n\nimport {\n    STOP_WAIT_FOR_OWNER,\n    UPGRADE_ROLE_FINISHED,\n    UPGRADE_ROLE_STARTED, WAIT_FOR_OWNER\n} from './actionTypes';\nimport { LoginDialog, WaitForOwnerDialog } from './components';\nimport logger from './logger';\n\n/**\n * Initiates authenticating and upgrading the role of the local participant to\n * moderator which will allow to create and join a new conference on an XMPP\n * password + guest access configuration. Refer to {@link LoginDialog} for more\n * info.\n *\n * @param {string} id - The XMPP user's ID (e.g. {@code user@domain.com}).\n * @param {string} password - The XMPP user's password.\n * @param {JitsiConference} conference - The conference for which the local\n * participant's role will be upgraded.\n * @returns {Function}\n */\nexport function authenticateAndUpgradeRole(\n        id: string,\n        password: string,\n        conference: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { password: roomPassword }\n            = getState()['features/base/conference'];\n        const process\n            = conference.authenticateAndUpgradeRole({\n                id,\n                password,\n                roomPassword,\n\n                onLoginSuccessful() {\n                // When the login succeeds, the process has completed half\n                // of its job (i.e. 0.5).\n                    return dispatch(_upgradeRoleFinished(process, 0.5));\n                }\n            });\n\n        dispatch(_upgradeRoleStarted(process));\n        process.then(\n            /* onFulfilled */ () => dispatch(_upgradeRoleFinished(process, 1)),\n            /* onRejected */ error => {\n                // The lack of an error signals a cancellation.\n                if (error.authenticationError || error.connectionError) {\n                    logger.error('authenticateAndUpgradeRole failed', error);\n                }\n\n                dispatch(_upgradeRoleFinished(process, error));\n            });\n\n        return process;\n    };\n}\n\n\n/**\n * Signals that the process of authenticating and upgrading the local\n * participant's role has finished either with success or with a specific error.\n *\n * @param {Object} thenableWithCancel - The process of authenticating and\n * upgrading the local participant's role.\n * @param {Object} progressOrError - If the value is a {@code number}, then the\n * process of authenticating and upgrading the local participant's role has\n * succeeded in one of its two/multiple steps; otherwise, it has failed with the\n * specified error. Refer to {@link JitsiConference#authenticateAndUpgradeRole}\n * in lib-jitsi-meet for the error details.\n * @private\n * @returns {{\n *     type: UPGRADE_ROLE_FINISHED,\n *     error: ?Object,\n *     progress: number\n * }}\n */\nfunction _upgradeRoleFinished(\n        thenableWithCancel,\n        progressOrError: number | Object) {\n    let error;\n    let progress;\n\n    if (typeof progressOrError === 'number') {\n        progress = progressOrError;\n    } else {\n        // Make the specified error object resemble an Error instance (to the\n        // extent that jitsi-meet needs it).\n        const {\n            authenticationError,\n            connectionError,\n            ...other\n        } = progressOrError;\n\n        error = {\n            name: authenticationError || connectionError,\n            ...other\n        };\n        progress = authenticationError ? 0.5 : 0;\n    }\n\n    return {\n        type: UPGRADE_ROLE_FINISHED,\n        error,\n        progress,\n        thenableWithCancel\n    };\n}\n\n/**\n * Signals that a process of authenticating and upgrading the local\n * participant's role has started.\n *\n * @param {Object} thenableWithCancel - The process of authenticating and\n * upgrading the local participant's role.\n * @private\n * @returns {{\n *     type: UPGRADE_ROLE_STARTED,\n *     thenableWithCancel: Object\n * }}\n */\nfunction _upgradeRoleStarted(thenableWithCancel) {\n    return {\n        type: UPGRADE_ROLE_STARTED,\n        thenableWithCancel\n    };\n}\n\n/**\n * Opens {@link WaitForOnwerDialog}.\n *\n * @protected\n * @returns {Action}\n */\nexport function openWaitForOwnerDialog() {\n    return openDialog(WaitForOwnerDialog);\n}\n\n/**\n * Stops waiting for the conference owner.\n *\n * @returns {{\n *     type: STOP_WAIT_FOR_OWNER\n * }}\n */\nexport function stopWaitForOwner() {\n    return {\n        type: STOP_WAIT_FOR_OWNER\n    };\n}\n\n/**\n * Called when Jicofo rejects to create the room for anonymous user. Will\n * start the process of \"waiting for the owner\" by periodically trying to join\n * the room every five seconds.\n *\n * @returns {Function}\n */\nexport function waitForOwner() {\n    return (dispatch: Dispatch<any>) =>\n        dispatch({\n            type: WAIT_FOR_OWNER,\n            handler: () => dispatch(checkIfCanJoin()),\n            timeoutMs: 5000\n        });\n}\n\n/**\n * Opens {@link LoginDialog} which will ask to enter username and password\n * for the current conference.\n *\n * @protected\n * @returns {Action}\n */\nexport function openLoginDialog() {\n    return openDialog(LoginDialog);\n}\n","// @flow\n\nimport { maybeRedirectToWelcomePage } from '../app/actions';\nimport { hideDialog, openDialog } from '../base/dialog/actions';\n\nimport {\n    CANCEL_LOGIN\n} from './actionTypes';\nimport { WaitForOwnerDialog, LoginDialog } from './components';\n\nexport * from './actions.any';\n\n/**\n * Cancels {@ink LoginDialog}.\n *\n * @returns {{\n *     type: CANCEL_LOGIN\n * }}\n */\nexport function cancelLogin() {\n    return {\n        type: CANCEL_LOGIN\n    };\n}\n\n/**\n * Cancels authentication, closes {@link WaitForOwnerDialog}\n * and navigates back to the welcome page.\n *\n * @returns {Function}\n */\nexport function cancelWaitForOwner() {\n    return (dispatch: Function) => {\n        dispatch(maybeRedirectToWelcomePage());\n    };\n}\n\n/**\n * Hides a authentication dialog where the local participant\n * should authenticate.\n *\n * @returns {Function}.\n */\nexport function hideLoginDialog() {\n    return hideDialog(LoginDialog);\n}\n\n/**\n * Shows a notification dialog that authentication is required to create the.\n * Conference.\n * This is used for external auth.\n *\n * @param {string} room - The room name.\n * @param {Function} onAuthNow - The function to be invoked when external authentication.\n *\n * @returns {Function}.\n */\nexport function openAuthDialog(room: String, onAuthNow: ?Function) {\n    return openDialog(WaitForOwnerDialog, {\n        room,\n        onAuthNow\n    });\n}\n\n\n","'use strict';\n\n\nconst internals = {\n    suspectRx: /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*\\:/\n};\n\n\nexports.parse = function (text, ...args) {\n\n    // Normalize arguments\n\n    const firstOptions = typeof args[0] === 'object' && args[0];\n    const reviver = args.length > 1 || !firstOptions ? args[0] : undefined;\n    const options = (args.length > 1 && args[1]) || firstOptions || {};\n\n    // Parse normally, allowing exceptions\n\n    const obj = JSON.parse(text, reviver);\n\n    // options.protoAction: 'error' (default) / 'remove' / 'ignore'\n\n    if (options.protoAction === 'ignore') {\n        return obj;\n    }\n\n    // Ignore null and non-objects\n\n    if (!obj ||\n        typeof obj !== 'object') {\n\n        return obj;\n    }\n\n    // Check original string for potential exploit\n\n    if (!text.match(internals.suspectRx)) {\n        return obj;\n    }\n\n    // Scan result for proto keys\n\n    exports.scan(obj, options);\n\n    return obj;\n};\n\n\nexports.scan = function (obj, options = {}) {\n\n    let next = [obj];\n\n    while (next.length) {\n        const nodes = next;\n        next = [];\n\n        for (const node of nodes) {\n            if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {      // Avoid calling node.hasOwnProperty directly\n                if (options.protoAction !== 'remove') {\n                    throw new SyntaxError('Object contains forbidden prototype property');\n                }\n\n                delete node.__proto__;\n            }\n\n            for (const key in node) {\n                const value = node[key];\n                if (value &&\n                    typeof value === 'object') {\n\n                    next.push(node[key]);\n                }\n            }\n        }\n    }\n};\n\n\nexports.safeParse = function (text, reviver) {\n\n    try {\n        return exports.parse(text, reviver);\n    }\n    catch (ignoreError) {\n        return null;\n    }\n};\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose\";\nexport default function _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\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\n  return target;\n}","// @flow\n\nimport throttle from 'lodash/throttle';\nimport type { Dispatch } from 'redux';\n\nimport { NOTIFICATIONS_ENABLED, getFeatureFlag } from '../base/flags';\n\nimport {\n    CLEAR_NOTIFICATIONS,\n    HIDE_NOTIFICATION,\n    SET_NOTIFICATIONS_ENABLED,\n    SHOW_NOTIFICATION\n} from './actionTypes';\nimport { NOTIFICATION_TIMEOUT, NOTIFICATION_TYPE } from './constants';\n\n/**\n * Clears (removes) all the notifications.\n *\n * @returns {{\n *     type: CLEAR_NOTIFICATIONS\n * }}\n */\nexport function clearNotifications() {\n    return {\n        type: CLEAR_NOTIFICATIONS\n    };\n}\n\n/**\n * Removes the notification with the passed in id.\n *\n * @param {string} uid - The unique identifier for the notification to be\n * removed.\n * @returns {{\n *     type: HIDE_NOTIFICATION,\n *     uid: string\n * }}\n */\nexport function hideNotification(uid: string) {\n    return {\n        type: HIDE_NOTIFICATION,\n        uid\n    };\n}\n\n/**\n * Stops notifications from being displayed.\n *\n * @param {boolean} enabled - Whether or not notifications should display.\n * @returns {{\n *     type: SET_NOTIFICATIONS_ENABLED,\n *     enabled: boolean\n * }}\n */\nexport function setNotificationsEnabled(enabled: boolean) {\n    return {\n        type: SET_NOTIFICATIONS_ENABLED,\n        enabled\n    };\n}\n\n/**\n * Queues an error notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @returns {Object}\n */\nexport function showErrorNotification(props: Object) {\n    return showNotification({\n        ...props,\n        appearance: NOTIFICATION_TYPE.ERROR\n    });\n}\n\n/**\n * Queues a notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @param {number} timeout - How long the notification should display before\n * automatically being hidden.\n * @returns {Function}\n */\nexport function showNotification(props: Object = {}, timeout: ?number) {\n    return function(dispatch: Function, getState: Function) {\n        const { notifications } = getState()['features/base/config'];\n        const enabledFlag = getFeatureFlag(getState(), NOTIFICATIONS_ENABLED, true);\n\n        const shouldDisplay = enabledFlag\n            && (!notifications\n                || notifications.includes(props.descriptionKey)\n                || notifications.includes(props.titleKey));\n\n        if (shouldDisplay) {\n            return dispatch({\n                type: SHOW_NOTIFICATION,\n                props,\n                timeout,\n                uid: props.uid || window.Date.now().toString()\n            });\n        }\n    };\n}\n\n/**\n * Queues a warning notification for display.\n *\n * @param {Object} props - The props needed to show the notification component.\n * @returns {Object}\n */\nexport function showWarningNotification(props: Object) {\n    return showNotification({\n        ...props,\n        appearance: NOTIFICATION_TYPE.WARNING\n    });\n}\n\n/**\n * An array of names of participants that have joined the conference. The array\n * is replaced with an empty array as notifications are displayed.\n *\n * @private\n * @type {string[]}\n */\nlet joinedParticipantsNames = [];\n\n/**\n * A throttled internal function that takes the internal list of participant\n * names, {@code joinedParticipantsNames}, and triggers the display of a\n * notification informing of their joining.\n *\n * @private\n * @type {Function}\n */\nconst _throttledNotifyParticipantConnected = throttle((dispatch: Dispatch<any>) => {\n    const joinedParticipantsCount = joinedParticipantsNames.length;\n\n    let notificationProps;\n\n    if (joinedParticipantsCount >= 3) {\n        notificationProps = {\n            titleArguments: {\n                name: joinedParticipantsNames[0],\n                count: joinedParticipantsCount - 1\n            },\n            titleKey: 'notify.connectedThreePlusMembers'\n        };\n    } else if (joinedParticipantsCount === 2) {\n        notificationProps = {\n            titleArguments: {\n                first: joinedParticipantsNames[0],\n                second: joinedParticipantsNames[1]\n            },\n            titleKey: 'notify.connectedTwoMembers'\n        };\n    } else if (joinedParticipantsCount) {\n        notificationProps = {\n            titleArguments: {\n                name: joinedParticipantsNames[0]\n            },\n            titleKey: 'notify.connectedOneMember'\n        };\n    }\n\n    if (notificationProps) {\n        dispatch(\n            showNotification(notificationProps, NOTIFICATION_TIMEOUT));\n    }\n\n    joinedParticipantsNames = [];\n\n}, 500, { leading: false });\n\n/**\n * Queues the display of a notification of a participant having connected to\n * the meeting. The notifications are batched so that quick consecutive\n * connection events are shown in one notification.\n *\n * @param {string} displayName - The name of the participant that connected.\n * @returns {Function}\n */\nexport function showParticipantJoinedNotification(displayName: string) {\n    joinedParticipantsNames.push(displayName);\n\n    return (dispatch: Dispatch<any>) => _throttledNotifyParticipantConnected(dispatch);\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { getFixedPlatformStyle } from '../../styles';\n\n/**\n * {@code AbstractContainer} component's property types.\n */\nexport type Props = {\n\n    /**\n     * An optional accessibility label to apply to the container root.\n     */\n    accessibilityLabel?: string,\n\n    /**\n     * Whether or not this element is an accessibility element.\n     */\n    accessible?: boolean,\n\n    /**\n     * React Elements to display within the component.\n     */\n    children: React$Node,\n\n    /**\n     * Class names of the component (for web).\n     */\n    className?: string,\n\n    /**\n     * The event handler/listener to be invoked when this\n     * {@code AbstractContainer} is clicked on Web or pressed on React\n     * Native. If {@code onClick} is defined and {@link touchFeedback} is\n     * undefined, {@code touchFeedback} is considered defined as\n     * {@code true}.\n     */\n    onClick?: ?Function,\n\n    /**\n     * The style (as in stylesheet) to be applied to this\n     * {@code AbstractContainer}.\n     */\n    style?: Array<?string> | Object,\n\n    /**\n     * If this instance is to provide visual feedback when touched, then\n     * {@code true}; otherwise, {@code false}. If {@code touchFeedback} is\n     * undefined and {@link onClick} is defined, {@code touchFeedback} is\n     * considered defined as {@code true}.\n     */\n    touchFeedback?: ?Function,\n\n    /**\n     * Color to display when clicked.\n     */\n    underlayColor?: string,\n\n    /**\n     * If this {@code AbstractContainer} is to be visible, then {@code true}\n     * or {@code false} if this instance is to be hidden or not rendered at\n     * all.\n     */\n    visible?: ?boolean\n};\n\n/**\n * Abstract (base) class for container of React {@link Component} children with\n * a style.\n *\n * @extends Component\n */\nexport default class AbstractContainer<P: Props> extends Component<P> {\n    /**\n     * Renders this {@code AbstractContainer} as a React {@code Component} of a\n     * specific type.\n     *\n     * @param {string|ReactClass} type - The type of the React {@code Component}\n     * which is to be rendered.\n     * @param {Object|undefined} props - The read-only React {@code Component}\n     * properties, if any, to render. If undefined, the props of this instance\n     * will be rendered.\n     * @protected\n     * @returns {ReactElement}\n     */\n    _render(type, props?: P) {\n        const {\n            children,\n            style,\n\n            /* eslint-disable no-unused-vars */\n\n            // The following properties are defined for the benefit of\n            // AbstractContainer and its extenders so they are to not be\n            // propagated.\n            touchFeedback,\n            visible,\n\n            /* eslint-enable no-unused-vars */\n\n            ...filteredProps\n        } = props || this.props;\n\n        const _style = getFixedPlatformStyle(style);\n\n        // $FlowFixMe\n        return React.createElement(type, {\n            style: _style,\n            ...filteredProps\n        }, children);\n    }\n}\n","/* @flow */\n\nimport AbstractContainer from '../AbstractContainer';\nimport type { Props } from '../AbstractContainer';\n\n/**\n * Represents a container of React/Web {@link Component} children with a style.\n *\n * @extends AbstractContainer\n */\nexport default class Container<P: Props> extends AbstractContainer<P> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { visible = true } = this.props;\n\n        return visible ? super._render('div') : null;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of {@link LogoutDialog}'s React {@code Component} props.\n */\ntype Props = {\n\n    /**\n     * Logout handler.\n     */\n    onLogout: Function,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Implements the Logout dialog.\n *\n * @param {Object} props - The props of the component.\n * @returns {React$Element}.\n */\nfunction LogoutDialog(props: Props) {\n    const { onLogout, t } = props;\n\n    return (\n        <Dialog\n            hideCancelButton = { false }\n            okKey = { t('dialog.Yes') }\n            onSubmit = { onLogout }\n            titleKey = { t('dialog.logoutTitle') }\n            width = { 'small' }>\n            <div>\n                { t('dialog.logoutQuestion') }\n            </div>\n        </Dialog>\n    );\n}\n\nexport default translate(connect()(LogoutDialog));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconSettings } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { openSettingsDialog } from '../../actions';\nimport { SETTINGS_TABS } from '../../constants';\n\n/**\n * The type of the React {@code Component} props of {@link SettingsButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The default tab at which the settings dialog will be opened.\n     */\n    defaultTab: string,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * An abstract implementation of a button for accessing settings.\n */\nclass SettingsButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.Settings';\n    icon = IconSettings;\n    label = 'toolbar.Settings';\n    tooltip = 'toolbar.Settings';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const {\n            defaultTab = SETTINGS_TABS.DEVICES,\n            dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('settings'));\n        dispatch(openSettingsDialog(defaultTab));\n    }\n}\n\nexport default translate(connect()(SettingsButton));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/settings');\n","// @flow\n\nimport Button from '@atlaskit/button/standard-button';\nimport Spinner from '@atlaskit/spinner';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport {\n    CALENDAR_TYPE,\n    MicrosoftSignInButton,\n    clearCalendarIntegration,\n    bootstrapCalendarIntegration,\n    isCalendarEnabled,\n    signIn\n} from '../../../calendar-sync';\nimport { GoogleSignInButton } from '../../../google-api';\nimport logger from '../../logger';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link CalendarTab}.\n */\ntype Props = {\n\n    /**\n     * The name given to this Jitsi Application.\n     */\n    _appName: string,\n\n    /**\n     * Whether or not to display a button to sign in to Google.\n     */\n    _enableGoogleIntegration: boolean,\n\n    /**\n     * Whether or not to display a button to sign in to Microsoft.\n     */\n    _enableMicrosoftIntegration: boolean,\n\n    /**\n     * The current calendar integration in use, if any.\n     */\n    _isConnectedToCalendar: boolean,\n\n    /**\n     * The email address associated with the calendar integration in use.\n     */\n    _profileEmail: string,\n\n    /**\n     * Invoked to change the configured calendar integration.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link CalendarTab}.\n */\ntype State = {\n\n    /**\n     * Whether or not any third party APIs are being loaded.\n     */\n    loading: boolean\n};\n\n/**\n * React {@code Component} for modifying calendar integration.\n *\n * @extends Component\n */\nclass CalendarTab extends Component<Props, State> {\n    /**\n     * Initializes a new {@code CalendarTab} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            loading: true\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClickDisconnect = this._onClickDisconnect.bind(this);\n        this._onClickGoogle = this._onClickGoogle.bind(this);\n        this._onClickMicrosoft = this._onClickMicrosoft.bind(this);\n    }\n\n    /**\n     * Loads third party APIs as needed and bootstraps the initial calendar\n     * state if not already set.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props.dispatch(bootstrapCalendarIntegration())\n            .catch(err => logger.error('CalendarTab bootstrap failed', err))\n            .then(() => this.setState({ loading: false }));\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let view;\n\n        if (this.state.loading) {\n            view = this._renderLoadingState();\n        } else if (this.props._isConnectedToCalendar) {\n            view = this._renderSignOutState();\n        } else {\n            view = this._renderSignInState();\n        }\n\n        return (\n            <div className = 'calendar-tab'>\n                { view }\n            </div>\n        );\n    }\n\n    /**\n     * Dispatches the action to start the sign in flow for a given calendar\n     * integration type.\n     *\n     * @param {string} type - The calendar type to try integrating with.\n     * @private\n     * @returns {void}\n     */\n    _attemptSignIn(type) {\n        this.props.dispatch(signIn(type));\n    }\n\n    _onClickDisconnect: (Object) => void;\n\n    /**\n     * Dispatches an action to sign out of the currently connected third party\n     * used for calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickDisconnect() {\n        // We clear the integration state instead of actually signing out. This\n        // is for two primary reasons. Microsoft does not support a sign out and\n        // instead relies on clearing of local auth data. Google signout can\n        // also sign the user out of YouTube. So for now we've decided not to\n        // do an actual sign out.\n        this.props.dispatch(clearCalendarIntegration());\n    }\n\n    _onClickGoogle: () => void;\n\n    /**\n     * Starts the sign in flow for Google calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickGoogle() {\n        this._attemptSignIn(CALENDAR_TYPE.GOOGLE);\n    }\n\n    _onClickMicrosoft: () => void;\n\n    /**\n     * Starts the sign in flow for Microsoft calendar integration.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClickMicrosoft() {\n        this._attemptSignIn(CALENDAR_TYPE.MICROSOFT);\n    }\n\n    /**\n     * Render a React Element to indicate third party APIs are being loaded.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderLoadingState() {\n        return (\n            <Spinner\n                isCompleting = { false }\n                size = 'medium' />\n        );\n    }\n\n    /**\n     * Render a React Element to sign into a third party for calendar\n     * integration.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSignInState() {\n        const {\n            _appName,\n            _enableGoogleIntegration,\n            _enableMicrosoftIntegration,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <p>\n                    { t('settings.calendar.about',\n                        { appName: _appName || '' }) }\n                </p>\n                { _enableGoogleIntegration\n                    && <div className = 'calendar-tab-sign-in'>\n                        <GoogleSignInButton\n                            onClick = { this._onClickGoogle }\n                            text = { t('liveStreaming.signIn') } />\n                    </div> }\n                { _enableMicrosoftIntegration\n                    && <div className = 'calendar-tab-sign-in'>\n                        <MicrosoftSignInButton\n                            onClick = { this._onClickMicrosoft }\n                            text = { t('settings.calendar.microsoftSignIn') } />\n                    </div> }\n            </div>\n        );\n    }\n\n    /**\n     * Render a React Element to sign out of the currently connected third\n     * party used for calendar integration.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSignOutState() {\n        const { _profileEmail, t } = this.props;\n\n        return (\n            <div>\n                <div className = 'sign-out-cta'>\n                    { t('settings.calendar.signedIn',\n                        { email: _profileEmail }) }\n                </div>\n                <Button\n                    appearance = 'primary'\n                    id = 'calendar_logout'\n                    onClick = { this._onClickDisconnect }\n                    type = 'button'>\n                    { t('settings.calendar.disconnect') }\n                </Button>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code CalendarTab} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _appName: string,\n *     _enableGoogleIntegration: boolean,\n *     _enableMicrosoftIntegration: boolean,\n *     _isConnectedToCalendar: boolean,\n *     _profileEmail: string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const calendarState = state['features/calendar-sync'] || {};\n    const {\n        googleApiApplicationClientID,\n        microsoftApiApplicationClientID\n    } = state['features/base/config'];\n    const calendarEnabled = isCalendarEnabled(state);\n\n    return {\n        _appName: interfaceConfig.APP_NAME,\n        _enableGoogleIntegration: Boolean(\n            calendarEnabled && googleApiApplicationClientID),\n        _enableMicrosoftIntegration: Boolean(\n            calendarEnabled && microsoftApiApplicationClientID),\n        _isConnectedToCalendar: calendarState.integrationReady,\n        _profileEmail: calendarState.profileEmail\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(CalendarTab));\n","// @flow\nimport { Checkbox } from '@atlaskit/checkbox';\nimport DropdownMenu, {\n    DropdownItem,\n    DropdownItemGroup\n} from '@atlaskit/dropdown-menu';\nimport React from 'react';\n\nimport keyboardShortcut from '../../../../../modules/keyboardshortcut/keyboardshortcut';\nimport { AbstractDialogTab } from '../../../base/dialog';\nimport type { Props as AbstractDialogTabProps } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport TouchmoveHack from '../../../chat/components/web/TouchmoveHack';\nimport { SS_DEFAULT_FRAME_RATE } from '../../constants';\n\n/**\n * The type of the React {@code Component} props of {@link MoreTab}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * The currently selected desktop share frame rate in the frame rate select dropdown.\n     */\n     currentFramerate: string,\n\n    /**\n     * The currently selected language to display in the language select\n     * dropdown.\n     */\n    currentLanguage: string,\n\n    /**\n     * All available desktop capture frame rates.\n     */\n    desktopShareFramerates: Array<number>,\n\n    /**\n     * Whether or not follow me is currently active (enabled by some other participant).\n     */\n    followMeActive: boolean,\n\n    /**\n     * Whether or not the user has selected the Follow Me feature to be enabled.\n     */\n    followMeEnabled: boolean,\n\n    /**\n     * All available languages to display in the language select dropdown.\n     */\n    languages: Array<string>,\n\n    /**\n     * Whether or not to display the language select dropdown.\n     */\n    showLanguageSettings: boolean,\n\n    /**\n     * Whether or not to display moderator-only settings.\n     */\n    showModeratorSettings: boolean,\n\n    /**\n     * Whether or not to display the prejoin settings section.\n     */\n    showPrejoinSettings: boolean,\n\n    /**\n     * Whether or not to show prejoin screen.\n     */\n    showPrejoinPage: boolean,\n\n    /**\n     * Whether or not the user has selected the Start Audio Muted feature to be\n     * enabled.\n     */\n    startAudioMuted: boolean,\n\n    /**\n     * Whether or not the user has selected the Start Video Muted feature to be\n     * enabled.\n     */\n    startVideoMuted: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link MoreTab}.\n */\ntype State = {\n\n    /**\n     * Whether or not the desktop share frame rate select dropdown is open.\n     */\n     isFramerateSelectOpen: boolean,\n\n    /**\n     * Whether or not the language select dropdown is open.\n     */\n    isLanguageSelectOpen: boolean\n};\n\n/**\n * React {@code Component} for modifying language and moderator settings.\n *\n * @extends Component\n */\nclass MoreTab extends AbstractDialogTab<Props, State> {\n    /**\n     * Initializes a new {@code MoreTab} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            isFramerateSelectOpen: false,\n            isLanguageSelectOpen: false\n        };\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onFramerateDropdownOpenChange = this._onFramerateDropdownOpenChange.bind(this);\n        this._onFramerateItemSelect = this._onFramerateItemSelect.bind(this);\n        this._onLanguageDropdownOpenChange = this._onLanguageDropdownOpenChange.bind(this);\n        this._onLanguageItemSelect = this._onLanguageItemSelect.bind(this);\n        this._onStartAudioMutedChanged = this._onStartAudioMutedChanged.bind(this);\n        this._onStartVideoMutedChanged = this._onStartVideoMutedChanged.bind(this);\n        this._onFollowMeEnabledChanged = this._onFollowMeEnabledChanged.bind(this);\n        this._onShowPrejoinPageChanged = this._onShowPrejoinPageChanged.bind(this);\n        this._onKeyboardShortcutEnableChanged = this._onKeyboardShortcutEnableChanged.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const content = [];\n\n        content.push(this._renderSettingsLeft());\n        content.push(this._renderSettingsRight());\n\n        return <div className = 'more-tab box'>{ content }</div>;\n    }\n\n    _onFramerateDropdownOpenChange: (Object) => void;\n\n    /**\n     * Callback invoked to toggle display of the desktop share framerate select dropdown.\n     *\n     * @param {Object} event - The event for opening or closing the dropdown.\n     * @private\n     * @returns {void}\n     */\n    _onFramerateDropdownOpenChange({ isOpen }) {\n        this.setState({ isFramerateSelectOpen: isOpen });\n    }\n\n    _onFramerateItemSelect: (Object) => void;\n\n    /**\n     * Callback invoked to select a frame rate from the select dropdown.\n     *\n     * @param {Object} e - The key event to handle.\n     * @private\n     * @returns {void}\n     */\n    _onFramerateItemSelect(e) {\n        const frameRate = e.currentTarget.getAttribute('data-framerate');\n\n        super._onChange({ currentFramerate: frameRate });\n    }\n\n    _onLanguageDropdownOpenChange: (Object) => void;\n\n    /**\n     * Callback invoked to toggle display of the language select dropdown.\n     *\n     * @param {Object} event - The event for opening or closing the dropdown.\n     * @private\n     * @returns {void}\n     */\n    _onLanguageDropdownOpenChange({ isOpen }) {\n        this.setState({ isLanguageSelectOpen: isOpen });\n    }\n\n    _onLanguageItemSelect: (Object) => void;\n\n    /**\n     * Callback invoked to select a language from select dropdown.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onLanguageItemSelect(e) {\n        const language = e.currentTarget.getAttribute('data-language');\n\n        super._onChange({ currentLanguage: language });\n    }\n\n    _onStartAudioMutedChanged: (Object) => void;\n\n    /**\n     * Callback invoked to select if conferences should start\n     * with audio muted.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onStartAudioMutedChanged({ target: { checked } }) {\n        super._onChange({ startAudioMuted: checked });\n    }\n\n    _onStartVideoMutedChanged: (Object) => void;\n\n    /**\n     * Callback invoked to select if conferences should start\n     * with video disabled.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onStartVideoMutedChanged({ target: { checked } }) {\n        super._onChange({ startVideoMuted: checked });\n    }\n\n    _onFollowMeEnabledChanged: (Object) => void;\n\n    /**\n     * Callback invoked to select if follow-me mode\n     * should be activated.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onFollowMeEnabledChanged({ target: { checked } }) {\n        super._onChange({ followMeEnabled: checked });\n    }\n\n    _onShowPrejoinPageChanged: (Object) => void;\n\n    /**\n     * Callback invoked to select if the lobby\n     * should be shown.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onShowPrejoinPageChanged({ target: { checked } }) {\n        super._onChange({ showPrejoinPage: checked });\n    }\n\n    _onKeyboardShortcutEnableChanged: (Object) => void;\n\n    /**\n     * Callback invoked to select if global keyboard shortcuts\n     * should be enabled.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyboardShortcutEnableChanged({ target: { checked } }) {\n        keyboardShortcut.enable(checked);\n        super._onChange({ keyboardShortcutEnable: checked });\n    }\n\n    /**\n     * Returns the React Element for the desktop share frame rate dropdown.\n     *\n     * @returns {ReactElement}\n     */\n    _renderFramerateSelect() {\n        const { currentFramerate, desktopShareFramerates, t } = this.props;\n        const frameRateItems = desktopShareFramerates.map(frameRate => (\n            <DropdownItem\n                data-framerate = { frameRate }\n                key = { frameRate }\n                onClick = { this._onFramerateItemSelect }>\n                { `${frameRate} ${t('settings.framesPerSecond')}` }\n            </DropdownItem>));\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'frameRate'>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('settings.desktopShareFramerate') }\n                </h2>\n                <div className = 'dropdown-menu'>\n                    <TouchmoveHack isModal = { true }>\n                        <DropdownMenu\n                            isOpen = { this.state.isFramerateSelectOpen }\n                            onOpenChange = { this._onFramerateDropdownOpenChange }\n                            shouldFitContainer = { true }\n                            trigger = { currentFramerate\n                                ? `${currentFramerate} ${t('settings.framesPerSecond')}`\n                                : '' }\n                            triggerButtonProps = {{\n                                shouldFitContainer: true\n                            }}\n                            triggerType = 'button'>\n                            <DropdownItemGroup>\n                                { frameRateItems }\n                            </DropdownItemGroup>\n                        </DropdownMenu>\n                    </TouchmoveHack>\n                </div>\n                <div\n                    className = 'mock-atlaskit-label'>\n                    { parseInt(currentFramerate, 10) > SS_DEFAULT_FRAME_RATE\n                        ? t('settings.desktopShareHighFpsWarning')\n                        : t('settings.desktopShareWarning') }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React Element for keyboardShortcut settings.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderKeyboardShortcutCheckbox() {\n        const { t } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'keyboard-shortcut'>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('keyboardShortcuts.keyboardShortcuts') }\n                </h2>\n                <Checkbox\n                    isChecked = { keyboardShortcut.getEnabled() }\n                    label = { t('prejoin.keyboardShortcuts') }\n                    name = 'enable-keyboard-shortcuts'\n                    onChange = { this._onKeyboardShortcutEnableChanged } />\n            </div>\n        );\n    }\n\n    /**\n     * Returns the menu item for changing displayed language.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderLanguageSelect() {\n        const {\n            currentLanguage,\n            languages,\n            t\n        } = this.props;\n\n        const languageItems\n            = languages.map(language => (\n                <DropdownItem\n                    data-language = { language }\n                    key = { language }\n                    onClick = { this._onLanguageItemSelect }>\n                    { t(`languages:${language}`) }\n                </DropdownItem>));\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'language'>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('settings.language') }\n                </h2>\n                <div className = 'dropdown-menu'>\n                    <TouchmoveHack isModal = { true }>\n                        <DropdownMenu\n                            isOpen = { this.state.isLanguageSelectOpen }\n                            onOpenChange = { this._onLanguageDropdownOpenChange }\n                            shouldFitContainer = { true }\n                            trigger = { currentLanguage\n                                ? t(`languages:${currentLanguage}`)\n                                : '' }\n                            triggerButtonProps = {{\n                                shouldFitContainer: true\n                            }}\n                            triggerType = 'button'>\n                            <DropdownItemGroup>\n                                { languageItems }\n                            </DropdownItemGroup>\n                        </DropdownMenu>\n                    </TouchmoveHack>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React Element for modifying conference-wide settings.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderModeratorSettings() {\n        const {\n            followMeActive,\n            followMeEnabled,\n            startAudioMuted,\n            startVideoMuted,\n            t\n        } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'moderator'>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('settings.moderator') }\n                </h2>\n                <Checkbox\n                    isChecked = { startAudioMuted }\n                    label = { t('settings.startAudioMuted') }\n                    name = 'start-audio-muted'\n                    onChange = { this._onStartAudioMutedChanged } />\n                <Checkbox\n                    isChecked = { startVideoMuted }\n                    label = { t('settings.startVideoMuted') }\n                    name = 'start-video-muted'\n                    onChange = { this._onStartVideoMutedChanged } />\n                <Checkbox\n                    isChecked = { followMeEnabled && !followMeActive }\n                    isDisabled = { followMeActive }\n                    label = { t('settings.followMe') }\n                    name = 'follow-me'\n                    onChange = { this._onFollowMeEnabledChanged } />\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React Element for modifying prejoin screen settings.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderPrejoinScreenSettings() {\n        const { t, showPrejoinPage } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'prejoin-screen'>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('prejoin.premeeting') }\n                </h2>\n                <Checkbox\n                    isChecked = { showPrejoinPage }\n                    label = { t('prejoin.showScreen') }\n                    name = 'show-prejoin-page'\n                    onChange = { this._onShowPrejoinPageChanged } />\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React element that needs to be displayed on the right half of the more tabs.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSettingsRight() {\n        const { showLanguageSettings } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane right'>\n                { showLanguageSettings && this._renderLanguageSelect() }\n                { this._renderFramerateSelect() }\n            </div>\n        );\n    }\n\n    /**\n     * Returns the React element that needs to be displayed on the left half of the more tabs.\n     *\n     * @returns {ReactElement}\n     */\n    _renderSettingsLeft() {\n        const { showPrejoinSettings, showModeratorSettings } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane left'>\n                { showPrejoinSettings && this._renderPrejoinScreenSettings() }\n                { this._renderKeyboardShortcutCheckbox() }\n                { showModeratorSettings && this._renderModeratorSettings() }\n            </div>\n        );\n    }\n}\n\nexport default translate(MoreTab);\n","// @flow\n\nimport Button from '@atlaskit/button/standard-button';\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport UIEvents from '../../../../../service/UI/UIEvents';\nimport {\n    sendAnalytics,\n    createProfilePanelButtonEvent\n} from '../../../analytics';\nimport { AbstractDialogTab } from '../../../base/dialog';\nimport type { Props as AbstractDialogTabProps } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { openLogoutDialog } from '../../actions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link ProfileTab}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * Whether or not server-side authentication is available.\n     */\n    authEnabled: boolean,\n\n    /**\n     * The name of the currently (server-side) authenticated user.\n     */\n    authLogin: string,\n\n    /**\n     * The display name to display for the local participant.\n     */\n    displayName: string,\n\n    /**\n     * The email to display for the local participant.\n     */\n    email: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * React {@code Component} for modifying the local user's profile.\n *\n * @extends Component\n */\nclass ProfileTab extends AbstractDialogTab<Props> {\n    static defaultProps = {\n        displayName: '',\n        email: ''\n    };\n\n    /**\n     * Initializes a new {@code ConnectedSettingsDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code ConnectedSettingsDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onAuthToggle = this._onAuthToggle.bind(this);\n        this._onDisplayNameChange = this._onDisplayNameChange.bind(this);\n        this._onEmailChange = this._onEmailChange.bind(this);\n    }\n\n    _onDisplayNameChange: (Object) => void;\n\n    /**\n     * Changes display name of the user.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onDisplayNameChange({ target: { value } }) {\n        super._onChange({ displayName: value });\n    }\n\n    _onEmailChange: (Object) => void;\n\n    /**\n     * Changes email of the user.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onEmailChange({ target: { value } }) {\n        super._onChange({ email: value });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            authEnabled,\n            displayName,\n            email,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <div className = 'profile-edit'>\n                    <div className = 'profile-edit-field'>\n                        <FieldTextStateless\n                            autoComplete = 'name'\n                            compact = { true }\n                            id = 'setDisplayName'\n                            label = { t('profile.setDisplayNameLabel') }\n                            onChange = { this._onDisplayNameChange }\n                            placeholder = { t('settings.name') }\n                            shouldFitContainer = { true }\n                            type = 'text'\n                            value = { displayName } />\n                    </div>\n                    <div className = 'profile-edit-field'>\n                        <FieldTextStateless\n                            compact = { true }\n                            id = 'setEmail'\n                            label = { t('profile.setEmailLabel') }\n                            onChange = { this._onEmailChange }\n                            placeholder = { t('profile.setEmailInput') }\n                            shouldFitContainer = { true }\n                            type = 'text'\n                            value = { email } />\n                    </div>\n                </div>\n                { authEnabled && this._renderAuth() }\n            </div>\n        );\n    }\n\n    _onAuthToggle: () => void;\n\n    /**\n     * Shows the dialog for logging in or out of a server and closes this\n     * dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onAuthToggle() {\n        if (this.props.authLogin) {\n            sendAnalytics(createProfilePanelButtonEvent('logout.button'));\n\n            APP.store.dispatch(openLogoutDialog(\n                () => APP.UI.emitEvent(UIEvents.LOGOUT)\n            ));\n        } else {\n            sendAnalytics(createProfilePanelButtonEvent('login.button'));\n\n            APP.UI.emitEvent(UIEvents.AUTH_CLICKED);\n        }\n    }\n\n    /**\n     * Returns a React Element for interacting with server-side authentication.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderAuth() {\n        const {\n            authLogin,\n            t\n        } = this.props;\n\n        return (\n            <div>\n                <h2 className = 'mock-atlaskit-label'>\n                    { t('toolbar.authenticate') }\n                </h2>\n                { authLogin\n                    && <div className = 'auth-name'>\n                        { t('settings.loggedIn', { name: authLogin }) }\n                    </div> }\n                <Button\n                    appearance = 'primary'\n                    id = 'login_button'\n                    onClick = { this._onAuthToggle }\n                    type = 'button'>\n                    { authLogin ? t('toolbar.logout') : t('toolbar.login') }\n                </Button>\n            </div>\n        );\n    }\n}\n\nexport default translate(ProfileTab);\n","// @flow\n\nimport { setFollowMe, setStartMutedPolicy } from '../base/conference';\nimport { openDialog } from '../base/dialog';\nimport { i18next } from '../base/i18n';\nimport { updateSettings } from '../base/settings';\nimport { setPrejoinPageVisibility } from '../prejoin/actions';\nimport { setScreenshareFramerate } from '../screen-share/actions';\n\nimport {\n    SET_AUDIO_SETTINGS_VISIBILITY,\n    SET_VIDEO_SETTINGS_VISIBILITY\n} from './actionTypes';\nimport { LogoutDialog, SettingsDialog } from './components';\nimport { getMoreTabProps, getProfileTabProps, getSoundsTabProps } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Opens {@code LogoutDialog}.\n *\n * @param {Function} onLogout - The event in {@code LogoutDialog} that should be\n *  enabled on click.\n * @returns {Function}\n */\nexport function openLogoutDialog(onLogout: Function) {\n    return openDialog(LogoutDialog, { onLogout });\n}\n\n/**\n * Opens {@code SettingsDialog}.\n *\n * @param {string} defaultTab - The tab in {@code SettingsDialog} that should be\n * displayed initially.\n * @returns {Function}\n */\nexport function openSettingsDialog(defaultTab: string) {\n    return openDialog(SettingsDialog, { defaultTab });\n}\n\n/**\n * Sets the visibility of the audio settings.\n *\n * @param {boolean} value - The new value.\n * @returns {Function}\n */\nfunction setAudioSettingsVisibility(value: boolean) {\n    return {\n        type: SET_AUDIO_SETTINGS_VISIBILITY,\n        value\n    };\n}\n\n/**\n * Sets the visibility of the video settings.\n *\n * @param {boolean} value - The new value.\n * @returns {Function}\n */\nfunction setVideoSettingsVisibility(value: boolean) {\n    return {\n        type: SET_VIDEO_SETTINGS_VISIBILITY,\n        value\n    };\n}\n\n/**\n * Submits the settings from the \"More\" tab of the settings dialog.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitMoreTab(newState: Object): Function {\n    return (dispatch, getState) => {\n        const currentState = getMoreTabProps(getState());\n\n        if (newState.followMeEnabled !== currentState.followMeEnabled) {\n            dispatch(setFollowMe(newState.followMeEnabled));\n        }\n\n        const showPrejoinPage = newState.showPrejoinPage;\n\n        if (showPrejoinPage !== currentState.showPrejoinPage) {\n            // The 'showPrejoin' flag starts as 'true' on every new session.\n            // This prevents displaying the prejoin page when the user re-enables it.\n            if (showPrejoinPage && getState()['features/prejoin']?.showPrejoin) {\n                dispatch(setPrejoinPageVisibility(false));\n            }\n            dispatch(updateSettings({\n                userSelectedSkipPrejoin: !showPrejoinPage\n            }));\n        }\n\n        if (newState.startAudioMuted !== currentState.startAudioMuted\n            || newState.startVideoMuted !== currentState.startVideoMuted) {\n            dispatch(setStartMutedPolicy(\n                newState.startAudioMuted, newState.startVideoMuted));\n        }\n\n        if (newState.currentLanguage !== currentState.currentLanguage) {\n            i18next.changeLanguage(newState.currentLanguage);\n        }\n\n        if (newState.currentFramerate !== currentState.currentFramerate) {\n            const frameRate = parseInt(newState.currentFramerate, 10);\n\n            dispatch(setScreenshareFramerate(frameRate));\n        }\n    };\n}\n\n/**\n * Submits the settings from the \"Profile\" tab of the settings dialog.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitProfileTab(newState: Object): Function {\n    return (dispatch, getState) => {\n        const currentState = getProfileTabProps(getState());\n\n        if (newState.displayName !== currentState.displayName) {\n            APP.conference.changeLocalDisplayName(newState.displayName);\n        }\n\n        if (newState.email !== currentState.email) {\n            APP.conference.changeLocalEmail(newState.email);\n        }\n    };\n}\n\n/**\n * Submits the settings from the \"Sounds\" tab of the settings dialog.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitSoundsTab(newState: Object): Function {\n    return (dispatch, getState) => {\n        const currentState = getSoundsTabProps(getState());\n        const shouldUpdate = (newState.soundsIncomingMessage !== currentState.soundsIncomingMessage)\n            || (newState.soundsParticipantJoined !== currentState.soundsParticipantJoined)\n            || (newState.soundsParticipantLeft !== currentState.soundsParticipantLeft)\n            || (newState.soundsTalkWhileMuted !== currentState.soundsTalkWhileMuted);\n\n        if (shouldUpdate) {\n            dispatch(updateSettings({\n                soundsIncomingMessage: newState.soundsIncomingMessage,\n                soundsParticipantJoined: newState.soundsParticipantJoined,\n                soundsParticipantLeft: newState.soundsParticipantLeft,\n                soundsTalkWhileMuted: newState.soundsTalkWhileMuted\n            }));\n        }\n    };\n}\n\n/**\n * Toggles the visibility of the audio settings.\n *\n * @returns {void}\n */\nexport function toggleAudioSettings() {\n    return (dispatch: Function, getState: Function) => {\n        const value = getState()['features/settings'].audioSettingsVisible;\n\n        dispatch(setAudioSettingsVisibility(!value));\n    };\n}\n\n/**\n * Toggles the visibility of the video settings.\n *\n * @returns {void}\n */\nexport function toggleVideoSettings() {\n    return (dispatch: Function, getState: Function) => {\n        const value = getState()['features/settings'].videoSettingsVisible;\n\n        dispatch(setVideoSettingsVisibility(!value));\n    };\n}\n","// @flow\n\nimport Checkbox from '@atlaskit/checkbox';\nimport React from 'react';\n\nimport { AbstractDialogTab } from '../../../base/dialog';\nimport type { Props as AbstractDialogTabProps } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link SoundsTab}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * Whether or not the sound for the incoming message should play.\n     */\n    soundsIncomingMessage: Boolean,\n\n    /**\n     * Whether or not the sound for the participant joined should play.\n     */\n    soundsParticipantJoined: Boolean,\n\n    /**\n     * Whether or not the sound for the participant left should play.\n     */\n    soundsParticipantLeft: Boolean,\n\n    /**\n     * Whether or not the sound for the talk while muted notification should play.\n     */\n    soundsTalkWhileMuted: Boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * React {@code Component} for modifying the local user's sound settings.\n *\n * @extends Component\n */\nclass SoundsTab extends AbstractDialogTab<Props> {\n    /**\n     * Initializes a new {@code SoundsTab} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code SoundsTab} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n    }\n\n    _onChange: (Object) => void;\n\n    /**\n     * Changes a sound setting state.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onChange({ target }) {\n        super._onChange({ [target.name]: target.checked });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            soundsIncomingMessage,\n            soundsParticipantJoined,\n            soundsParticipantLeft,\n            soundsTalkWhileMuted,\n            t\n        } = this.props;\n\n        return (\n            <div\n                className = 'settings-sub-pane-element'\n                key = 'sounds'>\n                <h2 className = 'mock-atlaskit-label'>\n                    {t('settings.playSounds')}\n                </h2>\n                <Checkbox\n                    isChecked = { soundsIncomingMessage }\n                    label = { t('settings.incomingMessage') }\n                    name = 'soundsIncomingMessage'\n                    onChange = { this._onChange } />\n                <Checkbox\n                    isChecked = { soundsParticipantJoined }\n                    label = { t('settings.participantJoined') }\n                    name = 'soundsParticipantJoined'\n                    onChange = { this._onChange } />\n                <Checkbox\n                    isChecked = { soundsParticipantLeft }\n                    label = { t('settings.participantLeft') }\n                    name = 'soundsParticipantLeft'\n                    onChange = { this._onChange } />\n                <Checkbox\n                    isChecked = { soundsTalkWhileMuted }\n                    label = { t('settings.talkWhileMuted') }\n                    name = 'soundsTalkWhileMuted'\n                    onChange = { this._onChange } />\n            </div>\n        );\n    }\n}\n\nexport default translate(SoundsTab);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { getAvailableDevices } from '../../../base/devices';\nimport { DialogWithTabs, hideDialog } from '../../../base/dialog';\nimport { connect } from '../../../base/redux';\nimport { isCalendarEnabled } from '../../../calendar-sync';\nimport {\n    DeviceSelection,\n    getDeviceSelectionDialogProps,\n    submitDeviceSelectionTab\n} from '../../../device-selection';\nimport { submitMoreTab, submitProfileTab, submitSoundsTab } from '../../actions';\nimport { SETTINGS_TABS } from '../../constants';\nimport { getMoreTabProps, getProfileTabProps, getSoundsTabProps } from '../../functions';\n\nimport CalendarTab from './CalendarTab';\nimport MoreTab from './MoreTab';\nimport ProfileTab from './ProfileTab';\nimport SoundsTab from './SoundsTab';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link ConnectedSettingsDialog}.\n */\ntype Props = {\n\n    /**\n     * Which settings tab should be initially displayed. If not defined then\n     * the first tab will be displayed.\n     */\n    defaultTab: string,\n\n    /**\n     * Information about the tabs to be rendered.\n     */\n    _tabs: Array<Object>,\n\n    /**\n     * Invoked to save changed settings.\n     */\n    dispatch: Function\n};\n\n/**\n * A React {@code Component} for displaying a dialog to modify local settings\n * and conference-wide (moderator) settings. This version is connected to\n * redux to get the current settings.\n *\n * @extends Component\n */\nclass SettingsDialog extends Component<Props> {\n    /**\n     * Initializes a new {@code ConnectedSettingsDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code ConnectedSettingsDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._closeDialog = this._closeDialog.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _tabs, defaultTab, dispatch } = this.props;\n        const onSubmit = this._closeDialog;\n        const defaultTabIdx\n            = _tabs.findIndex(({ name }) => name === defaultTab);\n        const tabs = _tabs.map(tab => {\n            return {\n                ...tab,\n                onMount: tab.onMount\n                    ? (...args) => dispatch(tab.onMount(...args))\n                    : undefined,\n                submit: (...args) => tab.submit\n                    && dispatch(tab.submit(...args))\n            };\n        });\n\n        return (\n            <DialogWithTabs\n                closeDialog = { this._closeDialog }\n                cssClassName = 'settings-dialog'\n                defaultTab = {\n                    defaultTabIdx === -1 ? undefined : defaultTabIdx\n                }\n                onSubmit = { onSubmit }\n                tabs = { tabs }\n                titleKey = 'settings.title' />\n        );\n    }\n\n    _closeDialog: () => void;\n\n    /**\n     * Callback invoked to close the dialog without saving changes.\n     *\n     * @private\n     * @returns {void}\n     */\n    _closeDialog() {\n        this.props.dispatch(hideDialog());\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code ConnectedSettingsDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     tabs: Array<Object>\n * }}\n */\nfunction _mapStateToProps(state) {\n    const configuredTabs = interfaceConfig.SETTINGS_SECTIONS || [];\n\n    // The settings sections to display.\n    const showDeviceSettings = configuredTabs.includes('devices');\n    const moreTabProps = getMoreTabProps(state);\n    const { showModeratorSettings, showLanguageSettings, showPrejoinSettings } = moreTabProps;\n    const showProfileSettings\n        = configuredTabs.includes('profile') && !state['features/base/config'].disableProfile;\n    const showCalendarSettings\n        = configuredTabs.includes('calendar') && isCalendarEnabled(state);\n    const showSoundsSettings = configuredTabs.includes('sounds');\n    const tabs = [];\n\n    if (showDeviceSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.DEVICES,\n            component: DeviceSelection,\n            label: 'settings.devices',\n            onMount: getAvailableDevices,\n            props: getDeviceSelectionDialogProps(state),\n            propsUpdateFunction: (tabState, newProps) => {\n                // Ensure the device selection tab gets updated when new devices\n                // are found by taking the new props and only preserving the\n                // current user selected devices. If this were not done, the\n                // tab would keep using a copy of the initial props it received,\n                // leaving the device list to become stale.\n\n                return {\n                    ...newProps,\n                    selectedAudioInputId: tabState.selectedAudioInputId,\n                    selectedAudioOutputId: tabState.selectedAudioOutputId,\n                    selectedVideoInputId: tabState.selectedVideoInputId\n                };\n            },\n            styles: 'settings-pane devices-pane',\n            submit: submitDeviceSelectionTab\n        });\n    }\n\n    if (showProfileSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.PROFILE,\n            component: ProfileTab,\n            label: 'profile.title',\n            props: getProfileTabProps(state),\n            styles: 'settings-pane profile-pane',\n            submit: submitProfileTab\n        });\n    }\n\n    if (showCalendarSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.CALENDAR,\n            component: CalendarTab,\n            label: 'settings.calendar.title',\n            styles: 'settings-pane calendar-pane'\n        });\n    }\n\n    if (showSoundsSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.SOUNDS,\n            component: SoundsTab,\n            label: 'settings.sounds',\n            props: getSoundsTabProps(state),\n            styles: 'settings-pane profile-pane',\n            submit: submitSoundsTab\n        });\n    }\n\n    if (showModeratorSettings || showLanguageSettings || showPrejoinSettings) {\n        tabs.push({\n            name: SETTINGS_TABS.MORE,\n            component: MoreTab,\n            label: 'settings.more',\n            props: moreTabProps,\n            propsUpdateFunction: (tabState, newProps) => {\n                // Updates tab props, keeping users selection\n\n                return {\n                    ...newProps,\n                    currentFramerate: tabState.currentFramerate,\n                    currentLanguage: tabState.currentLanguage,\n                    followMeEnabled: tabState.followMeEnabled,\n                    showPrejoinPage: tabState.showPrejoinPage,\n                    startAudioMuted: tabState.startAudioMuted,\n                    startVideoMuted: tabState.startVideoMuted\n                };\n            },\n            styles: 'settings-pane more-pane',\n            submit: submitMoreTab\n        });\n    }\n\n    return { _tabs: tabs };\n}\n\nexport default connect(_mapStateToProps)(SettingsDialog);\n","// @flow\n\nimport React from 'react';\n\nimport { Icon } from '../../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of {@link AudioSettingsHeader}.\n */\ntype Props = {\n\n    /**\n     * The id used for the Header-text.\n     */\n    id?: string,\n\n    /**\n     * The Icon used for the Header.\n     */\n    IconComponent: Function,\n\n    /**\n     * The text of the Header.\n     */\n    text: string,\n};\n\n/**\n * React {@code Component} representing the Header of an audio option group.\n *\n * @returns { ReactElement}\n */\nexport default function AudioSettingsHeader({ IconComponent, id, text }: Props) {\n    return (\n        <div\n            className = 'audio-preview-header'\n            role = 'heading'>\n            <div className = 'audio-preview-header-icon'>\n                { <Icon\n                    size = { 20 }\n                    src = { IconComponent } />}\n            </div>\n            <div\n                className = 'audio-preview-header-text'\n                id = { id } >{text}</div>\n        </div>\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Icon, IconCheck, IconExclamationSolid } from '../../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of {@link AudioSettingsEntry}.\n */\nexport type Props = {\n\n    /**\n     * The text for this component.\n     */\n    children: React$Node,\n\n    /**\n     * Flag indicating an error.\n     */\n    hasError?: boolean,\n\n    /**\n     * The id for the label, that contains the item text.\n     */\n    labelId?: string,\n\n    /**\n     * Flag indicating the selection state.\n     */\n    isSelected: boolean,\n};\n\n/**\n * React {@code Component} representing an entry for the audio settings.\n *\n * @returns { ReactElement}\n */\nexport default function AudioSettingsEntry(\n        { children, hasError, labelId, isSelected }: Props) {\n\n    const className = `audio-preview-entry ${isSelected\n        ? 'audio-preview-entry--selected' : ''}`;\n\n    return (\n        <div className = { className }>\n            {isSelected && (\n                <Icon\n                    className = 'audio-preview-icon audio-preview-icon--check'\n                    color = '#1C2025'\n                    size = { 14 }\n                    src = { IconCheck } />\n            )}\n            <span\n                className = 'audio-preview-entry-text'\n                id = { labelId }>\n                {children}\n            </span>\n            {hasError && <Icon\n                className = 'audio-preview-icon audio-preview-icon--exclamation'\n                size = { 16 }\n                src = { IconExclamationSolid } />}\n        </div>\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Icon, IconMeter } from '../../../../base/icons';\n\ntype Props = {\n\n    /**\n     * Own class name for the component.\n     */\n    className: string,\n\n    /**\n     * Flag indicating whether the component is greyed out/disabled.\n     */\n    isDisabled?: boolean,\n\n    /**\n     * The level of the meter.\n     * Should be between 0 and 7 as per the used SVG.\n     */\n    level: number,\n};\n\n/**\n * React {@code Component} representing an audio level meter.\n *\n * @returns { ReactElement}\n */\nexport default function({ className, isDisabled, level }: Props) {\n    let ownClassName;\n\n    if (level > -1) {\n        ownClassName = `metr metr-l-${level}`;\n    } else {\n        ownClassName = `metr ${isDisabled ? 'metr--disabled' : ''}`;\n    }\n\n    return (\n        <Icon\n            className = { `${ownClassName} ${className}` }\n            size = { 12 }\n            src = { IconMeter } />\n    );\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport JitsiMeetJS from '../../../../base/lib-jitsi-meet/_';\n\nimport AudioSettingsEntry, { type Props as AudioSettingsEntryProps } from './AudioSettingsEntry';\nimport Meter from './Meter';\n\nconst JitsiTrackEvents = JitsiMeetJS.events.track;\n\ntype Props = AudioSettingsEntryProps & {\n\n    /**\n     * The deviceId of the microphone.\n     */\n    deviceId: string,\n\n    /**\n     * Flag indicating if there is a problem with the device.\n     */\n    hasError?: boolean,\n\n    /**\n     * Flag indicating if there is a problem with the device.\n     */\n    index?: number,\n\n    /**\n     * The audio track for the current entry.\n     */\n    jitsiTrack: Object,\n\n    /**\n     * The length of the microphone list\n     */\n    length: number,\n\n\n    /**\n     * Click handler for component.\n     */\n    onClick: Function,\n    listHeaderId: string\n}\n\ntype State = {\n\n    /**\n     * The audio level.\n     */\n    level: number\n}\n\n/**\n * React {@code Component} representing an entry for the microphone audio settings.\n *\n * @param {Props} props - The props of the component.\n * @returns { ReactElement}\n */\nexport default class MicrophoneEntry extends Component<Props, State> {\n    /**\n     * Initializes a new {@code MicrophoneEntry} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            level: -1\n        };\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._updateLevel = this._updateLevel.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Click handler for the entry.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onClick(this.props.deviceId);\n    }\n\n    /**\n     * Key pressed handler for the entry.\n     *\n     * @returns {void}\n     */\n    _onKeyPress: (KeyboardEvent) => void;\n\n    /**\n     * Key pressed handler for the entry.\n     *\n     * @param {Object} e - The event.\n     * @private\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ') {\n            e.preventDefault();\n            this.props.onClick(this.props.deviceId);\n        }\n    }\n\n    _updateLevel: (number) => void;\n\n    /**\n     * Updates the level of the meter.\n     *\n     * @param {number} num - The audio level provided by the jitsiTrack.\n     * @returns {void}\n     */\n    _updateLevel(num) {\n        this.setState({\n            level: Math.floor(num / 0.125)\n        });\n    }\n\n    /**\n     * Subscribes to audio level changes coming from the jitsiTrack.\n     *\n     * @returns {void}\n     */\n    _startListening() {\n        const { jitsiTrack } = this.props;\n\n        jitsiTrack && jitsiTrack.on(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateLevel);\n    }\n\n    /**\n     * Unsubscribes from changes coming from the jitsiTrack.\n     *\n     * @param {Object} jitsiTrack - The jitsiTrack to unsubscribe from.\n     * @returns {void}\n     */\n    _stopListening(jitsiTrack) {\n        jitsiTrack && jitsiTrack.off(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED, this._updateLevel);\n        this.setState({\n            level: -1\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.jitsiTrack !== this.props.jitsiTrack) {\n            this._stopListening(prevProps.jitsiTrack);\n            this._startListening();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._startListening();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._stopListening(this.props.jitsiTrack);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n\n        const { deviceId, children, hasError, index, isSelected, length, jitsiTrack, listHeaderId } = this.props;\n\n        const deviceTextId: string = `choose_microphone${deviceId}`;\n\n        const labelledby: string = `${listHeaderId} ${deviceTextId} `;\n\n        return (\n            <li\n                aria-checked = { isSelected }\n                aria-labelledby = { labelledby }\n                aria-posinset = { index }\n                aria-setsize = { length }\n                className = 'audio-preview-microphone'\n                onClick = { this._onClick }\n                onKeyPress = { this._onKeyPress }\n                role = 'radio'\n                tabIndex = { 0 }>\n                <AudioSettingsEntry\n                    hasError = { hasError }\n                    isSelected = { isSelected }\n                    labelId = { deviceTextId }>\n                    {children}\n                </AudioSettingsEntry>\n                { Boolean(jitsiTrack) && <Meter\n                    className = 'audio-preview-meter-mic'\n                    isDisabled = { hasError }\n                    level = { this.state.level } />\n                }\n            </li>\n        );\n    }\n}\n","// @flow\n\nimport React from 'react';\n\ntype Props = {\n\n    /**\n     * Click handler for the button.\n     */\n    onClick: Function,\n\n    /**\n     * keypress handler for the button.\n     */\n    onKeyPress: Function,\n};\n\n/**\n * React {@code Component} representing an button used for testing output sound.\n *\n * @returns { ReactElement}\n */\nexport default function TestButton({ onClick, onKeyPress }: Props) {\n    return (\n        <div\n            className = 'audio-preview-test-button'\n            onClick = { onClick }\n            onKeyPress = { onKeyPress }\n            role = 'button'\n            tabIndex = { 0 }>\n            Test\n        </div>\n    );\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport logger from '../../../logger';\n\nimport AudioSettingsEntry from './AudioSettingsEntry';\nimport TestButton from './TestButton';\n\nconst TEST_SOUND_PATH = 'sounds/ring.wav';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerEntry}.\n */\ntype Props = {\n\n\n    /**\n     * The text label for the entry.\n     */\n    children: React$Node,\n\n    /**\n     * Flag controlling the selection state of the entry.\n     */\n    isSelected: boolean,\n\n    /**\n     * Flag controlling the selection state of the entry.\n     */\n    index: number,\n\n    /**\n     * Flag controlling the selection state of the entry.\n     */\n    length: number,\n\n    /**\n     * The deviceId of the speaker.\n     */\n    deviceId: string,\n\n    /**\n     * Click handler for the component.\n     */\n    onClick: Function,\n    listHeaderId: string\n};\n\n/**\n * Implements a React {@link Component} which displays an audio\n * output settings entry. The user can click and play a test sound.\n *\n * @extends Component\n */\nexport default class SpeakerEntry extends Component<Props> {\n    /**\n     * A React ref to the HTML element containing the {@code audio} instance.\n     */\n    audioRef: Object;\n\n    /**\n     * Initializes a new {@code SpeakerEntry} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.audioRef = React.createRef();\n        this._onTestButtonClick = this._onTestButtonClick.bind(this);\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Click handler for the entry.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onClick(this.props.deviceId);\n    }\n\n    _onKeyPress: () => void;\n\n    /**\n     * Key pressed handler for the entry.\n     *\n     * @param {Object} e - The event.\n     * @private\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ') {\n            e.preventDefault();\n            this.props.onClick(this.props.deviceId);\n        }\n    }\n\n\n    _onTestButtonClick: Object => void;\n\n    /**\n     * Click handler for Test button.\n     * Sets the current audio output id and plays a sound.\n     *\n     * @param {Object} e - The sythetic event.\n     * @returns {void}\n     */\n    async _onTestButtonClick(e) {\n        e.stopPropagation();\n\n        try {\n            await this.audioRef.current.setSinkId(this.props.deviceId);\n            this.audioRef.current.play();\n        } catch (err) {\n            logger.log('Could not set sink id', err);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { children, isSelected, index, deviceId, length, listHeaderId } = this.props;\n        const deviceTextId: string = `choose_speaker${deviceId}`;\n        const labelledby: string = `${listHeaderId} ${deviceTextId} `;\n\n        return (\n            <li\n                aria-checked = { isSelected }\n                aria-labelledby = { labelledby }\n                aria-posinset = { index }\n                aria-setsize = { length }\n                className = 'audio-preview-speaker'\n                onClick = { this._onClick }\n                onKeyPress = { this._onKeyPress }\n                role = 'radio'\n                tabIndex = { 0 }>\n                <AudioSettingsEntry\n                    isSelected = { isSelected }\n                    key = { deviceId }\n                    labelId = { deviceTextId }>\n                    {children}\n                </AudioSettingsEntry>\n                <TestButton\n                    onClick = { this._onTestButtonClick }\n                    onKeyPress = { this._onTestButtonClick } />\n                <audio\n                    preload = 'auto'\n                    ref = { this.audioRef }\n                    src = { TEST_SOUND_PATH } />\n            </li>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { IconMicrophoneHollow, IconVolumeEmpty } from '../../../../base/icons';\nimport JitsiMeetJS from '../../../../base/lib-jitsi-meet';\nimport { equals } from '../../../../base/redux';\nimport { createLocalAudioTracks } from '../../../functions';\n\nimport AudioSettingsHeader from './AudioSettingsHeader';\nimport MicrophoneEntry from './MicrophoneEntry';\nimport SpeakerEntry from './SpeakerEntry';\n\nconst browser = JitsiMeetJS.util.browser;\n\n/**\n * Translates the default device label into a more user friendly one.\n *\n * @param {string} deviceId - The device Id.\n * @param {string} label - The device label.\n * @param {Function} t - The translation function.\n * @returns {string}\n */\nfunction transformDefaultDeviceLabel(deviceId, label, t) {\n    return deviceId === 'default'\n        ? t('settings.sameAsSystem', { label: label.replace('Default - ', '') })\n        : label;\n}\n\nexport type Props = {\n\n   /**\n    * The deviceId of the microphone in use.\n    */\n    currentMicDeviceId: string,\n\n   /**\n    * The deviceId of the output device in use.\n    */\n    currentOutputDeviceId: string,\n\n   /**\n    * Used to set a new microphone as the current one.\n    */\n    setAudioInputDevice: Function,\n\n   /**\n    * Used to set a new output device as the current one.\n    */\n    setAudioOutputDevice: Function,\n\n   /**\n    * A list of objects containing the labels and deviceIds\n    * of all the output devices.\n    */\n    outputDevices: Object[],\n\n   /**\n    * A list with objects containing the labels and deviceIds\n    * of all the input devices.\n    */\n    microphoneDevices: Object[],\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\ntype State = {\n\n   /**\n    * An list of objects, each containing the microphone label, audio track, device id\n    * and track error if the case.\n    */\n    audioTracks: Object[]\n}\n\n/**\n * Implements a React {@link Component} which displays a list of all\n * the audio input & output devices to choose from.\n *\n * @extends Component\n */\nclass AudioSettingsContent extends Component<Props, State> {\n    _componentWasUnmounted: boolean;\n    _audioContentRef: Object;\n    microphoneHeaderId = 'microphone_settings_header';\n    speakerHeaderId = 'speaker_settings_header';\n\n\n    /**\n     * Initializes a new {@code AudioSettingsContent} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._onMicrophoneEntryClick = this._onMicrophoneEntryClick.bind(this);\n        this._onSpeakerEntryClick = this._onSpeakerEntryClick.bind(this);\n        this._onEscClick = this._onEscClick.bind(this);\n        this._audioContentRef = React.createRef();\n\n        this.state = {\n            audioTracks: props.microphoneDevices.map(({ deviceId, label }) => {\n                return {\n                    deviceId,\n                    hasError: false,\n                    jitsiTrack: null,\n                    label\n                };\n            })\n        };\n    }\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the speaker entries.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape') {\n            event.preventDefault();\n            event.stopPropagation();\n            this._audioContentRef.current.style.display = 'none';\n        }\n    }\n\n    _onMicrophoneEntryClick: (string) => void;\n\n    /**\n     * Click handler for the microphone entries.\n     *\n     * @param {string} deviceId - The deviceId for the clicked microphone.\n     * @returns {void}\n     */\n    _onMicrophoneEntryClick(deviceId) {\n        this.props.setAudioInputDevice(deviceId);\n    }\n\n    _onSpeakerEntryClick: (string) => void;\n\n    /**\n     * Click handler for the speaker entries.\n     *\n     * @param {string} deviceId - The deviceId for the clicked speaker.\n     * @returns {void}\n     */\n    _onSpeakerEntryClick(deviceId) {\n        this.props.setAudioOutputDevice(deviceId);\n    }\n\n    /**\n     * Renders a single microphone entry.\n     *\n     * @param {Object} data - An object with the deviceId, jitsiTrack & label of the microphone.\n     * @param {number} index - The index of the element, used for creating a key.\n     * @param {length} length - The length of the microphone list.\n     * @param {Function} t - The translation function.\n     * @returns {React$Node}\n     */\n    _renderMicrophoneEntry(data, index, length, t) {\n        const { deviceId, jitsiTrack, hasError } = data;\n        const label = transformDefaultDeviceLabel(deviceId, data.label, t);\n        const isSelected = deviceId === this.props.currentMicDeviceId;\n\n        return (\n            <MicrophoneEntry\n                deviceId = { deviceId }\n                hasError = { hasError }\n                index = { index }\n                isSelected = { isSelected }\n                jitsiTrack = { jitsiTrack }\n                key = { `me-${index}` }\n                length = { length }\n                listHeaderId = { this.microphoneHeaderId }\n                onClick = { this._onMicrophoneEntryClick }>\n                {label}\n            </MicrophoneEntry>\n        );\n    }\n\n    /**\n     * Renders a single speaker entry.\n     *\n     * @param {Object} data - An object with the deviceId and label of the speaker.\n     * @param {number} index - The index of the element, used for creating a key.\n     * @param {length} length - The length of the speaker list.\n     * @param {Function} t - The translation function.\n     * @returns {React$Node}\n     */\n    _renderSpeakerEntry(data, index, length, t) {\n        const { deviceId } = data;\n        const label = transformDefaultDeviceLabel(deviceId, data.label, t);\n        const key = `se-${index}`;\n        const isSelected = deviceId === this.props.currentOutputDeviceId;\n\n        return (\n            <SpeakerEntry\n                deviceId = { deviceId }\n                index = { index }\n                isSelected = { isSelected }\n                key = { key }\n                length = { length }\n                listHeaderId = { this.speakerHeaderId }\n                onClick = { this._onSpeakerEntryClick }>\n                {label}\n            </SpeakerEntry>\n        );\n    }\n\n    /**\n     * Creates and updates the audio tracks.\n     *\n     * @returns {void}\n     */\n    async _setTracks() {\n        if (browser.isWebKitBased()) {\n\n            // It appears that at the time of this writing, creating audio tracks blocks the browser's main thread for\n            // long time on safari. Wasn't able to confirm which part of track creation does the blocking exactly, but\n            // not creating the tracks seems to help and makes the UI much more responsive.\n            return;\n        }\n\n        this._disposeTracks(this.state.audioTracks);\n\n        const audioTracks = await createLocalAudioTracks(this.props.microphoneDevices, 5000);\n\n        if (this._componentWasUnmounted) {\n            this._disposeTracks(audioTracks);\n        } else {\n            this.setState({\n                audioTracks\n            });\n        }\n    }\n\n    /**\n     * Disposes the audio tracks.\n     *\n     * @param {Object} audioTracks - The object holding the audio tracks.\n     * @returns {void}\n     */\n    _disposeTracks(audioTracks) {\n        audioTracks.forEach(({ jitsiTrack }) => {\n            jitsiTrack && jitsiTrack.dispose();\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._setTracks();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._componentWasUnmounted = true;\n        this._disposeTracks(this.state.audioTracks);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (!equals(this.props.microphoneDevices, prevProps.microphoneDevices)) {\n            this._setTracks();\n        }\n    }\n\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { outputDevices, t } = this.props;\n\n        return (\n            <div>\n                <div\n                    aria-labelledby = 'audio-settings-button'\n                    className = 'audio-preview-content'\n                    id = 'audio-settings-dialog'\n                    onKeyDown = { this._onEscClick }\n                    ref = { this._audioContentRef }\n                    role = 'menu'\n                    tabIndex = { -1 }>\n                    <div role = 'menuitem'>\n                        <AudioSettingsHeader\n                            IconComponent = { IconMicrophoneHollow }\n                            id = { this.microphoneHeaderId }\n                            text = { t('settings.microphones') } />\n                        <ul\n                            aria-labelledby = 'microphone_settings_header'\n                            className = 'audio-preview-content-ul'\n                            role = 'radiogroup'\n                            tabIndex = '-1'>\n                            {this.state.audioTracks.map((data, i) =>\n                                this._renderMicrophoneEntry(data, i, this.state.audioTracks.length, t),\n                            )}\n                        </ul>\n                    </div>\n                    { outputDevices.length > 0 && (\n                        <div role = 'menuitem'>\n                            <hr className = 'audio-preview-hr' />\n                            <AudioSettingsHeader\n                                IconComponent = { IconVolumeEmpty }\n                                id = { this.speakerHeaderId }\n                                text = { t('settings.speakers') } />\n                            <ul\n                                aria-labelledby = 'speaker_settings_header'\n                                className = 'audio-preview-content-ul'\n                                role = 'radiogroup'\n                                tabIndex = '-1'>\n                                { outputDevices.map((data, i) =>\n                                    this._renderSpeakerEntry(data, i, outputDevices.length, t),\n                                )}\n                            </ul>\n                        </div>)\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(AudioSettingsContent);\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React from 'react';\n\nimport {\n    getAudioInputDeviceData,\n    getAudioOutputDeviceData,\n    setAudioInputDeviceAndUpdateSettings,\n    setAudioOutputDevice as setAudioOutputDeviceAction\n} from '../../../../base/devices';\nimport { connect } from '../../../../base/redux';\nimport { SMALL_MOBILE_WIDTH } from '../../../../base/responsive-ui/constants';\nimport {\n    getCurrentMicDeviceId,\n    getCurrentOutputDeviceId\n} from '../../../../base/settings';\nimport { toggleAudioSettings } from '../../../actions';\nimport { getAudioSettingsVisibility } from '../../../functions';\n\nimport AudioSettingsContent, { type Props as AudioSettingsContentProps } from './AudioSettingsContent';\n\n\ntype Props = AudioSettingsContentProps & {\n\n   /**\n    * Component's children (the audio button).\n    */\n    children: React$Node,\n\n   /**\n    * Flag controlling the visibility of the popup.\n    */\n    isOpen: boolean,\n\n   /**\n    * Callback executed when the popup closes.\n    */\n    onClose: Function,\n\n    /**\n     * The popup placement enum value.\n     */\n    popupPlacement: string\n}\n\n/**\n * Popup with audio settings.\n *\n * @returns {ReactElement}\n */\nfunction AudioSettingsPopup({\n    children,\n    currentMicDeviceId,\n    currentOutputDeviceId,\n    isOpen,\n    microphoneDevices,\n    setAudioInputDevice,\n    setAudioOutputDevice,\n    onClose,\n    outputDevices,\n    popupPlacement\n}: Props) {\n    return (\n        <div className = 'audio-preview'>\n            <InlineDialog\n                content = { <AudioSettingsContent\n                    currentMicDeviceId = { currentMicDeviceId }\n                    currentOutputDeviceId = { currentOutputDeviceId }\n                    microphoneDevices = { microphoneDevices }\n                    outputDevices = { outputDevices }\n                    setAudioInputDevice = { setAudioInputDevice }\n                    setAudioOutputDevice = { setAudioOutputDevice } /> }\n                isOpen = { isOpen }\n                onClose = { onClose }\n                placement = { popupPlacement }>\n                {children}\n            </InlineDialog>\n        </div>\n    );\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const { clientWidth } = state['features/base/responsive-ui'];\n\n    return {\n        popupPlacement: clientWidth <= SMALL_MOBILE_WIDTH ? 'auto' : 'top-start',\n        currentMicDeviceId: getCurrentMicDeviceId(state),\n        currentOutputDeviceId: getCurrentOutputDeviceId(state),\n        isOpen: getAudioSettingsVisibility(state),\n        microphoneDevices: getAudioInputDeviceData(state),\n        outputDevices: getAudioOutputDeviceData(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onClose: toggleAudioSettings,\n    setAudioInputDevice: setAudioInputDeviceAndUpdateSettings,\n    setAudioOutputDevice: setAudioOutputDeviceAction\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AudioSettingsPopup);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport Video from '../../../../base/media/components/Video';\nimport { equals } from '../../../../base/redux';\nimport { createLocalVideoTracks } from '../../../functions';\n\n\nconst videoClassName = 'video-preview-video flipVideoX';\n\n/**\n * The type of the React {@code Component} props of {@link VideoSettingsContent}.\n */\nexport type Props = {\n\n    /**\n     * The deviceId of the camera device currently being used.\n     */\n    currentCameraDeviceId: string,\n\n    /**\n     * Callback invoked to change current camera.\n     */\n    setVideoInputDevice: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Callback invoked to toggle the settings popup visibility.\n     */\n    toggleVideoSettings: Function,\n\n    /**\n     * All the camera device ids currently connected.\n     */\n    videoDeviceIds: string[],\n};\n\n/**\n * The type of the React {@code Component} state of {@link VideoSettingsContent}.\n */\ntype State = {\n\n    /**\n     * An array of all the jitsiTracks and eventual errors.\n     */\n    trackData: Object[],\n};\n\n/**\n * Implements a React {@link Component} which displays a list of video\n * previews to choose from.\n *\n * @extends Component\n */\nclass VideoSettingsContent extends Component<Props, State> {\n    _componentWasUnmounted: boolean;\n    _videoContentRef: Object;\n\n    /**\n     * Initializes a new {@code VideoSettingsContent} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n        this._onEscClick = this._onEscClick.bind(this);\n        this._videoContentRef = React.createRef();\n\n        this.state = {\n            trackData: new Array(props.videoDeviceIds.length).fill({\n                jitsiTrack: null\n            })\n        };\n    }\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the video entries.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape') {\n            event.preventDefault();\n            event.stopPropagation();\n            this._videoContentRef.current.style.display = 'none';\n        }\n    }\n\n    /**\n     * Creates and updates the track data.\n     *\n     * @returns {void}\n     */\n    async _setTracks() {\n        this._disposeTracks(this.state.trackData);\n\n        const trackData = await createLocalVideoTracks(this.props.videoDeviceIds, 5000);\n\n        // In case the component gets unmounted before the tracks are created\n        // avoid a leak by not setting the state\n        if (this._componentWasUnmounted) {\n            this._disposeTracks(trackData);\n        } else {\n            this.setState({\n                trackData\n            });\n        }\n    }\n\n    /**\n     * Destroys all the tracks from trackData object.\n     *\n     * @param {Object[]} trackData - An array of tracks that are to be disposed.\n     * @returns {Promise<void>}\n     */\n    _disposeTracks(trackData) {\n        trackData.forEach(({ jitsiTrack }) => {\n            jitsiTrack && jitsiTrack.dispose();\n        });\n    }\n\n    /**\n     * Returns the click handler used when selecting the video preview.\n     *\n     * @param {string} deviceId - The id of the camera device.\n     * @returns {Function}\n     */\n    _onEntryClick(deviceId) {\n        return () => {\n            this.props.setVideoInputDevice(deviceId);\n            this.props.toggleVideoSettings();\n        };\n    }\n\n    /**\n     * Renders a preview entry.\n     *\n     * @param {Object} data - The track data.\n     * @param {number} index - The index of the entry.\n     * @returns {React$Node}\n     */\n    _renderPreviewEntry(data, index) {\n        const { error, jitsiTrack, deviceId } = data;\n        const { currentCameraDeviceId, t } = this.props;\n        const isSelected = deviceId === currentCameraDeviceId;\n        const key = `vp-${index}`;\n        const className = 'video-preview-entry';\n        const tabIndex = '0';\n\n        if (error) {\n            return (\n                <div\n                    className = { className }\n                    key = { key }\n                    tabIndex = { -1 } >\n                    <div className = 'video-preview-error'>{t(error)}</div>\n                </div>\n            );\n        }\n\n        const props: Object = {\n            className,\n            key,\n            tabIndex\n        };\n        const label = jitsiTrack && jitsiTrack.getTrackLabel();\n\n        if (isSelected) {\n            props['aria-checked'] = true;\n            props.className = `${className} video-preview-entry--selected`;\n        } else {\n            props.onClick = this._onEntryClick(deviceId);\n            props.onKeyPress = e => {\n                if (e.key === ' ' || e.key === 'Enter') {\n                    e.preventDefault();\n                    props.onClick();\n                }\n            };\n        }\n\n        return (\n            <div\n                { ...props }\n                role = 'radio'>\n                <div className = 'video-preview-label'>\n                    {label && <div className = 'video-preview-label-container'>\n                        <div className = 'video-preview-label-text'>\n                            <span>{label}</span></div>\n                    </div>}\n                </div>\n                <div className = 'video-preview-overlay' />\n                <Video\n                    className = { videoClassName }\n                    playsinline = { true }\n                    videoTrack = {{ jitsiTrack }} />\n            </div>\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._setTracks();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._componentWasUnmounted = true;\n        this._disposeTracks(this.state.trackData);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (!equals(this.props.videoDeviceIds, prevProps.videoDeviceIds)) {\n            this._setTracks();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { trackData } = this.state;\n\n        return (\n            <div\n                aria-labelledby = 'video-settings-button'\n                className = 'video-preview-container'\n                id = 'video-settings-dialog'\n                onKeyDown = { this._onEscClick }\n                ref = { this._videoContentRef }\n                role = 'radiogroup'\n                tabIndex = '-1'>\n                {trackData.map((data, i) => this._renderPreviewEntry(data, i))}\n            </div>\n        );\n    }\n}\n\n\nexport default translate(VideoSettingsContent);\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React from 'react';\n\nimport {\n    getVideoDeviceIds,\n    setVideoInputDeviceAndUpdateSettings\n} from '../../../../base/devices';\nimport { connect } from '../../../../base/redux';\nimport { SMALL_MOBILE_WIDTH } from '../../../../base/responsive-ui/constants';\nimport { getCurrentCameraDeviceId } from '../../../../base/settings';\nimport { toggleVideoSettings } from '../../../actions';\nimport { getVideoSettingsVisibility } from '../../../functions';\n\nimport VideoSettingsContent, { type Props as VideoSettingsProps } from './VideoSettingsContent';\n\n\ntype Props = VideoSettingsProps & {\n\n   /**\n    * Component children (the Video button).\n    */\n    children: React$Node,\n\n   /**\n    * Flag controlling the visibility of the popup.\n    */\n    isOpen: boolean,\n\n   /**\n    * Callback executed when the popup closes.\n    */\n    onClose: Function,\n\n    /**\n     * The popup placement enum value.\n     */\n     popupPlacement: string\n}\n\n/**\n * Popup with a preview of all the video devices.\n *\n * @returns {ReactElement}\n */\nfunction VideoSettingsPopup({\n    currentCameraDeviceId,\n    children,\n    isOpen,\n    onClose,\n    popupPlacement,\n    setVideoInputDevice,\n    videoDeviceIds\n}: Props) {\n    return (\n        <div className = 'video-preview'>\n            <InlineDialog\n                content = { <VideoSettingsContent\n                    currentCameraDeviceId = { currentCameraDeviceId }\n                    setVideoInputDevice = { setVideoInputDevice }\n                    toggleVideoSettings = { onClose }\n                    videoDeviceIds = { videoDeviceIds } /> }\n                isOpen = { isOpen }\n                onClose = { onClose }\n                placement = { popupPlacement }>\n                { children }\n            </InlineDialog>\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the associated {@code VideoSettingsPopup}'s\n * props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const { clientWidth } = state['features/base/responsive-ui'];\n\n    return {\n        currentCameraDeviceId: getCurrentCameraDeviceId(state),\n        isOpen: getVideoSettingsVisibility(state),\n        popupPlacement: clientWidth <= SMALL_MOBILE_WIDTH ? 'auto' : 'top-start',\n        videoDeviceIds: getVideoDeviceIds(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    onClose: toggleVideoSettings,\n    setVideoInputDevice: setVideoInputDeviceAndUpdateSettings\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoSettingsPopup);\n","/**\n * The redux action which signals that a configuration (commonly known in Jitsi\n * Meet as config.js) will be loaded for a specific locationURL.\n *\n * {\n *     type: CONFIG_WILL_LOAD,\n *     locationURL: URL,\n *     room: string\n * }\n */\nexport const CONFIG_WILL_LOAD = 'CONFIG_WILL_LOAD';\n\n/**\n * The redux action which signals that a configuration (commonly known in Jitsi\n * Meet as config.js) could not be loaded due to a specific error.\n *\n * {\n *     type: LOAD_CONFIG_ERROR,\n *     error: Error,\n *     locationURL: URL\n * }\n */\nexport const LOAD_CONFIG_ERROR = 'LOAD_CONFIG_ERROR';\n\n/**\n * The redux action which sets the configuration represented by the feature\n * base/config. The configuration is defined and consumed by the library\n * lib-jitsi-meet but some of its properties are consumed by the application\n * jitsi-meet as well.\n *\n * {\n *     type: SET_CONFIG,\n *     config: Object\n * }\n */\nexport const SET_CONFIG = 'SET_CONFIG';\n\n/**\n * The redux action which updates the configuration represented by the feature\n * base/config. The configuration is defined and consumed by the library\n * lib-jitsi-meet but some of its properties are consumed by the application\n * jitsi-meet as well. A merge operation is performed between the existing config\n * and the passed object.\n *\n * {\n *     type: UPDATE_CONFIG,\n *     config: Object\n * }\n */\nexport const UPDATE_CONFIG = 'UPDATE_CONFIG';\n\n/**\n * The redux action which overwrites configurations represented by the feature\n * base/config. The passed on config values overwrite the current values for given props.\n *\n * {\n *     type: OVERWRITE_CONFIG,\n *     config: Object\n * }\n */\nexport const OVERWRITE_CONFIG = 'OVERWRITE_CONFIG';\n","// @flow\n\n/**\n * Google API URL to retrieve streams for a live broadcast of a user.\n *\n * NOTE: The URL must be appended by a broadcast ID returned by a call towards\n * {@code API_URL_LIVE_BROADCASTS}.\n *\n * @type {string}\n */\n// eslint-disable-next-line max-len\nexport const API_URL_BROADCAST_STREAMS = 'https://content.googleapis.com/youtube/v3/liveStreams?part=id%2Csnippet%2Ccdn%2Cstatus&id=';\n\n/**\n * Google API URL to retrieve live broadcasts of a user.\n *\n * @type {string}\n */\n// eslint-disable-next-line max-len\nexport const API_URL_LIVE_BROADCASTS = 'https://content.googleapis.com/youtube/v3/liveBroadcasts?broadcastType=all&mine=true&part=id%2Csnippet%2CcontentDetails%2Cstatus';\n\n/**\n * Array of API discovery doc URLs for APIs used by the googleApi.\n *\n * @type {string[]}\n */\nexport const DISCOVERY_DOCS\n    = [ 'https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest' ];\n\n/**\n * An enumeration of the different states the Google API can be in.\n *\n * @private\n * @type {Object}\n */\nexport const GOOGLE_API_STATES = {\n    /**\n     * The state in which the Google API still needs to be loaded.\n     */\n    NEEDS_LOADING: 0,\n\n    /**\n     * The state in which the Google API is loaded and ready for use.\n     */\n    LOADED: 1,\n\n    /**\n     * The state in which a user has been logged in through the Google API.\n     */\n    SIGNED_IN: 2,\n\n    /**\n     * The state in which the Google authentication is not available (e.g. Play\n     * services are not installed on Android).\n     */\n    NOT_AVAILABLE: 3\n};\n\n/**\n * Google API auth scope to access Google calendar.\n *\n * @type {string}\n */\nexport const GOOGLE_SCOPE_CALENDAR = 'https://www.googleapis.com/auth/calendar';\n\n/**\n * Google API auth scope to access YouTube streams.\n *\n * @type {string}\n */\nexport const GOOGLE_SCOPE_YOUTUBE\n    = 'https://www.googleapis.com/auth/youtube.readonly';\n","// User invite statuses\n\n/**\n * Тhe status for a participant when it's invited to a conference.\n *\n * @type {string}\n */\nexport const INVITED = 'Invited';\n\n/**\n * Тhe status for a participant when a call has been initiated.\n *\n * @type {string}\n */\nexport const CALLING = 'calling';\n\n/**\n * Тhe status for a participant when the invite is received and its device(s)\n * are ringing.\n *\n * @type {string}\n */\nexport const RINGING = 'ringing';\n\n/**\n * A status for a participant that indicates the call is connected.\n *\n * @type {string}\n */\nexport const CONNECTED_USER = 'connected';\n\n/**\n * The status for a participant when the invitation is received but the user\n * has responded with busy message.\n *\n * @type {string}\n */\nexport const BUSY = 'busy';\n\n/**\n * The status for a participant when the invitation is rejected.\n *\n * @type {string}\n */\nexport const REJECTED = 'rejected';\n\n/**\n * The status for a participant when the invitation is ignored.\n *\n * @type {string}\n */\nexport const IGNORED = 'ignored';\n\n/**\n  * The status for a participant when the invitation is expired.\n *\n * @type {string}\n */\nexport const EXPIRED = 'expired';\n\n// Phone call statuses\n\n/**\n * A status for a participant that indicates the call is in process of\n * initialization.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const INITIALIZING_CALL = 'Initializing Call';\n\n/**\n * A status for a participant that indicates the call is in process of\n * connecting.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const CONNECTING = 'Connecting';\n\n/**\n * A status for a participant that indicates the call is in process of\n * connecting.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const CONNECTING2 = 'Connecting*';\n\n\n/**\n * A status for a phone number participant that indicates the call is connected.\n *\n * @type {string}\n */\nexport const CONNECTED_PHONE_NUMBER = 'Connected';\n\n\n/**\n * A status for a participant that indicates the call is disconnected.\n * NOTE: Currently used for phone numbers only.\n *\n * @type {string}\n */\nexport const DISCONNECTED = 'Disconnected';\n\n/**\n * Maps the presence status values to i18n translation keys.\n *\n * @type {Object<String, String>}\n */\nexport const STATUS_TO_I18N_KEY = {\n    [INVITED]: 'presenceStatus.invited',\n    [RINGING]: 'presenceStatus.ringing',\n    [CALLING]: 'presenceStatus.calling',\n    [BUSY]: 'presenceStatus.busy',\n    [REJECTED]: 'presenceStatus.rejected',\n    [IGNORED]: 'presenceStatus.ignored',\n    [EXPIRED]: 'presenceStatus.expired',\n\n    [INITIALIZING_CALL]: 'presenceStatus.initializingCall',\n    [CONNECTING]: 'presenceStatus.connecting',\n    [CONNECTING2]: 'presenceStatus.connecting2',\n    [CONNECTED_PHONE_NUMBER]: 'presenceStatus.connected',\n    [CONNECTED_USER]: 'presenceStatus.connected',\n    [DISCONNECTED]: 'presenceStatus.disconnected'\n};\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { getParticipantById } from '../../base/participants';\nimport { Text } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { STATUS_TO_I18N_KEY } from '../constants';\nimport { presenceStatusDisabled } from '../functions';\n\n/**\n * The type of the React {@code Component} props of {@link PresenceLabel}.\n */\ntype Props = {\n\n    /**\n     * The current present status associated with the passed in participantID\n     * prop.\n     */\n    _presence: string,\n\n    /**\n     * Class name for the presence label.\n     */\n    className: string,\n\n    /**\n     * Default presence status that will be displayed if user's presence status\n     * is not available.\n     */\n    defaultPresence: string,\n\n    /**\n     * The ID of the participant whose presence status should display.\n     */\n    participantID: string,\n\n    /**\n     * Styles for the presence label.\n     */\n    style: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} for displaying the current presence status of a\n * participant.\n *\n * @extends Component\n */\nclass PresenceLabel extends Component<Props> {\n    /**\n     * The default values for {@code PresenceLabel} component's property types.\n     *\n     * @static\n     */\n    static defaultProps = {\n        _presence: ''\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const text = this._getPresenceText();\n\n        if (text === null) {\n            return null;\n        }\n\n        const { style, className } = this.props;\n\n        return (\n            <Text\n                className = { className }\n                { ...style }>\n                { text }\n            </Text>);\n    }\n\n    /**\n     * Returns the text associated with the current presence status.\n     *\n     * @returns {string}\n     */\n    _getPresenceText() {\n        const { _presence, t } = this.props;\n\n        if (!_presence) {\n            return null;\n        }\n\n        const i18nKey = STATUS_TO_I18N_KEY[_presence];\n\n        if (!i18nKey) { // fallback to status value\n            return _presence;\n        }\n\n        return t(i18nKey);\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code PresenceLabel}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The React Component props passed to the associated\n * instance of {@code PresenceLabel}.\n * @private\n * @returns {{\n *     _presence: (string|undefined)\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const participant = getParticipantById(state, ownProps.participantID);\n\n    return {\n        _presence: presenceStatusDisabled() ? ''\n            : participant?.presence || ownProps.defaultPresence\n\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(PresenceLabel));\n","// @flow\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Tells whether presence status should be displayed.\n *\n * @returns {boolean}\n */\nexport function presenceStatusDisabled() {\n    return Boolean(typeof interfaceConfig !== 'undefined' && interfaceConfig?.DISABLE_PRESENCE_STATUS);\n}\n","/**\n * The type of (redux) action which signals that {@link LoginDialog} has been\n * canceled.\n *\n * {\n *     type: CANCEL_LOGIN\n * }\n */\nexport const CANCEL_LOGIN = 'CANCEL_LOGIN';\n\n/**\n * The type of (redux) action which signals that the cyclic operation of waiting\n * for conference owner has been aborted.\n *\n * {\n *     type: STOP_WAIT_FOR_OWNER\n * }\n */\nexport const STOP_WAIT_FOR_OWNER = 'STOP_WAIT_FOR_OWNER';\n\n/**\n * The type of (redux) action which informs that the authentication and role\n * upgrade process has finished either with success or with a specific error.\n * If {@code error} is {@code undefined}, then the process succeeded;\n * otherwise, it failed. Refer to\n * {@link JitsiConference#authenticateAndUpgradeRole} in lib-jitsi-meet for the\n * error details.\n *\n * {\n *     type: UPGRADE_ROLE_FINISHED,\n *     error: Object,\n *     progress: number,\n *     thenableWithCancel: Object\n * }\n */\nexport const UPGRADE_ROLE_FINISHED = 'UPGRADE_ROLE_FINISHED';\n\n/**\n * The type of (redux) action which signals that the process of authenticating\n * and upgrading the local participant's role has been started.\n *\n * {\n *     type: UPGRADE_ROLE_STARTED,\n *     thenableWithCancel: Object\n * }\n */\nexport const UPGRADE_ROLE_STARTED = 'UPGRADE_ROLE_STARTED';\n\n/**\n * The type of (redux) action that sets delayed handler which will check if\n * the conference has been created and it's now possible to join from anonymous\n * connection.\n *\n * {\n *     type: WAIT_FOR_OWNER,\n *     handler: Function,\n *     timeoutMs: number\n * }\n */\nexport const WAIT_FOR_OWNER = 'WAIT_FOR_OWNER';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/participants');\n","import { NOTIFICATION_TIMEOUT, showNotification } from '../../notifications';\nimport { set } from '../redux';\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    HIDDEN_PARTICIPANT_JOINED,\n    HIDDEN_PARTICIPANT_LEFT,\n    GRANT_MODERATOR,\n    KICK_PARTICIPANT,\n    LOCAL_PARTICIPANT_RAISE_HAND,\n    MUTE_REMOTE_PARTICIPANT,\n    PARTICIPANT_ID_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_KICKED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT,\n    SET_LOADABLE_AVATAR_URL\n} from './actionTypes';\nimport {\n    DISCO_REMOTE_CONTROL_FEATURE\n} from './constants';\nimport {\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    getParticipantDisplayName,\n    getParticipantById\n} from './functions';\nimport logger from './logger';\n\n/**\n * Create an action for when dominant speaker changes.\n *\n * @param {string} id - Participant's ID.\n * @param {JitsiConference} conference - The {@code JitsiConference} associated\n * with the participant identified by the specified {@code id}. Only the local\n * participant is allowed to not specify an associated {@code JitsiConference}\n * instance.\n * @returns {{\n *     type: DOMINANT_SPEAKER_CHANGED,\n *     participant: {\n *         conference: JitsiConference,\n *         id: string\n *     }\n * }}\n */\nexport function dominantSpeakerChanged(id, conference) {\n    return {\n        type: DOMINANT_SPEAKER_CHANGED,\n        participant: {\n            conference,\n            id\n        }\n    };\n}\n\n/**\n * Create an action for granting moderator to a participant.\n *\n * @param {string} id - Participant's ID.\n * @returns {{\n *     type: GRANT_MODERATOR,\n *     id: string\n * }}\n */\nexport function grantModerator(id) {\n    return {\n        type: GRANT_MODERATOR,\n        id\n    };\n}\n\n/**\n * Create an action for removing a participant from the conference.\n *\n * @param {string} id - Participant's ID.\n * @returns {{\n *     type: KICK_PARTICIPANT,\n *     id: string\n * }}\n */\nexport function kickParticipant(id) {\n    return {\n        type: KICK_PARTICIPANT,\n        id\n    };\n}\n\n/**\n * Creates an action to signal the connection status of the local participant\n * has changed.\n *\n * @param {string} connectionStatus - The current connection status of the local\n * participant, as enumerated by the library's participantConnectionStatus\n * constants.\n * @returns {Function}\n */\nexport function localParticipantConnectionStatusChanged(connectionStatus) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch(participantConnectionStatusChanged(\n                participant.id,\n                connectionStatus));\n        }\n    };\n}\n\n/**\n * Action to signal that the ID of local participant has changed. It happens\n * when the local participant joins a new conference or leaves an existing\n * conference.\n *\n * @param {string} id - New ID for local participant.\n * @returns {Function}\n */\nexport function localParticipantIdChanged(id) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch({\n                type: PARTICIPANT_ID_CHANGED,\n\n                // XXX A participant is identified by an id-conference pair.\n                // Only the local participant is with an undefined conference.\n                conference: undefined,\n                newValue: id,\n                oldValue: participant.id\n            });\n        }\n    };\n}\n\n/**\n * Action to signal that a local participant has joined.\n *\n * @param {Participant} participant={} - Information about participant.\n * @returns {{\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }}\n */\nexport function localParticipantJoined(participant = {}) {\n    return participantJoined(set(participant, 'local', true));\n}\n\n/**\n * Action to remove a local participant.\n *\n * @returns {Function}\n */\nexport function localParticipantLeft() {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return (\n                dispatch(\n                    participantLeft(\n                        participant.id,\n\n                        // XXX Only the local participant is allowed to leave\n                        // without stating the JitsiConference instance because\n                        // the local participant is uniquely identified by the\n                        // very fact that there is only one local participant\n                        // (and the fact that the local participant \"joins\" at\n                        // the beginning of the app and \"leaves\" at the end of\n                        // the app).\n                        undefined)));\n        }\n    };\n}\n\n/**\n * Action to signal the role of the local participant has changed. It can happen\n * when the participant has joined a conference, even before a non-default local\n * id has been set, or after a moderator leaves.\n *\n * @param {string} role - The new role of the local participant.\n * @returns {Function}\n */\nexport function localParticipantRoleChanged(role) {\n    return (dispatch, getState) => {\n        const participant = getLocalParticipant(getState);\n\n        if (participant) {\n            return dispatch(participantRoleChanged(participant.id, role));\n        }\n    };\n}\n\n/**\n * Create an action for muting another participant in the conference.\n *\n * @param {string} id - Participant's ID.\n * @param {MEDIA_TYPE} mediaType - The media to mute.\n * @returns {{\n *     type: MUTE_REMOTE_PARTICIPANT,\n *     id: string,\n *     mediaType: MEDIA_TYPE\n * }}\n */\nexport function muteRemoteParticipant(id, mediaType) {\n    return {\n        type: MUTE_REMOTE_PARTICIPANT,\n        id,\n        mediaType\n    };\n}\n\n/**\n * Action to update a participant's connection status.\n *\n * @param {string} id - Participant's ID.\n * @param {string} connectionStatus - The new connection status of the\n * participant.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         connectionStatus: string,\n *         id: string\n *     }\n * }}\n */\nexport function participantConnectionStatusChanged(id, connectionStatus) {\n    return {\n        type: PARTICIPANT_UPDATED,\n        participant: {\n            connectionStatus,\n            id\n        }\n    };\n}\n\n/**\n * Action to signal that a participant has joined.\n *\n * @param {Participant} participant - Information about participant.\n * @returns {{\n *     type: PARTICIPANT_JOINED,\n *     participant: Participant\n * }}\n */\nexport function participantJoined(participant) {\n    // Only the local participant is not identified with an id-conference pair.\n    if (participant.local) {\n        return {\n            type: PARTICIPANT_JOINED,\n            participant\n        };\n    }\n\n    // In other words, a remote participant is identified with an id-conference\n    // pair.\n    const { conference } = participant;\n\n    if (!conference) {\n        throw Error(\n            'A remote participant must be associated with a JitsiConference!');\n    }\n\n    return (dispatch, getState) => {\n        // A remote participant is only expected to join in a joined or joining\n        // conference. The following check is really necessary because a\n        // JitsiConference may have moved into leaving but may still manage to\n        // sneak a PARTICIPANT_JOINED in if its leave is delayed for any purpose\n        // (which is not outragous given that leaving involves network\n        // requests.)\n        const stateFeaturesBaseConference\n            = getState()['features/base/conference'];\n\n        if (conference === stateFeaturesBaseConference.conference\n                || conference === stateFeaturesBaseConference.joining) {\n            return dispatch({\n                type: PARTICIPANT_JOINED,\n                participant\n            });\n        }\n    };\n}\n\n/**\n * Updates the features of a remote participant.\n *\n * @param {JitsiParticipant} jitsiParticipant - The ID of the participant.\n * @returns {{\n*     type: PARTICIPANT_UPDATED,\n*     participant: Participant\n* }}\n*/\nexport function updateRemoteParticipantFeatures(jitsiParticipant) {\n    return (dispatch, getState) => {\n        if (!jitsiParticipant) {\n            return;\n        }\n\n        const id = jitsiParticipant.getId();\n\n        jitsiParticipant.getFeatures()\n            .then(features => {\n                const supportsRemoteControl = features.has(DISCO_REMOTE_CONTROL_FEATURE);\n                const participant = getParticipantById(getState(), id);\n\n                if (!participant || participant.local) {\n                    return;\n                }\n\n                if (participant?.supportsRemoteControl !== supportsRemoteControl) {\n                    return dispatch({\n                        type: PARTICIPANT_UPDATED,\n                        participant: {\n                            id,\n                            supportsRemoteControl\n                        }\n                    });\n                }\n            })\n            .catch(error => {\n                logger.error(`Failed to get participant features for ${id}!`, error);\n            });\n    };\n}\n\n/**\n * Action to signal that a hidden participant has joined the conference.\n *\n * @param {string} id - The id of the participant.\n * @param {string} displayName - The display name, or undefined when\n * unknown.\n * @returns {{\n *     type: HIDDEN_PARTICIPANT_JOINED,\n *     displayName: string,\n *     id: string\n * }}\n */\nexport function hiddenParticipantJoined(id, displayName) {\n    return {\n        type: HIDDEN_PARTICIPANT_JOINED,\n        id,\n        displayName\n    };\n}\n\n/**\n * Action to signal that a hidden participant has left the conference.\n *\n * @param {string} id - The id of the participant.\n * @returns {{\n *     type: HIDDEN_PARTICIPANT_LEFT,\n *     id: string\n * }}\n */\nexport function hiddenParticipantLeft(id) {\n    return {\n        type: HIDDEN_PARTICIPANT_LEFT,\n        id\n    };\n}\n\n/**\n * Action to signal that a participant has left.\n *\n * @param {string} id - Participant's ID.\n * @param {JitsiConference} conference - The {@code JitsiConference} associated\n * with the participant identified by the specified {@code id}. Only the local\n * participant is allowed to not specify an associated {@code JitsiConference}\n * instance.\n * @param {boolean} isReplaced - Whether the participant is to be replaced in the meeting.\n * @returns {{\n *     type: PARTICIPANT_LEFT,\n *     participant: {\n *         conference: JitsiConference,\n *         id: string\n *     }\n * }}\n */\nexport function participantLeft(id, conference, isReplaced) {\n    return {\n        type: PARTICIPANT_LEFT,\n        participant: {\n            conference,\n            id,\n            isReplaced\n        }\n    };\n}\n\n/**\n * Action to signal that a participant's presence status has changed.\n *\n * @param {string} id - Participant's ID.\n * @param {string} presence - Participant's new presence status.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         id: string,\n *         presence: string\n *     }\n * }}\n */\nexport function participantPresenceChanged(id, presence) {\n    return participantUpdated({\n        id,\n        presence\n    });\n}\n\n/**\n * Action to signal that a participant's role has changed.\n *\n * @param {string} id - Participant's ID.\n * @param {PARTICIPANT_ROLE} role - Participant's new role.\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: {\n *         id: string,\n *         role: PARTICIPANT_ROLE\n *     }\n * }}\n */\nexport function participantRoleChanged(id, role) {\n    return participantUpdated({\n        id,\n        role\n    });\n}\n\n/**\n * Action to signal that some of participant properties has been changed.\n *\n * @param {Participant} participant={} - Information about participant. To\n * identify the participant the object should contain either property id with\n * value the id of the participant or property local with value true (if the\n * local participant hasn't joined the conference yet).\n * @returns {{\n *     type: PARTICIPANT_UPDATED,\n *     participant: Participant\n * }}\n */\nexport function participantUpdated(participant = {}) {\n    const participantToUpdate = {\n        ...participant\n    };\n\n    if (participant.name) {\n        participantToUpdate.name = getNormalizedDisplayName(participant.name);\n    }\n\n    return {\n        type: PARTICIPANT_UPDATED,\n        participant: participantToUpdate\n    };\n}\n\n/**\n * Action to signal that a participant has muted us.\n *\n * @param {JitsiParticipant} participant - Information about participant.\n * @param {JitsiLocalTrack} track - Information about the track that has been muted.\n * @returns {Promise}\n */\nexport function participantMutedUs(participant, track) {\n    return (dispatch, getState) => {\n        if (!participant) {\n            return;\n        }\n\n        const isAudio = track.isAudioTrack();\n\n        dispatch(showNotification({\n            descriptionKey: isAudio ? 'notify.mutedRemotelyDescription' : 'notify.videoMutedRemotelyDescription',\n            titleKey: isAudio ? 'notify.mutedRemotelyTitle' : 'notify.videoMutedRemotelyTitle',\n            titleArguments: {\n                participantDisplayName:\n                    getParticipantDisplayName(getState, participant.getId())\n            }\n        }));\n    };\n}\n\n/**\n * Action to signal that a participant had been kicked.\n *\n * @param {JitsiParticipant} kicker - Information about participant performing the kick.\n * @param {JitsiParticipant} kicked - Information about participant that was kicked.\n * @returns {Promise}\n */\nexport function participantKicked(kicker, kicked) {\n    return (dispatch, getState) => {\n\n        dispatch({\n            type: PARTICIPANT_KICKED,\n            kicked: kicked.getId(),\n            kicker: kicker?.getId()\n        });\n\n        if (kicked.isReplaced && kicked.isReplaced()) {\n            return;\n        }\n\n        dispatch(showNotification({\n            titleArguments: {\n                kicked:\n                    getParticipantDisplayName(getState, kicked.getId()),\n                kicker:\n                    getParticipantDisplayName(getState, kicker.getId())\n            },\n            titleKey: 'notify.kickParticipant'\n        }, NOTIFICATION_TIMEOUT * 2)); // leave more time for this\n    };\n}\n\n/**\n * Create an action which pins a conference participant.\n *\n * @param {string|null} id - The ID of the conference participant to pin or null\n * if none of the conference's participants are to be pinned.\n * @returns {{\n *     type: PIN_PARTICIPANT,\n *     participant: {\n *         id: string\n *     }\n * }}\n */\nexport function pinParticipant(id) {\n    return {\n        type: PIN_PARTICIPANT,\n        participant: {\n            id\n        }\n    };\n}\n\n/**\n * Creates an action which notifies the app that the loadable URL of the avatar of a participant got updated.\n *\n * @param {string} participantId - The ID of the participant.\n * @param {string} url - The new URL.\n * @returns {{\n *     type: SET_LOADABLE_AVATAR_URL,\n *     participant: {\n *         id: string,\n *         loadableAvatarUrl: string\n *     }\n * }}\n*/\nexport function setLoadableAvatarUrl(participantId, url) {\n    return {\n        type: SET_LOADABLE_AVATAR_URL,\n        participant: {\n            id: participantId,\n            loadableAvatarUrl: url\n        }\n    };\n}\n\n/**\n * Raise hand for the local participant.\n *\n * @param {boolean} enabled - Raise or lower hand.\n * @returns {{\n *     type: LOCAL_PARTICIPANT_RAISE_HAND,\n *     enabled: boolean\n * }}\n */\nexport function raiseHand(enabled) {\n    return {\n        type: LOCAL_PARTICIPANT_RAISE_HAND,\n        enabled\n    };\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (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;\n","/**\n * JaaS customer statuses which represent their account state\n */\nexport const STATUSES = {\n    ACTIVE: 'ACTIVE',\n    BLOCKED: 'BLOCKED'\n};\n\n/**\n * Service features for JaaS users\n */\nexport const FEATURES = {\n    INBOUND_CALL: 'inbound-call',\n    OUTBOUND_CALL: 'outbound-call',\n    RECORDING: 'recording',\n    SIP_INBOUND_CALL: 'sip-inbound-call',\n    SIP_OUTBOUND_CALL: 'sip-outbound-call',\n    STREAMING: 'streaming',\n    TRANSCRIPTION: 'transcription'\n};\n\n/**\n * URL for displaying JaaS upgrade options\n */\nexport const JAAS_UPGRADE_URL = 'https://jaas.8x8.vc/#/plan/upgrade';\n\n/**\n * The prefix for the vpaas tenant.\n */\nexport const VPAAS_TENANT_PREFIX = 'vpaas-magic-cookie-';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconMicDisabled } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link AudioMutedIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing an audio muted icon with a tooltip.\n *\n * @extends Component\n */\nclass AudioMutedIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'audioMuted toolbar-icon'\n                icon = { IconMicDisabled }\n                iconId = 'mic-disabled'\n                iconSize = { 13 }\n                tooltipKey = 'videothumbnail.mute'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default AudioMutedIndicator;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconDominantSpeaker } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link DominantSpeakerIndicator}.\n */\ntype Props = {\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * Thumbnail badge showing that the participant is the dominant speaker in\n * the conference.\n *\n * @extends Component\n */\nclass DominantSpeakerIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'indicator show-inline'\n                icon = { IconDominantSpeaker }\n                iconClassName = 'indicatoricon'\n                iconSize = { `${this.props.iconSize}px` }\n                id = 'dominantspeakerindicator'\n                tooltipKey = 'speaker'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default DominantSpeakerIndicator;\n","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var lastThis;\n    var lastArgs = [];\n    var lastResult;\n    var calledOnce = false;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n            return lastResult;\n        }\n        lastResult = resultFn.apply(this, newArgs);\n        calledOnce = true;\n        lastThis = this;\n        lastArgs = newArgs;\n        return lastResult;\n    }\n    return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n  return performance.now();\n} : function () {\n  return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n  cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n  var start = now();\n\n  function tick() {\n    if (now() - start >= delay) {\n      callback.call(null);\n    } else {\n      timeoutID.id = requestAnimationFrame(tick);\n    }\n  }\n\n  var timeoutID = {\n    id: requestAnimationFrame(tick)\n  };\n  return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n  if (recalculate === void 0) {\n    recalculate = false;\n  }\n\n  if (size === -1 || recalculate) {\n    var div = document.createElement('div');\n    var style = div.style;\n    style.width = '50px';\n    style.height = '50px';\n    style.overflow = 'scroll';\n    document.body.appendChild(div);\n    size = div.offsetWidth - div.clientWidth;\n    document.body.removeChild(div);\n  }\n\n  return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n  if (recalculate === void 0) {\n    recalculate = false;\n  }\n\n  if (cachedRTLResult === null || recalculate) {\n    var outerDiv = document.createElement('div');\n    var outerStyle = outerDiv.style;\n    outerStyle.width = '50px';\n    outerStyle.height = '50px';\n    outerStyle.overflow = 'scroll';\n    outerStyle.direction = 'rtl';\n    var innerDiv = document.createElement('div');\n    var innerStyle = innerDiv.style;\n    innerStyle.width = '100px';\n    innerStyle.height = '100px';\n    outerDiv.appendChild(innerDiv);\n    document.body.appendChild(outerDiv);\n\n    if (outerDiv.scrollLeft > 0) {\n      cachedRTLResult = 'positive-descending';\n    } else {\n      outerDiv.scrollLeft = 1;\n\n      if (outerDiv.scrollLeft === 0) {\n        cachedRTLResult = 'negative';\n      } else {\n        cachedRTLResult = 'positive-ascending';\n      }\n    }\n\n    document.body.removeChild(outerDiv);\n    return cachedRTLResult;\n  }\n\n  return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n  var columnIndex = _ref.columnIndex,\n      data = _ref.data,\n      rowIndex = _ref.rowIndex;\n  return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n  if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n    devWarningsOverscanCount =\n    /*#__PURE__*/\n    new WeakSet();\n    devWarningsOverscanRowsColumnsCount =\n    /*#__PURE__*/\n    new WeakSet();\n    devWarningsTagName =\n    /*#__PURE__*/\n    new WeakSet();\n  }\n}\n\nfunction createGridComponent(_ref2) {\n  var _class, _temp;\n\n  var getColumnOffset = _ref2.getColumnOffset,\n      getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n      getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n      getColumnWidth = _ref2.getColumnWidth,\n      getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n      getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n      getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n      getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n      getRowHeight = _ref2.getRowHeight,\n      getRowOffset = _ref2.getRowOffset,\n      getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n      getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n      initInstanceProps = _ref2.initInstanceProps,\n      shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n      validateProps = _ref2.validateProps;\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_PureComponent) {\n    _inheritsLoose(Grid, _PureComponent);\n\n    // Always use explicit constructor for React components.\n    // It produces less code after transpilation. (#26)\n    // eslint-disable-next-line no-useless-constructor\n    function Grid(props) {\n      var _this;\n\n      _this = _PureComponent.call(this, props) || this;\n      _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_assertThisInitialized(_this)));\n      _this._resetIsScrollingTimeoutId = null;\n      _this._outerRef = void 0;\n      _this.state = {\n        instance: _assertThisInitialized(_assertThisInitialized(_this)),\n        isScrolling: false,\n        horizontalScrollDirection: 'forward',\n        scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n        scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n        scrollUpdateWasRequested: false,\n        verticalScrollDirection: 'forward'\n      };\n      _this._callOnItemsRendered = void 0;\n      _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n        return _this.props.onItemsRendered({\n          overscanColumnStartIndex: overscanColumnStartIndex,\n          overscanColumnStopIndex: overscanColumnStopIndex,\n          overscanRowStartIndex: overscanRowStartIndex,\n          overscanRowStopIndex: overscanRowStopIndex,\n          visibleColumnStartIndex: visibleColumnStartIndex,\n          visibleColumnStopIndex: visibleColumnStopIndex,\n          visibleRowStartIndex: visibleRowStartIndex,\n          visibleRowStopIndex: visibleRowStopIndex\n        });\n      });\n      _this._callOnScroll = void 0;\n      _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n        return _this.props.onScroll({\n          horizontalScrollDirection: horizontalScrollDirection,\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          verticalScrollDirection: verticalScrollDirection,\n          scrollUpdateWasRequested: scrollUpdateWasRequested\n        });\n      });\n      _this._getItemStyle = void 0;\n\n      _this._getItemStyle = function (rowIndex, columnIndex) {\n        var _this$props = _this.props,\n            columnWidth = _this$props.columnWidth,\n            direction = _this$props.direction,\n            rowHeight = _this$props.rowHeight;\n\n        var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n        var key = rowIndex + \":\" + columnIndex;\n        var style;\n\n        if (itemStyleCache.hasOwnProperty(key)) {\n          style = itemStyleCache[key];\n        } else {\n          var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n          var isRtl = direction === 'rtl';\n          itemStyleCache[key] = style = {\n            position: 'absolute',\n            left: isRtl ? undefined : _offset,\n            right: isRtl ? _offset : undefined,\n            top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n            height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n            width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n          };\n        }\n\n        return style;\n      };\n\n      _this._getItemStyleCache = void 0;\n      _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n        return {};\n      });\n\n      _this._onScroll = function (event) {\n        var _event$currentTarget = event.currentTarget,\n            clientHeight = _event$currentTarget.clientHeight,\n            clientWidth = _event$currentTarget.clientWidth,\n            scrollLeft = _event$currentTarget.scrollLeft,\n            scrollTop = _event$currentTarget.scrollTop,\n            scrollHeight = _event$currentTarget.scrollHeight,\n            scrollWidth = _event$currentTarget.scrollWidth;\n\n        _this.setState(function (prevState) {\n          if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n            // Scroll position may have been updated by cDM/cDU,\n            // In which case we don't need to trigger another render,\n            // And we don't want to update state.isScrolling.\n            return null;\n          }\n\n          var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n          // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n          // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n          // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n          var calculatedScrollLeft = scrollLeft;\n\n          if (direction === 'rtl') {\n            switch (getRTLOffsetType()) {\n              case 'negative':\n                calculatedScrollLeft = -scrollLeft;\n                break;\n\n              case 'positive-descending':\n                calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n                break;\n            }\n          } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n          calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n          var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n          return {\n            isScrolling: true,\n            horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n            scrollLeft: calculatedScrollLeft,\n            scrollTop: calculatedScrollTop,\n            verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n            scrollUpdateWasRequested: false\n          };\n        }, _this._resetIsScrollingDebounced);\n      };\n\n      _this._outerRefSetter = function (ref) {\n        var outerRef = _this.props.outerRef;\n        _this._outerRef = ref;\n\n        if (typeof outerRef === 'function') {\n          outerRef(ref);\n        } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n          outerRef.current = ref;\n        }\n      };\n\n      _this._resetIsScrollingDebounced = function () {\n        if (_this._resetIsScrollingTimeoutId !== null) {\n          cancelTimeout(_this._resetIsScrollingTimeoutId);\n        }\n\n        _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n      };\n\n      _this._resetIsScrolling = function () {\n        _this._resetIsScrollingTimeoutId = null;\n\n        _this.setState({\n          isScrolling: false\n        }, function () {\n          // Clear style cache after state update has been committed.\n          // This way we don't break pure sCU for items that don't use isScrolling param.\n          _this._getItemStyleCache(-1);\n        });\n      };\n\n      return _this;\n    }\n\n    Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n      validateSharedProps(nextProps, prevState);\n      validateProps(nextProps);\n      return null;\n    };\n\n    var _proto = Grid.prototype;\n\n    _proto.scrollTo = function scrollTo(_ref3) {\n      var scrollLeft = _ref3.scrollLeft,\n          scrollTop = _ref3.scrollTop;\n\n      if (scrollLeft !== undefined) {\n        scrollLeft = Math.max(0, scrollLeft);\n      }\n\n      if (scrollTop !== undefined) {\n        scrollTop = Math.max(0, scrollTop);\n      }\n\n      this.setState(function (prevState) {\n        if (scrollLeft === undefined) {\n          scrollLeft = prevState.scrollLeft;\n        }\n\n        if (scrollTop === undefined) {\n          scrollTop = prevState.scrollTop;\n        }\n\n        if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n          return null;\n        }\n\n        return {\n          horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n          scrollLeft: scrollLeft,\n          scrollTop: scrollTop,\n          scrollUpdateWasRequested: true,\n          verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n        };\n      }, this._resetIsScrollingDebounced);\n    };\n\n    _proto.scrollToItem = function scrollToItem(_ref4) {\n      var _ref4$align = _ref4.align,\n          align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n          columnIndex = _ref4.columnIndex,\n          rowIndex = _ref4.rowIndex;\n      var _this$props2 = this.props,\n          columnCount = _this$props2.columnCount,\n          height = _this$props2.height,\n          rowCount = _this$props2.rowCount,\n          width = _this$props2.width;\n      var _this$state = this.state,\n          scrollLeft = _this$state.scrollLeft,\n          scrollTop = _this$state.scrollTop;\n      var scrollbarSize = getScrollbarSize();\n\n      if (columnIndex !== undefined) {\n        columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n      }\n\n      if (rowIndex !== undefined) {\n        rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n      }\n\n      var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n      var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n      // to ensure it's fully visible.\n      // But we only need to account for its size when it's actually visible.\n\n      var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n      var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n      this.scrollTo({\n        scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n        scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n      });\n    };\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this$props3 = this.props,\n          initialScrollLeft = _this$props3.initialScrollLeft,\n          initialScrollTop = _this$props3.initialScrollTop;\n\n      if (this._outerRef != null) {\n        var outerRef = this._outerRef;\n\n        if (typeof initialScrollLeft === 'number') {\n          outerRef.scrollLeft = initialScrollLeft;\n        }\n\n        if (typeof initialScrollTop === 'number') {\n          outerRef.scrollTop = initialScrollTop;\n        }\n      }\n\n      this._callPropsCallbacks();\n    };\n\n    _proto.componentDidUpdate = function componentDidUpdate() {\n      var direction = this.props.direction;\n      var _this$state2 = this.state,\n          scrollLeft = _this$state2.scrollLeft,\n          scrollTop = _this$state2.scrollTop,\n          scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n      if (scrollUpdateWasRequested && this._outerRef != null) {\n        // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n        // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n        // So we need to determine which browser behavior we're dealing with, and mimic it.\n        var outerRef = this._outerRef;\n\n        if (direction === 'rtl') {\n          switch (getRTLOffsetType()) {\n            case 'negative':\n              outerRef.scrollLeft = -scrollLeft;\n              break;\n\n            case 'positive-ascending':\n              outerRef.scrollLeft = scrollLeft;\n              break;\n\n            default:\n              var clientWidth = outerRef.clientWidth,\n                  scrollWidth = outerRef.scrollWidth;\n              outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n              break;\n          }\n        } else {\n          outerRef.scrollLeft = Math.max(0, scrollLeft);\n        }\n\n        outerRef.scrollTop = Math.max(0, scrollTop);\n      }\n\n      this._callPropsCallbacks();\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n    };\n\n    _proto.render = function render() {\n      var _this$props4 = this.props,\n          children = _this$props4.children,\n          className = _this$props4.className,\n          columnCount = _this$props4.columnCount,\n          direction = _this$props4.direction,\n          height = _this$props4.height,\n          innerRef = _this$props4.innerRef,\n          innerElementType = _this$props4.innerElementType,\n          innerTagName = _this$props4.innerTagName,\n          itemData = _this$props4.itemData,\n          _this$props4$itemKey = _this$props4.itemKey,\n          itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n          outerElementType = _this$props4.outerElementType,\n          outerTagName = _this$props4.outerTagName,\n          rowCount = _this$props4.rowCount,\n          style = _this$props4.style,\n          useIsScrolling = _this$props4.useIsScrolling,\n          width = _this$props4.width;\n      var isScrolling = this.state.isScrolling;\n\n      var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n          columnStartIndex = _this$_getHorizontalR[0],\n          columnStopIndex = _this$_getHorizontalR[1];\n\n      var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n          rowStartIndex = _this$_getVerticalRan[0],\n          rowStopIndex = _this$_getVerticalRan[1];\n\n      var items = [];\n\n      if (columnCount > 0 && rowCount) {\n        for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n          for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n            items.push(createElement(children, {\n              columnIndex: _columnIndex,\n              data: itemData,\n              isScrolling: useIsScrolling ? isScrolling : undefined,\n              key: itemKey({\n                columnIndex: _columnIndex,\n                data: itemData,\n                rowIndex: _rowIndex\n              }),\n              rowIndex: _rowIndex,\n              style: this._getItemStyle(_rowIndex, _columnIndex)\n            }));\n          }\n        }\n      } // Read this value AFTER items have been created,\n      // So their actual sizes (if variable) are taken into consideration.\n\n\n      var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n      var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n      return createElement(outerElementType || outerTagName || 'div', {\n        className: className,\n        onScroll: this._onScroll,\n        ref: this._outerRefSetter,\n        style: _extends({\n          position: 'relative',\n          height: height,\n          width: width,\n          overflow: 'auto',\n          WebkitOverflowScrolling: 'touch',\n          willChange: 'transform',\n          direction: direction\n        }, style)\n      }, createElement(innerElementType || innerTagName || 'div', {\n        children: items,\n        ref: innerRef,\n        style: {\n          height: estimatedTotalHeight,\n          pointerEvents: isScrolling ? 'none' : undefined,\n          width: estimatedTotalWidth\n        }\n      }));\n    };\n\n    _proto._callPropsCallbacks = function _callPropsCallbacks() {\n      var _this$props5 = this.props,\n          columnCount = _this$props5.columnCount,\n          onItemsRendered = _this$props5.onItemsRendered,\n          onScroll = _this$props5.onScroll,\n          rowCount = _this$props5.rowCount;\n\n      if (typeof onItemsRendered === 'function') {\n        if (columnCount > 0 && rowCount > 0) {\n          var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n              _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n              _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n              _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n              _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n          var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n              _overscanRowStartIndex = _this$_getVerticalRan2[0],\n              _overscanRowStopIndex = _this$_getVerticalRan2[1],\n              _visibleRowStartIndex = _this$_getVerticalRan2[2],\n              _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n          this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n        }\n      }\n\n      if (typeof onScroll === 'function') {\n        var _this$state3 = this.state,\n            _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n            _scrollLeft = _this$state3.scrollLeft,\n            _scrollTop = _this$state3.scrollTop,\n            _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n            _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n        this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n      }\n    }; // Lazily create and cache item styles while scrolling,\n    // So that pure component sCU will prevent re-renders.\n    // We maintain this cache, and pass a style prop rather than index,\n    // So that List can clear cached styles and force item re-render if necessary.\n\n\n    _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n      var _this$props6 = this.props,\n          columnCount = _this$props6.columnCount,\n          overscanColumnCount = _this$props6.overscanColumnCount,\n          overscanColumnsCount = _this$props6.overscanColumnsCount,\n          overscanCount = _this$props6.overscanCount,\n          rowCount = _this$props6.rowCount;\n      var _this$state4 = this.state,\n          horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n          isScrolling = _this$state4.isScrolling,\n          scrollLeft = _this$state4.scrollLeft;\n      var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n      if (columnCount === 0 || rowCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n      var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n\n      var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n      var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n      return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n    };\n\n    _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n      var _this$props7 = this.props,\n          columnCount = _this$props7.columnCount,\n          overscanCount = _this$props7.overscanCount,\n          overscanRowCount = _this$props7.overscanRowCount,\n          overscanRowsCount = _this$props7.overscanRowsCount,\n          rowCount = _this$props7.rowCount;\n      var _this$state5 = this.state,\n          isScrolling = _this$state5.isScrolling,\n          verticalScrollDirection = _this$state5.verticalScrollDirection,\n          scrollTop = _this$state5.scrollTop;\n      var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n      if (columnCount === 0 || rowCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n      var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n\n      var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n      var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n      return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n    };\n\n    return Grid;\n  }(PureComponent), _class.defaultProps = {\n    direction: 'ltr',\n    itemData: undefined,\n    useIsScrolling: false\n  }, _temp;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n  var children = _ref5.children,\n      direction = _ref5.direction,\n      height = _ref5.height,\n      innerTagName = _ref5.innerTagName,\n      outerTagName = _ref5.outerTagName,\n      overscanColumnsCount = _ref5.overscanColumnsCount,\n      overscanCount = _ref5.overscanCount,\n      overscanRowsCount = _ref5.overscanRowsCount,\n      width = _ref5.width;\n  var instance = _ref6.instance;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof overscanCount === 'number') {\n      if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n        devWarningsOverscanCount.add(instance);\n        console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n      }\n    }\n\n    if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n      if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n        devWarningsOverscanRowsColumnsCount.add(instance);\n        console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n      }\n    }\n\n    if (innerTagName != null || outerTagName != null) {\n      if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n        devWarningsTagName.add(instance);\n        console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n      }\n    }\n\n    if (children == null) {\n      throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n    }\n\n    switch (direction) {\n      case 'ltr':\n      case 'rtl':\n        // Valid values\n        break;\n\n      default:\n        throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n    }\n\n    if (typeof width !== 'number') {\n      throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n    }\n\n    if (typeof height !== 'number') {\n      throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n    }\n  }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n  var rowCount = _ref.rowCount;\n  var rowMetadataMap = _ref2.rowMetadataMap,\n      estimatedRowHeight = _ref2.estimatedRowHeight,\n      lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n  var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n  // https://github.com/bvaughn/react-window/pull/138\n\n  if (lastMeasuredRowIndex >= rowCount) {\n    lastMeasuredRowIndex = rowCount - 1;\n  }\n\n  if (lastMeasuredRowIndex >= 0) {\n    var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n    totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n  }\n\n  var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n  var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n  return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n  var columnCount = _ref3.columnCount;\n  var columnMetadataMap = _ref4.columnMetadataMap,\n      estimatedColumnWidth = _ref4.estimatedColumnWidth,\n      lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n  var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n  // https://github.com/bvaughn/react-window/pull/138\n\n  if (lastMeasuredColumnIndex >= columnCount) {\n    lastMeasuredColumnIndex = columnCount - 1;\n  }\n\n  if (lastMeasuredColumnIndex >= 0) {\n    var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n    totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n  }\n\n  var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n  var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n  return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n  var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n  if (itemType === 'column') {\n    itemMetadataMap = instanceProps.columnMetadataMap;\n    itemSize = props.columnWidth;\n    lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n  } else {\n    itemMetadataMap = instanceProps.rowMetadataMap;\n    itemSize = props.rowHeight;\n    lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n  }\n\n  if (index > lastMeasuredIndex) {\n    var offset = 0;\n\n    if (lastMeasuredIndex >= 0) {\n      var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n      offset = itemMetadata.offset + itemMetadata.size;\n    }\n\n    for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n      var size = itemSize(i);\n      itemMetadataMap[i] = {\n        offset: offset,\n        size: size\n      };\n      offset += size;\n    }\n\n    if (itemType === 'column') {\n      instanceProps.lastMeasuredColumnIndex = index;\n    } else {\n      instanceProps.lastMeasuredRowIndex = index;\n    }\n  }\n\n  return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n  var itemMetadataMap, lastMeasuredIndex;\n\n  if (itemType === 'column') {\n    itemMetadataMap = instanceProps.columnMetadataMap;\n    lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n  } else {\n    itemMetadataMap = instanceProps.rowMetadataMap;\n    lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n  }\n\n  var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n  if (lastMeasuredItemOffset >= offset) {\n    // If we've already measured items within this range just use a binary search as it's faster.\n    return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n  } else {\n    // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n    // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n    // The overall complexity for this approach is O(log n).\n    return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n  }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n  while (low <= high) {\n    var middle = low + Math.floor((high - low) / 2);\n    var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n    if (currentOffset === offset) {\n      return middle;\n    } else if (currentOffset < offset) {\n      low = middle + 1;\n    } else if (currentOffset > offset) {\n      high = middle - 1;\n    }\n  }\n\n  if (low > 0) {\n    return low - 1;\n  } else {\n    return 0;\n  }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n  var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n  var interval = 1;\n\n  while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n    index += interval;\n    interval *= 2;\n  }\n\n  return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n  var size = itemType === 'column' ? props.width : props.height;\n  var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n  // To ensure it reflects actual measurements instead of just estimates.\n\n  var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n  var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n  var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n  if (align === 'smart') {\n    if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n      align = 'auto';\n    } else {\n      align = 'center';\n    }\n  }\n\n  switch (align) {\n    case 'start':\n      return maxOffset;\n\n    case 'end':\n      return minOffset;\n\n    case 'center':\n      return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n    case 'auto':\n    default:\n      if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n        return scrollOffset;\n      } else if (minOffset > maxOffset) {\n        // Because we only take into account the scrollbar size when calculating minOffset\n        // this value can be larger than maxOffset when at the end of the list\n        return minOffset;\n      } else if (scrollOffset < minOffset) {\n        return minOffset;\n      } else {\n        return maxOffset;\n      }\n\n  }\n};\n\nvar VariableSizeGrid =\n/*#__PURE__*/\ncreateGridComponent({\n  getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n    return getItemMetadata('column', props, index, instanceProps).offset;\n  },\n  getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n    return findNearestItem('column', props, instanceProps, scrollLeft);\n  },\n  getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n    var columnCount = props.columnCount,\n        width = props.width;\n    var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n    var maxOffset = scrollLeft + width;\n    var offset = itemMetadata.offset + itemMetadata.size;\n    var stopIndex = startIndex;\n\n    while (stopIndex < columnCount - 1 && offset < maxOffset) {\n      stopIndex++;\n      offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n    }\n\n    return stopIndex;\n  },\n  getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n    return instanceProps.columnMetadataMap[index].size;\n  },\n  getEstimatedTotalHeight: getEstimatedTotalHeight,\n  getEstimatedTotalWidth: getEstimatedTotalWidth,\n  getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n    return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n  },\n  getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n    return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n  },\n  getRowOffset: function getRowOffset(props, index, instanceProps) {\n    return getItemMetadata('row', props, index, instanceProps).offset;\n  },\n  getRowHeight: function getRowHeight(props, index, instanceProps) {\n    return instanceProps.rowMetadataMap[index].size;\n  },\n  getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n    return findNearestItem('row', props, instanceProps, scrollTop);\n  },\n  getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n    var rowCount = props.rowCount,\n        height = props.height;\n    var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n    var maxOffset = scrollTop + height;\n    var offset = itemMetadata.offset + itemMetadata.size;\n    var stopIndex = startIndex;\n\n    while (stopIndex < rowCount - 1 && offset < maxOffset) {\n      stopIndex++;\n      offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n    }\n\n    return stopIndex;\n  },\n  initInstanceProps: function initInstanceProps(props, instance) {\n    var _ref5 = props,\n        estimatedColumnWidth = _ref5.estimatedColumnWidth,\n        estimatedRowHeight = _ref5.estimatedRowHeight;\n    var instanceProps = {\n      columnMetadataMap: {},\n      estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n      estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n      lastMeasuredColumnIndex: -1,\n      lastMeasuredRowIndex: -1,\n      rowMetadataMap: {}\n    };\n\n    instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n      if (shouldForceUpdate === void 0) {\n        shouldForceUpdate = true;\n      }\n\n      instance.resetAfterIndices({\n        columnIndex: columnIndex,\n        shouldForceUpdate: shouldForceUpdate\n      });\n    };\n\n    instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n      if (shouldForceUpdate === void 0) {\n        shouldForceUpdate = true;\n      }\n\n      instance.resetAfterIndices({\n        rowIndex: rowIndex,\n        shouldForceUpdate: shouldForceUpdate\n      });\n    };\n\n    instance.resetAfterIndices = function (_ref6) {\n      var columnIndex = _ref6.columnIndex,\n          rowIndex = _ref6.rowIndex,\n          _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n          shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n      if (typeof columnIndex === 'number') {\n        instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n      }\n\n      if (typeof rowIndex === 'number') {\n        instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n      } // We could potentially optimize further by only evicting styles after this index,\n      // But since styles are only cached while scrolling is in progress-\n      // It seems an unnecessary optimization.\n      // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n      instance._getItemStyleCache(-1);\n\n      if (shouldForceUpdate) {\n        instance.forceUpdate();\n      }\n    };\n\n    return instanceProps;\n  },\n  shouldResetStyleCacheOnItemSizeChange: false,\n  validateProps: function validateProps(_ref7) {\n    var columnWidth = _ref7.columnWidth,\n        rowHeight = _ref7.rowHeight;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof columnWidth !== 'function') {\n        throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n      } else if (typeof rowHeight !== 'function') {\n        throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n      }\n    }\n  }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n  return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n  if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n    devWarningsDirection =\n    /*#__PURE__*/\n    new WeakSet();\n    devWarningsTagName$1 =\n    /*#__PURE__*/\n    new WeakSet();\n  }\n}\n\nfunction createListComponent(_ref) {\n  var _class, _temp;\n\n  var getItemOffset = _ref.getItemOffset,\n      getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n      getItemSize = _ref.getItemSize,\n      getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n      getStartIndexForOffset = _ref.getStartIndexForOffset,\n      getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n      initInstanceProps = _ref.initInstanceProps,\n      shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n      validateProps = _ref.validateProps;\n  return _temp = _class =\n  /*#__PURE__*/\n  function (_PureComponent) {\n    _inheritsLoose(List, _PureComponent);\n\n    // Always use explicit constructor for React components.\n    // It produces less code after transpilation. (#26)\n    // eslint-disable-next-line no-useless-constructor\n    function List(props) {\n      var _this;\n\n      _this = _PureComponent.call(this, props) || this;\n      _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_assertThisInitialized(_this)));\n      _this._outerRef = void 0;\n      _this._resetIsScrollingTimeoutId = null;\n      _this.state = {\n        instance: _assertThisInitialized(_assertThisInitialized(_this)),\n        isScrolling: false,\n        scrollDirection: 'forward',\n        scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n        scrollUpdateWasRequested: false\n      };\n      _this._callOnItemsRendered = void 0;\n      _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n        return _this.props.onItemsRendered({\n          overscanStartIndex: overscanStartIndex,\n          overscanStopIndex: overscanStopIndex,\n          visibleStartIndex: visibleStartIndex,\n          visibleStopIndex: visibleStopIndex\n        });\n      });\n      _this._callOnScroll = void 0;\n      _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n        return _this.props.onScroll({\n          scrollDirection: scrollDirection,\n          scrollOffset: scrollOffset,\n          scrollUpdateWasRequested: scrollUpdateWasRequested\n        });\n      });\n      _this._getItemStyle = void 0;\n\n      _this._getItemStyle = function (index) {\n        var _this$props = _this.props,\n            direction = _this$props.direction,\n            itemSize = _this$props.itemSize,\n            layout = _this$props.layout;\n\n        var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n        var style;\n\n        if (itemStyleCache.hasOwnProperty(index)) {\n          style = itemStyleCache[index];\n        } else {\n          var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n          var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n          var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n          var isRtl = direction === 'rtl';\n          var offsetHorizontal = isHorizontal ? _offset : 0;\n          itemStyleCache[index] = style = {\n            position: 'absolute',\n            left: isRtl ? undefined : offsetHorizontal,\n            right: isRtl ? offsetHorizontal : undefined,\n            top: !isHorizontal ? _offset : 0,\n            height: !isHorizontal ? size : '100%',\n            width: isHorizontal ? size : '100%'\n          };\n        }\n\n        return style;\n      };\n\n      _this._getItemStyleCache = void 0;\n      _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n        return {};\n      });\n\n      _this._onScrollHorizontal = function (event) {\n        var _event$currentTarget = event.currentTarget,\n            clientWidth = _event$currentTarget.clientWidth,\n            scrollLeft = _event$currentTarget.scrollLeft,\n            scrollWidth = _event$currentTarget.scrollWidth;\n\n        _this.setState(function (prevState) {\n          if (prevState.scrollOffset === scrollLeft) {\n            // Scroll position may have been updated by cDM/cDU,\n            // In which case we don't need to trigger another render,\n            // And we don't want to update state.isScrolling.\n            return null;\n          }\n\n          var direction = _this.props.direction;\n          var scrollOffset = scrollLeft;\n\n          if (direction === 'rtl') {\n            // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n            // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n            // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n            // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n            switch (getRTLOffsetType()) {\n              case 'negative':\n                scrollOffset = -scrollLeft;\n                break;\n\n              case 'positive-descending':\n                scrollOffset = scrollWidth - clientWidth - scrollLeft;\n                break;\n            }\n          } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n          scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n          return {\n            isScrolling: true,\n            scrollDirection: prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n            scrollOffset: scrollOffset,\n            scrollUpdateWasRequested: false\n          };\n        }, _this._resetIsScrollingDebounced);\n      };\n\n      _this._onScrollVertical = function (event) {\n        var _event$currentTarget2 = event.currentTarget,\n            clientHeight = _event$currentTarget2.clientHeight,\n            scrollHeight = _event$currentTarget2.scrollHeight,\n            scrollTop = _event$currentTarget2.scrollTop;\n\n        _this.setState(function (prevState) {\n          if (prevState.scrollOffset === scrollTop) {\n            // Scroll position may have been updated by cDM/cDU,\n            // In which case we don't need to trigger another render,\n            // And we don't want to update state.isScrolling.\n            return null;\n          } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n          var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n          return {\n            isScrolling: true,\n            scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n            scrollOffset: scrollOffset,\n            scrollUpdateWasRequested: false\n          };\n        }, _this._resetIsScrollingDebounced);\n      };\n\n      _this._outerRefSetter = function (ref) {\n        var outerRef = _this.props.outerRef;\n        _this._outerRef = ref;\n\n        if (typeof outerRef === 'function') {\n          outerRef(ref);\n        } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n          outerRef.current = ref;\n        }\n      };\n\n      _this._resetIsScrollingDebounced = function () {\n        if (_this._resetIsScrollingTimeoutId !== null) {\n          cancelTimeout(_this._resetIsScrollingTimeoutId);\n        }\n\n        _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n      };\n\n      _this._resetIsScrolling = function () {\n        _this._resetIsScrollingTimeoutId = null;\n\n        _this.setState({\n          isScrolling: false\n        }, function () {\n          // Clear style cache after state update has been committed.\n          // This way we don't break pure sCU for items that don't use isScrolling param.\n          _this._getItemStyleCache(-1, null);\n        });\n      };\n\n      return _this;\n    }\n\n    List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n      validateSharedProps$1(nextProps, prevState);\n      validateProps(nextProps);\n      return null;\n    };\n\n    var _proto = List.prototype;\n\n    _proto.scrollTo = function scrollTo(scrollOffset) {\n      scrollOffset = Math.max(0, scrollOffset);\n      this.setState(function (prevState) {\n        if (prevState.scrollOffset === scrollOffset) {\n          return null;\n        }\n\n        return {\n          scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n          scrollOffset: scrollOffset,\n          scrollUpdateWasRequested: true\n        };\n      }, this._resetIsScrollingDebounced);\n    };\n\n    _proto.scrollToItem = function scrollToItem(index, align) {\n      if (align === void 0) {\n        align = 'auto';\n      }\n\n      var itemCount = this.props.itemCount;\n      var scrollOffset = this.state.scrollOffset;\n      index = Math.max(0, Math.min(index, itemCount - 1));\n      this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps));\n    };\n\n    _proto.componentDidMount = function componentDidMount() {\n      var _this$props2 = this.props,\n          direction = _this$props2.direction,\n          initialScrollOffset = _this$props2.initialScrollOffset,\n          layout = _this$props2.layout;\n\n      if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n        var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n        if (direction === 'horizontal' || layout === 'horizontal') {\n          outerRef.scrollLeft = initialScrollOffset;\n        } else {\n          outerRef.scrollTop = initialScrollOffset;\n        }\n      }\n\n      this._callPropsCallbacks();\n    };\n\n    _proto.componentDidUpdate = function componentDidUpdate() {\n      var _this$props3 = this.props,\n          direction = _this$props3.direction,\n          layout = _this$props3.layout;\n      var _this$state = this.state,\n          scrollOffset = _this$state.scrollOffset,\n          scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n      if (scrollUpdateWasRequested && this._outerRef != null) {\n        var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n        if (direction === 'horizontal' || layout === 'horizontal') {\n          if (direction === 'rtl') {\n            // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n            // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n            // So we need to determine which browser behavior we're dealing with, and mimic it.\n            switch (getRTLOffsetType()) {\n              case 'negative':\n                outerRef.scrollLeft = -scrollOffset;\n                break;\n\n              case 'positive-ascending':\n                outerRef.scrollLeft = scrollOffset;\n                break;\n\n              default:\n                var clientWidth = outerRef.clientWidth,\n                    scrollWidth = outerRef.scrollWidth;\n                outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n                break;\n            }\n          } else {\n            outerRef.scrollLeft = scrollOffset;\n          }\n        } else {\n          outerRef.scrollTop = scrollOffset;\n        }\n      }\n\n      this._callPropsCallbacks();\n    };\n\n    _proto.componentWillUnmount = function componentWillUnmount() {\n      if (this._resetIsScrollingTimeoutId !== null) {\n        cancelTimeout(this._resetIsScrollingTimeoutId);\n      }\n    };\n\n    _proto.render = function render() {\n      var _this$props4 = this.props,\n          children = _this$props4.children,\n          className = _this$props4.className,\n          direction = _this$props4.direction,\n          height = _this$props4.height,\n          innerRef = _this$props4.innerRef,\n          innerElementType = _this$props4.innerElementType,\n          innerTagName = _this$props4.innerTagName,\n          itemCount = _this$props4.itemCount,\n          itemData = _this$props4.itemData,\n          _this$props4$itemKey = _this$props4.itemKey,\n          itemKey = _this$props4$itemKey === void 0 ? defaultItemKey$1 : _this$props4$itemKey,\n          layout = _this$props4.layout,\n          outerElementType = _this$props4.outerElementType,\n          outerTagName = _this$props4.outerTagName,\n          style = _this$props4.style,\n          useIsScrolling = _this$props4.useIsScrolling,\n          width = _this$props4.width;\n      var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n      var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n      var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n      var _this$_getRangeToRend = this._getRangeToRender(),\n          startIndex = _this$_getRangeToRend[0],\n          stopIndex = _this$_getRangeToRend[1];\n\n      var items = [];\n\n      if (itemCount > 0) {\n        for (var _index = startIndex; _index <= stopIndex; _index++) {\n          items.push(createElement(children, {\n            data: itemData,\n            key: itemKey(_index, itemData),\n            index: _index,\n            isScrolling: useIsScrolling ? isScrolling : undefined,\n            style: this._getItemStyle(_index)\n          }));\n        }\n      } // Read this value AFTER items have been created,\n      // So their actual sizes (if variable) are taken into consideration.\n\n\n      var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n      return createElement(outerElementType || outerTagName || 'div', {\n        className: className,\n        onScroll: onScroll,\n        ref: this._outerRefSetter,\n        style: _extends({\n          position: 'relative',\n          height: height,\n          width: width,\n          overflow: 'auto',\n          WebkitOverflowScrolling: 'touch',\n          willChange: 'transform',\n          direction: direction\n        }, style)\n      }, createElement(innerElementType || innerTagName || 'div', {\n        children: items,\n        ref: innerRef,\n        style: {\n          height: isHorizontal ? '100%' : estimatedTotalSize,\n          pointerEvents: isScrolling ? 'none' : undefined,\n          width: isHorizontal ? estimatedTotalSize : '100%'\n        }\n      }));\n    };\n\n    _proto._callPropsCallbacks = function _callPropsCallbacks() {\n      if (typeof this.props.onItemsRendered === 'function') {\n        var itemCount = this.props.itemCount;\n\n        if (itemCount > 0) {\n          var _this$_getRangeToRend2 = this._getRangeToRender(),\n              _overscanStartIndex = _this$_getRangeToRend2[0],\n              _overscanStopIndex = _this$_getRangeToRend2[1],\n              _visibleStartIndex = _this$_getRangeToRend2[2],\n              _visibleStopIndex = _this$_getRangeToRend2[3];\n\n          this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n        }\n      }\n\n      if (typeof this.props.onScroll === 'function') {\n        var _this$state2 = this.state,\n            _scrollDirection = _this$state2.scrollDirection,\n            _scrollOffset = _this$state2.scrollOffset,\n            _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n        this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n      }\n    }; // Lazily create and cache item styles while scrolling,\n    // So that pure component sCU will prevent re-renders.\n    // We maintain this cache, and pass a style prop rather than index,\n    // So that List can clear cached styles and force item re-render if necessary.\n\n\n    _proto._getRangeToRender = function _getRangeToRender() {\n      var _this$props5 = this.props,\n          itemCount = _this$props5.itemCount,\n          overscanCount = _this$props5.overscanCount;\n      var _this$state3 = this.state,\n          isScrolling = _this$state3.isScrolling,\n          scrollDirection = _this$state3.scrollDirection,\n          scrollOffset = _this$state3.scrollOffset;\n\n      if (itemCount === 0) {\n        return [0, 0, 0, 0];\n      }\n\n      var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n      var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n      // If there isn't at least one extra item, tab loops back around.\n\n      var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n      var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n      return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n    };\n\n    return List;\n  }(PureComponent), _class.defaultProps = {\n    direction: 'ltr',\n    itemData: undefined,\n    layout: 'vertical',\n    overscanCount: 2,\n    useIsScrolling: false\n  }, _temp;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n  var children = _ref2.children,\n      direction = _ref2.direction,\n      height = _ref2.height,\n      layout = _ref2.layout,\n      innerTagName = _ref2.innerTagName,\n      outerTagName = _ref2.outerTagName,\n      width = _ref2.width;\n  var instance = _ref3.instance;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (innerTagName != null || outerTagName != null) {\n      if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n        devWarningsTagName$1.add(instance);\n        console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n      }\n    } // TODO Deprecate direction \"horizontal\"\n\n\n    var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n    switch (direction) {\n      case 'horizontal':\n      case 'vertical':\n        if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n          devWarningsDirection.add(instance);\n          console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n        }\n\n        break;\n\n      case 'ltr':\n      case 'rtl':\n        // Valid values\n        break;\n\n      default:\n        throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n    }\n\n    switch (layout) {\n      case 'horizontal':\n      case 'vertical':\n        // Valid values\n        break;\n\n      default:\n        throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n    }\n\n    if (children == null) {\n      throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n    }\n\n    if (isHorizontal && typeof width !== 'number') {\n      throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n    } else if (!isHorizontal && typeof height !== 'number') {\n      throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n    }\n  }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n  var _ref = props,\n      itemSize = _ref.itemSize;\n  var itemMetadataMap = instanceProps.itemMetadataMap,\n      lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n  if (index > lastMeasuredIndex) {\n    var offset = 0;\n\n    if (lastMeasuredIndex >= 0) {\n      var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n      offset = itemMetadata.offset + itemMetadata.size;\n    }\n\n    for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n      var size = itemSize(i);\n      itemMetadataMap[i] = {\n        offset: offset,\n        size: size\n      };\n      offset += size;\n    }\n\n    instanceProps.lastMeasuredIndex = index;\n  }\n\n  return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n  var itemMetadataMap = instanceProps.itemMetadataMap,\n      lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n  var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n  if (lastMeasuredItemOffset >= offset) {\n    // If we've already measured items within this range just use a binary search as it's faster.\n    return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n  } else {\n    // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n    // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n    // The overall complexity for this approach is O(log n).\n    return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n  }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n  while (low <= high) {\n    var middle = low + Math.floor((high - low) / 2);\n    var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n    if (currentOffset === offset) {\n      return middle;\n    } else if (currentOffset < offset) {\n      low = middle + 1;\n    } else if (currentOffset > offset) {\n      high = middle - 1;\n    }\n  }\n\n  if (low > 0) {\n    return low - 1;\n  } else {\n    return 0;\n  }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n  var itemCount = props.itemCount;\n  var interval = 1;\n\n  while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n    index += interval;\n    interval *= 2;\n  }\n\n  return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n  var itemCount = _ref2.itemCount;\n  var itemMetadataMap = _ref3.itemMetadataMap,\n      estimatedItemSize = _ref3.estimatedItemSize,\n      lastMeasuredIndex = _ref3.lastMeasuredIndex;\n  var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n  // https://github.com/bvaughn/react-window/pull/138\n\n  if (lastMeasuredIndex >= itemCount) {\n    lastMeasuredIndex = itemCount - 1;\n  }\n\n  if (lastMeasuredIndex >= 0) {\n    var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n    totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n  }\n\n  var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n  var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n  return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList =\n/*#__PURE__*/\ncreateListComponent({\n  getItemOffset: function getItemOffset(props, index, instanceProps) {\n    return getItemMetadata$1(props, index, instanceProps).offset;\n  },\n  getItemSize: function getItemSize(props, index, instanceProps) {\n    return instanceProps.itemMetadataMap[index].size;\n  },\n  getEstimatedTotalSize: getEstimatedTotalSize,\n  getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps) {\n    var direction = props.direction,\n        height = props.height,\n        layout = props.layout,\n        width = props.width; // TODO Deprecate direction \"horizontal\"\n\n    var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    var size = isHorizontal ? width : height;\n    var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n    // To ensure it reflects actual measurements instead of just estimates.\n\n    var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n    var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n    var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size);\n\n    if (align === 'smart') {\n      if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n\n      case 'end':\n        return minOffset;\n\n      case 'center':\n        return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n      case 'auto':\n      default:\n        if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n          return scrollOffset;\n        } else if (scrollOffset < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n\n    }\n  },\n  getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n    return findNearestItem$1(props, instanceProps, offset);\n  },\n  getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n    var direction = props.direction,\n        height = props.height,\n        itemCount = props.itemCount,\n        layout = props.layout,\n        width = props.width; // TODO Deprecate direction \"horizontal\"\n\n    var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    var size = isHorizontal ? width : height;\n    var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n    var maxOffset = scrollOffset + size;\n    var offset = itemMetadata.offset + itemMetadata.size;\n    var stopIndex = startIndex;\n\n    while (stopIndex < itemCount - 1 && offset < maxOffset) {\n      stopIndex++;\n      offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n    }\n\n    return stopIndex;\n  },\n  initInstanceProps: function initInstanceProps(props, instance) {\n    var _ref4 = props,\n        estimatedItemSize = _ref4.estimatedItemSize;\n    var instanceProps = {\n      itemMetadataMap: {},\n      estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n      lastMeasuredIndex: -1\n    };\n\n    instance.resetAfterIndex = function (index, shouldForceUpdate) {\n      if (shouldForceUpdate === void 0) {\n        shouldForceUpdate = true;\n      }\n\n      instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n      // But since styles are only cached while scrolling is in progress-\n      // It seems an unnecessary optimization.\n      // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n      instance._getItemStyleCache(-1);\n\n      if (shouldForceUpdate) {\n        instance.forceUpdate();\n      }\n    };\n\n    return instanceProps;\n  },\n  shouldResetStyleCacheOnItemSizeChange: false,\n  validateProps: function validateProps(_ref5) {\n    var itemSize = _ref5.itemSize;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof itemSize !== 'function') {\n        throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n      }\n    }\n  }\n});\n\nvar FixedSizeGrid =\n/*#__PURE__*/\ncreateGridComponent({\n  getColumnOffset: function getColumnOffset(_ref, index) {\n    var columnWidth = _ref.columnWidth;\n    return index * columnWidth;\n  },\n  getColumnWidth: function getColumnWidth(_ref2, index) {\n    var columnWidth = _ref2.columnWidth;\n    return columnWidth;\n  },\n  getRowOffset: function getRowOffset(_ref3, index) {\n    var rowHeight = _ref3.rowHeight;\n    return index * rowHeight;\n  },\n  getRowHeight: function getRowHeight(_ref4, index) {\n    var rowHeight = _ref4.rowHeight;\n    return rowHeight;\n  },\n  getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n    var rowCount = _ref5.rowCount,\n        rowHeight = _ref5.rowHeight;\n    return rowHeight * rowCount;\n  },\n  getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n    var columnCount = _ref6.columnCount,\n        columnWidth = _ref6.columnWidth;\n    return columnWidth * columnCount;\n  },\n  getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n    var columnCount = _ref7.columnCount,\n        columnWidth = _ref7.columnWidth,\n        width = _ref7.width;\n    var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n    var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n    var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n    if (align === 'smart') {\n      if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n\n      case 'end':\n        return minOffset;\n\n      case 'center':\n        // \"Centered\" offset is usually the average of the min and max.\n        // But near the edges of the list, this doesn't hold true.\n        var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n        if (middleOffset < Math.ceil(width / 2)) {\n          return 0; // near the beginning\n        } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n          return lastColumnOffset; // near the end\n        } else {\n          return middleOffset;\n        }\n\n      case 'auto':\n      default:\n        if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n          return scrollLeft;\n        } else if (minOffset > maxOffset) {\n          // Because we only take into account the scrollbar size when calculating minOffset\n          // this value can be larger than maxOffset when at the end of the list\n          return minOffset;\n        } else if (scrollLeft < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n\n    }\n  },\n  getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n    var rowHeight = _ref8.rowHeight,\n        height = _ref8.height,\n        rowCount = _ref8.rowCount;\n    var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n    var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n    var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n    if (align === 'smart') {\n      if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n\n      case 'end':\n        return minOffset;\n\n      case 'center':\n        // \"Centered\" offset is usually the average of the min and max.\n        // But near the edges of the list, this doesn't hold true.\n        var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n        if (middleOffset < Math.ceil(height / 2)) {\n          return 0; // near the beginning\n        } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n          return lastRowOffset; // near the end\n        } else {\n          return middleOffset;\n        }\n\n      case 'auto':\n      default:\n        if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n          return scrollTop;\n        } else if (minOffset > maxOffset) {\n          // Because we only take into account the scrollbar size when calculating minOffset\n          // this value can be larger than maxOffset when at the end of the list\n          return minOffset;\n        } else if (scrollTop < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n\n    }\n  },\n  getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n    var columnWidth = _ref9.columnWidth,\n        columnCount = _ref9.columnCount;\n    return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n  },\n  getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n    var columnWidth = _ref10.columnWidth,\n        columnCount = _ref10.columnCount,\n        width = _ref10.width;\n    var left = startIndex * columnWidth;\n    var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n    return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n    ));\n  },\n  getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n    var rowHeight = _ref11.rowHeight,\n        rowCount = _ref11.rowCount;\n    return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n  },\n  getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n    var rowHeight = _ref12.rowHeight,\n        rowCount = _ref12.rowCount,\n        height = _ref12.height;\n    var top = startIndex * rowHeight;\n    var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n    return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n    ));\n  },\n  initInstanceProps: function initInstanceProps(props) {// Noop\n  },\n  shouldResetStyleCacheOnItemSizeChange: true,\n  validateProps: function validateProps(_ref13) {\n    var columnWidth = _ref13.columnWidth,\n        rowHeight = _ref13.rowHeight;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof columnWidth !== 'number') {\n        throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n      }\n\n      if (typeof rowHeight !== 'number') {\n        throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n      }\n    }\n  }\n});\n\nvar FixedSizeList =\n/*#__PURE__*/\ncreateListComponent({\n  getItemOffset: function getItemOffset(_ref, index) {\n    var itemSize = _ref.itemSize;\n    return index * itemSize;\n  },\n  getItemSize: function getItemSize(_ref2, index) {\n    var itemSize = _ref2.itemSize;\n    return itemSize;\n  },\n  getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n    var itemCount = _ref3.itemCount,\n        itemSize = _ref3.itemSize;\n    return itemSize * itemCount;\n  },\n  getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset) {\n    var direction = _ref4.direction,\n        height = _ref4.height,\n        itemCount = _ref4.itemCount,\n        itemSize = _ref4.itemSize,\n        layout = _ref4.layout,\n        width = _ref4.width;\n    // TODO Deprecate direction \"horizontal\"\n    var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    var size = isHorizontal ? width : height;\n    var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n    var maxOffset = Math.min(lastItemOffset, index * itemSize);\n    var minOffset = Math.max(0, index * itemSize - size + itemSize);\n\n    if (align === 'smart') {\n      if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n        align = 'auto';\n      } else {\n        align = 'center';\n      }\n    }\n\n    switch (align) {\n      case 'start':\n        return maxOffset;\n\n      case 'end':\n        return minOffset;\n\n      case 'center':\n        {\n          // \"Centered\" offset is usually the average of the min and max.\n          // But near the edges of the list, this doesn't hold true.\n          var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n          if (middleOffset < Math.ceil(size / 2)) {\n            return 0; // near the beginning\n          } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n            return lastItemOffset; // near the end\n          } else {\n            return middleOffset;\n          }\n        }\n\n      case 'auto':\n      default:\n        if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n          return scrollOffset;\n        } else if (scrollOffset < minOffset) {\n          return minOffset;\n        } else {\n          return maxOffset;\n        }\n\n    }\n  },\n  getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n    var itemCount = _ref5.itemCount,\n        itemSize = _ref5.itemSize;\n    return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n  },\n  getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n    var direction = _ref6.direction,\n        height = _ref6.height,\n        itemCount = _ref6.itemCount,\n        itemSize = _ref6.itemSize,\n        layout = _ref6.layout,\n        width = _ref6.width;\n    // TODO Deprecate direction \"horizontal\"\n    var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n    var offset = startIndex * itemSize;\n    var size = isHorizontal ? width : height;\n    var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n    return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n    ));\n  },\n  initInstanceProps: function initInstanceProps(props) {// Noop\n  },\n  shouldResetStyleCacheOnItemSizeChange: true,\n  validateProps: function validateProps(_ref7) {\n    var itemSize = _ref7.itemSize;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof itemSize !== 'number') {\n        throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n      }\n    }\n  }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n  for (var attribute in prev) {\n    if (!(attribute in next)) {\n      return true;\n    }\n  }\n\n  for (var _attribute in next) {\n    if (prev[_attribute] !== next[_attribute]) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n  var prevStyle = prevProps.style,\n      prevRest = _objectWithoutPropertiesLoose(prevProps, [\"style\"]);\n\n  var nextStyle = nextProps.style,\n      nextRest = _objectWithoutPropertiesLoose(nextProps, [\"style\"]);\n\n  return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n  return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { VariableSizeGrid, VariableSizeList, FixedSizeGrid, FixedSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","/* @flow */\nimport React from 'react';\n\nimport { AudioTrack, MEDIA_TYPE } from '../../../base/media';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of the React {@code Component} props of {@link AudioTracksContainer}.\n */\ntype Props = {\n\n    /**\n     * All media tracks stored in redux.\n     */\n    _tracks: Array<Object>\n};\n\n/**\n * A container for the remote tracks audio elements.\n *\n * @param {Props} props - The props of the component.\n * @returns {Array<ReactElement>}\n */\nfunction AudioTracksContainer(props: Props) {\n    const { _tracks } = props;\n    const remoteAudioTracks = _tracks.filter(t => !t.local && t.mediaType === MEDIA_TYPE.AUDIO);\n\n    return (\n        <div>\n            {\n                remoteAudioTracks.map(t => {\n                    const { jitsiTrack, participantId } = t;\n                    const audioTrackId = jitsiTrack && jitsiTrack.getId();\n                    const id = `remoteAudio_${audioTrackId || ''}`;\n\n                    return (\n                        <AudioTrack\n                            audioTrack = { t }\n                            id = { id }\n                            key = { id }\n                            participantId = { participantId } />);\n                })\n            }\n        </div>);\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code AudioTracksContainer}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    // NOTE: The disadvantage of this approach is that the component will re-render on any track change.\n    // One way to solve the problem would be to pass only the participant ID to the AudioTrack component and\n    // find the corresponding track inside the AudioTrack's mapStateToProps. But currently this will be very\n    // inefficient because features/base/tracks is an array and in order to find a track by participant ID\n    // we need to go trough the array. Introducing a map participantID -> track could be beneficial in this case.\n    return {\n        _tracks: state['features/base/tracks']\n    };\n}\n\nexport default connect(_mapStateToProps)(AudioTracksContainer);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The number of dots to display in AudioLevelIndicator.\n *\n * IMPORTANT: AudioLevelIndicator assumes that this is an odd number.\n */\nconst AUDIO_LEVEL_DOTS = 5;\n\n/**\n * The index of the dot that is at the direct middle of all other dots.\n */\nconst CENTER_DOT_INDEX = Math.floor(AUDIO_LEVEL_DOTS / 2);\n\n/**\n * The type of the React {@code Component} props of {@link AudioLevelIndicator}.\n */\ntype Props = {\n\n    /**\n     * The current audio level to display. The value should be a number between\n     * 0 and 1.\n     */\n    audioLevel: number\n};\n\n/**\n * Creates a ReactElement responsible for drawing audio levels.\n *\n * @extends {Component}\n */\nclass AudioLevelIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { audioLevel: passedAudioLevel } = this.props;\n\n        // First make sure we are sensitive enough.\n        const audioLevel = typeof passedAudioLevel === 'number' && !isNaN(passedAudioLevel)\n            ? Math.min(passedAudioLevel * 1.2, 1) : 0;\n\n        // Let's now stretch the audio level over the number of dots we have.\n        const stretchedAudioLevel = AUDIO_LEVEL_DOTS * audioLevel;\n\n        const audioLevelDots = [];\n\n        for (let i = 0; i < AUDIO_LEVEL_DOTS; i++) {\n            const distanceFromCenter = CENTER_DOT_INDEX - i;\n            const audioLevelFromCenter\n                = stretchedAudioLevel - Math.abs(distanceFromCenter);\n            const cappedOpacity = Math.min(\n                1, Math.max(0, audioLevelFromCenter));\n            let className;\n\n            if (distanceFromCenter === 0) {\n                className = 'audiodot-middle';\n            } else if (distanceFromCenter < 0) {\n                className = 'audiodot-top';\n            } else {\n                className = 'audiodot-bottom';\n            }\n\n            audioLevelDots.push(\n                <span\n                    className = { className }\n                    key = { i }\n                    style = {{ opacity: cappedOpacity }} />\n            );\n        }\n\n        return (\n            <span className = 'audioindicator in-react'>\n                { audioLevelDots }\n            </span>\n        );\n    }\n}\n\nexport default AudioLevelIndicator;\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/filmstrip');\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { createScreenSharingIssueEvent, sendAnalytics } from '../../../analytics';\nimport { AudioLevelIndicator } from '../../../audio-level-indicator';\nimport { Avatar } from '../../../base/avatar';\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet/_';\nimport { MEDIA_TYPE, VideoTrack } from '../../../base/media';\nimport {\n    getParticipantByIdOrUndefined,\n    getParticipantCount,\n    pinParticipant\n} from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { isTestModeEnabled } from '../../../base/testing';\nimport {\n    getLocalAudioTrack,\n    getLocalVideoTrack,\n    getTrackByMediaTypeAndParticipant,\n    updateLastTrackVideoMediaEvent\n} from '../../../base/tracks';\nimport { ConnectionIndicator } from '../../../connection-indicator';\nimport { DisplayName } from '../../../display-name';\nimport { StatusIndicators, RaisedHandIndicator, DominantSpeakerIndicator } from '../../../filmstrip';\nimport { PresenceLabel } from '../../../presence-status';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\nimport { LocalVideoMenuTriggerButton, RemoteVideoMenuTriggerButton } from '../../../video-menu';\nimport { setVolume } from '../../actions.web';\nimport {\n    DISPLAY_MODE_TO_CLASS_NAME,\n    DISPLAY_MODE_TO_STRING,\n    DISPLAY_VIDEO,\n    DISPLAY_VIDEO_WITH_NAME,\n    VIDEO_TEST_EVENTS,\n    SHOW_TOOLBAR_CONTEXT_MENU_AFTER\n} from '../../constants';\nimport { isVideoPlayable, computeDisplayMode } from '../../functions';\nimport logger from '../../logger';\n\nconst JitsiTrackEvents = JitsiMeetJS.events.track;\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} state of {@link Thumbnail}.\n */\nexport type State = {|\n\n    /**\n     * The current audio level value for the Thumbnail.\n     */\n    audioLevel: number,\n\n    /**\n     * Indicates that the canplay event has been received.\n     */\n    canPlayEventReceived: boolean,\n\n    /**\n     * The current display mode of the thumbnail.\n     */\n    displayMode: number,\n\n    /**\n     * Indicates whether the thumbnail is hovered or not.\n     */\n    isHovered: boolean\n|};\n\n/**\n * The type of the React {@code Component} props of {@link Thumbnail}.\n */\nexport type Props = {|\n\n    /**\n     * The audio track related to the participant.\n     */\n    _audioTrack: ?Object,\n\n    /**\n     * Disable/enable the auto hide functionality for the connection indicator.\n     */\n    _connectionIndicatorAutoHideEnabled: boolean,\n\n    /**\n     * Disable/enable the connection indicator.\n     */\n    _connectionIndicatorDisabled: boolean,\n\n    /**\n     * The current layout of the filmstrip.\n     */\n    _currentLayout: string,\n\n    /**\n     * The default display name for the local participant.\n     */\n    _defaultLocalDisplayName: string,\n\n    /**\n     * Indicates whether the local video flip feature is disabled or not.\n     */\n    _disableLocalVideoFlip: boolean,\n\n    /**\n     * Indicates whether the profile functionality is disabled.\n     */\n    _disableProfile: boolean,\n\n    /**\n     * The display mode of the thumbnail.\n     */\n    _displayMode: number,\n\n    /**\n     * The height of the Thumbnail.\n     */\n    _height: number,\n\n    /**\n     * The aspect ratio of the Thumbnail in percents.\n     */\n    _heightToWidthPercent: number,\n\n    /**\n     * Indicates whether the thumbnail should be hidden or not.\n     */\n    _isHidden: boolean,\n\n    /**\n     * Indicates whether audio only mode is enabled.\n     */\n    _isAudioOnly: boolean,\n\n    /**\n     * Indicates whether the participant associated with the thumbnail is displayed on the large video.\n     */\n    _isCurrentlyOnLargeVideo: boolean,\n\n    /**\n     * Whether we are currently running in a mobile browser.\n     */\n    _isMobile: boolean,\n\n    /**\n     * Indicates whether the participant is screen sharing.\n     */\n    _isScreenSharing: boolean,\n\n    /**\n     * Indicates whether the video associated with the thumbnail is playable.\n     */\n    _isVideoPlayable: boolean,\n\n    /**\n     * Disable/enable the dominant speaker indicator.\n     */\n    _isDominantSpeakerDisabled: boolean,\n\n    /**\n     * Indicates whether testing mode is enabled.\n     */\n    _isTestModeEnabled: boolean,\n\n    /**\n     * The size of the icon of indicators.\n     */\n    _indicatorIconSize: number,\n\n    /**\n     * The current local video flip setting.\n     */\n    _localFlipX: boolean,\n\n    /**\n     * An object with information about the participant related to the thumbnaul.\n     */\n    _participant: Object,\n\n    /**\n     * True if there are more than 2 participants in the call.\n     */\n     _participantCountMoreThan2: boolean,\n\n    /**\n     * Indicates whether the \"start silent\" mode is enabled.\n     */\n    _startSilent: Boolean,\n\n     /**\n     * The video track that will be displayed in the thumbnail.\n     */\n    _videoTrack: ?Object,\n\n    /**\n     * The volume level for the thumbnail.\n     */\n    _volume?: ?number,\n\n    /**\n     * The width of the thumbnail.\n     */\n    _width: number,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The horizontal offset in px for the thumbnail. Used to center the thumbnails from the last row in tile view.\n     */\n    horizontalOffset: number,\n\n    /**\n     * The ID of the participant related to the thumbnail.\n     */\n    participantID: ?string,\n\n    /**\n     * Styles that will be set to the Thumbnail's main span element.\n     */\n    style?: ?Object\n|};\n\n/**\n * Click handler for the display name container.\n *\n * @param {SyntheticEvent} event - The click event.\n * @returns {void}\n */\nfunction onClick(event) {\n    // If the event is propagated to the thumbnail container the participant will be pinned. That's why the propagation\n    // needs to be stopped.\n    event.stopPropagation();\n}\n\n/**\n * Implements a thumbnail.\n *\n * @extends Component\n */\nclass Thumbnail extends Component<Props, State> {\n    /**\n     * The long touch setTimeout handler.\n     */\n    timeoutHandle: Object;\n\n    /**\n     * Reference to local or remote Video Menu trigger button instance.\n     */\n    videoMenuTriggerRef: Object;\n\n    /**\n     * Initializes a new Thumbnail instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const state = {\n            audioLevel: 0,\n            canPlayEventReceived: false,\n            isHovered: false,\n            displayMode: DISPLAY_VIDEO\n        };\n\n        this.state = {\n            ...state,\n            displayMode: computeDisplayMode(Thumbnail.getDisplayModeInput(props, state))\n        };\n        this.timeoutHandle = null;\n        this.videoMenuTriggerRef = null;\n\n        this._setInstance = this._setInstance.bind(this);\n        this._updateAudioLevel = this._updateAudioLevel.bind(this);\n        this._onCanPlay = this._onCanPlay.bind(this);\n        this._onClick = this._onClick.bind(this);\n        this._onVolumeChange = this._onVolumeChange.bind(this);\n        this._onMouseEnter = this._onMouseEnter.bind(this);\n        this._onMouseLeave = this._onMouseLeave.bind(this);\n        this._onTestingEvent = this._onTestingEvent.bind(this);\n        this._onTouchStart = this._onTouchStart.bind(this);\n        this._onTouchEnd = this._onTouchEnd.bind(this);\n        this._onTouchMove = this._onTouchMove.bind(this);\n        this._showPopupMenu = this._showPopupMenu.bind(this);\n    }\n\n    /**\n     * Starts listening for audio level updates after the initial render.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._listenForAudioUpdates();\n        this._onDisplayModeChanged();\n    }\n\n    /**\n     * Stops listening for audio level updates on the old track and starts\n     * listening instead on the new track.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps: Props, prevState: State) {\n        if (prevProps._audioTrack !== this.props._audioTrack) {\n            this._stopListeningForAudioUpdates(prevProps._audioTrack);\n            this._listenForAudioUpdates();\n            this._updateAudioLevel(0);\n        }\n\n        if (prevState.displayMode !== this.state.displayMode) {\n            this._onDisplayModeChanged();\n        }\n    }\n\n    /**\n     * Handles display mode changes.\n     *\n     * @returns {void}\n     */\n    _onDisplayModeChanged() {\n        const input = Thumbnail.getDisplayModeInput(this.props, this.state);\n        const displayModeString = DISPLAY_MODE_TO_STRING[this.state.displayMode];\n        const id = this.props._participant?.id;\n\n        this._maybeSendScreenSharingIssueEvents(input);\n        logger.debug(`Displaying ${displayModeString} for ${id}, data: [${JSON.stringify(input)}]`);\n    }\n\n    /**\n     * Sends screen sharing issue event if an issue is detected.\n     *\n     * @param {Object} input - The input used to compute the thumbnail display mode.\n     * @returns {void}\n     */\n    _maybeSendScreenSharingIssueEvents(input) {\n        const {\n            _currentLayout,\n            _isAudioOnly,\n            _isScreenSharing\n        } = this.props;\n        const { displayMode } = this.state;\n        const tileViewActive = _currentLayout === LAYOUTS.TILE_VIEW;\n\n        if (![ DISPLAY_VIDEO, DISPLAY_VIDEO_WITH_NAME ].includes(displayMode)\n            && tileViewActive\n            && _isScreenSharing\n            && !_isAudioOnly) {\n            sendAnalytics(createScreenSharingIssueEvent({\n                source: 'thumbnail',\n                ...input\n            }));\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, prevState: State) {\n        if (!props._videoTrack && prevState.canPlayEventReceived) {\n            const newState = {\n                ...prevState,\n                canPlayEventReceived: false\n            };\n\n            return {\n                ...newState,\n                displayMode: computeDisplayMode(Thumbnail.getDisplayModeInput(props, newState))\n            };\n        }\n\n        const newDisplayMode = computeDisplayMode(Thumbnail.getDisplayModeInput(props, prevState));\n\n        if (newDisplayMode !== prevState.displayMode) {\n            return {\n                ...prevState,\n                displayMode: newDisplayMode\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Extracts information for props and state needed to compute the display mode.\n     *\n     * @param {Props} props - The component's props.\n     * @param {State} state - The component's state.\n     * @returns {Object}\n     */\n    static getDisplayModeInput(props: Props, state: State) {\n        const {\n            _currentLayout,\n            _isAudioOnly,\n            _isCurrentlyOnLargeVideo,\n            _isScreenSharing,\n            _isVideoPlayable,\n            _participant,\n            _videoTrack\n        } = props;\n        const tileViewActive = _currentLayout === LAYOUTS.TILE_VIEW;\n        const { canPlayEventReceived, isHovered } = state;\n\n        return {\n            isCurrentlyOnLargeVideo: _isCurrentlyOnLargeVideo,\n            isHovered,\n            isAudioOnly: _isAudioOnly,\n            tileViewActive,\n            isVideoPlayable: _isVideoPlayable,\n            connectionStatus: _participant?.connectionStatus,\n            canPlayEventReceived,\n            videoStream: Boolean(_videoTrack),\n            isRemoteParticipant: !_participant?.isFakeParticipant && !_participant?.local,\n            isScreenSharing: _isScreenSharing,\n            videoStreamMuted: _videoTrack ? _videoTrack.muted : 'no stream'\n        };\n    }\n\n    /**\n     * Unsubscribe from audio level updates.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._stopListeningForAudioUpdates(this.props._audioTrack);\n    }\n\n    /**\n     * Starts listening for audio level updates from the library.\n     *\n     * @private\n     * @returns {void}\n     */\n    _listenForAudioUpdates() {\n        const { _audioTrack } = this.props;\n\n        if (_audioTrack) {\n            const { jitsiTrack } = _audioTrack;\n\n            jitsiTrack && jitsiTrack.on(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED, this._updateAudioLevel);\n        }\n    }\n\n    /**\n     * Stops listening to further updates from the passed track.\n     *\n     * @param {Object} audioTrack - The track.\n     * @private\n     * @returns {void}\n     */\n    _stopListeningForAudioUpdates(audioTrack) {\n        if (audioTrack) {\n            const { jitsiTrack } = audioTrack;\n\n            jitsiTrack && jitsiTrack.off(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED, this._updateAudioLevel);\n        }\n    }\n\n    _updateAudioLevel: (number) => void;\n\n    /**\n     * Updates the internal state of the last know audio level. The level should\n     * be between 0 and 1, as the level will be used as a percentage out of 1.\n     *\n     * @param {number} audioLevel - The new audio level for the track.\n     * @private\n     * @returns {void}\n     */\n    _updateAudioLevel(audioLevel) {\n        this.setState({\n            audioLevel\n        });\n    }\n\n    /**\n     * Returns an object with the styles for thumbnail.\n     *\n     * @returns {Object} - The styles for the thumbnail.\n     */\n    _getStyles(): Object {\n        const { _height, _isHidden, _width, style, horizontalOffset } = this.props;\n        let styles: {\n            thumbnail: Object,\n            avatar: Object\n        } = {\n            thumbnail: {},\n            avatar: {}\n        };\n\n        const avatarSize = _height / 2;\n        let { left } = style || {};\n\n        if (typeof left === 'number' && horizontalOffset) {\n            left += horizontalOffset;\n        }\n\n        styles = {\n            thumbnail: {\n                ...style,\n                left,\n                height: `${_height}px`,\n                minHeight: `${_height}px`,\n                minWidth: `${_width}px`,\n                width: `${_width}px`\n            },\n            avatar: {\n                height: `${avatarSize}px`,\n                width: `${avatarSize}px`\n            }\n        };\n\n        if (_isHidden) {\n            styles.thumbnail.display = 'none';\n        }\n\n        return styles;\n    }\n\n    _onClick: () => void;\n\n    /**\n     * On click handler.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { _participant, dispatch } = this.props;\n        const { id, pinned } = _participant;\n\n        dispatch(pinParticipant(pinned ? null : id));\n    }\n\n    _onMouseEnter: () => void;\n\n    /**\n     * Mouse enter handler.\n     *\n     * @returns {void}\n     */\n    _onMouseEnter() {\n        this.setState({ isHovered: true });\n    }\n\n    _onMouseLeave: () => void;\n\n    /**\n     * Mouse leave handler.\n     *\n     * @returns {void}\n     */\n    _onMouseLeave() {\n        this.setState({ isHovered: false });\n    }\n\n    _showPopupMenu: () => void;\n\n    /**\n     * Triggers showing the popover context menu.\n     *\n     * @returns {void}\n     */\n    _showPopupMenu() {\n        if (this.videoMenuTriggerRef) {\n            this.videoMenuTriggerRef.showContextMenu();\n        }\n    }\n\n    _onTouchStart: () => void;\n\n    /**\n     * Set showing popover context menu after x miliseconds.\n     *\n     * @returns {void}\n     */\n    _onTouchStart() {\n        this.timeoutHandle = setTimeout(this._showPopupMenu, SHOW_TOOLBAR_CONTEXT_MENU_AFTER);\n    }\n\n    _onTouchEnd: () => void;\n\n    /**\n     * Cancel showing popover context menu after x miliseconds if the no. Of miliseconds is not reached yet,\n     * or just clears the timeout.\n     *\n     * @returns {void}\n     */\n    _onTouchEnd() {\n        clearTimeout(this.timeoutHandle);\n    }\n\n    _onTouchMove: () => void;\n\n    /**\n     * Cancel showing Context menu after x miliseconds if the number of miliseconds is not reached\n     * before a touch move(drag), or just clears the timeout.\n     *\n     * @returns {void}\n     */\n    _onTouchMove() {\n        clearTimeout(this.timeoutHandle);\n    }\n\n    /**\n     * Renders a fake participant (youtube video) thumbnail.\n     *\n     * @param {string} id - The id of the participant.\n     * @returns {ReactElement}\n     */\n    _renderFakeParticipant() {\n        const { _isMobile, _participant: { avatarURL } } = this.props;\n        const styles = this._getStyles();\n        const containerClassName = this._getContainerClassName();\n\n        return (\n            <span\n                className = { containerClassName }\n                id = 'sharedVideoContainer'\n                onClick = { this._onClick }\n                { ...(_isMobile ? {} : {\n                    onMouseEnter: this._onMouseEnter,\n                    onMouseLeave: this._onMouseLeave\n                }) }\n                style = { styles.thumbnail }>\n                {avatarURL ? (\n                    <img\n                        className = 'sharedVideoAvatar'\n                        src = { avatarURL } />\n                )\n                    : this._renderAvatar(styles.avatar)}\n            </span>\n        );\n    }\n\n    /**\n     * Renders the top indicators of the thumbnail.\n     *\n     * @returns {Component}\n     */\n    _renderTopIndicators() {\n        const {\n            _connectionIndicatorAutoHideEnabled,\n            _connectionIndicatorDisabled,\n            _currentLayout,\n            _isDominantSpeakerDisabled,\n            _indicatorIconSize: iconSize,\n            _participant,\n            _participantCountMoreThan2\n        } = this.props;\n        const { isHovered } = this.state;\n        const showConnectionIndicator = isHovered || !_connectionIndicatorAutoHideEnabled;\n        const { id, dominantSpeaker = false } = _participant;\n        const showDominantSpeaker = !_isDominantSpeakerDisabled && dominantSpeaker;\n        let statsPopoverPosition, tooltipPosition;\n\n        switch (_currentLayout) {\n        case LAYOUTS.TILE_VIEW:\n            statsPopoverPosition = 'right-start';\n            tooltipPosition = 'right';\n            break;\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            statsPopoverPosition = 'left-start';\n            tooltipPosition = 'left';\n            break;\n        default:\n            statsPopoverPosition = 'auto';\n            tooltipPosition = 'top';\n        }\n\n        return (\n            <div>\n                { !_connectionIndicatorDisabled\n                    && <ConnectionIndicator\n                        alwaysVisible = { showConnectionIndicator }\n                        enableStatsDisplay = { true }\n                        iconSize = { iconSize }\n                        participantId = { id }\n                        statsPopoverPosition = { statsPopoverPosition } />\n                }\n                <RaisedHandIndicator\n                    iconSize = { iconSize }\n                    participantId = { id }\n                    tooltipPosition = { tooltipPosition } />\n                { showDominantSpeaker && _participantCountMoreThan2\n                    && <DominantSpeakerIndicator\n                        iconSize = { iconSize }\n                        tooltipPosition = { tooltipPosition } />\n                }\n            </div>);\n    }\n\n    /**\n     * Renders the avatar.\n     *\n     * @param {Object} styles - The styles that will be applied to the avatar.\n     * @returns {ReactElement}\n     */\n    _renderAvatar(styles) {\n        const { _participant } = this.props;\n        const { id } = _participant;\n\n        return (\n            <div\n                className = 'avatar-container'\n                style = { styles }>\n                <Avatar\n                    className = 'userAvatar'\n                    participantId = { id } />\n            </div>\n        );\n    }\n\n    /**\n     * Returns the container class name.\n     *\n     * @returns {string} - The class name that will be used for the container.\n     */\n    _getContainerClassName() {\n        let className = 'videocontainer';\n        const { displayMode } = this.state;\n        const { _isAudioOnly, _isDominantSpeakerDisabled, _isHidden, _participant } = this.props;\n        const isRemoteParticipant = !_participant?.local && !_participant?.isFakeParticipant;\n\n        className += ` ${DISPLAY_MODE_TO_CLASS_NAME[displayMode]}`;\n\n        if (_participant?.pinned) {\n            className += ' videoContainerFocused';\n        }\n\n        if (!_isDominantSpeakerDisabled && _participant?.dominantSpeaker) {\n            className += ' active-speaker';\n        }\n\n        if (_isHidden) {\n            className += ' hidden';\n        }\n\n        if (isRemoteParticipant && _isAudioOnly) {\n            className += ' audio-only';\n        }\n\n        return className;\n    }\n\n    /**\n     * Renders the local participant's thumbnail.\n     *\n     * @returns {ReactElement}\n     */\n    _renderLocalParticipant() {\n        const {\n            _defaultLocalDisplayName,\n            _disableLocalVideoFlip,\n            _isMobile,\n            _isScreenSharing,\n            _localFlipX,\n            _disableProfile,\n            _participant,\n            _videoTrack\n        } = this.props;\n        const { id } = _participant || {};\n        const { audioLevel } = this.state;\n        const styles = this._getStyles();\n        const containerClassName = this._getContainerClassName();\n        const videoTrackClassName\n            = !_disableLocalVideoFlip && _videoTrack && !_isScreenSharing && _localFlipX ? 'flipVideoX' : '';\n\n\n        return (\n            <span\n                className = { containerClassName }\n                id = 'localVideoContainer'\n                onClick = { this._onClick }\n                { ...(_isMobile\n                    ? {\n                        onTouchEnd: this._onTouchEnd,\n                        onTouchMove: this._onTouchMove,\n                        onTouchStart: this._onTouchStart\n                    }\n                    : {\n                        onMouseEnter: this._onMouseEnter,\n                        onMouseLeave: this._onMouseLeave\n                    }\n                ) }\n                style = { styles.thumbnail }>\n                <div className = 'videocontainer__background' />\n                <span id = 'localVideoWrapper'>\n                    <VideoTrack\n                        className = { videoTrackClassName }\n                        id = 'localVideo_container'\n                        videoTrack = { _videoTrack } />\n                </span>\n                <div className = 'videocontainer__toolbar'>\n                    <StatusIndicators participantID = { id } />\n                </div>\n                <div className = 'videocontainer__toptoolbar'>\n                    { this._renderTopIndicators() }\n                </div>\n                <div className = 'videocontainer__hoverOverlay' />\n                <div\n                    className = 'displayNameContainer'\n                    onClick = { onClick }>\n                    <DisplayName\n                        allowEditing = { !_disableProfile }\n                        displayNameSuffix = { _defaultLocalDisplayName }\n                        elementID = 'localDisplayName'\n                        participantID = { id } />\n                </div>\n                { this._renderAvatar(styles.avatar) }\n                <span className = 'audioindicator-container'>\n                    <AudioLevelIndicator audioLevel = { audioLevel } />\n                </span>\n                <span className = 'localvideomenu'>\n                    <LocalVideoMenuTriggerButton\n                        getRef = { this._setInstance } />\n                </span>\n\n            </span>\n        );\n    }\n\n    _onCanPlay: Object => void;\n\n    /**\n     * Canplay event listener.\n     *\n     * @param {SyntheticEvent} event - The event.\n     * @returns {void}\n     */\n    _onCanPlay(event) {\n        this.setState({ canPlayEventReceived: true });\n\n        const {\n            _isTestModeEnabled,\n            _videoTrack\n        } = this.props;\n\n        if (_videoTrack && _isTestModeEnabled) {\n            this._onTestingEvent(event);\n        }\n    }\n\n    _onTestingEvent: Object => void;\n\n    /**\n     * Event handler for testing events.\n     *\n     * @param {SyntheticEvent} event - The event.\n     * @returns {void}\n     */\n    _onTestingEvent(event) {\n        const {\n            _videoTrack,\n            dispatch\n        } = this.props;\n        const jitsiVideoTrack = _videoTrack?.jitsiTrack;\n\n        dispatch(updateLastTrackVideoMediaEvent(jitsiVideoTrack, event.type));\n    }\n\n    _setInstance: Object => void;\n\n    /**\n     * Stores the local or remote video menu button instance in a variable.\n     *\n     * @param {Object} instance - The local or remote video menu trigger instance.\n     *\n     * @returns {void}\n     */\n    _setInstance(instance) {\n        this.videoMenuTriggerRef = instance;\n    }\n\n    /**\n     * Renders a remote participant's 'thumbnail.\n     *\n     * @returns {ReactElement}\n     */\n    _renderRemoteParticipant() {\n        const {\n            _isMobile,\n            _isTestModeEnabled,\n            _participant,\n            _startSilent,\n            _videoTrack,\n            _volume = 1\n        } = this.props;\n        const { id } = _participant;\n        const { audioLevel, canPlayEventReceived } = this.state;\n        const styles = this._getStyles();\n        const containerClassName = this._getContainerClassName();\n\n        // hide volume when in silent mode\n        const onVolumeChange = _startSilent ? undefined : this._onVolumeChange;\n        const jitsiVideoTrack = _videoTrack?.jitsiTrack;\n        const videoTrackId = jitsiVideoTrack && jitsiVideoTrack.getId();\n        const videoEventListeners = {};\n\n        if (_videoTrack && _isTestModeEnabled) {\n            VIDEO_TEST_EVENTS.forEach(attribute => {\n                videoEventListeners[attribute] = this._onTestingEvent;\n            });\n        }\n\n        videoEventListeners.onCanPlay = this._onCanPlay;\n\n        const videoElementStyle = canPlayEventReceived ? null : {\n            display: 'none'\n        };\n\n        return (\n            <span\n                className = { containerClassName }\n                id = { `participant_${id}` }\n                onClick = { this._onClick }\n                { ...(_isMobile\n                    ? {\n                        onTouchEnd: this._onTouchEnd,\n                        onTouchMove: this._onTouchMove,\n                        onTouchStart: this._onTouchStart\n                    }\n                    : {\n                        onMouseEnter: this._onMouseEnter,\n                        onMouseLeave: this._onMouseLeave\n                    }\n                ) }\n                style = { styles.thumbnail }>\n                {\n                    _videoTrack && <VideoTrack\n                        eventHandlers = { videoEventListeners }\n                        id = { `remoteVideo_${videoTrackId || ''}` }\n                        muted = { true }\n                        style = { videoElementStyle }\n                        videoTrack = { _videoTrack } />\n                }\n                <div className = 'videocontainer__background' />\n                <div className = 'videocontainer__toptoolbar'>\n                    { this._renderTopIndicators() }\n                </div>\n                <div className = 'videocontainer__toolbar'>\n                    <StatusIndicators participantID = { id } />\n                </div>\n                <div className = 'videocontainer__hoverOverlay' />\n                <div className = 'displayNameContainer'>\n                    <DisplayName\n                        elementID = { `participant_${id}_name` }\n                        participantID = { id } />\n                </div>\n                { this._renderAvatar(styles.avatar) }\n                <div className = 'presence-label-container'>\n                    <PresenceLabel\n                        className = 'presence-label'\n                        participantID = { id } />\n                </div>\n                <span className = 'audioindicator-container'>\n                    <AudioLevelIndicator audioLevel = { audioLevel } />\n                </span>\n                <span className = 'remotevideomenu'>\n                    <RemoteVideoMenuTriggerButton\n                        getRef = { this._setInstance }\n                        initialVolumeValue = { _volume }\n                        onVolumeChange = { onVolumeChange }\n                        participantID = { id } />\n                </span>\n            </span>\n        );\n    }\n\n    _onVolumeChange: number => void;\n\n    /**\n     * Handles volume changes.\n     *\n     * @param {number} value - The new value for the volume.\n     * @returns {void}\n     */\n    _onVolumeChange(value) {\n        const { _participant, dispatch } = this.props;\n        const { id } = _participant;\n\n        dispatch(setVolume(id, value));\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _participant } = this.props;\n\n        if (!_participant) {\n            return null;\n        }\n\n        const { isFakeParticipant, local } = _participant;\n\n        if (local) {\n            return this._renderLocalParticipant();\n        }\n\n        if (isFakeParticipant) {\n            return this._renderFakeParticipant();\n        }\n\n        return this._renderRemoteParticipant();\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps): Object {\n    const { participantID } = ownProps;\n\n    const participant = getParticipantByIdOrUndefined(state, participantID);\n    const id = participant?.id;\n    const isLocal = participant?.local ?? true;\n    const tracks = state['features/base/tracks'];\n    const { participantsVolume } = state['features/filmstrip'];\n    const _videoTrack = isLocal\n        ? getLocalVideoTrack(tracks) : getTrackByMediaTypeAndParticipant(tracks, MEDIA_TYPE.VIDEO, participantID);\n    const _audioTrack = isLocal\n        ? getLocalAudioTrack(tracks) : getTrackByMediaTypeAndParticipant(tracks, MEDIA_TYPE.AUDIO, participantID);\n    const _currentLayout = getCurrentLayout(state);\n    let size = {};\n    const {\n        startSilent,\n        disableLocalVideoFlip,\n        disableProfile,\n        iAmRecorder,\n        iAmSipGateway\n    } = state['features/base/config'];\n    const { NORMAL = 8 } = interfaceConfig.INDICATOR_FONT_SIZES || {};\n    const { localFlipX } = state['features/base/settings'];\n    const _isMobile = isMobileBrowser();\n\n\n    switch (_currentLayout) {\n    case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n    case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW: {\n        const {\n            horizontalViewDimensions = {\n                local: {},\n                remote: {}\n            },\n            verticalViewDimensions = {\n                local: {},\n                remote: {}\n            }\n        } = state['features/filmstrip'];\n        const { local, remote }\n            = _currentLayout === LAYOUTS.VERTICAL_FILMSTRIP_VIEW\n                ? verticalViewDimensions : horizontalViewDimensions;\n        const { width, height } = isLocal ? local : remote;\n\n        size = {\n            _width: width,\n            _height: height\n        };\n\n        break;\n    }\n    case LAYOUTS.TILE_VIEW: {\n        const { width, height } = state['features/filmstrip'].tileViewDimensions.thumbnailSize;\n\n        size = {\n            _width: width,\n            _height: height\n        };\n        break;\n    }\n    }\n\n    return {\n        _audioTrack,\n        _connectionIndicatorAutoHideEnabled: interfaceConfig.CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,\n        _connectionIndicatorDisabled: _isMobile || interfaceConfig.CONNECTION_INDICATOR_DISABLED,\n        _currentLayout,\n        _defaultLocalDisplayName: interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME,\n        _disableLocalVideoFlip: Boolean(disableLocalVideoFlip),\n        _disableProfile: disableProfile,\n        _isHidden: isLocal && iAmRecorder && !iAmSipGateway,\n        _isAudioOnly: Boolean(state['features/base/audio-only'].enabled),\n        _isCurrentlyOnLargeVideo: state['features/large-video']?.participantId === id,\n        _isDominantSpeakerDisabled: interfaceConfig.DISABLE_DOMINANT_SPEAKER_INDICATOR,\n        _isMobile,\n        _isScreenSharing: _videoTrack?.videoType === 'desktop',\n        _isTestModeEnabled: isTestModeEnabled(state),\n        _isVideoPlayable: id && isVideoPlayable(state, id),\n        _indicatorIconSize: NORMAL,\n        _localFlipX: Boolean(localFlipX),\n        _participant: participant,\n        _participantCountMoreThan2: getParticipantCount(state) > 2,\n        _startSilent: Boolean(startSilent),\n        _videoTrack,\n        _volume: isLocal ? undefined : id ? participantsVolume[id] : undefined,\n        ...size\n    };\n}\n\nexport default connect(_mapStateToProps)(Thumbnail);\n","/* @flow */\nimport React, { Component } from 'react';\nimport { shouldComponentUpdate } from 'react-window';\n\nimport { connect } from '../../../base/redux';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\n\nimport Thumbnail from './Thumbnail';\n\n/**\n * The type of the React {@code Component} props of {@link ThumbnailWrapper}.\n */\ntype Props = {\n\n    /**\n     * The horizontal offset in px for the thumbnail. Used to center the thumbnails in the last row in tile view.\n     */\n     _horizontalOffset: number,\n\n    /**\n     * The ID of the participant associated with the Thumbnail.\n     */\n    _participantID: ?string,\n\n    /**\n     * The index of the column in tile view.\n     */\n    columnIndex?: number,\n\n    /**\n     * The index of the ThumbnailWrapper in stage view.\n     */\n    index?: number,\n\n    /**\n     * The index of the row in tile view.\n     */\n    rowIndex?: number,\n\n    /**\n     * The styles comming from react-window.\n     */\n    style: Object\n};\n\n/**\n * A wrapper Component for the Thumbnail that translates the react-window specific props\n * to the Thumbnail Component's props.\n */\nclass ThumbnailWrapper extends Component<Props> {\n\n    /**\n     * Creates new ThumbnailWrapper instance.\n     *\n     * @param {Props} props - The props of the component.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.shouldComponentUpdate = shouldComponentUpdate.bind(this);\n    }\n\n    shouldComponentUpdate: Props => boolean;\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _participantID, style, _horizontalOffset = 0 } = this.props;\n\n        if (typeof _participantID !== 'string') {\n            return null;\n        }\n\n        if (_participantID === 'local') {\n            return (\n                <Thumbnail\n                    horizontalOffset = { _horizontalOffset }\n                    key = 'local'\n                    style = { style } />);\n        }\n\n        return (\n            <Thumbnail\n                horizontalOffset = { _horizontalOffset }\n                key = { `remote_${_participantID}` }\n                participantID = { _participantID }\n                style = { style } />);\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code ThumbnailWrapper}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The props passed to the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const _currentLayout = getCurrentLayout(state);\n    const { remoteParticipants } = state['features/filmstrip'];\n    const remoteParticipantsLength = remoteParticipants.length;\n\n    if (_currentLayout === LAYOUTS.TILE_VIEW) {\n        const { columnIndex, rowIndex } = ownProps;\n        const { gridDimensions = {}, thumbnailSize } = state['features/filmstrip'].tileViewDimensions;\n        const { columns, rows } = gridDimensions;\n        const index = (rowIndex * columns) + columnIndex;\n        let horizontalOffset;\n\n        if (rowIndex === rows - 1) { // center the last row\n            const { width: thumbnailWidth } = thumbnailSize;\n            const { iAmRecorder } = state['features/base/config'];\n            const partialLastRowParticipantsNumber = (remoteParticipantsLength + (iAmRecorder ? 0 : 1)) % columns;\n\n            if (partialLastRowParticipantsNumber > 0) {\n                horizontalOffset = Math.floor((columns - partialLastRowParticipantsNumber) * (thumbnailWidth + 4) / 2);\n            }\n        }\n\n        if (index > remoteParticipantsLength) {\n            return {};\n        }\n\n        if (index === remoteParticipantsLength) {\n            return {\n                _participantID: 'local',\n                _horizontalOffset: horizontalOffset\n            };\n        }\n\n        return {\n            _participantID: remoteParticipants[index],\n            _horizontalOffset: horizontalOffset\n        };\n    }\n\n    const { index } = ownProps;\n\n    if (typeof index !== 'number' || remoteParticipantsLength <= index) {\n        return {};\n    }\n\n    return {\n        _participantID: remoteParticipants[index]\n    };\n}\n\nexport default connect(_mapStateToProps)(ThumbnailWrapper);\n","/* @flow */\n\nimport React, { PureComponent } from 'react';\nimport { FixedSizeList, FixedSizeGrid } from 'react-window';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { getToolbarButtons } from '../../../base/config';\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconMenuDown, IconMenuUp } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { showToolbox } from '../../../toolbox/actions.web';\nimport { isButtonEnabled, isToolboxVisible } from '../../../toolbox/functions.web';\nimport { LAYOUTS, getCurrentLayout } from '../../../video-layout';\nimport { setFilmstripVisible, setVisibleRemoteParticipants } from '../../actions';\nimport {\n    ASPECT_RATIO_BREAKPOINT,\n    TILE_HORIZONTAL_MARGIN,\n    TILE_VERTICAL_MARGIN,\n    TOOLBAR_HEIGHT,\n    TOOLBAR_HEIGHT_MOBILE\n} from '../../constants';\nimport { shouldRemoteVideosBeVisible } from '../../functions';\n\nimport AudioTracksContainer from './AudioTracksContainer';\nimport Thumbnail from './Thumbnail';\nimport ThumbnailWrapper from './ThumbnailWrapper';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link Filmstrip}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS class names top add to the root.\n     */\n    _className: string,\n\n    /**\n     * The current layout of the filmstrip.\n     */\n    _currentLayout: string,\n\n    /**\n     * The number of columns in tile view.\n     */\n    _columns: number,\n\n    /**\n     * The width of the filmstrip.\n     */\n    _filmstripWidth: number,\n\n    /**\n     * The height of the filmstrip.\n     */\n    _filmstripHeight: number,\n\n    /**\n     * Whether the filmstrip button is enabled.\n     */\n    _isFilmstripButtonEnabled: boolean,\n\n    /**\n     * The participants in the call.\n     */\n    _remoteParticipants: Array<Object>,\n\n    /**\n     * The length of the remote participants array.\n     */\n    _remoteParticipantsLength: number,\n\n    /**\n     * The number of rows in tile view.\n     */\n    _rows: number,\n\n    /**\n     * The height of the thumbnail.\n     */\n    _thumbnailHeight: number,\n\n    /**\n     * The width of the thumbnail.\n     */\n    _thumbnailWidth: number,\n\n    /**\n     * Additional CSS class names to add to the container of all the thumbnails.\n     */\n    _videosClassName: string,\n\n    /**\n     * Whether or not the filmstrip videos should currently be displayed.\n     */\n    _visible: boolean,\n\n    /**\n     * Whether or not the toolbox is displayed.\n     */\n    _isToolboxVisible: Boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which represents the filmstrip on\n * Web/React.\n *\n * @extends Component\n */\nclass Filmstrip extends PureComponent <Props> {\n\n    /**\n     * Initializes a new {@code Filmstrip} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onShortcutToggleFilmstrip = this._onShortcutToggleFilmstrip.bind(this);\n        this._onToolbarToggleFilmstrip = this._onToolbarToggleFilmstrip.bind(this);\n        this._onTabIn = this._onTabIn.bind(this);\n        this._gridItemKey = this._gridItemKey.bind(this);\n        this._listItemKey = this._listItemKey.bind(this);\n        this._onGridItemsRendered = this._onGridItemsRendered.bind(this);\n        this._onListItemsRendered = this._onListItemsRendered.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        APP.keyboardshortcut.registerShortcut(\n            'F',\n            'filmstripPopover',\n            this._onShortcutToggleFilmstrip,\n            'keyboardShortcuts.toggleFilmstrip'\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        APP.keyboardshortcut.unregisterShortcut('F');\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const filmstripStyle = { };\n        const { _currentLayout } = this.props;\n        const tileViewActive = _currentLayout === LAYOUTS.TILE_VIEW;\n\n        switch (_currentLayout) {\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            // Adding 18px for the 2px margins, 2px borders on the left and right and 5px padding on the left and right.\n            // Also adding 7px for the scrollbar.\n            filmstripStyle.maxWidth = (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + 25;\n            break;\n        }\n\n        let toolbar = null;\n\n        if (this.props._isFilmstripButtonEnabled) {\n            toolbar = this._renderToggleButton();\n        }\n\n        return (\n            <div\n                className = { `filmstrip ${this.props._className}` }\n                style = { filmstripStyle }>\n                { toolbar }\n                <div\n                    className = { this.props._videosClassName }\n                    id = 'remoteVideos'>\n                    <div\n                        className = 'filmstrip__videos'\n                        id = 'filmstripLocalVideo'>\n                        <div id = 'filmstripLocalVideoThumbnail'>\n                            {\n                                !tileViewActive && <Thumbnail\n                                    key = 'local' />\n                            }\n                        </div>\n                    </div>\n                    {\n                        this._renderRemoteParticipants()\n                    }\n                </div>\n                <AudioTracksContainer />\n            </div>\n        );\n    }\n\n    _onTabIn: () => void;\n\n    /**\n     * Toggle the toolbar visibility when tabbing into it.\n     *\n     * @returns {void}\n     */\n    _onTabIn() {\n        if (!this.props._isToolboxVisible && this.props._visible) {\n            this.props.dispatch(showToolbox());\n        }\n    }\n\n    _listItemKey: number => string;\n\n    /**\n     * The key to be used for every ThumbnailWrapper element in stage view.\n     *\n     * @param {number} index - The index of the ThumbnailWrapper instance.\n     * @returns {string} - The key.\n     */\n    _listItemKey(index) {\n        const { _remoteParticipants, _remoteParticipantsLength } = this.props;\n\n        if (typeof index !== 'number' || _remoteParticipantsLength <= index) {\n            return `empty-${index}`;\n        }\n\n        return _remoteParticipants[index];\n    }\n\n    _gridItemKey: Object => string;\n\n    /**\n     * The key to be used for every ThumbnailWrapper element in tile views.\n     *\n     * @param {Object} data - An object with the indexes identifying the ThumbnailWrapper instance.\n     * @returns {string} - The key.\n     */\n    _gridItemKey({ columnIndex, rowIndex }) {\n        const { _columns, _remoteParticipants, _remoteParticipantsLength } = this.props;\n        const index = (rowIndex * _columns) + columnIndex;\n\n        if (index > _remoteParticipantsLength) {\n            return `empty-${index}`;\n        }\n\n        if (index === _remoteParticipantsLength) {\n            return 'local';\n        }\n\n        return _remoteParticipants[index];\n    }\n\n    _onListItemsRendered: Object => void;\n\n    /**\n     * Handles items rendered changes in stage view.\n     *\n     * @param {Object} data - Information about the rendered items.\n     * @returns {void}\n     */\n    _onListItemsRendered({ visibleStartIndex, visibleStopIndex }) {\n        const { dispatch } = this.props;\n\n        dispatch(setVisibleRemoteParticipants(visibleStartIndex, visibleStopIndex));\n    }\n\n    _onGridItemsRendered: Object => void;\n\n    /**\n     * Handles items rendered changes in tile view.\n     *\n     * @param {Object} data - Information about the rendered items.\n     * @returns {void}\n     */\n    _onGridItemsRendered({\n        visibleColumnStartIndex,\n        visibleColumnStopIndex,\n        visibleRowStartIndex,\n        visibleRowStopIndex\n    }) {\n        const { _columns, dispatch } = this.props;\n        const startIndex = (visibleRowStartIndex * _columns) + visibleColumnStartIndex;\n        const endIndex = (visibleRowStopIndex * _columns) + visibleColumnStopIndex;\n\n        dispatch(setVisibleRemoteParticipants(startIndex, endIndex));\n    }\n\n    /**\n     * Renders the thumbnails for remote participants.\n     *\n     * @returns {ReactElement}\n     */\n    _renderRemoteParticipants() {\n        const {\n            _columns,\n            _currentLayout,\n            _filmstripHeight,\n            _filmstripWidth,\n            _remoteParticipantsLength,\n            _rows,\n            _thumbnailHeight,\n            _thumbnailWidth\n        } = this.props;\n\n        if (!_thumbnailWidth || isNaN(_thumbnailWidth) || !_thumbnailHeight\n            || isNaN(_thumbnailHeight) || !_filmstripHeight || isNaN(_filmstripHeight) || !_filmstripWidth\n            || isNaN(_filmstripWidth)) {\n            return null;\n        }\n\n        if (_currentLayout === LAYOUTS.TILE_VIEW) {\n            return (\n                <FixedSizeGrid\n                    className = 'filmstrip__videos remote-videos'\n                    columnCount = { _columns }\n                    columnWidth = { _thumbnailWidth + TILE_HORIZONTAL_MARGIN }\n                    height = { _filmstripHeight }\n                    initialScrollLeft = { 0 }\n                    initialScrollTop = { 0 }\n                    itemKey = { this._gridItemKey }\n                    onItemsRendered = { this._onGridItemsRendered }\n                    overscanRowCount = { 1 }\n                    rowCount = { _rows }\n                    rowHeight = { _thumbnailHeight + TILE_VERTICAL_MARGIN }\n                    width = { _filmstripWidth }>\n                    {\n                        ThumbnailWrapper\n                    }\n                </FixedSizeGrid>\n            );\n        }\n\n\n        const props = {\n            itemCount: _remoteParticipantsLength,\n            className: 'filmstrip__videos remote-videos',\n            height: _filmstripHeight,\n            itemKey: this._listItemKey,\n            itemSize: 0,\n            onItemsRendered: this._onListItemsRendered,\n            overscanCount: 1,\n            width: _filmstripWidth,\n            style: {\n                willChange: 'auto'\n            }\n        };\n\n        if (_currentLayout === LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW) {\n            const itemSize = _thumbnailWidth + TILE_HORIZONTAL_MARGIN;\n            const isNotOverflowing = (_remoteParticipantsLength * itemSize) <= _filmstripWidth;\n\n            props.itemSize = itemSize;\n\n            // $FlowFixMe\n            props.layout = 'horizontal';\n            if (isNotOverflowing) {\n                props.className += ' is-not-overflowing';\n            }\n\n        } else if (_currentLayout === LAYOUTS.VERTICAL_FILMSTRIP_VIEW) {\n            const itemSize = _thumbnailHeight + TILE_VERTICAL_MARGIN;\n            const isNotOverflowing = (_remoteParticipantsLength * itemSize) <= _filmstripHeight;\n\n            if (isNotOverflowing) {\n                props.className += ' is-not-overflowing';\n            }\n\n            props.itemSize = itemSize;\n        }\n\n        return (\n            <FixedSizeList { ...props }>\n                {\n                    ThumbnailWrapper\n                }\n            </FixedSizeList>\n        );\n    }\n\n    /**\n     * Dispatches an action to change the visibility of the filmstrip.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleFilmstrip() {\n        this.props.dispatch(setFilmstripVisible(!this.props._visible));\n    }\n\n    _onShortcutToggleFilmstrip: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling filmstrip visibility.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleFilmstrip() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.filmstrip',\n            {\n                enable: this.props._visible\n            }));\n\n        this._doToggleFilmstrip();\n    }\n\n    _onToolbarToggleFilmstrip: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for opening\n     * the speaker stats modal.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleFilmstrip() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.filmstrip.button',\n            {\n                enable: this.props._visible\n            }));\n\n        this._doToggleFilmstrip();\n    }\n\n    /**\n     * Creates a React Element for changing the visibility of the filmstrip when\n     * clicked.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderToggleButton() {\n        const icon = this.props._visible ? IconMenuDown : IconMenuUp;\n        const { t } = this.props;\n\n        return (\n            <div\n                className = 'filmstrip__toolbar'>\n                <button\n                    aria-expanded = { this.props._visible }\n                    aria-label = { t('toolbar.accessibilityLabel.toggleFilmstrip') }\n                    id = 'toggleFilmstripButton'\n                    onClick = { this._onToolbarToggleFilmstrip }\n                    onFocus = { this._onTabIn }\n                    tabIndex = { 0 }>\n                    <Icon\n                        aria-label = { t('toolbar.accessibilityLabel.toggleFilmstrip') }\n                        src = { icon } />\n                </button>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code Filmstrip}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const toolbarButtons = getToolbarButtons(state);\n    const { visible, remoteParticipants } = state['features/filmstrip'];\n    const reduceHeight = state['features/toolbox'].visible && toolbarButtons.length;\n    const remoteVideosVisible = shouldRemoteVideosBeVisible(state);\n    const { isOpen: shiftRight } = state['features/chat'];\n    const {\n        gridDimensions = {},\n        filmstripHeight,\n        filmstripWidth,\n        thumbnailSize: tileViewThumbnailSize\n    } = state['features/filmstrip'].tileViewDimensions;\n    const _currentLayout = getCurrentLayout(state);\n\n    const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n    const availableSpace = clientHeight - filmstripHeight;\n    let filmstripPadding = 0;\n\n    if (availableSpace > 0) {\n        const paddingValue = TOOLBAR_HEIGHT_MOBILE - availableSpace;\n\n        if (paddingValue > 0) {\n            filmstripPadding = paddingValue;\n        }\n    } else {\n        filmstripPadding = TOOLBAR_HEIGHT_MOBILE;\n    }\n\n    const collapseTileView = reduceHeight\n        && isMobileBrowser()\n        && clientWidth <= ASPECT_RATIO_BREAKPOINT;\n\n    const className = `${remoteVideosVisible ? '' : 'hide-videos'} ${\n        reduceHeight ? 'reduce-height' : ''\n    } ${shiftRight ? 'shift-right' : ''} ${collapseTileView ? 'collapse' : ''}`.trim();\n    const videosClassName = `filmstrip__videos${visible ? '' : ' hidden'}`;\n    let _thumbnailSize, remoteFilmstripHeight, remoteFilmstripWidth;\n\n    switch (_currentLayout) {\n    case LAYOUTS.TILE_VIEW:\n        _thumbnailSize = tileViewThumbnailSize;\n        remoteFilmstripHeight = filmstripHeight - (collapseTileView && filmstripPadding > 0 ? filmstripPadding : 0);\n        remoteFilmstripWidth = filmstripWidth;\n        break;\n    case LAYOUTS.VERTICAL_FILMSTRIP_VIEW: {\n        const { remote, remoteVideosContainer } = state['features/filmstrip'].verticalViewDimensions;\n\n        _thumbnailSize = remote;\n        remoteFilmstripHeight = remoteVideosContainer?.height - (reduceHeight ? TOOLBAR_HEIGHT : 0);\n        remoteFilmstripWidth = remoteVideosContainer?.width;\n        break;\n    }\n    case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW: {\n        const { remote, remoteVideosContainer } = state['features/filmstrip'].horizontalViewDimensions;\n\n        _thumbnailSize = remote;\n        remoteFilmstripHeight = remoteVideosContainer?.height;\n        remoteFilmstripWidth = remoteVideosContainer?.width;\n        break;\n    }\n    }\n\n    return {\n        _className: className,\n        _columns: gridDimensions.columns,\n        _currentLayout,\n        _filmstripHeight: remoteFilmstripHeight,\n        _filmstripWidth: remoteFilmstripWidth,\n        _isFilmstripButtonEnabled: isButtonEnabled('filmstrip', state),\n        _remoteParticipantsLength: remoteParticipants.length,\n        _remoteParticipants: remoteParticipants,\n        _rows: gridDimensions.rows,\n        _thumbnailWidth: _thumbnailSize?.width,\n        _thumbnailHeight: _thumbnailSize?.height,\n        _videosClassName: videosClassName,\n        _visible: visible,\n        _isToolboxVisible: isToolboxVisible(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Filmstrip));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconModerator } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link ModeratorIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing a moderator icon with a tooltip.\n *\n * @extends Component\n */\nclass ModeratorIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = 'moderator-icon right'>\n                <BaseIndicator\n                    className = 'focusindicator toolbar-icon'\n                    icon = { IconModerator }\n                    iconSize = { 13 }\n                    tooltipKey = 'videothumbnail.moderator'\n                    tooltipPosition = { this.props.tooltipPosition } />\n            </div>\n        );\n    }\n}\n\nexport default ModeratorIndicator;\n","// @flow\n\nimport { Component } from 'react';\n\nimport { getParticipantById } from '../../base/participants';\n\nexport type Props = {\n\n    /**\n     * The participant id who we want to render the raised hand indicator\n     * for.\n     */\n    participantId: string,\n\n    /**\n     * True if the hand is raised for this participant.\n     */\n    _raisedHand?: boolean\n}\n\n/**\n * Implements an abstract class for the RaisedHandIndicator component.\n */\nexport default class AbstractRaisedHandIndicator<P: Props>\n    extends Component<P> {\n\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        if (!this.props._raisedHand) {\n            return null;\n        }\n\n        return this._renderIndicator();\n    }\n\n    /**\n     * Renders the platform specific indicator element.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderIndicator: () => React$Element<*>\n\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Object}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    const participant = getParticipantById(state, ownProps.participantId);\n\n    return {\n        _raisedHand: participant && participant.raisedHand\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { IconRaisedHand } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport AbstractRaisedHandIndicator, {\n    type Props as AbstractProps,\n    _mapStateToProps\n} from '../AbstractRaisedHandIndicator';\n\n/**\n * The type of the React {@code Component} props of {@link RaisedHandIndicator}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * Thumbnail badge showing that the participant would like to speak.\n *\n * @extends Component\n */\nclass RaisedHandIndicator extends AbstractRaisedHandIndicator<Props> {\n    /**\n     * Renders the platform specific indicator element.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderIndicator() {\n        return (\n            <BaseIndicator\n                className = 'raisehandindicator indicator show-inline'\n                icon = { IconRaisedHand }\n                iconClassName = 'indicatoricon'\n                iconSize = { `${this.props.iconSize}px` }\n                tooltipKey = 'raisedHand'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default connect(_mapStateToProps)(RaisedHandIndicator);\n","// @flow\n\nimport React from 'react';\n\nimport { IconShareDesktop } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing a screen-sharing icon with a tooltip.\n *\n * @param {Props} props - React props passed to this component.\n * @returns {React$Element<any>}\n */\nexport default function ScreenShareIndicator(props: Props) {\n    return (\n        <BaseIndicator\n            className = 'screenShare toolbar-icon'\n            icon = { IconShareDesktop }\n            iconId = 'share-desktop'\n            iconSize = { 13 }\n            tooltipKey = 'videothumbnail.videomute'\n            tooltipPosition = { props.tooltipPosition } />\n    );\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { IconCameraDisabled } from '../../../base/icons';\nimport { BaseIndicator } from '../../../base/react';\n\n/**\n * The type of the React {@code Component} props of {@link VideoMutedIndicator}.\n */\ntype Props = {\n\n    /**\n     * From which side of the indicator the tooltip should appear from.\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing a video muted icon with a tooltip.\n *\n * @extends Component\n */\nclass VideoMutedIndicator extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <BaseIndicator\n                className = 'videoMuted toolbar-icon'\n                icon = { IconCameraDisabled }\n                iconId = 'camera-disabled'\n                iconSize = { 13 }\n                tooltipKey = 'videothumbnail.videomute'\n                tooltipPosition = { this.props.tooltipPosition } />\n        );\n    }\n}\n\nexport default VideoMutedIndicator;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { MEDIA_TYPE } from '../../../base/media';\nimport { getParticipantByIdOrUndefined, PARTICIPANT_ROLE } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { getTrackByMediaTypeAndParticipant, isLocalTrackMuted, isRemoteTrackMuted } from '../../../base/tracks';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\n\nimport AudioMutedIndicator from './AudioMutedIndicator';\nimport ModeratorIndicator from './ModeratorIndicator';\nimport ScreenShareIndicator from './ScreenShareIndicator';\nimport VideoMutedIndicator from './VideoMutedIndicator';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link StatusIndicators}.\n */\ntype Props = {\n\n    /**\n     * The current layout of the filmstrip.\n     */\n    _currentLayout: string,\n\n    /**\n     * Indicates if the audio muted indicator should be visible or not.\n     */\n    _showAudioMutedIndicator: Boolean,\n\n    /**\n     * Indicates if the moderator indicator should be visible or not.\n     */\n    _showModeratorIndicator: Boolean,\n\n    /**\n     * Indicates if the screen share indicator should be visible or not.\n     */\n    _showScreenShareIndicator: Boolean,\n\n    /**\n     * Indicates if the video muted indicator should be visible or not.\n     */\n    _showVideoMutedIndicator: Boolean,\n\n    /**\n     * The ID of the participant for which the status bar is rendered.\n     */\n    participantID: String\n};\n\n/**\n * React {@code Component} for showing the status bar in a thumbnail.\n *\n * @extends Component\n */\nclass StatusIndicators extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _currentLayout,\n            _showAudioMutedIndicator,\n            _showModeratorIndicator,\n            _showScreenShareIndicator,\n            _showVideoMutedIndicator\n        } = this.props;\n        let tooltipPosition;\n\n        switch (_currentLayout) {\n        case LAYOUTS.TILE_VIEW:\n            tooltipPosition = 'right';\n            break;\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            tooltipPosition = 'left';\n            break;\n        default:\n            tooltipPosition = 'top';\n        }\n\n        return (\n            <div>\n                { _showAudioMutedIndicator ? <AudioMutedIndicator tooltipPosition = { tooltipPosition } /> : null }\n                { _showScreenShareIndicator ? <ScreenShareIndicator tooltipPosition = { tooltipPosition } /> : null }\n                { _showVideoMutedIndicator ? <VideoMutedIndicator tooltipPosition = { tooltipPosition } /> : null }\n                { _showModeratorIndicator ? <ModeratorIndicator tooltipPosition = { tooltipPosition } /> : null }\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code StatusIndicators}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {{\n *     _currentLayout: string,\n *     _showModeratorIndicator: boolean,\n *     _showVideoMutedIndicator: boolean\n * }}\n*/\nfunction _mapStateToProps(state, ownProps) {\n    const { participantID } = ownProps;\n\n    // Only the local participant won't have id for the time when the conference is not yet joined.\n    const participant = getParticipantByIdOrUndefined(state, participantID);\n\n    const tracks = state['features/base/tracks'];\n    let isVideoMuted = true;\n    let isAudioMuted = true;\n    let isScreenSharing = false;\n\n    if (participant?.local) {\n        isVideoMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.VIDEO);\n        isAudioMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.AUDIO);\n    } else if (!participant?.isFakeParticipant) { // remote participants excluding shared video\n        const track = getTrackByMediaTypeAndParticipant(tracks, MEDIA_TYPE.VIDEO, participantID);\n\n        isScreenSharing = track?.videoType === 'desktop';\n        isVideoMuted = isRemoteTrackMuted(tracks, MEDIA_TYPE.VIDEO, participantID);\n        isAudioMuted = isRemoteTrackMuted(tracks, MEDIA_TYPE.AUDIO, participantID);\n    }\n\n    return {\n        _currentLayout: getCurrentLayout(state),\n        _showAudioMutedIndicator: isAudioMuted,\n        _showModeratorIndicator:\n            !interfaceConfig.DISABLE_FOCUS_INDICATOR && participant && participant.role === PARTICIPANT_ROLE.MODERATOR,\n        _showScreenShareIndicator: isScreenSharing,\n        _showVideoMutedIndicator: isVideoMuted\n    };\n}\n\nexport default connect(_mapStateToProps)(StatusIndicators);\n","// @flow\n\nimport { openDialog } from '../../features/base/dialog';\n\nimport { DisplayNamePrompt } from './components';\n\n/**\n * Signals to open a dialog with the {@code DisplayNamePrompt} component.\n *\n * @param {?Function} onPostSubmit - The function to invoke after a successful\n * submit of the dialog.\n * @returns {Object}\n */\nexport function openDisplayNamePrompt(onPostSubmit: ?Function) {\n    return openDialog(DisplayNamePrompt, {\n        onPostSubmit\n    });\n}\n","export default function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/video-quality');\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\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/virtual-background');\n","// @flow\nimport type { Dispatch } from 'redux';\n\nimport { getFeatureFlag, TILE_VIEW_ENABLED } from '../base/flags';\nimport {\n    getPinnedParticipant,\n    getParticipantCount,\n    pinParticipant,\n    getParticipantCountWithFake\n} from '../base/participants';\nimport {\n    ASPECT_RATIO_BREAKPOINT,\n    DEFAULT_MAX_COLUMNS,\n    ABSOLUTE_MAX_COLUMNS,\n    SINGLE_COLUMN_BREAKPOINT,\n    TWO_COLUMN_BREAKPOINT\n} from '../filmstrip/constants';\nimport { isVideoPlaying } from '../shared-video/functions';\n\nimport { LAYOUTS } from './constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * A selector for retrieving the current automatic pinning setting.\n *\n * @private\n * @returns {string|undefined} The string \"remote-only\" is returned if only\n * remote screen sharing should be automatically pinned, any other truthy value\n * means automatically pin all screen shares. Falsy means do not automatically\n * pin any screen shares.\n */\nexport function getAutoPinSetting() {\n    return typeof interfaceConfig === 'object'\n        ? interfaceConfig.AUTO_PIN_LATEST_SCREEN_SHARE\n        : 'remote-only';\n}\n\n/**\n * Returns the {@code LAYOUTS} constant associated with the layout\n * the application should currently be in.\n *\n * @param {Object} state - The redux state.\n * @returns {string}\n */\nexport function getCurrentLayout(state: Object) {\n    if (shouldDisplayTileView(state)) {\n        return LAYOUTS.TILE_VIEW;\n    } else if (interfaceConfig.VERTICAL_FILMSTRIP) {\n        return LAYOUTS.VERTICAL_FILMSTRIP_VIEW;\n    }\n\n    return LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW;\n}\n\n/**\n * Returns how many columns should be displayed in tile view. The number\n * returned will be between 1 and 7, inclusive.\n *\n * @param {Object} state - The redux store state.\n * @returns {number}\n */\nexport function getMaxColumnCount(state: Object) {\n    const configuredMax = interfaceConfig.TILE_VIEW_MAX_COLUMNS || DEFAULT_MAX_COLUMNS;\n    const { disableResponsiveTiles } = state['features/base/config'];\n\n    if (!disableResponsiveTiles) {\n        const { clientWidth } = state['features/base/responsive-ui'];\n        const participantCount = getParticipantCount(state);\n\n        // If there are just two participants in a conference, enforce single-column view for mobile size.\n        if (participantCount === 2 && clientWidth < ASPECT_RATIO_BREAKPOINT) {\n            return Math.min(1, Math.max(configuredMax, 1));\n        }\n\n        // Enforce single column view at very small screen widths.\n        if (clientWidth < SINGLE_COLUMN_BREAKPOINT) {\n            return Math.min(1, Math.max(configuredMax, 1));\n        }\n\n        // Enforce two column view below breakpoint.\n        if (clientWidth < TWO_COLUMN_BREAKPOINT) {\n            return Math.min(2, Math.max(configuredMax, 1));\n        }\n    }\n\n    return Math.min(Math.max(configuredMax, 1), ABSOLUTE_MAX_COLUMNS);\n}\n\n/**\n * Returns the cell count dimensions for tile view. Tile view tries to uphold\n * equal count of tiles for height and width, until maxColumn is reached in\n * which rows will be added but no more columns.\n *\n * @param {Object} state - The redux store state.\n * @returns {Object} An object is return with the desired number of columns,\n * rows, and visible rows (the rest should overflow) for the tile view layout.\n */\nexport function getTileViewGridDimensions(state: Object) {\n    const maxColumns = getMaxColumnCount(state);\n\n    // When in tile view mode, we must discount ourselves (the local participant) because our\n    // tile is not visible.\n    const { iAmRecorder } = state['features/base/config'];\n    const numberOfParticipants = getParticipantCountWithFake(state) - (iAmRecorder ? 1 : 0);\n\n    const columnsToMaintainASquare = Math.ceil(Math.sqrt(numberOfParticipants));\n    const columns = Math.min(columnsToMaintainASquare, maxColumns);\n    const rows = Math.ceil(numberOfParticipants / columns);\n    const minVisibleRows = Math.min(maxColumns, rows);\n\n    return {\n        columns,\n        minVisibleRows,\n        rows\n    };\n}\n\n/**\n * Selector for determining if the UI layout should be in tile view. Tile view\n * is determined by more than just having the tile view setting enabled, as\n * one-on-one calls should not be in tile view, as well as etherpad editing.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean} True if tile view should be displayed.\n */\nexport function shouldDisplayTileView(state: Object = {}) {\n    const participantCount = getParticipantCount(state);\n\n    const tileViewEnabledFeatureFlag = getFeatureFlag(state, TILE_VIEW_ENABLED, true);\n    const { disableTileView } = state['features/base/config'];\n\n    if (disableTileView || !tileViewEnabledFeatureFlag) {\n        return false;\n    }\n\n    const { tileViewEnabled } = state['features/video-layout'];\n\n    if (tileViewEnabled !== undefined) {\n        // If the user explicitly requested a view mode, we\n        // do that.\n        return tileViewEnabled;\n    }\n\n    const { iAmRecorder } = state['features/base/config'];\n\n    // None tile view mode is easier to calculate (no need for many negations), so we do\n    // that and negate it only once.\n    const shouldDisplayNormalMode = Boolean(\n\n        // Reasons for normal mode:\n\n        // Editing etherpad\n        state['features/etherpad']?.editing\n\n        // We pinned a participant\n        || getPinnedParticipant(state)\n\n        // It's a 1-on-1 meeting\n        || participantCount < 3\n\n        // There is a shared YouTube video in the meeting\n        || isVideoPlaying(state)\n\n        // We want jibri to use stage view by default\n        || iAmRecorder\n    );\n\n    return !shouldDisplayNormalMode;\n}\n\n/**\n * Private helper to automatically pin the latest screen share stream or unpin\n * if there are no more screen share streams.\n *\n * @param {Array<string>} screenShares - Array containing the list of all the screen sharing endpoints\n * before the update was triggered (including the ones that have been removed from redux because of the update).\n * @param {Store} store - The redux store.\n * @returns {void}\n */\nexport function updateAutoPinnedParticipant(\n        screenShares: Array<string>, { dispatch, getState }: { dispatch: Dispatch<any>, getState: Function }) {\n    const state = getState();\n    const remoteScreenShares = state['features/video-layout'].remoteScreenShares;\n    const pinned = getPinnedParticipant(getState);\n\n    // if the pinned participant is shared video or some other fake participant we want to skip auto-pinning\n    if (pinned?.isFakeParticipant) {\n        return;\n    }\n\n    // Unpin the screen share when the screen sharing participant leaves. Switch to tile view if no other\n    // participant was pinned before screen share was auto-pinned, pin the previously pinned participant otherwise.\n    if (!remoteScreenShares?.length) {\n        let participantId = null;\n\n        if (pinned && !screenShares.find(share => share === pinned.id)) {\n            participantId = pinned.id;\n        }\n        dispatch(pinParticipant(participantId));\n\n        return;\n    }\n\n    const latestScreenShareParticipantId = remoteScreenShares[remoteScreenShares.length - 1];\n\n    if (latestScreenShareParticipantId) {\n        dispatch(pinParticipant(latestScreenShareParticipantId));\n    }\n}\n\n/**\n * Selector for whether we are currently in tile view.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isLayoutTileView(state: Object) {\n    return getCurrentLayout(state) === LAYOUTS.TILE_VIEW;\n}\n","export const SETTINGS_TABS = {\n    CALENDAR: 'calendar_tab',\n    DEVICES: 'devices_tab',\n    MORE: 'more_tab',\n    PROFILE: 'profile_tab',\n    SOUNDS: 'sounds_tab'\n};\n\n/**\n * View ID for the Settings modal.\n */\nexport const SETTINGS_VIEW_ID = 'SETTINGS_VIEW_ID';\n\n/**\n * Default frame rate to be used for capturing screenshare.\n */\nexport const SS_DEFAULT_FRAME_RATE = 5;\n\n/**\n * Supported framerates to be used for capturing screenshare.\n */\nexport const SS_SUPPORTED_FRAMERATES = [ 5, 15, 30 ];\n","import { getCurrentConference } from '../base/conference';\nimport { openDialog } from '../base/dialog/actions';\nimport { getLocalParticipant } from '../base/participants';\nimport { SharedVideoDialog } from '../shared-video/components';\n\nimport { RESET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_STATUS } from './actionTypes';\n\n/**\n * Resets the status of the shared video.\n *\n * @returns {{\n *     type: SET_SHARED_VIDEO_STATUS,\n * }}\n */\nexport function resetSharedVideoStatus() {\n    return {\n        type: RESET_SHARED_VIDEO_STATUS\n    };\n}\n\n/**\n * Updates the current known status of the shared video.\n *\n * @param {{\n *     muted: boolean,\n *     ownerId: string,\n *     status: string,\n *     time: number,\n *     videoUrl: string\n * }} options - The options.\n *\n * @returns {{\n *     type: SET_SHARED_VIDEO_STATUS,\n *     muted: boolean,\n *     ownerId: string,\n *     status: string,\n *     time: number,\n *     videoUrl: string,\n * }}\n */\nexport function setSharedVideoStatus({ videoUrl, status, time, ownerId, muted }) {\n    return {\n        type: SET_SHARED_VIDEO_STATUS,\n        ownerId,\n        status,\n        time,\n        videoUrl,\n        muted\n    };\n}\n\n/**\n * Displays the dialog for entering the video link.\n *\n * @param {Function} onPostSubmit - The function to be invoked when a valid link is entered.\n * @returns {Function}\n */\nexport function showSharedVideoDialog(onPostSubmit) {\n    return openDialog(SharedVideoDialog, { onPostSubmit });\n}\n\n/**\n *\n * Stops playing a shared video.\n *\n * @returns {Function}\n */\nexport function stopSharedVideo() {\n    return (dispatch, getState) => {\n        const state = getState();\n        const { ownerId } = state['features/shared-video'];\n        const localParticipant = getLocalParticipant(state);\n\n        if (ownerId === localParticipant.id) {\n            dispatch(resetSharedVideoStatus());\n        }\n    };\n}\n\n/**\n *\n * Plays a shared video.\n *\n * @param {string} videoUrl - The video url to be played.\n *\n * @returns {Function}\n */\nexport function playSharedVideo(videoUrl) {\n    return (dispatch, getState) => {\n        const conference = getCurrentConference(getState());\n\n        if (conference) {\n            const localParticipant = getLocalParticipant(getState());\n\n            dispatch(setSharedVideoStatus({\n                videoUrl,\n                status: 'start',\n                time: 0,\n                ownerId: localParticipant.id\n            }));\n        }\n    };\n}\n\n/**\n *\n * Stops playing a shared video.\n *\n * @returns {Function}\n */\nexport function toggleSharedVideo() {\n    return (dispatch, getState) => {\n        const state = getState();\n        const { status } = state['features/shared-video'];\n\n        if ([ 'playing', 'start', 'pause' ].includes(status)) {\n            dispatch(stopSharedVideo());\n        } else {\n            dispatch(showSharedVideoDialog(id => dispatch(playSharedVideo(id))));\n        }\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/recording');\n","// @flow\n\nimport { getMeetingRegion, getRecordingSharingUrl } from '../base/config';\nimport JitsiMeetJS, { JitsiRecordingConstants } from '../base/lib-jitsi-meet';\nimport { getLocalParticipant, getParticipantDisplayName } from '../base/participants';\nimport { copyText } from '../base/util/helpers';\nimport { getVpaasTenant, isVpaasMeeting } from '../jaas/functions';\nimport {\n    NOTIFICATION_TIMEOUT,\n    hideNotification,\n    showErrorNotification,\n    showNotification\n} from '../notifications';\n\nimport {\n    CLEAR_RECORDING_SESSIONS,\n    RECORDING_SESSION_UPDATED,\n    SET_PENDING_RECORDING_NOTIFICATION_UID,\n    SET_SELECTED_RECORDING_SERVICE,\n    SET_STREAM_KEY\n} from './actionTypes';\nimport { getRecordingLink, getResourceId, isSavingRecordingOnDropbox } from './functions';\nimport logger from './logger';\n\n/**\n * Clears the data of every recording sessions.\n *\n * @returns {{\n *     type: CLEAR_RECORDING_SESSIONS\n * }}\n */\nexport function clearRecordingSessions() {\n    return {\n        type: CLEAR_RECORDING_SESSIONS\n    };\n}\n\n/**\n * Signals that the pending recording notification should be removed from the\n * screen.\n *\n * @param {string} streamType - The type of the stream ({@code 'file'} or\n * {@code 'stream'}).\n * @returns {Function}\n */\nexport function hidePendingRecordingNotification(streamType: string) {\n    return (dispatch: Function, getState: Function) => {\n        const { pendingNotificationUids } = getState()['features/recording'];\n        const pendingNotificationUid = pendingNotificationUids[streamType];\n\n        if (pendingNotificationUid) {\n            dispatch(hideNotification(pendingNotificationUid));\n            dispatch(\n                _setPendingRecordingNotificationUid(\n                    undefined, streamType));\n        }\n    };\n}\n\n/**\n * Sets the stream key last used by the user for later reuse.\n *\n * @param {string} streamKey - The stream key to set.\n * @returns {{\n *     type: SET_STREAM_KEY,\n *     streamKey: string\n * }}\n */\nexport function setLiveStreamKey(streamKey: string) {\n    return {\n        type: SET_STREAM_KEY,\n        streamKey\n    };\n}\n\n/**\n * Signals that the pending recording notification should be shown on the\n * screen.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @returns {Function}\n */\nexport function showPendingRecordingNotification(streamType: string) {\n    return async (dispatch: Function) => {\n        const isLiveStreaming\n            = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n        const dialogProps = isLiveStreaming ? {\n            descriptionKey: 'liveStreaming.pending',\n            titleKey: 'dialog.liveStreaming'\n        } : {\n            descriptionKey: 'recording.pending',\n            titleKey: 'dialog.recording'\n        };\n        const notification = await dispatch(showNotification({\n            isDismissAllowed: false,\n            ...dialogProps\n        }));\n\n        if (notification) {\n            dispatch(_setPendingRecordingNotificationUid(notification.uid, streamType));\n        }\n    };\n}\n\n/**\n * Signals that the recording error notification should be shown.\n *\n * @param {Object} props - The Props needed to render the notification.\n * @returns {showErrorNotification}\n */\nexport function showRecordingError(props: Object) {\n    return showErrorNotification(props);\n}\n\n/**\n * Signals that the stopped recording notification should be shown on the\n * screen for a given period.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @param {string?} participantName - The participant name stopping the recording.\n * @returns {showNotification}\n */\nexport function showStoppedRecordingNotification(streamType: string, participantName?: string) {\n    const isLiveStreaming\n        = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n    const descriptionArguments = { name: participantName };\n    const dialogProps = isLiveStreaming ? {\n        descriptionKey: participantName ? 'liveStreaming.offBy' : 'liveStreaming.off',\n        descriptionArguments,\n        titleKey: 'dialog.liveStreaming'\n    } : {\n        descriptionKey: participantName ? 'recording.offBy' : 'recording.off',\n        descriptionArguments,\n        titleKey: 'dialog.recording'\n    };\n\n    return showNotification(dialogProps, NOTIFICATION_TIMEOUT);\n}\n\n/**\n * Signals that a started recording notification should be shown on the\n * screen for a given period.\n *\n * @param {string} mode - The type of the recording: Stream of File.\n * @param {string | Object } initiator - The participant who started recording.\n * @param {string} sessionId - The recording session id.\n * @returns {Function}\n */\nexport function showStartedRecordingNotification(\n        mode: string,\n        initiator: Object | string,\n        sessionId: string) {\n    return async (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const initiatorId = getResourceId(initiator);\n        const participantName = getParticipantDisplayName(state, initiatorId);\n        let dialogProps = {\n            customActionNameKey: undefined,\n            descriptionKey: participantName ? 'liveStreaming.onBy' : 'liveStreaming.on',\n            descriptionArguments: { name: participantName },\n            isDismissAllowed: true,\n            titleKey: 'dialog.liveStreaming'\n        };\n\n        if (mode !== JitsiMeetJS.constants.recording.mode.STREAM) {\n            const recordingSharingUrl = getRecordingSharingUrl(state);\n            const iAmRecordingInitiator = getLocalParticipant(state).id === initiatorId;\n\n            dialogProps = {\n                customActionHandler: undefined,\n                customActionNameKey: undefined,\n                descriptionKey: participantName ? 'recording.onBy' : 'recording.on',\n                descriptionArguments: { name: participantName },\n                isDismissAllowed: true,\n                titleKey: 'dialog.recording'\n            };\n\n            // fetch the recording link from the server for recording initiators in jaas meetings\n            if (recordingSharingUrl\n                && isVpaasMeeting(state)\n                && iAmRecordingInitiator\n                && !isSavingRecordingOnDropbox(state)) {\n                const region = getMeetingRegion(state);\n                const tenant = getVpaasTenant(state);\n\n                try {\n                    const link = await getRecordingLink(recordingSharingUrl, sessionId, region, tenant);\n\n                    // add the option to copy recording link\n                    dialogProps.customActionNameKey = 'recording.copyLink';\n                    dialogProps.customActionHandler = () => copyText(link);\n                    dialogProps.titleKey = 'recording.on';\n                    dialogProps.descriptionKey = 'recording.linkGenerated';\n                    dialogProps.isDismissAllowed = false;\n                } catch (err) {\n                    dispatch(showErrorNotification({\n                        titleKey: 'recording.errorFetchingLink'\n                    }));\n\n                    return logger.error('Could not fetch recording link', err);\n                }\n            }\n        }\n\n        dispatch(showNotification(dialogProps));\n    };\n}\n\n/**\n * Updates the known state for a given recording session.\n *\n * @param {Object} session - The new state to merge with the existing state in\n * redux.\n * @returns {{\n *     type: RECORDING_SESSION_UPDATED,\n *     sessionData: Object\n * }}\n */\nexport function updateRecordingSessionData(session: Object) {\n    const status = session.getStatus();\n    const timestamp\n        = status === JitsiRecordingConstants.status.ON\n            ? Date.now() / 1000\n            : undefined;\n\n    return {\n        type: RECORDING_SESSION_UPDATED,\n        sessionData: {\n            error: session.getError(),\n            id: session.getID(),\n            initiator: session.getInitiator(),\n            liveStreamViewURL: session.getLiveStreamViewURL(),\n            mode: session.getMode(),\n            status,\n            terminator: session.getTerminator(),\n            timestamp\n        }\n    };\n}\n\n/**\n * Sets the selected recording service.\n *\n * @param {string} selectedRecordingService - The new selected recording service.\n * @returns {Object}\n */\nexport function setSelectedRecordingService(selectedRecordingService: string) {\n    return {\n        type: SET_SELECTED_RECORDING_SERVICE,\n        selectedRecordingService\n    };\n}\n\n/**\n * Sets UID of the the pending streaming notification to use it when hinding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @returns {{\n *     type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n *     streamType: string,\n *     uid: number\n * }}\n */\nfunction _setPendingRecordingNotificationUid(uid: ?number, streamType: string) {\n    return {\n        type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n        streamType,\n        uid\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport JitsiMeetJS from '../base/lib-jitsi-meet';\nimport { showNotification } from '../notifications';\n\nimport { RecordingLimitNotificationDescription } from './components';\n\nexport * from './actions.any';\n\n/**\n * Signals that a started recording notification should be shown on the\n * screen for a given period.\n *\n * @param {string} streamType - The type of the stream ({@code file} or\n * {@code stream}).\n * @returns {showNotification}\n */\nexport function showRecordingLimitNotification(streamType: string) {\n    const isLiveStreaming = streamType === JitsiMeetJS.constants.recording.mode.STREAM;\n\n    return showNotification({\n        description: <RecordingLimitNotificationDescription isLiveStreaming = { isLiveStreaming } />,\n        titleKey: isLiveStreaming ? 'dialog.liveStreaming' : 'dialog.recording'\n    }, 10000);\n}\n","// @flow\n\n/**\n * The type of Redux action which clears all the data of every sessions.\n *\n * {\n *     type: CLEAR_RECORDING_SESSIONS\n * }\n * @public\n */\nexport const CLEAR_RECORDING_SESSIONS = 'CLEAR_RECORDING_SESSIONS';\n\n/**\n * The type of Redux action which updates the current known state of a recording\n * session.\n *\n * {\n *     type: RECORDING_SESSION_UPDATED,\n *     sessionData: Object\n * }\n * @public\n */\nexport const RECORDING_SESSION_UPDATED = 'RECORDING_SESSION_UPDATED';\n\n/**\n * The type of Redux action which sets the pending recording notification UID to\n * use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_PENDING_RECORDING_NOTIFICATION_UID,\n *     streamType: string,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_PENDING_RECORDING_NOTIFICATION_UID\n    = 'SET_PENDING_RECORDING_NOTIFICATION_UID';\n\n/**\n * The type of Redux action which sets the selected recording service.\n *\n * {\n *     type: SET_SELECTED_RECORDING_SERVICE\n * }\n * @public\n */\nexport const SET_SELECTED_RECORDING_SERVICE = 'SET_SELECTED_RECORDING_SERVICE';\n\n/**\n * Sets the stream key last used by the user for later reuse.\n *\n * {\n *     type: SET_STREAM_KEY,\n *     streamKey: string\n * }\n */\nexport const SET_STREAM_KEY = 'SET_STREAM_KEY';\n","/**\n * The type of (redux) action which signals that a specific App will mount (in\n * React terms).\n *\n * {\n *     type: APP_WILL_MOUNT,\n *     app: App\n * }\n */\nexport const APP_WILL_MOUNT = 'APP_WILL_MOUNT';\n\n/**\n * The type of (redux) action which signals that a specific App will unmount (in\n * React terms).\n *\n * {\n *     type: APP_WILL_UNMOUNT,\n *     app: App\n * }\n */\nexport const APP_WILL_UNMOUNT = 'APP_WILL_UNMOUNT';\n","// @flow\n\nimport { Component } from 'react';\n\nexport type Props = {\n\n    /**\n     * An SVG icon to be rendered as the content of the label.\n     */\n    icon: Component<any>,\n\n    /**\n     * String or component that will be rendered as the label itself.\n     */\n    text: string\n};\n\n/**\n * Abstract class for the {@code Label} component.\n */\nexport default class Label<P: Props, S: *>\n    extends Component<P, S> {\n}\n","// @flow\n\nimport React from 'react';\n\nimport Icon from '../../icons/components/Icon';\n\nimport AbstractLabel, {\n    type Props as AbstractProps\n} from './AbstractLabel';\n\ntype Props = AbstractProps & {\n\n    /**\n     * Additional CSS class names to add to the root of {@code Label}.\n     */\n    className: string,\n\n    /**\n     * HTML ID attribute to add to the root of {@code Label}.\n     */\n    id: string\n\n};\n\n/**\n * React Component for showing short text in a circle.\n *\n * @extends Component\n */\nexport default class Label extends AbstractLabel<Props, *> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            className,\n            icon,\n            id,\n            text\n        } = this.props;\n\n        const labelClassName = icon ? 'label-text-with-icon' : '';\n\n        return (\n            <div\n                className = { `label ${className}` }\n                id = { id }>\n                { icon && <Icon\n                    size = '16'\n                    src = { icon } /> }\n                { text && <span className = { labelClassName }>{text}</span> }\n            </div>\n        );\n    }\n}\n","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;","// @flow\n\nimport JitsiMeetJS from '../lib-jitsi-meet';\nimport Platform from '../react/Platform';\n\nimport { isMobileBrowser } from './utils';\n\nconst { browser } = JitsiMeetJS.util;\n\nconst DEFAULT_OPTIMAL_BROWSERS = [\n    'chrome',\n    'electron',\n    'firefox',\n    'nwjs',\n    'safari'\n];\n\nconst DEFAULT_UNSUPPORTED_BROWSERS = [];\n\nconst browserNameToCheck = {\n    chrome: browser.isChrome.bind(browser),\n    chromium: browser.isChromiumBased.bind(browser),\n    electron: browser.isElectron.bind(browser),\n    firefox: browser.isFirefox.bind(browser),\n    nwjs: browser.isNWJS.bind(browser),\n    opera: browser.isOpera.bind(browser),\n    safari: browser.isSafari.bind(browser)\n};\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns whether or not jitsi is optimized and targeted for the  provided\n * browser name.\n *\n * @param {string} browserName - The name of the browser to check.\n * @returns {boolean}\n */\nexport function isBrowsersOptimal(browserName: string) {\n    return (interfaceConfig.OPTIMAL_BROWSERS || DEFAULT_OPTIMAL_BROWSERS)\n        .includes(browserName);\n}\n\n/**\n * Returns whether or not the current OS is Mac.\n *\n * @returns {boolean}\n */\nexport function isMacOS() {\n    return Platform.OS === 'macos';\n}\n\n/**\n * Returns whether or not the current OS is Windows.\n *\n * @returns {boolean}\n */\nexport function isWindows() {\n    return Platform.OS === 'windows';\n}\n\n/**\n * Returns whether or not the current browser or the list of passed in browsers\n * is considered suboptimal. Suboptimal means it is a supported browser but has\n * not been explicitly listed as being optimal, possibly due to functionality\n * issues.\n *\n * @param {Array<string>} [browsers] - A list of browser names to check. Will\n * default to a whitelist.\n * @returns {boolean}\n */\nexport function isSuboptimalBrowser() {\n    const optimalBrowsers\n        = interfaceConfig.OPTIMAL_BROWSERS || DEFAULT_OPTIMAL_BROWSERS;\n\n    return !_isCurrentBrowserInList(optimalBrowsers) && isSupportedBrowser();\n}\n\n/**\n * Returns whether or not the current browser should allow the app to display.\n * A supported browser is assumed to be able to support WebRtc.\n *\n * @returns {boolean}\n */\nexport function isSupportedBrowser() {\n    if (navigator.product === 'ReactNative') {\n        return false;\n    }\n\n    // Blacklists apply to desktop browsers only right now.\n    if (!isMobileBrowser() && _isCurrentBrowserInList(\n        interfaceConfig.UNSUPPORTED_BROWSERS || DEFAULT_UNSUPPORTED_BROWSERS\n    )) {\n        return false;\n    }\n\n    // We are intentionally allow mobile browsers because:\n    // - the WelcomePage is mobile ready;\n    // - if the URL points to a conference then deep-linking will take\n    //   care of it.\n    return isMobileBrowser() || JitsiMeetJS.isWebRtcSupported();\n}\n\n/**\n * Returns whether or not the current environment is a supported\n * browser on a mobile device.\n *\n * @returns {boolean}\n */\nexport function isSupportedMobileBrowser() {\n    return (Platform.OS === 'android' && browser.isChromiumBased())\n        || (Platform.OS === 'android' && browser.isFirefox())\n        || (Platform.OS === 'ios' && browser.isWebKitBased());\n}\n\n/**\n * Runs various browser checks to know if the current browser is found within\n * the list.\n *\n * @param {Array<string>} list - Browser names to check. The names should be\n * keys in {@link browserNameToCheck}.\n * @private\n * @returns {boolean}\n */\nfunction _isCurrentBrowserInList(list) {\n    return Boolean(list.find(browserName => {\n        const checkFunction = browserNameToCheck[browserName];\n\n        return checkFunction ? checkFunction.call(browser) : false;\n    }));\n}\n","/**\n * The type of Redux action which signals that {@link JitsiMeetJS} was disposed.\n *\n * {\n *     type: LIB_DID_DISPOSE\n * }\n */\nexport const LIB_DID_DISPOSE = 'LIB_DID_DISPOSE';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS.init()} was\n * invoked and completed successfully.\n *\n * {\n *     type: LIB_DID_INIT\n * }\n */\nexport const LIB_DID_INIT = 'LIB_DID_INIT';\n\n/**\n * Action to signal that lib-jitsi-meet initialized failed with error.\n *\n * {\n *     type: LIB_INIT_ERROR,\n *     error: Error\n * }\n */\nexport const LIB_INIT_ERROR = 'LIB_INIT_ERROR';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS} will be\n * disposed.\n *\n * {\n *     type: LIB_WILL_DISPOSE\n * }\n */\nexport const LIB_WILL_DISPOSE = 'LIB_WILL_DISPOSE';\n\n/**\n * The type of Redux action which signals that {@link JitsiMeetJS.init()} will\n * be invoked.\n *\n * {\n *     type: LIB_WILL_INIT\n * }\n */\nexport const LIB_WILL_INIT = 'LIB_WILL_INIT';\n","/* @flow */\n\nconst { userAgent, maxTouchPoints, platform } = navigator;\nlet OS;\n\nif (userAgent.match(/Android/i)) {\n    OS = 'android';\n} else if (userAgent.match(/iP(ad|hone|od)/i) || (maxTouchPoints && maxTouchPoints > 2 && /MacIntel/.test(platform))) {\n    OS = 'ios';\n} else if (userAgent.match(/Mac(intosh| OS X)/i)) {\n    OS = 'macos';\n} else if (userAgent.match(/Windows/i)) {\n    OS = 'windows';\n}\n\n/**\n * Provides a minimal equivalent of react-native's Platform abstraction.\n */\nexport default {\n    /**\n     * The operating system on which the application is executing.\n     *\n     * @type {string}\n     */\n    OS,\n\n    /**\n     * The operating system version on which the application is executing.\n     * This is intentionally set to undefined so we can tell mobile and mobile web\n     * apart easier.\n     *\n     * @type {number|undefined}\n     */\n    Version: undefined\n};\n","\n/**\n * The type of (redux) action which indicates that an endpoint message\n * sent by another participant to the data channel is received.\n *\n * {\n *     type: ENDPOINT_MESSAGE_RECEIVED,\n *     participant: Object,\n *     json: Object\n * }\n */\nexport const ENDPOINT_MESSAGE_RECEIVED = 'ENDPOINT_MESSAGE_RECEIVED';\n\n/**\n * The type of (redux) action which indicates that an existing transcript\n * has to be removed from the state.\n *\n * {\n *      type: REMOVE_TRANSCRIPT_MESSAGE,\n *      transciptMessageID: string,\n * }\n */\nexport const REMOVE_TRANSCRIPT_MESSAGE = 'REMOVE_TRANSCRIPT_MESSAGE';\n\n/**\n * The type of (redux) action which indicates that a transcript with an\n * given message_id to be added or updated is received.\n *\n * {\n *      type: UPDATE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n *      newTranscriptMessage: Object\n * }\n */\nexport const UPDATE_TRANSCRIPT_MESSAGE = 'UPDATE_TRANSCRIPT_MESSAGE';\n\n/**\n * The type of (redux) action which indicates that the user pressed the\n * ClosedCaption button, to either enable or disable subtitles based on the\n * current state.\n *\n * {\n *      type: TOGGLE_REQUESTING_SUBTITLES\n * }\n */\nexport const TOGGLE_REQUESTING_SUBTITLES\n    = 'TOGGLE_REQUESTING_SUBTITLES';\n","// @flow\n\n/**\n * An enumeration of support calendar integration types.\n *\n * @enum {string}\n */\nexport const CALENDAR_TYPE = {\n    GOOGLE: 'google',\n    MICROSOFT: 'microsoft'\n};\n\n/**\n * An enumeration of known errors that can occur while interacting with the\n * calendar integration.\n *\n * @enum {string}\n */\nexport const ERRORS = {\n    AUTH_FAILED: 'sign_in_failed',\n    GOOGLE_APP_MISCONFIGURED: 'idpiframe_initialization_failed'\n};\n\n/**\n * The number of days to fetch.\n */\nexport const FETCH_END_DAYS = 10;\n\n/**\n * The number of days to go back when fetching.\n */\nexport const FETCH_START_DAYS = -1;\n\n/**\n * The max number of events to fetch from the calendar.\n */\nexport const MAX_LIST_LENGTH = 10;\n","// @flow\n\nimport {\n    ADD_REACTION_BUFFER,\n    ADD_REACTION_MESSAGE,\n    FLUSH_REACTION_BUFFER,\n    PUSH_REACTIONS,\n    SEND_REACTIONS,\n    SET_REACTION_QUEUE\n} from './actionTypes';\nimport { type ReactionEmojiProps } from './constants';\n\n/**\n * Sets the reaction queue.\n *\n * @param {Array} value - The new queue.\n * @returns {Function}\n */\nexport function setReactionQueue(value: Array<ReactionEmojiProps>) {\n    return {\n        type: SET_REACTION_QUEUE,\n        value\n    };\n}\n\n\n/**\n * Removes a reaction from the queue.\n *\n * @param {number} uid - Id of the reaction to be removed.\n * @returns {void}\n */\nexport function removeReaction(uid: number) {\n    return (dispatch: Function, getState: Function) => {\n        const queue = getState()['features/reactions'].queue;\n\n        dispatch(setReactionQueue(queue.filter(reaction => reaction.uid !== uid)));\n    };\n}\n\n\n/**\n * Sends the reactions buffer to everyone in the conference.\n *\n * @returns {{\n *     type: SEND_REACTION\n * }}\n */\nexport function sendReactions() {\n    return {\n        type: SEND_REACTIONS\n    };\n}\n\n/**\n * Adds a reaction to the local buffer.\n *\n * @param {string} reaction - The reaction to be added.\n * @returns {{\n *     type: ADD_REACTION_BUFFER,\n *     reaction: string\n * }}\n */\nexport function addReactionToBuffer(reaction: string) {\n    return {\n        type: ADD_REACTION_BUFFER,\n        reaction\n    };\n}\n\n/**\n * Clears the reaction buffer.\n *\n * @returns {{\n *     type: FLUSH_REACTION_BUFFER\n * }}\n */\nexport function flushReactionBuffer() {\n    return {\n        type: FLUSH_REACTION_BUFFER\n    };\n}\n\n/**\n * Adds a reaction message to the chat.\n *\n * @param {string} message - The reaction message.\n * @returns {{\n *     type: ADD_REACTION_MESSAGE,\n *     message: string\n * }}\n */\nexport function addReactionsToChat(message: string) {\n    return {\n        type: ADD_REACTION_MESSAGE,\n        message\n    };\n}\n\n/**\n * Adds reactions to the animation queue.\n *\n * @param {Array} reactions - The reactions to be animated.\n * @returns {{\n *     type: PUSH_REACTIONS,\n *     reactions: Array\n * }}\n */\nexport function pushReactions(reactions: Array<string>) {\n    return {\n        type: PUSH_REACTIONS,\n        reactions\n    };\n}\n","// @flow\n\nimport React, { PureComponent } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { safeDecodeURIComponent } from '../../../base/util';\nimport { cancelWaitForOwner } from '../../actions.web';\n\n/**\n * The type of the React {@code Component} props of {@link WaitForOwnerDialog}.\n */\ntype Props = {\n\n  /**\n   * The name of the conference room (without the domain part).\n   */\n  _room: string,\n\n  /**\n   * Redux store dispatch method.\n   */\n  dispatch: Dispatch<any>,\n\n  /**\n   * Function to be invoked after click.\n   */\n  onAuthNow: ?Function,\n\n  /**\n   * Invoked to obtain translated strings.\n   */\n  t: Function\n}\n\n/**\n * Authentication message dialog for host confirmation.\n *\n * @returns {React$Element<any>}\n */\nclass WaitForOwnerDialog extends PureComponent<Props> {\n  /**\n   * Instantiates a new component.\n   *\n   * @param {Object} props - The read-only properties with which the new\n   * instance is to be initialized.\n   */\n  constructor(props: Props) {\n    super(props);\n\n    this._onCancelWaitForOwner = this._onCancelWaitForOwner.bind(this);\n    this._onIAmHost = this._onIAmHost.bind(this);\n  }\n\n  _onCancelWaitForOwner: () => void;\n\n  /**\n   * Called when the cancel button is clicked.\n   *\n   * @private\n   * @returns {void}\n   */\n  _onCancelWaitForOwner() {\n    const { dispatch } = this.props;\n    const cancelButton = document.getElementById('modal-dialog-cancel-button');\n\n    if (cancelButton) {\n      cancelButton.onclick = () => {\n        dispatch(cancelWaitForOwner());\n      };\n    }\n\n    return false;\n  }\n\n  _onIAmHost: () => void;\n\n  /**\n   * Called when the OK button is clicked.\n   *\n   * @private\n   * @returns {void}\n   */\n  _onIAmHost() {\n    const { onAuthNow } = this.props;\n\n    onAuthNow && onAuthNow();\n  }\n\n  /**\n   * Implements React's {@link Component#render()}.\n   *\n   * @inheritdoc\n   */\n  render() {\n    const {\n      _room: room,\n      t\n    } = this.props;\n\n    return (\n      <Dialog\n        hideCloseIconButton={true}\n        okKey = { t('dialog.IamHost') }\n        onCancel = { this._onCancelWaitForOwner }\n        onSubmit = { this._onIAmHost }\n        titleKey={t('dialog.WaitingForHostTitle')}\n        width={'small'}\n        hideCancelButton={true}\n        submitDisabled={true}>\n        <span>\n          {\n            translateToHTML(\n              t, 'dialog.WaitForHostMsg', { room })\n          }\n        </span>\n      </Dialog>\n    );\n  }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code WaitForOwnerDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n  const { authRequired } = state['features/base/conference'];\n\n  return {\n    _room: authRequired && safeDecodeURIComponent(authRequired.getName())\n  };\n}\n\nexport default translate(connect(mapStateToProps)(WaitForOwnerDialog));\n","// @flow\n\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { connect } from '../../../../../connection';\nimport { toJid } from '../../../base/connection/functions';\nimport { Dialog } from '../../../base/dialog';\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { JitsiConnectionErrors } from '../../../base/lib-jitsi-meet';\nimport { connect as reduxConnect } from '../../../base/redux';\nimport {\n    authenticateAndUpgradeRole,\n    cancelLogin\n} from '../../actions.web';\n\n/**\n * The type of the React {@code Component} props of {@link LoginDialog}.\n */\ntype Props = {\n\n    /**\n     * {@link JitsiConference} that needs authentication - will hold a valid\n     * value in XMPP login + guest access mode.\n     */\n    _conference: Object,\n\n    /**\n     * The server hosts specified in the global config.\n     */\n    _configHosts: Object,\n\n    /**\n     * Indicates if the dialog should display \"connecting\" status message.\n     */\n    _connecting: boolean,\n\n    /**\n     * The error which occurred during login/authentication.\n     */\n    _error: Object,\n\n    /**\n     * The progress in the floating range between 0 and 1 of the authenticating\n     * and upgrading the role of the local participant/user.\n     */\n    _progress: number,\n\n    /**\n     * Redux store dispatch method.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked when username and password are submitted.\n     */\n    onSuccess: Function,\n\n    /**\n     * Conference room name.\n     */\n    roomName: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * The type of the React {@code Component} state of {@link LoginDialog}.\n */\ntype State = {\n\n    /**\n     * The user entered password for the conference.\n     */\n    password: string,\n\n    /**\n     * The user entered local participant name.\n     */\n    username: string,\n\n    /**\n     * Authentication process starts before joining the conference room.\n     */\n    loginStarted: boolean\n}\n\n/**\n * Component that renders the login in conference dialog.\n *\n *  @returns {React$Element<any>}\n */\nclass LoginDialog extends Component<Props, State> {\n    /**\n     * Initializes a new {@code LoginDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            username: '',\n            password: '',\n            loginStarted: false\n        };\n\n        this._onCancelLogin = this._onCancelLogin.bind(this);\n        this._onLogin = this._onLogin.bind(this);\n        this._onChange = this._onChange.bind(this);\n    }\n\n    _onCancelLogin: () => void;\n\n    /**\n     * Called when the cancel button is clicked.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCancelLogin() {\n        const { dispatch } = this.props;\n        const cancelButton = document.getElementById('modal-dialog-cancel-button');\n\n        if (cancelButton) {\n            cancelButton.onclick = () => {\n                dispatch(cancelLogin());\n            };\n        }\n\n        return false;\n    }\n\n    _onLogin: () => void;\n\n    /**\n     * Notifies this LoginDialog that the login button (OK) has been pressed by\n     * the user.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onLogin() {\n        const {\n            _conference: conference,\n            _configHosts: configHosts,\n            roomName,\n            onSuccess,\n            dispatch\n        } = this.props;\n        const { password, username } = this.state;\n        const jid = toJid(username, configHosts);\n\n        if (conference) {\n            dispatch(authenticateAndUpgradeRole(jid, password, conference));\n        } else {\n            this.setState({\n                loginStarted: true\n            });\n\n            connect(jid, password, roomName)\n                .then(connection => {\n                    onSuccess && onSuccess(connection);\n                })\n                .catch(() => {\n                    this.setState({\n                        loginStarted: false\n                    });\n                });\n        }\n    }\n\n    _onChange: Object => void;\n\n    /**\n     * Callback for the onChange event of the field.\n     *\n     * @param {Object} evt - The static event.\n     * @returns {void}\n     */\n    _onChange(evt: Object) {\n        this.setState({\n            [evt.target.name]: evt.target.value\n        });\n    }\n\n    /**\n     * Renders an optional message, if applicable.\n     *\n     * @returns {ReactElement}\n     * @private\n     */\n    renderMessage() {\n        const {\n            _configHosts: configHosts,\n            _connecting: connecting,\n            _error: error,\n            _progress: progress,\n            t\n        } = this.props;\n        const { username, password } = this.state;\n        const messageOptions = {};\n        let messageKey;\n\n        if (progress && progress < 1) {\n            messageKey = t('connection.FETCH_SESSION_ID');\n        } else if (error) {\n            const { name } = error;\n\n            if (name === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n                const { credentials } = error;\n\n                if (credentials\n                    && credentials.jid === toJid(username, configHosts)\n                    && credentials.password === password) {\n                    messageKey = t('dialog.incorrectPassword');\n                }\n            } else if (name) {\n                messageKey = t('dialog.connectErrorWithMsg');\n                messageOptions.msg = `${name} ${error.message}`;\n            }\n        } else if (connecting) {\n            messageKey = t('connection.CONNECTING');\n        }\n\n        if (messageKey) {\n            return (\n                <span>\n                    { translateToHTML(t, messageKey, messageOptions) }\n                </span>\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * Implements {@Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            _connecting: connecting,\n            t\n        } = this.props;\n        const { password, loginStarted, username } = this.state;\n\n        return (\n            <Dialog\n                hideCloseIconButton = { true }\n                okDisabled = {\n                    connecting\n                    || loginStarted\n                    || !password\n                    || !username\n                }\n                okKey = { t('dialog.login') }\n                onCancel = { this._onCancelLogin }\n                onSubmit = { this._onLogin }\n                titleKey = { t('dialog.authenticationRequired') }\n                width = { 'small' }>\n                <TextField\n                    autoFocus = { true }\n                    className = 'input-control'\n                    compact = { false }\n                    label = { t('dialog.user') }\n                    name = 'username'\n                    onChange = { this._onChange }\n                    placeholder = { t('dialog.userIdentifier') }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { username } />\n                <TextField\n                    className = 'input-control'\n                    compact = { false }\n                    label = { t('dialog.userPassword') }\n                    name = 'password'\n                    onChange = { this._onChange }\n                    placeholder = { t('dialog.password') }\n                    shouldFitContainer = { true }\n                    type = 'password'\n                    value = { password } />\n                { this.renderMessage() }\n            </Dialog>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code LoginDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const {\n        error: authenticateAndUpgradeRoleError,\n        progress,\n        thenableWithCancel\n    } = state['features/authentication'];\n    const { authRequired } = state['features/base/conference'];\n    const { hosts: configHosts } = state['features/base/config'];\n    const {\n        connecting,\n        error: connectionError\n    } = state['features/base/connection'];\n\n    return {\n        _conference: authRequired,\n        _configHosts: configHosts,\n        _connecting: connecting || thenableWithCancel,\n        _error: connectionError || authenticateAndUpgradeRoleError,\n        _progress: progress\n    };\n}\n\nexport default translate(reduxConnect(mapStateToProps)(LoginDialog));\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createCalendarClickedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconAdd } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { Tooltip } from '../../base/tooltip';\nimport { updateCalendarEvent } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@link AddMeetingUrlButton}.\n */\ntype Props = {\n\n    /**\n     * The calendar ID associated with the calendar event.\n     */\n    calendarId: string,\n\n    /**\n     * Invoked to add a meeting URL to a calendar event.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The ID of the calendar event that will have a meeting URL added on click.\n     */\n    eventId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for adding a meeting URL to an existing calendar event.\n *\n * @extends Component\n */\nclass AddMeetingUrlButton extends Component<Props> {\n    /**\n     * Initializes a new {@code AddMeetingUrlButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Tooltip content = { this.props.t('calendarSync.addMeetingURL') }>\n                <div\n                    className = 'button add-button'\n                    onClick = { this._onClick }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'>\n                    <Icon src = { IconAdd } />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Dispatches an action to adding a meeting URL to a calendar event.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { calendarId, dispatch, eventId } = this.props;\n\n        sendAnalytics(createCalendarClickedEvent('calendar.add.url'));\n\n        dispatch(updateCalendarEvent(eventId, calendarId));\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClick();\n        }\n    }\n}\n\nexport default translate(connect()(AddMeetingUrlButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Icon, IconAdd } from '../../base/icons';\nimport { Tooltip } from '../../base/tooltip';\n\n/**\n * The type of the React {@code Component} props of {@link JoinButton}.\n */\ntype Props = {\n\n    /**\n     * The function called when the button is pressed.\n     */\n    onPress: Function,\n\n    /**\n     * The meeting URL associated with the {@link JoinButton} instance.\n     */\n    url: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for joining an existing calendar meeting.\n *\n * @extends Component\n */\nclass JoinButton extends Component<Props> {\n\n    /**\n     * Initializes a new {@code JoinButton} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Tooltip\n                content = { t('calendarSync.joinTooltip') }>\n                <div\n                    className = 'button join-button'\n                    onClick = { this._onClick }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'>\n                    <Icon\n                        size = '14'\n                        src = { IconAdd } />\n                </div>\n            </Tooltip>\n        );\n    }\n\n    _onClick: (Object) => void;\n\n    /**\n     * Callback invoked when the component is clicked.\n     *\n     * @param {Object} event - The DOM click event.\n     * @private\n     * @returns {void}\n     */\n    _onClick(event) {\n        this.props.onPress(event, this.props.url);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClick();\n        }\n    }\n}\n\nexport default translate(JoinButton);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    createCalendarClickedEvent,\n    createCalendarSelectedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { appNavigate } from '../../app/actions';\nimport { MeetingsList } from '../../base/react';\nimport { connect } from '../../base/redux';\n\nimport AddMeetingUrlButton from './AddMeetingUrlButton';\nimport JoinButton from './JoinButton';\n\n/**\n * The type of the React {@code Component} props of\n * {@link CalendarListContent}.\n */\ntype Props = {\n\n    /**\n     * The calendar event list.\n     */\n    _eventList: Array<Object>,\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     *\n     */\n    listEmptyComponent: React$Node,\n};\n\n/**\n * Component to display a list of events from a connected calendar.\n */\nclass CalendarListContent extends Component<Props> {\n    /**\n     * Default values for the component's props.\n     */\n    static defaultProps = {\n        _eventList: []\n    };\n\n    /**\n     * Initializes a new {@code CalendarListContent} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onJoinPress = this._onJoinPress.bind(this);\n        this._onPress = this._onPress.bind(this);\n        this._toDisplayableItem = this._toDisplayableItem.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        sendAnalytics(createCalendarSelectedEvent());\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { disabled, listEmptyComponent } = this.props;\n        const { _eventList = [] } = this.props;\n        const meetings = _eventList.map(this._toDisplayableItem);\n\n        return (\n            <MeetingsList\n                disabled = { disabled }\n                listEmptyComponent = { listEmptyComponent }\n                meetings = { meetings }\n                onPress = { this._onPress } />\n        );\n    }\n\n    _onJoinPress: (Object, string) => Function;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {Object} event - The click event.\n     * @param {string} url - The url string to navigate to.\n     * @returns {void}\n     */\n    _onJoinPress(event, url) {\n        event.stopPropagation();\n\n        this._onPress(url, 'calendar.meeting.join');\n    }\n\n    _onPress: (string, ?string) => Function;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {string} url - The url string to navigate to.\n     * @param {string} analyticsEventName - Тhe name of the analytics event\n     * associated with this action.\n     * @returns {void}\n     */\n    _onPress(url, analyticsEventName = 'calendar.meeting.tile') {\n        sendAnalytics(createCalendarClickedEvent(analyticsEventName));\n\n        this.props.dispatch(appNavigate(url));\n    }\n\n    _toDisplayableItem: Object => Object;\n\n    /**\n     * Creates a displayable object from an event.\n     *\n     * @param {Object} event - The calendar event.\n     * @private\n     * @returns {Object}\n     */\n    _toDisplayableItem(event) {\n        return {\n            elementAfter: event.url\n                ? <JoinButton\n                    onPress = { this._onJoinPress }\n                    url = { event.url } />\n                : (<AddMeetingUrlButton\n                    calendarId = { event.calendarId }\n                    eventId = { event.id } />),\n            date: event.startDate,\n            time: [ event.startDate, event.endDate ],\n            description: event.url,\n            title: event.title,\n            url: event.url\n        };\n    }\n}\n\n/**\n * Maps redux state to component props.\n *\n * @param {Object} state - The redux state.\n * @returns {{\n *     _eventList: Array<Object>\n * }}\n */\nfunction _mapStateToProps(state: Object) {\n    return {\n        _eventList: state['features/calendar-sync'].events\n    };\n}\n\nexport default connect(_mapStateToProps)(CalendarListContent);\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport React from 'react';\n\nimport {\n    createCalendarClickedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconPlusCalendar } from '../../base/icons';\nimport { AbstractPage } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { openSettingsDialog, SETTINGS_TABS } from '../../settings';\nimport { refreshCalendar } from '../actions';\nimport { ERRORS } from '../constants';\n\nimport CalendarListContent from './CalendarListContent';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link CalendarList}.\n */\ntype Props = {\n\n    /**\n     * The error object containing details about any error that has occurred\n     * while interacting with calendar integration.\n     */\n    _calendarError: ?Object,\n\n    /**\n     * Whether or not a calendar may be connected for fetching calendar events.\n     */\n    _hasIntegrationSelected: boolean,\n\n    /**\n     * Whether or not events have been fetched from a calendar.\n     */\n    _hasLoadedEvents: boolean,\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * Component to display a list of events from the user's calendar.\n */\nclass CalendarList extends AbstractPage<Props> {\n    /**\n     * Initializes a new {@code CalendarList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._getRenderListEmptyComponent\n            = this._getRenderListEmptyComponent.bind(this);\n        this._onOpenSettings = this._onOpenSettings.bind(this);\n        this._onKeyPressOpenSettings = this._onKeyPressOpenSettings.bind(this);\n        this._onRefreshEvents = this._onRefreshEvents.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { disabled } = this.props;\n\n        return (\n            CalendarListContent\n                ? <CalendarListContent\n                    disabled = { disabled }\n                    listEmptyComponent\n                        = { this._getRenderListEmptyComponent() } />\n                : null\n        );\n    }\n\n    /**\n     * Returns a component for showing the error message related to calendar\n     * sync.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getErrorMessage() {\n        const { _calendarError = {}, t } = this.props;\n\n        let errorMessageKey = 'calendarSync.error.generic';\n        let showRefreshButton = true;\n        let showSettingsButton = true;\n\n        if (_calendarError.error === ERRORS.GOOGLE_APP_MISCONFIGURED) {\n            errorMessageKey = 'calendarSync.error.appConfiguration';\n            showRefreshButton = false;\n            showSettingsButton = false;\n        } else if (_calendarError.error === ERRORS.AUTH_FAILED) {\n            errorMessageKey = 'calendarSync.error.notSignedIn';\n            showRefreshButton = false;\n        }\n\n        return (\n            <div className = 'meetings-list-empty'>\n                <p className = 'description'>\n                    { t(errorMessageKey) }\n                </p>\n                <div className = 'calendar-action-buttons'>\n                    { showSettingsButton\n                        && <div\n                            className = 'button'\n                            onClick = { this._onOpenSettings }>\n                            { t('calendarSync.permissionButton') }\n                        </div>\n                    }\n                    { showRefreshButton\n                        && <div\n                            className = 'button'\n                            onClick = { this._onRefreshEvents }>\n                            { t('calendarSync.refresh') }\n                        </div>\n                    }\n                </div>\n            </div>\n        );\n    }\n\n    _getRenderListEmptyComponent: () => Object;\n\n    /**\n     * Returns a list empty component if a custom one has to be rendered instead\n     * of the default one in the {@link NavigateSectionList}.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getRenderListEmptyComponent() {\n        const {\n            _calendarError,\n            _hasIntegrationSelected,\n            _hasLoadedEvents,\n            t\n        } = this.props;\n\n        if (_calendarError) {\n            return this._getErrorMessage();\n        } else if (_hasIntegrationSelected && _hasLoadedEvents) {\n            return (\n                <div className = 'meetings-list-empty'>\n                    <p className = 'description'>\n                        { t('calendarSync.noEvents') }\n                    </p>\n                    <div\n                        className = 'button'\n                        onClick = { this._onRefreshEvents }>\n                        { t('calendarSync.refresh') }\n                    </div>\n                </div>\n            );\n        } else if (_hasIntegrationSelected && !_hasLoadedEvents) {\n            return (\n                <div className = 'meetings-list-empty'>\n                    <Spinner\n                        invertColor = { true }\n                        isCompleting = { false }\n                        size = 'medium' />\n                </div>\n            );\n        }\n\n        return (\n            <div className = 'meetings-list-empty'>\n                <div className = 'meetings-list-empty-image'>\n                    <img\n                        alt = { t('welcomepage.logo.calendar') }\n                        src = './images/calendar.svg' />\n                </div>\n                <div className = 'description'>\n                    { t('welcomepage.connectCalendarText', {\n                        app: interfaceConfig.APP_NAME,\n                        provider: interfaceConfig.PROVIDER_NAME\n                    }) }\n                </div>\n                <div\n                    className = 'meetings-list-empty-button'\n                    onClick = { this._onOpenSettings }\n                    onKeyPress = { this._onKeyPressOpenSettings }\n                    role = 'button'>\n                    <Icon\n                        className = 'meetings-list-empty-icon'\n                        src = { IconPlusCalendar } />\n                    <span>{ t('welcomepage.connectCalendarButton') }</span>\n                </div>\n            </div>\n        );\n    }\n\n    _onOpenSettings: () => void;\n\n    /**\n     * Opens {@code SettingsDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenSettings() {\n        sendAnalytics(createCalendarClickedEvent('calendar.connect'));\n\n        this.props.dispatch(openSettingsDialog(SETTINGS_TABS.CALENDAR));\n    }\n\n    _onKeyPressOpenSettings: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPressOpenSettings(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onOpenSettings();\n        }\n    }\n\n    _onRefreshEvents: () => void;\n\n\n    /**\n     * Gets an updated list of calendar events.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRefreshEvents() {\n        this.props.dispatch(refreshCalendar(true));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code CalendarList} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _calendarError: Object,\n *     _hasIntegrationSelected: boolean,\n *     _hasLoadedEvents: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        error,\n        events,\n        integrationType,\n        isLoadingEvents\n    } = state['features/calendar-sync'];\n\n    return {\n        _calendarError: error,\n        _hasIntegrationSelected: Boolean(integrationType),\n        _hasLoadedEvents: Boolean(events) || !isLoadingEvents\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(CalendarList));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n\n/**\n * The type of the React {@code Component} props of\n * {@link MicrosoftSignInButton}.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when {@code MicrosoftSignInButton} is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The text to display within {@code MicrosoftSignInButton}.\n     */\n    text: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component showing a button to sign in with Microsoft.\n *\n * @extends Component\n */\nclass MicrosoftSignInButton extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = 'microsoft-sign-in'\n                onClick = { this.props.onClick }>\n                <img\n                    alt = { this.props.t('welcomepage.logo.microsoftLogo') }\n                    className = 'microsoft-logo'\n                    src = 'images/microsoftLogo.svg' />\n                <div className = 'microsoft-cta'>\n                    { this.props.text }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(MicrosoftSignInButton);\n","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  background-color: \", \";\\n  color: \", \";\\n\\n  a {\\n    color: \", \";\\n  }\\n  a:hover {\\n    color: \", \";\\n  }\\n  a:active {\\n    color: \", \";\\n  }\\n  a:focus {\\n    outline-color: \", \";\\n  }\\n  h1 {\\n    color: \", \";\\n  }\\n  h2 {\\n    color: \", \";\\n  }\\n  h3 {\\n    color: \", \";\\n  }\\n  h4 {\\n    color: \", \";\\n  }\\n  h5 {\\n    color: \", \";\\n  }\\n  h6 {\\n    color: \", \";\\n  }\\n  small {\\n    color: \", \";\\n  }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { ThemeProvider } from 'styled-components';\nimport exenv from 'exenv';\nimport * as colors from '../colors';\nimport { CHANNEL, DEFAULT_THEME_MODE } from '../constants'; // For forward-compat until everything is upgraded.\n\nimport Theme from './Theme';\n\nfunction getStylesheetResetCSS(backgroundColor) {\n  return \"\\n    body { background: \".concat(backgroundColor, \"; }\\n  \");\n}\n\nfunction buildThemeState(mode) {\n  return {\n    theme: _defineProperty({}, CHANNEL, {\n      mode: mode\n    })\n  };\n}\n\nvar LegacyReset = styled.div(_templateObject(), function (p) {\n  return p.background;\n}, colors.text, colors.link, colors.linkHover, colors.linkActive, colors.linkOutline, colors.heading, colors.heading, colors.heading, colors.heading, colors.heading, colors.subtleHeading, colors.subtleText);\n\nvar AtlaskitThemeProvider = /*#__PURE__*/function (_Component) {\n  _inherits(AtlaskitThemeProvider, _Component);\n\n  var _super = _createSuper(AtlaskitThemeProvider);\n\n  /**\n   * This function never changes its reference because it accesses\n   * `this` in the function call - thereby sidestepping the need for\n   * creating a new reference everytime theme state changes.\n   * NOTE: When moving to hooks watch out for this regressing.\n   */\n  function AtlaskitThemeProvider(props) {\n    var _this;\n\n    _classCallCheck(this, AtlaskitThemeProvider);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"getThemeMode\", function () {\n      return {\n        mode: _this.state.theme[CHANNEL].mode\n      };\n    });\n\n    _this.state = buildThemeState(props.mode);\n    return _this;\n  }\n\n  _createClass(AtlaskitThemeProvider, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        hasAtlaskitThemeProvider: true\n      };\n    }\n  }, {\n    key: \"UNSAFE_componentWillMount\",\n    value: function UNSAFE_componentWillMount() {\n      if (!this.context.hasAtlaskitThemeProvider && exenv.canUseDOM) {\n        var css = getStylesheetResetCSS(this.props.background(this.state));\n        this.stylesheet = document.createElement('style');\n        this.stylesheet.type = 'text/css';\n        this.stylesheet.innerHTML = css;\n\n        if (document && document.head) {\n          document.head.appendChild(this.stylesheet);\n        }\n      }\n    }\n  }, {\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(newProps) {\n      if (newProps.mode !== this.props.mode) {\n        var newThemeState = buildThemeState(newProps.mode);\n\n        if (this.stylesheet) {\n          var css = getStylesheetResetCSS(newProps.background(newThemeState));\n          this.stylesheet.innerHTML = css;\n        }\n\n        this.setState(newThemeState);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.stylesheet && document && document.head) {\n        document.head.removeChild(this.stylesheet);\n        delete this.stylesheet;\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      var theme = this.state.theme;\n      return (\n        /*#__PURE__*/\n\n        /* Wrapping the new provider around the old one provides forward\n        compatibility when using the old provider for styled components. This\n        allows us to use components converted to use the new API with consumers\n        using the old provider along side components that may still be using the\n        old theming API. */\n        React.createElement(Theme.Provider, {\n          value: this.getThemeMode\n        }, /*#__PURE__*/React.createElement(ThemeProvider, {\n          theme: theme\n        }, /*#__PURE__*/React.createElement(LegacyReset, {\n          background: this.props.background\n        }, children)))\n      );\n    }\n  }]);\n\n  return AtlaskitThemeProvider;\n}(Component);\n\n_defineProperty(AtlaskitThemeProvider, \"defaultProps\", {\n  mode: DEFAULT_THEME_MODE,\n  background: colors.background\n});\n\n_defineProperty(AtlaskitThemeProvider, \"childContextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\n_defineProperty(AtlaskitThemeProvider, \"contextTypes\", {\n  hasAtlaskitThemeProvider: PropTypes.bool\n});\n\nexport { AtlaskitThemeProvider as default };","import * as colors from './colors';\nimport * as colorPalettes from './color-palettes';\nimport * as elevation from './elevation';\nimport * as typography from './typography';\nimport * as math from './utils/math';\nimport getTheme from './utils/getTheme';\nimport themed from './utils/themed';\nimport AtlaskitThemeProvider from './components/AtlaskitThemeProvider';\nexport { colors, colorPalettes, elevation, typography, math, getTheme, themed, AtlaskitThemeProvider };\nexport { default as Appearance } from './components/Appearance'; // backwards-compatible export with old Atlaskit case\n\nexport var AtlasKitThemeProvider = AtlaskitThemeProvider;\nexport { CHANNEL, DEFAULT_THEME_MODE, FLATTENED, THEME_MODES, assistive, borderRadius, codeFontFamily, focusRing, fontFamily, fontSize, fontSizeSmall, gridSize, layers, noFocusRing, skeletonShimmer, visuallyHidden } from './constants';\nexport { Reset, ResetTheme } from './components/Reset';\nexport { default } from './components/Theme';\nexport { withTheme } from './hoc';\nexport { createTheme } from './utils/createTheme';","export * from './actions';\nexport * from './functions';\n\nexport { default as Prejoin } from './components/Prejoin';\n","// @flow\n\n/**\n * Action type to signal the arriving or updating of a knocking participant.\n */\nexport const KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED = 'KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED';\n\n/**\n * Action type to signal the leave of a knocking participant.\n */\nexport const KNOCKING_PARTICIPANT_LEFT = 'KNOCKING_PARTICIPANT_LEFT';\n\n/**\n * Action type to set the new state of the lobby mode.\n */\nexport const SET_LOBBY_MODE_ENABLED = 'SET_LOBBY_MODE_ENABLED';\n\n/**\n * Action type to set the knocking state of the participant.\n */\nexport const SET_KNOCKING_STATE = 'SET_KNOCKING_STATE';\n\n/**\n * Action type to set the password join failed status.\n */\nexport const SET_PASSWORD_JOIN_FAILED = 'SET_PASSWORD_JOIN_FAILED';\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;\n\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\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\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\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}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\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}\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 = {};\n\nfunction noop() {}\n\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;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// @flow\n\nimport { JitsiTrackEvents } from '../base/lib-jitsi-meet';\nimport { updateSettings } from '../base/settings';\n\nimport { toggleBackgroundEffect } from './actions';\nlet filterSupport;\n\n/**\n * Checks context filter support.\n *\n * @returns {boolean} True if the filter is supported and false if the filter is not supported by the browser.\n */\nexport function checkBlurSupport() {\n    if (typeof filterSupport === 'undefined') {\n        const canvas = document.createElement('canvas');\n        const ctx = canvas.getContext('2d');\n\n        filterSupport = typeof ctx.filter !== 'undefined';\n\n        canvas.remove();\n    }\n\n    return filterSupport;\n}\n\n/**\n * Convert blob to base64.\n *\n * @param {Blob} blob - The link to add info with.\n * @returns {Promise<string>}\n */\nexport const blobToData = (blob: Blob): Promise<string> =>\n    new Promise(resolve => {\n        const reader = new FileReader();\n\n        reader.onloadend = () => resolve(reader.result.toString());\n        reader.readAsDataURL(blob);\n    });\n\n/**\n * Convert blob to base64.\n *\n * @param {string} url - The image url.\n * @returns {Object} - Returns the converted blob to base64.\n */\nexport const toDataURL = async (url: string) => {\n    const response = await fetch(url);\n    const blob = await response.blob();\n    const resData = await blobToData(blob);\n\n    return resData;\n};\n\n/**\n * Resize image and adjust original aspect ratio.\n *\n * @param {Object} base64image - Base64 image extraction.\n * @param {number} width - Value for resizing the image width.\n * @param {number} height - Value for resizing the image height.\n * @returns {Promise<string>}\n *\n */\nexport function resizeImage(base64image: any, width: number = 1920, height: number = 1080): Promise<string> {\n\n    // In order to work on Firefox browser we need to handle the asynchronous nature of image loading;  We need to use\n    // a promise mechanism. The reason why it 'works' without this mechanism in Chrome is actually 'by accident' because\n    // the image happens to be in the cache and the browser is able to deliver the uncompressed/decoded image\n    // before using the image in the drawImage call.\n    return new Promise(resolve => {\n        const img = document.createElement('img');\n\n        img.onload = function() {\n            // Create an off-screen canvas.\n            const canvas = document.createElement('canvas');\n\n            // Set its dimension to target size.\n            const context = canvas.getContext('2d');\n\n            canvas.width = width;\n            canvas.height = height;\n\n            // Draw source image into the off-screen canvas.\n            // TODO: keep aspect ratio and implement object-fit: cover.\n            context.drawImage(img, 0, 0, width, height);\n\n            // Encode image to data-uri with base64 version of compressed image.\n            resolve(canvas.toDataURL('image/jpeg', 0.5));\n        };\n        img.src = base64image;\n    });\n}\n\n/**\n * Check if the local desktop track was stopped and apply none option on virtual background.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {Object} desktopTrack - The desktop track that needs to be checked if it was stopped.\n * @param {Object} currentLocalTrack - The current local track where we apply none virtual\n * background option if the desktop track was stopped.\n * @returns {Promise}\n */\nexport function localTrackStopped(dispatch: Function, desktopTrack: Object, currentLocalTrack: Object) {\n    const noneOptions = {\n        enabled: false,\n        backgroundType: 'none',\n        selectedThumbnail: 'none',\n        backgroundEffectEnabled: false\n    };\n\n    desktopTrack\n    && desktopTrack.on(JitsiTrackEvents.LOCAL_TRACK_STOPPED, () => {\n        dispatch(toggleBackgroundEffect(noneOptions, currentLocalTrack));\n\n        // Set x scale to default value.\n        dispatch(updateSettings({\n            localFlipX: true\n        }));\n    });\n}\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\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\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n  }\n\n  if (enumerableOnly) keys = keys.filter(function (sym) {\n    return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n  });\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\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\n  return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread2({}, store, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n  warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","// @flow\n\nimport { toState } from '../base/redux';\nimport { getServerURL } from '../base/settings';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Retrieves the default URL for the app. This can either come from a prop to\n * the root App component or be configured in the settings.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @returns {string} - Default URL for the app.\n */\nexport function getDefaultURL(stateful: Function | Object) {\n    const state = toState(stateful);\n    const { href } = window.location;\n\n    if (href) {\n        return href;\n    }\n\n    return getServerURL(state);\n}\n\n/**\n * Returns application name.\n *\n * @returns {string} The application name.\n */\nexport function getName() {\n    return interfaceConfig.APP_NAME;\n}\n","/**\n * The type of the action which sets the list of known remote participant IDs which\n * have an active screen share.\n *\n * @returns {{\n *     type: SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED,\n *     participantIds: Array<string>\n * }}\n */\nexport const SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED\n    = 'SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED';\n\n/**\n * The type of the action which enables or disables the feature for showing\n * video thumbnails in a two-axis tile view.\n *\n * @returns {{\n *     type: SET_TILE_VIEW,\n *     enabled: boolean\n * }}\n */\nexport const SET_TILE_VIEW = 'SET_TILE_VIEW';\n","// @flow\n\nimport { JitsiParticipantConnectionStatus } from '../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../base/media';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantCountWithFake,\n    getPinnedParticipant\n} from '../base/participants';\nimport { toState } from '../base/redux';\nimport {\n    getLocalVideoTrack,\n    getTrackByMediaTypeAndParticipant,\n    isLocalTrackMuted,\n    isRemoteTrackMuted\n} from '../base/tracks/functions';\n\nimport {\n    ASPECT_RATIO_BREAKPOINT,\n    DISPLAY_AVATAR,\n    DISPLAY_AVATAR_WITH_NAME,\n    DISPLAY_BLACKNESS_WITH_NAME,\n    DISPLAY_VIDEO,\n    DISPLAY_VIDEO_WITH_NAME,\n    SCROLL_SIZE,\n    SQUARE_TILE_ASPECT_RATIO,\n    STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER,\n    TILE_ASPECT_RATIO,\n    TILE_HORIZONTAL_MARGIN,\n    TILE_VERTICAL_MARGIN,\n    VERTICAL_FILMSTRIP_MIN_HORIZONTAL_MARGIN\n} from './constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns true if the filmstrip on mobile is visible, false otherwise.\n *\n * NOTE: Filmstrip on web behaves differently to mobile, much simpler, but so\n * function lies here only for the sake of consistency and to avoid flow errors\n * on import.\n *\n * @param {Object | Function} stateful - The Object or Function that can be\n * resolved to a Redux state object with the toState function.\n * @returns {boolean}\n */\nexport function isFilmstripVisible(stateful: Object | Function) {\n    return toState(stateful)['features/filmstrip'].visible;\n}\n\n/**\n * Determines whether the remote video thumbnails should be displayed/visible in\n * the filmstrip.\n *\n * @param {Object} state - The full redux state.\n * @returns {boolean} - If remote video thumbnails should be displayed/visible\n * in the filmstrip, then {@code true}; otherwise, {@code false}.\n */\nexport function shouldRemoteVideosBeVisible(state: Object) {\n    if (state['features/invite'].calleeInfoVisible) {\n        return false;\n    }\n\n    // Include fake participants to derive how many thumbnails are dispalyed,\n    // as it is assumed all participants, including fake, will be displayed\n    // in the filmstrip.\n    const participantCount = getParticipantCountWithFake(state);\n    let pinnedParticipant;\n    const { disable1On1Mode } = state['features/base/config'];\n\n    return Boolean(\n        participantCount > 2\n\n            // Always show the filmstrip when there is another participant to\n            // show and the  local video is pinned, or the toolbar is displayed.\n            || (participantCount > 1\n                && disable1On1Mode !== null\n                && (state['features/toolbox'].visible\n                    || ((pinnedParticipant = getPinnedParticipant(state))\n                        && pinnedParticipant.local)))\n\n            || disable1On1Mode);\n}\n\n/**\n * Checks whether there is a playable video stream available for the user associated with the passed ID.\n *\n * @param {Object | Function} stateful - The Object or Function that can be\n * resolved to a Redux state object with the toState function.\n * @param {string} id - The id of the participant.\n * @returns {boolean} <tt>true</tt> if there is a playable video stream available\n * or <tt>false</tt> otherwise.\n */\nexport function isVideoPlayable(stateful: Object | Function, id: String) {\n    const state = toState(stateful);\n    const tracks = state['features/base/tracks'];\n    const participant = id ? getParticipantById(state, id) : getLocalParticipant(state);\n    const isLocal = participant?.local ?? true;\n    const { connectionStatus } = participant || {};\n    const videoTrack\n        = isLocal ? getLocalVideoTrack(tracks) : getTrackByMediaTypeAndParticipant(tracks, MEDIA_TYPE.VIDEO, id);\n    const isAudioOnly = Boolean(state['features/base/audio-only'].enabled);\n    let isPlayable = false;\n\n    if (isLocal) {\n        const isVideoMuted = isLocalTrackMuted(tracks, MEDIA_TYPE.VIDEO);\n\n        isPlayable = Boolean(videoTrack) && !isVideoMuted && !isAudioOnly;\n    } else if (!participant?.isFakeParticipant) { // remote participants excluding shared video\n        const isVideoMuted = isRemoteTrackMuted(tracks, MEDIA_TYPE.VIDEO, id);\n\n        isPlayable = Boolean(videoTrack) && !isVideoMuted && !isAudioOnly\n            && connectionStatus === JitsiParticipantConnectionStatus.ACTIVE;\n    }\n\n    return isPlayable;\n}\n\n/**\n * Calculates the size for thumbnails when in horizontal view layout.\n *\n * @param {number} clientHeight - The height of the app window.\n * @returns {{local: {height, width}, remote: {height, width}}}\n */\nexport function calculateThumbnailSizeForHorizontalView(clientHeight: number = 0) {\n    const topBottomMargin = 15;\n    const availableHeight = Math.min(clientHeight, (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + topBottomMargin);\n    const height = availableHeight - topBottomMargin;\n\n    return {\n        local: {\n            height,\n            width: Math.floor(interfaceConfig.LOCAL_THUMBNAIL_RATIO * height)\n        },\n        remote: {\n            height,\n            width: Math.floor(interfaceConfig.REMOTE_THUMBNAIL_RATIO * height)\n        }\n    };\n}\n\n/**\n * Calculates the size for thumbnails when in vertical view layout.\n *\n * @param {number} clientWidth - The height of the app window.\n * @returns {{local: {height, width}, remote: {height, width}}}\n */\nexport function calculateThumbnailSizeForVerticalView(clientWidth: number = 0) {\n    const horizontalMargin\n        = VERTICAL_FILMSTRIP_MIN_HORIZONTAL_MARGIN + SCROLL_SIZE\n            + TILE_HORIZONTAL_MARGIN + STAGE_VIEW_THUMBNAIL_HORIZONTAL_BORDER;\n    const availableWidth = Math.min(\n        Math.max(clientWidth - horizontalMargin, 0),\n        interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120);\n\n    return {\n        local: {\n            height: Math.floor(availableWidth / interfaceConfig.LOCAL_THUMBNAIL_RATIO),\n            width: availableWidth\n        },\n        remote: {\n            height: Math.floor(availableWidth / interfaceConfig.REMOTE_THUMBNAIL_RATIO),\n            width: availableWidth\n        }\n    };\n}\n\n/**\n * Calculates the size for thumbnails when in tile view layout.\n *\n * @param {Object} dimensions - The desired dimensions of the tile view grid.\n * @returns {{hasScroll, height, width}}\n */\nexport function calculateThumbnailSizeForTileView({\n    columns,\n    minVisibleRows,\n    rows,\n    clientWidth,\n    clientHeight,\n    disableResponsiveTiles\n}: Object) {\n    let aspectRatio = TILE_ASPECT_RATIO;\n\n    if (!disableResponsiveTiles && clientWidth < ASPECT_RATIO_BREAKPOINT) {\n        aspectRatio = SQUARE_TILE_ASPECT_RATIO;\n    }\n\n    const viewWidth = clientWidth - (columns * TILE_HORIZONTAL_MARGIN);\n    const viewHeight = clientHeight - (minVisibleRows * TILE_VERTICAL_MARGIN);\n    const initialWidth = viewWidth / columns;\n    const initialHeight = viewHeight / minVisibleRows;\n    const aspectRatioHeight = initialWidth / aspectRatio;\n    const noScrollHeight = (clientHeight / rows) - TILE_VERTICAL_MARGIN;\n    const scrollInitialWidth = (viewWidth - SCROLL_SIZE) / columns;\n    let height = Math.floor(Math.min(aspectRatioHeight, initialHeight));\n    let width = Math.floor(aspectRatio * height);\n\n    if (height > noScrollHeight && width > scrollInitialWidth) { // we will have scroll and we need more space for it.\n        const scrollAspectRatioHeight = scrollInitialWidth / aspectRatio;\n\n        // Recalculating width/height to fit the available space when a scroll is displayed.\n        // NOTE: Math.min(scrollAspectRatioHeight, initialHeight) would be enough to recalculate but since the new\n        // height value can theoretically be dramatically smaller and the scroll may not be neccessary anymore we need\n        // to compare it with noScrollHeight( the optimal height to fit all thumbnails without scroll) and get the\n        // bigger one. This way we ensure that we always strech the thumbnails as close as we can to the edges of the\n        // window.\n        height = Math.floor(Math.max(Math.min(scrollAspectRatioHeight, initialHeight), noScrollHeight));\n        width = Math.floor(aspectRatio * height);\n    }\n\n\n    return {\n        height,\n        width\n    };\n}\n\n/**\n * Returns the width of the visible area (doesn't include the left margin/padding) of the the vertical filmstrip.\n *\n * @returns {number} - The width of the vertical filmstrip.\n */\nexport function getVerticalFilmstripVisibleAreaWidth() {\n    // Adding 11px for the 2px right margin, 2px borders on the left and right and 5px right padding.\n    // Also adding 7px for the scrollbar. Note that we are not counting the left margins and paddings because this\n    // function is used for calculating the available space and they are invisible.\n    // TODO: Check if we can remove the left margins and paddings from the CSS.\n    // FIXME: This function is used to calculate the size of the large video, etherpad or shared video. Once everything\n    // is reactified this calculation will need to move to the corresponding components.\n    const filmstripMaxWidth = (interfaceConfig.FILM_STRIP_MAX_HEIGHT || 120) + 18;\n\n    return Math.min(filmstripMaxWidth, window.innerWidth);\n}\n\n/**\n * Computes information that determine the display mode.\n *\n * @param {Object} input - Obejct containing all necessary information for determining the display mode for\n * the thumbnail.\n * @returns {number} - One of <tt>DISPLAY_VIDEO</tt>, <tt>DISPLAY_AVATAR</tt> or <tt>DISPLAY_BLACKNESS_WITH_NAME</tt>.\n*/\nexport function computeDisplayMode(input: Object) {\n    const {\n        isAudioOnly,\n        isCurrentlyOnLargeVideo,\n        isScreenSharing,\n        canPlayEventReceived,\n        isHovered,\n        isRemoteParticipant,\n        tileViewActive\n    } = input;\n    const adjustedIsVideoPlayable = input.isVideoPlayable && (!isRemoteParticipant || canPlayEventReceived);\n\n    if (!tileViewActive && isScreenSharing && isRemoteParticipant) {\n        return isHovered ? DISPLAY_AVATAR_WITH_NAME : DISPLAY_AVATAR;\n    } else if (isCurrentlyOnLargeVideo && !tileViewActive) {\n        // Display name is always and only displayed when user is on the stage\n        return adjustedIsVideoPlayable && !isAudioOnly ? DISPLAY_BLACKNESS_WITH_NAME : DISPLAY_AVATAR_WITH_NAME;\n    } else if (adjustedIsVideoPlayable && !isAudioOnly) {\n        // check hovering and change state to video with name\n        return isHovered ? DISPLAY_VIDEO_WITH_NAME : DISPLAY_VIDEO;\n    }\n\n    // check hovering and change state to avatar with name\n    return isHovered ? DISPLAY_AVATAR_WITH_NAME : DISPLAY_AVATAR;\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    createStartMutedConfigurationEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { getName } from '../../app/functions';\nimport { endpointMessageReceived } from '../../subtitles';\nimport { getReplaceParticipant } from '../config/functions';\nimport { JITSI_CONNECTION_CONFERENCE_KEY } from '../connection';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE, setAudioMuted, setVideoMuted } from '../media';\nimport {\n    dominantSpeakerChanged,\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    participantConnectionStatusChanged,\n    participantKicked,\n    participantMutedUs,\n    participantPresenceChanged,\n    participantRoleChanged,\n    participantUpdated\n} from '../participants';\nimport { getLocalTracks, replaceLocalTrack, trackAdded, trackRemoved } from '../tracks';\nimport {\n    getBackendSafePath,\n    getBackendSafeRoomName,\n    getJitsiMeetGlobalNS\n} from '../util';\n\nimport {\n    AUTH_STATUS_CHANGED,\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_TIMESTAMP_CHANGED,\n    CONFERENCE_UNIQUE_ID_SET,\n    CONFERENCE_WILL_JOIN,\n    CONFERENCE_WILL_LEAVE,\n    DATA_CHANNEL_OPENED,\n    KICKED_OUT,\n    LOCK_STATE_CHANGED,\n    P2P_STATUS_CHANGED,\n    SEND_TONES,\n    SET_FOLLOW_ME,\n    SET_PASSWORD,\n    SET_PASSWORD_FAILED,\n    SET_ROOM,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_START_MUTED_POLICY\n} from './actionTypes';\nimport {\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    JITSI_CONFERENCE_URL_KEY\n} from './constants';\nimport {\n    _addLocalTracksToConference,\n    commonUserJoinedHandling,\n    commonUserLeftHandling,\n    getCurrentConference,\n    sendLocalParticipant\n} from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Adds conference (event) listeners.\n *\n * @param {JitsiConference} conference - The JitsiConference instance.\n * @param {Dispatch} dispatch - The Redux dispatch function.\n * @param {Object} state - The Redux state.\n * @private\n * @returns {void}\n */\nfunction _addConferenceListeners(conference, dispatch, state) {\n    // A simple logger for conference errors received through\n    // the listener. These errors are not handled now, but logged.\n    conference.on(JitsiConferenceEvents.CONFERENCE_ERROR,\n        error => logger.error('Conference error.', error));\n\n    // Dispatches into features/base/conference follow:\n\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_FAILED,\n        (...args) => dispatch(conferenceFailed(conference, ...args)));\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_JOINED,\n        (...args) => dispatch(conferenceJoined(conference, ...args)));\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_LEFT,\n        (...args) => {\n            dispatch(conferenceTimestampChanged(0));\n            dispatch(conferenceLeft(conference, ...args));\n        });\n    conference.on(JitsiConferenceEvents.SUBJECT_CHANGED,\n        (...args) => dispatch(conferenceSubjectChanged(...args)));\n\n    conference.on(JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,\n        (...args) => dispatch(conferenceTimestampChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.KICKED,\n        (...args) => dispatch(kickedOut(conference, ...args)));\n\n    conference.on(\n        JitsiConferenceEvents.PARTICIPANT_KICKED,\n        (kicker, kicked) => dispatch(participantKicked(kicker, kicked)));\n\n    conference.on(\n        JitsiConferenceEvents.LOCK_STATE_CHANGED,\n        (...args) => dispatch(lockStateChanged(conference, ...args)));\n\n    // Dispatches into features/base/media follow:\n\n    conference.on(\n        JitsiConferenceEvents.STARTED_MUTED,\n        () => {\n            const audioMuted = Boolean(conference.isStartAudioMuted());\n            const videoMuted = Boolean(conference.isStartVideoMuted());\n            const localTracks = getLocalTracks(state['features/base/tracks']);\n\n            sendAnalytics(createStartMutedConfigurationEvent('remote', audioMuted, videoMuted));\n            logger.log(`Start muted: ${audioMuted ? 'audio, ' : ''}${videoMuted ? 'video' : ''}`);\n\n            // XXX Jicofo tells lib-jitsi-meet to start with audio and/or video\n            // muted i.e. Jicofo expresses an intent. Lib-jitsi-meet has turned\n            // Jicofo's intent into reality by actually muting the respective\n            // tracks. The reality is expressed in base/tracks already so what\n            // is left is to express Jicofo's intent in base/media.\n            // TODO Maybe the app needs to learn about Jicofo's intent and\n            // transfer that intent to lib-jitsi-meet instead of lib-jitsi-meet\n            // acting on Jicofo's intent without the app's knowledge.\n            dispatch(setAudioMuted(audioMuted));\n            dispatch(setVideoMuted(videoMuted));\n\n            // Remove the tracks from peerconnection as well.\n            for (const track of localTracks) {\n                if ((audioMuted && track.jitsiTrack.getType() === MEDIA_TYPE.AUDIO)\n                    || (videoMuted && track.jitsiTrack.getType() === MEDIA_TYPE.VIDEO)) {\n                    dispatch(replaceLocalTrack(track.jitsiTrack, null, conference));\n                }\n            }\n        });\n\n    // Dispatches into features/base/tracks follow:\n\n    conference.on(\n        JitsiConferenceEvents.TRACK_ADDED,\n        t => t && !t.isLocal() && dispatch(trackAdded(t)));\n    conference.on(\n        JitsiConferenceEvents.TRACK_REMOVED,\n        t => t && !t.isLocal() && dispatch(trackRemoved(t)));\n\n    conference.on(\n        JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n        (track, participantThatMutedUs) => {\n            if (participantThatMutedUs) {\n                dispatch(participantMutedUs(participantThatMutedUs, track));\n            }\n        });\n\n    // Dispatches into features/base/participants follow:\n    conference.on(\n        JitsiConferenceEvents.DISPLAY_NAME_CHANGED,\n        (id, displayName) => dispatch(participantUpdated({\n            conference,\n            id,\n            name: getNormalizedDisplayName(displayName)\n        })));\n\n    conference.on(\n        JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,\n        id => dispatch(dominantSpeakerChanged(id, conference)));\n\n    conference.on(\n        JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n        (...args) => dispatch(endpointMessageReceived(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,\n        (...args) => dispatch(participantConnectionStatusChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.USER_JOINED,\n        (id, user) => commonUserJoinedHandling({ dispatch }, conference, user));\n    conference.on(\n        JitsiConferenceEvents.USER_LEFT,\n        (id, user) => commonUserLeftHandling({ dispatch }, conference, user));\n    conference.on(\n        JitsiConferenceEvents.USER_ROLE_CHANGED,\n        (...args) => dispatch(participantRoleChanged(...args)));\n    conference.on(\n        JitsiConferenceEvents.USER_STATUS_CHANGED,\n        (...args) => dispatch(participantPresenceChanged(...args)));\n\n    conference.on(\n        JitsiConferenceEvents.BOT_TYPE_CHANGED,\n        (id, botType) => dispatch(participantUpdated({\n            conference,\n            id,\n            botType\n        })));\n\n    conference.addCommandListener(\n        AVATAR_URL_COMMAND,\n        (data, id) => dispatch(participantUpdated({\n            conference,\n            id,\n            avatarURL: data.value\n        })));\n    conference.addCommandListener(\n        EMAIL_COMMAND,\n        (data, id) => dispatch(participantUpdated({\n            conference,\n            id,\n            email: data.value\n        })));\n}\n\n/**\n * Updates the current known state of server-side authentication.\n *\n * @param {boolean} authEnabled - Whether or not server authentication is\n * enabled.\n * @param {string} authLogin - The current name of the logged in user, if any.\n * @returns {{\n *     type: AUTH_STATUS_CHANGED,\n *     authEnabled: boolean,\n *     authLogin: string\n * }}\n */\nexport function authStatusChanged(authEnabled: boolean, authLogin: string) {\n    return {\n        type: AUTH_STATUS_CHANGED,\n        authEnabled,\n        authLogin\n    };\n}\n\n/**\n * Signals that a specific conference has failed.\n *\n * @param {JitsiConference} conference - The JitsiConference that has failed.\n * @param {string} error - The error describing/detailing the cause of the\n * failure.\n * @param {any} params - Rest of the params that we receive together with the event.\n * @returns {{\n *     type: CONFERENCE_FAILED,\n *     conference: JitsiConference,\n *     error: Error\n * }}\n * @public\n */\nexport function conferenceFailed(conference: Object, error: string, ...params: any) {\n    return {\n        type: CONFERENCE_FAILED,\n        conference,\n\n        // Make the error resemble an Error instance (to the extent that\n        // jitsi-meet needs it).\n        error: {\n            name: error,\n            params,\n            recoverable: undefined\n        }\n    };\n}\n\n/**\n * Signals that a specific conference has been joined.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which was\n * joined by the local participant.\n * @returns {{\n *     type: CONFERENCE_JOINED,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceJoined(conference: Object) {\n    return {\n        type: CONFERENCE_JOINED,\n        conference\n    };\n}\n\n/**\n * Signals that a specific conference has been left.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which was\n * left by the local participant.\n * @returns {{\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceLeft(conference: Object) {\n    return {\n        type: CONFERENCE_LEFT,\n        conference\n    };\n}\n\n/**\n * Signals that the conference subject has been changed.\n *\n * @param {string} subject - The new subject.\n * @returns {{\n *     type: CONFERENCE_SUBJECT_CHANGED,\n *     subject: string\n * }}\n */\nexport function conferenceSubjectChanged(subject: string) {\n    return {\n        type: CONFERENCE_SUBJECT_CHANGED,\n        subject\n    };\n}\n\n/**\n* Signals that the conference timestamp has been changed.\n*\n* @param {number} conferenceTimestamp - The UTC timestamp.\n* @returns {{\n*       type: CONFERENCE_TIMESTAMP_CHANGED,\n*       conferenceTimestamp\n* }}\n*/\nexport function conferenceTimestampChanged(conferenceTimestamp: number) {\n    return {\n        type: CONFERENCE_TIMESTAMP_CHANGED,\n        conferenceTimestamp\n    };\n}\n\n/**\n* Signals that the unique identifier for conference has been set.\n*\n* @param {JitsiConference} conference - The JitsiConference instance, where the uuid has been set.\n* @returns {{\n*   type: CONFERENCE_UNIQUE_ID_SET,\n*   conference: JitsiConference,\n* }}\n*/\nexport function conferenceUniqueIdSet(conference: Object) {\n    return {\n        type: CONFERENCE_UNIQUE_ID_SET,\n        conference\n    };\n}\n\n/**\n * Adds any existing local tracks to a specific conference before the conference\n * is joined. Then signals the intention of the application to have the local\n * participant join the specified conference.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} instance\n * the local participant will (try to) join.\n * @returns {Function}\n */\nfunction _conferenceWillJoin(conference: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const localTracks\n            = getLocalTracks(getState()['features/base/tracks'])\n                .map(t => t.jitsiTrack);\n\n        if (localTracks.length) {\n            _addLocalTracksToConference(conference, localTracks);\n        }\n\n        dispatch(conferenceWillJoin(conference));\n    };\n}\n\n/**\n * Signals the intention of the application to have the local participant\n * join the specified conference.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} instance\n * the local participant will (try to) join.\n * @returns {{\n *     type: CONFERENCE_WILL_JOIN,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceWillJoin(conference: Object) {\n    return {\n        type: CONFERENCE_WILL_JOIN,\n        conference\n    };\n}\n\n/**\n * Signals the intention of the application to have the local participant leave\n * a specific conference. Similar in fashion to CONFERENCE_LEFT. Contrary to it\n * though, it's not guaranteed because CONFERENCE_LEFT may be triggered by\n * lib-jitsi-meet and not the application.\n *\n * @param {JitsiConference} conference - The JitsiConference instance which will\n * be left by the local participant.\n * @returns {{\n *     type: CONFERENCE_LEFT,\n *     conference: JitsiConference\n * }}\n */\nexport function conferenceWillLeave(conference: Object) {\n    return {\n        type: CONFERENCE_WILL_LEAVE,\n        conference\n    };\n}\n\n/**\n * Initializes a new conference.\n *\n * @returns {Function}\n */\nexport function createConference() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { connection, locationURL } = state['features/base/connection'];\n\n        if (!connection) {\n            throw new Error('Cannot create a conference without a connection!');\n        }\n\n        const { password, room } = state['features/base/conference'];\n\n        if (!room) {\n            throw new Error('Cannot join a conference without a room name!');\n        }\n\n        const config = state['features/base/config'];\n        const { tenant } = state['features/base/jwt'];\n        const { email, name: nick } = getLocalParticipant(state);\n\n        const conference\n            = connection.initJitsiConference(\n\n                getBackendSafeRoomName(room), {\n                    ...config,\n                    applicationName: getName(),\n                    getWiFiStatsMethod: getJitsiMeetGlobalNS().getWiFiStats,\n                    confID: `${locationURL.host}${getBackendSafePath(locationURL.pathname)}`,\n                    siteID: tenant,\n                    statisticsDisplayName: config.enableDisplayNameInStats ? nick : undefined,\n                    statisticsId: config.enableEmailInStats ? email : undefined\n                });\n\n        connection[JITSI_CONNECTION_CONFERENCE_KEY] = conference;\n\n        conference[JITSI_CONFERENCE_URL_KEY] = locationURL;\n\n        dispatch(_conferenceWillJoin(conference));\n\n        _addConferenceListeners(conference, dispatch, state);\n\n        sendLocalParticipant(state, conference);\n\n        const replaceParticipant = getReplaceParticipant(state);\n\n        conference.join(password, replaceParticipant);\n    };\n}\n\n/**\n * Will try to join the conference again in case it failed earlier with\n * {@link JitsiConferenceErrors.AUTHENTICATION_REQUIRED}. It means that Jicofo\n * did not allow to create new room from anonymous domain, but it can be tried\n * again later in case authenticated user created it in the meantime.\n *\n * @returns {Function}\n */\nexport function checkIfCanJoin() {\n    return (dispatch: Function, getState: Function) => {\n        const { authRequired, password }\n            = getState()['features/base/conference'];\n\n        const replaceParticipant = getReplaceParticipant(APP.store.getState());\n\n        authRequired && dispatch(_conferenceWillJoin(authRequired));\n        authRequired && authRequired.join(password, replaceParticipant);\n    };\n}\n\n/**\n * Signals the data channel with the bridge has successfully opened.\n *\n * @returns {{\n *     type: DATA_CHANNEL_OPENED\n * }}\n */\nexport function dataChannelOpened() {\n    return {\n        type: DATA_CHANNEL_OPENED\n    };\n}\n\n/**\n * Signals that we've been kicked out of the conference.\n *\n * @param {JitsiConference} conference - The {@link JitsiConference} instance\n * for which the event is being signaled.\n * @param {JitsiParticipant} participant - The {@link JitsiParticipant}\n * instance which initiated the kick event.\n * @returns {{\n *     type: KICKED_OUT,\n *     conference: JitsiConference,\n *     participant: JitsiParticipant\n * }}\n */\nexport function kickedOut(conference: Object, participant: Object) {\n    return {\n        type: KICKED_OUT,\n        conference,\n        participant\n    };\n}\n\n/**\n * Signals that the lock state of a specific JitsiConference changed.\n *\n * @param {JitsiConference} conference - The JitsiConference which had its lock\n * state changed.\n * @param {boolean} locked - If the specified conference became locked, true;\n * otherwise, false.\n * @returns {{\n *     type: LOCK_STATE_CHANGED,\n *     conference: JitsiConference,\n *     locked: boolean\n * }}\n */\nexport function lockStateChanged(conference: Object, locked: boolean) {\n    return {\n        type: LOCK_STATE_CHANGED,\n        conference,\n        locked\n    };\n}\n\n/**\n * Updates the known state of start muted policies.\n *\n * @param {boolean} audioMuted - Whether or not members will join the conference\n * as audio muted.\n * @param {boolean} videoMuted - Whether or not members will join the conference\n * as video muted.\n * @returns {{\n *     type: SET_START_MUTED_POLICY,\n *     startAudioMutedPolicy: boolean,\n *     startVideoMutedPolicy: boolean\n * }}\n */\nexport function onStartMutedPolicyChanged(\n        audioMuted: boolean, videoMuted: boolean) {\n    return {\n        type: SET_START_MUTED_POLICY,\n        startAudioMutedPolicy: audioMuted,\n        startVideoMutedPolicy: videoMuted\n    };\n}\n\n/**\n * Sets whether or not peer2peer is currently enabled.\n *\n * @param {boolean} p2p - Whether or not peer2peer is currently active.\n * @returns {{\n *     type: P2P_STATUS_CHANGED,\n *     p2p: boolean\n * }}\n */\nexport function p2pStatusChanged(p2p: boolean) {\n    return {\n        type: P2P_STATUS_CHANGED,\n        p2p\n    };\n}\n\n/**\n * Signals to play touch tones.\n *\n * @param {string} tones - The tones to play.\n * @param {number} [duration] - How long to play each tone.\n * @param {number} [pause] - How long to pause between each tone.\n * @returns {{\n *     type: SEND_TONES,\n *     tones: string,\n *     duration: number,\n *     pause: number\n * }}\n */\nexport function sendTones(tones: string, duration: number, pause: number) {\n    return {\n        type: SEND_TONES,\n        tones,\n        duration,\n        pause\n    };\n}\n\n/**\n * Enables or disables the Follow Me feature.\n *\n * @param {boolean} enabled - Whether or not Follow Me should be enabled.\n * @returns {{\n *     type: SET_FOLLOW_ME,\n *     enabled: boolean\n * }}\n */\nexport function setFollowMe(enabled: boolean) {\n    return {\n        type: SET_FOLLOW_ME,\n        enabled\n    };\n}\n\n/**\n * Sets the password to join or lock a specific JitsiConference.\n *\n * @param {JitsiConference} conference - The JitsiConference which requires a\n * password to join or is to be locked with the specified password.\n * @param {Function} method - The JitsiConference method of password protection\n * such as join or lock.\n * @param {string} password - The password with which the specified conference\n * is to be joined or locked.\n * @returns {Function}\n */\nexport function setPassword(\n        conference: Object,\n        method: Function,\n        password: string) {\n    return (dispatch: Dispatch<any>, getState: Function): ?Promise<void> => {\n        switch (method) {\n        case conference.join: {\n            let state = getState()['features/base/conference'];\n\n            dispatch({\n                type: SET_PASSWORD,\n                conference,\n                method,\n                password\n            });\n\n            // Join the conference with the newly-set password.\n\n            // Make sure that the action did set the password.\n            state = getState()['features/base/conference'];\n            if (state.password === password\n\n                    // Make sure that the application still wants the\n                    // conference joined.\n                    && !state.conference) {\n                method.call(conference, password);\n            }\n            break;\n        }\n\n        case conference.lock: {\n            const state = getState()['features/base/conference'];\n\n            if (state.conference === conference) {\n                return (\n                    method.call(conference, password)\n                        .then(() => dispatch({\n                            type: SET_PASSWORD,\n                            conference,\n                            method,\n                            password\n                        }))\n                        .catch(error => dispatch({\n                            type: SET_PASSWORD_FAILED,\n                            error\n                        }))\n                );\n            }\n\n            return Promise.reject();\n        }\n        }\n    };\n}\n\n/**\n * Sets (the name of) the room of the conference to be joined.\n *\n * @param {(string|undefined)} room - The name of the room of the conference to\n * be joined.\n * @returns {{\n *     type: SET_ROOM,\n *     room: string\n * }}\n */\nexport function setRoom(room: ?string) {\n    return {\n        type: SET_ROOM,\n        room\n    };\n}\n\n/**\n * Sets whether or not members should join audio and/or video muted.\n *\n * @param {boolean} startAudioMuted - Whether or not members will join the\n * conference as audio muted.\n * @param {boolean} startVideoMuted - Whether or not members will join the\n * conference as video muted.\n * @returns {Function}\n */\nexport function setStartMutedPolicy(\n        startAudioMuted: boolean, startVideoMuted: boolean) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const conference = getCurrentConference(getState());\n\n        conference && conference.setStartMutedPolicy({\n            audio: startAudioMuted,\n            video: startVideoMuted\n        });\n\n        return dispatch(\n            onStartMutedPolicyChanged(startAudioMuted, startVideoMuted));\n    };\n}\n\n/**\n * Changing conference subject.\n *\n * @param {string} subject - The new subject.\n * @returns {void}\n */\nexport function setSubject(subject: string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { conference } = getState()['features/base/conference'];\n\n        if (conference) {\n            conference.setSubject(subject || '');\n        } else {\n            dispatch({\n                type: SET_PENDING_SUBJECT_CHANGE,\n                subject\n            });\n        }\n    };\n}\n","// @flow\n\nexport const REACTIONS = {\n    like: {\n        message: ':thumbs_up:',\n        emoji: '👍',\n        shortcutChar: 'T'\n    },\n    clap: {\n        message: ':clap:',\n        emoji: '👏',\n        shortcutChar: 'C'\n    },\n    laugh: {\n        message: ':grinning_face:',\n        emoji: '😀',\n        shortcutChar: 'L'\n    },\n    surprised: {\n        message: ':face_with_open_mouth:',\n        emoji: '😮',\n        shortcutChar: 'O'\n    },\n    boo: {\n        message: ':slightly_frowning_face:',\n        emoji: '🙁',\n        shortcutChar: 'B'\n    },\n    party: {\n        message: ':party_popper:',\n        emoji: '🎉',\n        shortcutChar: 'P'\n    }\n};\n\nexport type ReactionEmojiProps = {\n\n    /**\n     * Reaction to be displayed.\n     */\n    reaction: string,\n\n    /**\n     * Id of the reaction.\n     */\n    uid: number\n}\n","\nexport * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './functions';\n\n","// @flow\n\nimport md5 from 'js-md5';\n\nimport { APP_LINK_SCHEME, parseURIString } from '../base/util';\n\nimport { setCalendarEvents } from './actions';\nimport { MAX_LIST_LENGTH } from './constants';\n\nconst ALLDAY_EVENT_LENGTH = 23 * 60 * 60 * 1000;\n\n/**\n * Returns true of the calendar entry is to be displayed in the app, false\n * otherwise.\n *\n * @param {Object} entry - The calendar entry.\n * @returns {boolean}\n */\nfunction _isDisplayableCalendarEntry(entry) {\n    // Entries are displayable if:\n    //   - Ends in the future (future or ongoing events)\n    //   - Is not an all day event and there is only one attendee (these events\n    //     are usually placeholder events that don't need to be shown.)\n    return entry.endDate > Date.now()\n        && !((entry.allDay\n                || entry.endDate - entry.startDate > ALLDAY_EVENT_LENGTH)\n                    && (!entry.attendees || entry.attendees.length < 2));\n}\n\n/**\n * Updates the calendar entries in redux when new list is received. The feature\n * calendar-sync doesn't display all calendar events, it displays unique\n * title, URL, and start time tuples, and it doesn't display subsequent\n * occurrences of recurring events, and the repetitions of events coming from\n * multiple calendars.\n *\n * XXX The function's {@code this} is the redux store.\n *\n * @param {Array<CalendarEntry>} events - The new event list.\n * @private\n * @returns {void}\n */\nexport function _updateCalendarEntries(events: Array<Object>) {\n    if (!events || !events.length) {\n        return;\n    }\n\n    // eslint-disable-next-line no-invalid-this\n    const { dispatch, getState } = this;\n    const knownDomains = getState()['features/base/known-domains'];\n    const entryMap = new Map();\n\n    for (const event of events) {\n        const entry = _parseCalendarEntry(event, knownDomains);\n\n        if (entry && _isDisplayableCalendarEntry(entry)) {\n            // As was stated above, we don't display subsequent occurrences of\n            // recurring events, and the repetitions of events coming from\n            // multiple calendars.\n            const key = md5.hex(JSON.stringify([\n\n                // Obviously, we want to display different conference/meetings\n                // URLs. URLs are the very reason why we implemented the feature\n                // calendar-sync in the first place.\n                entry.url,\n\n                // We probably want to display one and the same URL to people if\n                // they have it under different titles in their Calendar.\n                // Because maybe they remember the title of the meeting, not the\n                // URL so they expect to see the title without realizing that\n                // they have the same URL already under a different title.\n                entry.title,\n\n                // XXX Eventually, given that the URL and the title are the\n                // same, what sets one event apart from another is the start\n                // time of the day (note the use of toTimeString() below)! The\n                // day itself is not important because we don't want multiple\n                // occurrences of a recurring event or repetitions of an even\n                // from multiple calendars.\n                new Date(entry.startDate).toTimeString()\n            ]));\n            const existingEntry = entryMap.get(key);\n\n            // We want only the earliest occurrence (which hasn't ended in the\n            // past, that is) of a recurring event.\n            if (!existingEntry || existingEntry.startDate > entry.startDate) {\n                entryMap.set(key, entry);\n            }\n        }\n    }\n\n    dispatch(\n        setCalendarEvents(\n            Array.from(entryMap.values())\n                .sort((a, b) => a.startDate - b.startDate)\n                .slice(0, MAX_LIST_LENGTH)));\n}\n\n/**\n * Checks a string against a positive pattern and a negative pattern. Returns\n * the string if it matches the positive pattern and doesn't provide any match\n * against the negative pattern. Null otherwise.\n *\n * @param {string} str - The string to check.\n * @param {string} positivePattern - The positive pattern.\n * @param {string} negativePattern - The negative pattern.\n * @returns {string}\n */\nfunction _checkPattern(str, positivePattern, negativePattern) {\n    const positiveRegExp = new RegExp(positivePattern, 'gi');\n    let positiveMatch = positiveRegExp.exec(str);\n\n    while (positiveMatch !== null) {\n        const url = positiveMatch[0];\n\n        if (!new RegExp(negativePattern, 'gi').exec(url)) {\n            return url;\n        }\n\n        positiveMatch = positiveRegExp.exec(str);\n    }\n}\n\n/**\n * Updates the calendar entries in Redux when new list is received.\n *\n * @param {Object} event - An event returned from the native calendar.\n * @param {Array<string>} knownDomains - The known domain list.\n * @private\n * @returns {CalendarEntry}\n */\nfunction _parseCalendarEntry(event, knownDomains) {\n    if (event) {\n        const url = _getURLFromEvent(event, knownDomains);\n        const startDate = Date.parse(event.startDate);\n        const endDate = Date.parse(event.endDate);\n\n        // we want to hide all events that\n        // - has no start or end date\n        // - for web, if there is no url and we cannot edit the event (has\n        // no calendarId)\n        if (isNaN(startDate)\n            || isNaN(endDate)\n            || (navigator.product !== 'ReactNative'\n                    && !url\n                    && !event.calendarId)) {\n            // Ignore the event.\n        } else {\n            return {\n                allDay: event.allDay,\n                attendees: event.attendees,\n                calendarId: event.calendarId,\n                endDate,\n                id: event.id,\n                startDate,\n                title: event.title,\n                url\n            };\n        }\n    }\n\n    return null;\n}\n\n/**\n * Retrieves a Jitsi Meet URL from an event if present.\n *\n * @param {Object} event - The event to parse.\n * @param {Array<string>} knownDomains - The known domain names.\n * @private\n * @returns {string}\n */\nfunction _getURLFromEvent(event, knownDomains) {\n    const linkTerminatorPattern = '[^\\\\s<>$]';\n    const urlRegExp\n        = `http(s)?://(${knownDomains.join('|')})/${linkTerminatorPattern}+`;\n    const schemeRegExp = `${APP_LINK_SCHEME}${linkTerminatorPattern}+`;\n    const excludePattern = '/static/';\n    const fieldsToSearch = [\n        event.title,\n        event.url,\n        event.location,\n        event.notes,\n        event.description\n    ];\n\n    for (const field of fieldsToSearch) {\n        if (typeof field === 'string') {\n            const match\n                = _checkPattern(field, urlRegExp, excludePattern)\n                || _checkPattern(field, schemeRegExp, excludePattern);\n\n            if (match) {\n                const url = parseURIString(match);\n\n                if (url) {\n                    return url.toString();\n                }\n            }\n        }\n    }\n\n    return null;\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    getCalendarEntries,\n    googleApi,\n    loadGoogleAPI,\n    signIn,\n    updateCalendarEvent,\n    updateProfile\n} from '../../google-api';\n\n/**\n * A stateless collection of action creators that implements the expected\n * interface for interacting with the Google API in order to get calendar data.\n *\n * @type {Object}\n */\nexport const googleCalendarApi = {\n    /**\n     * Retrieves the current calendar events.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {function(): Promise<CalendarEntries>}\n     */\n    getCalendarEntries,\n\n    /**\n     * Returns the email address for the currently logged in user.\n     *\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    getCurrentEmail() {\n        return updateProfile();\n    },\n\n    /**\n     * Initializes the google api if needed.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<void>}\n     */\n    load() {\n        return (dispatch: Dispatch<any>) => dispatch(loadGoogleAPI());\n    },\n\n    /**\n     * Prompts the participant to sign in to the Google API Client Library.\n     *\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    signIn,\n\n    /**\n     * Returns whether or not the user is currently signed in.\n     *\n     * @returns {function(): Promise<boolean>}\n     */\n    _isSignedIn() {\n        return () => googleApi.isSignedIn();\n    },\n\n    /**\n     * Updates calendar event by generating new invite URL and editing the event\n     * adding some descriptive text and location.\n     *\n     * @param {string} id - The event id.\n     * @param {string} calendarId - The id of the calendar to use.\n     * @param {string} location - The location to save to the event.\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    updateCalendarEvent\n};\n","// @flow\n\nimport { Client } from '@microsoft/microsoft-graph-client';\nimport base64js from 'base64-js';\nimport type { Dispatch } from 'redux';\nimport { findWindows } from 'windows-iana';\n\nimport { createDeferred } from '../../../../modules/util/helpers';\nimport { parseStandardURIString, parseURLParams } from '../../base/util';\nimport { getShareInfoText } from '../../invite';\nimport { setCalendarAPIAuthState } from '../actions';\n\n\n/**\n * Constants used for interacting with the Microsoft API.\n *\n * @private\n * @type {object}\n */\nconst MS_API_CONFIGURATION = {\n    /**\n     * The URL to use when authenticating using Microsoft API.\n     * @type {string}\n     */\n    AUTH_ENDPOINT:\n        'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?',\n\n    CALENDAR_ENDPOINT: '/me/calendars',\n\n    /**\n     * The Microsoft API scopes to request access for calendar.\n     *\n     * @type {string}\n     */\n    MS_API_SCOPES: 'openid profile Calendars.ReadWrite',\n\n    /**\n     * See https://docs.microsoft.com/en-us/azure/active-directory/develop/\n     * v2-oauth2-implicit-grant-flow#send-the-sign-in-request. This value is\n     * needed for passing in the proper domain_hint value when trying to refresh\n     * a token silently.\n     *\n     *\n     * @type {string}\n     */\n    MS_CONSUMER_TENANT: '9188040d-6c67-4c5b-b112-36a304b66dad',\n\n    /**\n     * The redirect URL to be used by the Microsoft API on successful\n     * authentication.\n     *\n     * @type {string}\n     */\n    REDIRECT_URI: `${window.location.origin}/static/msredirect.html`\n};\n\n/**\n * Store the window from an auth request. That way it can be reused if a new\n * request comes in and it can be used to indicate a request is in progress.\n *\n * @private\n * @type {Object|null}\n */\nlet popupAuthWindow = null;\n\n/**\n * A stateless collection of action creators that implements the expected\n * interface for interacting with the Microsoft API in order to get calendar\n * data.\n *\n * @type {Object}\n */\nexport const microsoftCalendarApi = {\n    /**\n     * Retrieves the current calendar events.\n     *\n     * @param {number} fetchStartDays - The number of days to go back\n     * when fetching.\n     * @param {number} fetchEndDays - The number of days to fetch.\n     * @returns {function(Dispatch<any>, Function): Promise<CalendarEntries>}\n     */\n    getCalendarEntries(fetchStartDays: ?number, fetchEndDays: ?number) {\n        return (dispatch: Dispatch<any>, getState: Function): Promise<*> => {\n            const state = getState()['features/calendar-sync'] || {};\n            const token = state.msAuthState && state.msAuthState.accessToken;\n\n            if (!token) {\n                return Promise.reject('Not authorized, please sign in!');\n            }\n\n            const client = Client.init({\n                authProvider: done => done(null, token)\n            });\n\n            return client\n                .api(MS_API_CONFIGURATION.CALENDAR_ENDPOINT)\n                .get()\n                .then(response => {\n                    const calendarIds = response.value.map(en => en.id);\n                    const getEventsPromises = calendarIds.map(id =>\n                        requestCalendarEvents(\n                            client, id, fetchStartDays, fetchEndDays));\n\n                    return Promise.all(getEventsPromises);\n                })\n\n                // get .value of every element from the array of results,\n                // which is an array of events and flatten it to one array\n                // of events\n                .then(result => [].concat(...result))\n                .then(entries => entries.map(e => formatCalendarEntry(e)));\n        };\n    },\n\n    /**\n     * Returns the email address for the currently logged in user.\n     *\n     * @returns {function(Dispatch<*, Function>): Promise<string>}\n     */\n    getCurrentEmail(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            const { msAuthState = {} }\n                = getState()['features/calendar-sync'] || {};\n            const email = msAuthState.userSigninName || '';\n\n            return Promise.resolve(email);\n        };\n    },\n\n    /**\n     * Sets the application ID to use for interacting with the Microsoft API.\n     *\n     * @returns {function(): Promise<void>}\n     */\n    load(): Function {\n        return () => Promise.resolve();\n    },\n\n    /**\n     * Prompts the participant to sign in to the Microsoft API Client Library.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<void>}\n     */\n    signIn(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            // Ensure only one popup window at a time.\n            if (popupAuthWindow) {\n                popupAuthWindow.focus();\n\n                return Promise.reject('Sign in already in progress.');\n            }\n\n            const signInDeferred = createDeferred();\n\n            const guids = {\n                authState: generateGuid(),\n                authNonce: generateGuid()\n            };\n\n            dispatch(setCalendarAPIAuthState(guids));\n\n            const { microsoftApiApplicationClientID }\n                = getState()['features/base/config'];\n            const authUrl = getAuthUrl(\n                microsoftApiApplicationClientID,\n                guids.authState,\n                guids.authNonce);\n            const h = 600;\n            const w = 480;\n\n            popupAuthWindow = window.open(\n                authUrl,\n                'Auth M$',\n                `width=${w}, height=${h}, top=${\n                    (screen.height / 2) - (h / 2)}, left=${\n                    (screen.width / 2) - (w / 2)}`);\n\n            const windowCloseCheck = setInterval(() => {\n                if (popupAuthWindow && popupAuthWindow.closed) {\n                    signInDeferred.reject(\n                        'Popup closed before completing auth.');\n                    popupAuthWindow = null;\n                    window.removeEventListener('message', handleAuth);\n                    clearInterval(windowCloseCheck);\n                } else if (!popupAuthWindow) {\n                    // This case probably happened because the user completed\n                    // auth.\n                    clearInterval(windowCloseCheck);\n                }\n            }, 500);\n\n            /**\n             * Callback with scope access to other variables that are part of\n             * the sign in request.\n             *\n             * @param {Object} event - The event from the post message.\n             * @private\n             * @returns {void}\n             */\n            function handleAuth({ data }) {\n                if (!data || data.type !== 'ms-login') {\n                    return;\n                }\n\n                window.removeEventListener('message', handleAuth);\n\n                popupAuthWindow && popupAuthWindow.close();\n                popupAuthWindow = null;\n\n                const params = getParamsFromHash(data.url);\n                const tokenParts = getValidatedTokenParts(\n                    params, guids, microsoftApiApplicationClientID);\n\n                if (!tokenParts) {\n                    signInDeferred.reject('Invalid token received');\n\n                    return;\n                }\n\n                dispatch(setCalendarAPIAuthState({\n                    authState: undefined,\n                    accessToken: tokenParts.accessToken,\n                    idToken: tokenParts.idToken,\n                    tokenExpires: params.tokenExpires,\n                    userDomainType: tokenParts.userDomainType,\n                    userSigninName: tokenParts.userSigninName\n                }));\n\n                signInDeferred.resolve();\n            }\n\n            window.addEventListener('message', handleAuth);\n\n            return signInDeferred.promise;\n        };\n    },\n\n    /**\n     * Returns whether or not the user is currently signed in.\n     *\n     * @returns {function(Dispatch<any>, Function): Promise<boolean>}\n     */\n    _isSignedIn(): Function {\n        return (dispatch: Dispatch<any>, getState: Function) => {\n            const now = new Date().getTime();\n            const state\n                = getState()['features/calendar-sync'].msAuthState || {};\n            const tokenExpires = parseInt(state.tokenExpires, 10);\n            const isExpired = now > tokenExpires && !isNaN(tokenExpires);\n\n            if (state.accessToken && isExpired) {\n                // token expired, let's refresh it\n                return dispatch(refreshAuthToken())\n                    .then(() => true)\n                    .catch(() => false);\n            }\n\n            return Promise.resolve(state.accessToken && !isExpired);\n        };\n    },\n\n    /**\n     * Updates calendar event by generating new invite URL and editing the event\n     * adding some descriptive text and location.\n     *\n     * @param {string} id - The event id.\n     * @param {string} calendarId - The id of the calendar to use.\n     * @param {string} location - The location to save to the event.\n     * @returns {function(Dispatch<any>): Promise<string|never>}\n     */\n    updateCalendarEvent(id: string, calendarId: string, location: string) {\n        return (dispatch: Dispatch<any>, getState: Function): Promise<*> => {\n            const state = getState()['features/calendar-sync'] || {};\n            const token = state.msAuthState && state.msAuthState.accessToken;\n\n            if (!token) {\n                return Promise.reject('Not authorized, please sign in!');\n            }\n\n            return getShareInfoText(getState(), location, true/* use html */)\n                .then(text => {\n                    const client = Client.init({\n                        authProvider: done => done(null, token)\n                    });\n\n                    return client\n                        .api(`/me/events/${id}`)\n                        .get()\n                        .then(description => {\n                            const body = description.body;\n\n                            if (description.bodyPreview) {\n                                body.content\n                                    = `${description.bodyPreview}<br><br>`;\n                            }\n\n                            // replace all new lines from the text with html\n                            // <br> to make it pretty\n                            body.content += text.split('\\n').join('<br>');\n\n                            return client\n                                .api(`/me/calendar/events/${id}`)\n                                .patch({\n                                    body,\n                                    location: {\n                                        'displayName': location\n                                    }\n                                });\n                        });\n                });\n        };\n    }\n};\n\n/**\n * Parses the Microsoft calendar entries to a known format.\n *\n * @param {Object} entry - The Microsoft calendar entry.\n * @private\n * @returns {{\n *     calendarId: string,\n *     description: string,\n *     endDate: string,\n *     id: string,\n *     location: string,\n *     startDate: string,\n *     title: string\n * }}\n */\nfunction formatCalendarEntry(entry) {\n    return {\n        calendarId: entry.calendarId,\n        description: entry.body.content,\n        endDate: entry.end.dateTime,\n        id: entry.id,\n        location: entry.location.displayName,\n        startDate: entry.start.dateTime,\n        title: entry.subject\n    };\n}\n\n/**\n * Generate a guid to be used for verifying token validity.\n *\n * @private\n * @returns {string} The generated string.\n */\nfunction generateGuid() {\n    const buf = new Uint16Array(8);\n\n    window.crypto.getRandomValues(buf);\n\n    return `${s4(buf[0])}${s4(buf[1])}-${s4(buf[2])}-${s4(buf[3])}-${\n        s4(buf[4])}-${s4(buf[5])}${s4(buf[6])}${s4(buf[7])}`;\n}\n\n/**\n * Constructs and returns the URL to use for renewing an auth token.\n *\n * @param {string} appId - The Microsoft application id to log into.\n * @param {string} userDomainType - The domain type of the application as\n * provided by Microsoft.\n * @param {string} userSigninName - The email of the user signed into the\n * integration with Microsoft.\n * @private\n * @returns {string} - The auth URL.\n */\nfunction getAuthRefreshUrl(appId, userDomainType, userSigninName) {\n    return [\n        getAuthUrl(appId, 'undefined', 'undefined'),\n        'prompt=none',\n        `domain_hint=${userDomainType}`,\n        `login_hint=${userSigninName}`\n    ].join('&');\n}\n\n/**\n * Constructs and returns the auth URL to use for login.\n *\n * @param {string} appId - The Microsoft application id to log into.\n * @param {string} authState - The authState guid to use.\n * @param {string} authNonce - The authNonce guid to use.\n * @private\n * @returns {string} - The auth URL.\n */\nfunction getAuthUrl(appId, authState, authNonce) {\n    const authParams = [\n        'response_type=id_token+token',\n        `client_id=${appId}`,\n        `redirect_uri=${MS_API_CONFIGURATION.REDIRECT_URI}`,\n        `scope=${MS_API_CONFIGURATION.MS_API_SCOPES}`,\n        `state=${authState}`,\n        `nonce=${authNonce}`,\n        'response_mode=fragment'\n    ].join('&');\n\n    return `${MS_API_CONFIGURATION.AUTH_ENDPOINT}${authParams}`;\n}\n\n/**\n * Converts a url from an auth redirect into an object of parameters passed\n * into the url.\n *\n * @param {string} url - The string to parse.\n * @private\n * @returns {Object}\n */\nfunction getParamsFromHash(url) {\n    const params = parseURLParams(parseStandardURIString(url), true, 'hash');\n\n    // Get the number of seconds the token is valid for, subtract 5 minutes\n    // to account for differences in clock settings and convert to ms.\n    const expiresIn = (parseInt(params.expires_in, 10) - 300) * 1000;\n    const now = new Date();\n    const expireDate = new Date(now.getTime() + expiresIn);\n\n    params.tokenExpires = expireDate.getTime().toString();\n\n    return params;\n}\n\n/**\n * Converts the parameters from a Microsoft auth redirect into an object of\n * token parts. The value \"null\" will be returned if the params do not produce\n * a valid token.\n *\n * @param {Object} tokenInfo - The token object.\n * @param {Object} guids - The guids for authState and authNonce that should\n * match in the token.\n * @param {Object} appId - The Microsoft application this token is for.\n * @private\n * @returns {Object|null}\n */\nfunction getValidatedTokenParts(tokenInfo, guids, appId) {\n    // Make sure the token matches the request source by matching the GUID.\n    if (tokenInfo.state !== guids.authState) {\n        return null;\n    }\n\n    const idToken = tokenInfo.id_token;\n\n    // A token must exist to be valid.\n    if (!idToken) {\n        return null;\n    }\n\n    const tokenParts = idToken.split('.');\n\n    if (tokenParts.length !== 3) {\n        return null;\n    }\n\n    let payload;\n\n    try {\n        payload = JSON.parse(b64utoutf8(tokenParts[1]));\n    } catch (e) {\n        return null;\n    }\n\n    if (payload.nonce !== guids.authNonce\n        || payload.aud !== appId\n        || payload.iss\n            !== `https://login.microsoftonline.com/${payload.tid}/v2.0`) {\n        return null;\n    }\n\n    const now = new Date();\n\n    // Adjust by 5 minutes to allow for inconsistencies in system clocks.\n    const notBefore = new Date((payload.nbf - 300) * 1000);\n    const expires = new Date((payload.exp + 300) * 1000);\n\n    if (now < notBefore || now > expires) {\n        return null;\n    }\n\n    return {\n        accessToken: tokenInfo.access_token,\n        idToken,\n        userDisplayName: payload.name,\n        userDomainType:\n            payload.tid === MS_API_CONFIGURATION.MS_CONSUMER_TENANT\n                ? 'consumers' : 'organizations',\n        userSigninName: payload.preferred_username\n    };\n}\n\n/**\n * Renews an existing auth token so it can continue to be used.\n *\n * @private\n * @returns {function(Dispatch<any>, Function): Promise<void>}\n */\nfunction refreshAuthToken(): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { microsoftApiApplicationClientID }\n            = getState()['features/base/config'];\n        const { msAuthState = {} }\n            = getState()['features/calendar-sync'] || {};\n\n        const refreshAuthUrl = getAuthRefreshUrl(\n            microsoftApiApplicationClientID,\n            msAuthState.userDomainType,\n            msAuthState.userSigninName);\n\n        const iframe = document.createElement('iframe');\n\n        iframe.setAttribute('id', 'auth-iframe');\n        iframe.setAttribute('name', 'auth-iframe');\n        iframe.setAttribute('style', 'display: none');\n        iframe.setAttribute('src', refreshAuthUrl);\n\n        const signInPromise = new Promise(resolve => {\n            iframe.onload = () => {\n                resolve(iframe.contentWindow.location.hash);\n            };\n        });\n\n        // The check for body existence is done for flow, which also runs\n        // against native where document.body may not be defined.\n        if (!document.body) {\n            return Promise.reject(\n                'Cannot refresh auth token in this environment');\n        }\n\n        document.body.appendChild(iframe);\n\n        return signInPromise.then(hash => {\n            const params = getParamsFromHash(hash);\n\n            dispatch(setCalendarAPIAuthState({\n                accessToken: params.access_token,\n                idToken: params.id_token,\n                tokenExpires: params.tokenExpires\n            }));\n        });\n    };\n}\n\n/**\n * Retrieves calendar entries from a specific calendar.\n *\n * @param {Object} client - The Microsoft-graph-client initialized.\n * @param {string} calendarId - The calendar ID to use.\n * @param {number} fetchStartDays - The number of days to go back\n * when fetching.\n * @param {number} fetchEndDays - The number of days to fetch.\n * @returns {Promise<any> | Promise}\n * @private\n */\nfunction requestCalendarEvents( // eslint-disable-line max-params\n        client,\n        calendarId,\n        fetchStartDays,\n        fetchEndDays): Promise<*> {\n    const startDate = new Date();\n    const endDate = new Date();\n\n    startDate.setDate(startDate.getDate() + fetchStartDays);\n    endDate.setDate(endDate.getDate() + fetchEndDays);\n\n    const filter = `Start/DateTime ge '${\n        startDate.toISOString()}' and End/DateTime lt '${\n        endDate.toISOString()}'`;\n\n    const ianaTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n    const windowsTimeZone = findWindows(ianaTimeZone);\n\n    return client\n        .api(`/me/calendars/${calendarId}/events`)\n        .filter(filter)\n        .header('Prefer', `outlook.timezone=\"${windowsTimeZone}\"`)\n        .select('id,subject,start,end,location,body')\n        .orderby('createdDateTime DESC')\n        .get()\n        .then(result => result.value.map(item => {\n            return {\n                ...item,\n                calendarId\n            };\n        }));\n}\n\n/**\n * Converts the passed in number to a string and ensure it is at least 4\n * characters in length, prepending 0's as needed.\n *\n * @param {number} num - The number to pad and convert to a string.\n * @private\n * @returns {string} - The number converted to a string.\n */\nfunction s4(num) {\n    let ret = num.toString(16);\n\n    while (ret.length < 4) {\n        ret = `0${ret}`;\n    }\n\n    return ret;\n}\n\n/**\n * Convert a Base64URL encoded string to a UTF-8 encoded string including CJK or Latin.\n *\n * @param {string} str - The string that needs conversion.\n * @private\n * @returns {string} - The converted string.\n */\nfunction b64utoutf8(str) {\n    let s = str;\n\n    // Convert from Base64URL to Base64.\n\n    if (s.length % 4 === 2) {\n        s += '==';\n    } else if (s.length % 4 === 3) {\n        s += '=';\n    }\n\n    s = s.replace(/-/g, '+').replace(/_/g, '/');\n\n    // Convert Base64 to a byte array.\n\n    const bytes = base64js.toByteArray(s);\n\n    // Convert bytes to hex.\n\n    s = bytes.reduce((str_, byte) => str_ + byte.toString(16).padStart(2, '0'), '');\n\n    // Convert a hexadecimal string to a URLComponent string\n\n    s = s.replace(/(..)/g, '%$1');\n\n    // Decodee the URI component\n\n    return decodeURIComponent(s);\n}\n","// @flow\n\nimport { toState } from '../base/redux';\n\nimport {\n    clearCalendarIntegration,\n    setCalendarError,\n    setLoadingCalendarEvents\n} from './actions';\nexport * from './functions.any';\nimport {\n    CALENDAR_TYPE,\n    ERRORS,\n    FETCH_END_DAYS,\n    FETCH_START_DAYS\n} from './constants';\nimport { _updateCalendarEntries } from './functions';\nimport logger from './logger';\nimport { googleCalendarApi } from './web/googleCalendar';\nimport { microsoftCalendarApi } from './web/microsoftCalendar';\n\n/**\n * Determines whether the calendar feature is enabled by the web.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @returns {boolean} If the app has enabled the calendar feature, {@code true};\n * otherwise, {@code false}.\n */\nexport function isCalendarEnabled(stateful: Function | Object) {\n    const {\n        enableCalendarIntegration,\n        googleApiApplicationClientID,\n        microsoftApiApplicationClientID\n    } = toState(stateful)['features/base/config'] || {};\n\n    return Boolean(enableCalendarIntegration && (googleApiApplicationClientID || microsoftApiApplicationClientID));\n}\n\n/* eslint-disable no-unused-vars */\n/**\n * Reads the user's calendar and updates the stored entries if need be.\n *\n * @param {Object} store - The redux store.\n * @param {boolean} maybePromptForPermission - Flag to tell the app if it should\n * prompt for a calendar permission if it wasn't granted yet.\n * @param {boolean|undefined} forcePermission - Whether to force to re-ask for\n * the permission or not.\n * @private\n * @returns {void}\n */\nexport function _fetchCalendarEntries(\n        store: Object,\n        maybePromptForPermission: boolean,\n        forcePermission: ?boolean) {\n    /* eslint-enable no-unused-vars */\n    const { dispatch, getState } = store;\n\n    const { integrationType } = getState()['features/calendar-sync'];\n    const integration = _getCalendarIntegration(integrationType);\n\n    if (!integration) {\n        logger.debug('No calendar type available');\n\n        return;\n    }\n\n    dispatch(setLoadingCalendarEvents(true));\n\n    dispatch(integration.load())\n        .then(() => dispatch(integration._isSignedIn()))\n        .then(signedIn => {\n            if (signedIn) {\n                return Promise.resolve();\n            }\n\n            return Promise.reject({\n                error: ERRORS.AUTH_FAILED\n            });\n        })\n        .then(() => dispatch(integration.getCalendarEntries(\n            FETCH_START_DAYS, FETCH_END_DAYS)))\n        .then(events => _updateCalendarEntries.call({\n            dispatch,\n            getState\n        }, events))\n        .then(() => {\n            dispatch(setCalendarError());\n        }, error => {\n            logger.error('Error fetching calendar.', error);\n\n            if (error.error === ERRORS.AUTH_FAILED) {\n                dispatch(clearCalendarIntegration());\n            }\n\n            dispatch(setCalendarError(error));\n        })\n        .then(() => dispatch(setLoadingCalendarEvents(false)));\n}\n\n/**\n * Returns the calendar API implementation by specified type.\n *\n * @param {string} calendarType - The calendar type API as defined in\n * the constant {@link CALENDAR_TYPE}.\n * @private\n * @returns {Object|undefined}\n */\nexport function _getCalendarIntegration(calendarType: string) {\n    switch (calendarType) {\n    case CALENDAR_TYPE.GOOGLE:\n        return googleCalendarApi;\n    case CALENDAR_TYPE.MICROSOFT:\n        return microsoftCalendarApi;\n    }\n}\n","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n  return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n  if (typeof fn === 'function') {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return fn.apply(void 0, args);\n  }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n  // if its a function call it\n  if (typeof ref === 'function') {\n    return safeInvoke(ref, node);\n  } // otherwise we should treat it as a ref object\n  else if (ref != null) {\n      ref.current = node;\n    }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n  return entries.reduce(function (acc, _ref) {\n    var key = _ref[0],\n        value = _ref[1];\n    acc[key] = value;\n    return acc;\n  }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar react_1 = tslib_1.__importDefault(require(\"react\"));\nvar styled_components_1 = tslib_1.__importDefault(require(\"styled-components\"));\nvar uuid_1 = tslib_1.__importDefault(require(\"uuid\"));\nvar colors_1 = require(\"@atlaskit/theme/colors\");\nvar constants_1 = require(\"../constants\");\nvar getSize = function (_a) {\n    var size = _a.size;\n    return size ? \"height: \" + constants_1.sizes[size] + \"; width: \" + constants_1.sizes[size] + \";\" : null;\n};\nexports.IconWrapper = styled_components_1.default.span(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject([\"\\n  \", \";\\n  color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \";\\n    max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n\\n  /**\\n   * Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"], [\"\\n  \", \";\\n  color: \", \";\\n  display: inline-block;\\n  fill: \", \";\\n  flex-shrink: 0;\\n  line-height: 1;\\n\\n  > svg {\\n    \", \";\\n    max-height: 100%;\\n    max-width: 100%;\\n    overflow: hidden;\\n    pointer-events: none;\\n    vertical-align: bottom;\\n  }\\n\\n  /**\\n   * Stop-color doesn't properly apply in chrome when the inherited/current color changes.\\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\\n   * rule) and then override it with currentColor for the color changes to be picked up.\\n   */\\n  stop {\\n    stop-color: currentColor;\\n  }\\n\"])), getSize, function (p) { return p.primaryColor || 'currentColor'; }, function (p) { return p.secondaryColor || colors_1.background; }, getSize);\n/**\n * Icons need unique gradient IDs across instances for different gradient definitions to work\n * correctly.\n * A step in the icon build process replaces linear gradient IDs and their references in paths\n * to a placeholder string so we can replace them with a dynamic ID here.\n * Replacing the original IDs with placeholders in the build process is more robust than not\n * using placeholders as we do not have to rely on regular expressions to find specific element\n * to replace.\n */\nfunction insertDynamicGradientID(svgStr, label) {\n    var id = uuid_1.default();\n    var replacedSvgStr = svgStr\n        .replace(/id=\"([^\"]+)-idPlaceholder\"/g, \"id=$1-\" + id)\n        .replace(/fill=\"url\\(#([^\"]+)-idPlaceholder\\)\"/g, \"fill=\\\"url(#$1-\" + id + \")\\\"\");\n    return replacedSvgStr;\n}\nvar Icon = function (props) {\n    var Glyph = props.glyph, dangerouslySetGlyph = props.dangerouslySetGlyph, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, size = props.size, testId = props.testId, label = props.label;\n    var glyphProps = dangerouslySetGlyph\n        ? {\n            dangerouslySetInnerHTML: {\n                __html: insertDynamicGradientID(dangerouslySetGlyph, label),\n            },\n        }\n        : { children: Glyph ? react_1.default.createElement(Glyph, { role: \"presentation\" }) : null };\n    return (react_1.default.createElement(exports.IconWrapper, tslib_1.__assign({ primaryColor: primaryColor, secondaryColor: secondaryColor, size: size, \"data-testid\": testId, role: label ? 'img' : 'presentation', \"aria-label\": label ? label : undefined }, glyphProps)));\n};\nexports.default = Icon;\nvar templateObject_1;\n//# sourceMappingURL=Icon.js.map","import React from 'react';\nimport { withTranslation } from 'react-i18next';\n\n/**\n * Wraps a specific React Component in order to enable translations in it.\n *\n * @param {Component} component - The React Component to wrap.\n * @returns {Component} The React Component which wraps {@link component} and\n * enables translations in it.\n */\nexport function translate(component) {\n    // Use the default list of namespaces.\n    return withTranslation([ 'main', 'languages', 'countries' ])(component);\n}\n\n/**\n * Translates a specific key to text containing HTML via a specific translate\n * function.\n *\n * @param {Function} t - The translate function.\n * @param {string} key - The key to translate.\n * @param {Array<*>} options - The options, if any, to pass to {@link t}.\n * @returns {ReactElement} A ReactElement which depicts the translated HTML\n * text.\n */\nexport function translateToHTML(t, key, options = {}) {\n    // eslint-disable-next-line react/no-danger\n    return <span dangerouslySetInnerHTML = {{ __html: t(key, options) }} />;\n}\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * {@code AbstractCaptions} properties.\n */\nexport type AbstractCaptionsProps = {\n\n    /**\n     * Whether local participant is requesting to see subtitles.\n     */\n    _requestingSubtitles: boolean,\n\n    /**\n     * Transcript texts formatted with participant's name and final content.\n     * Mapped by id just to have the keys for convenience during the rendering\n     * process.\n     */\n    _transcripts: ?Map<string, string>\n};\n\n/**\n * Abstract React {@code Component} which can display speech-to-text results\n * from Jigasi as subtitles.\n */\nexport class AbstractCaptions<P: AbstractCaptionsProps>\n    extends Component<P> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Element}\n     */\n    render() {\n        const { _requestingSubtitles, _transcripts } = this.props;\n\n        if (!_requestingSubtitles || !_transcripts || !_transcripts.size) {\n            return null;\n        }\n\n        const paragraphs = [];\n\n        for (const [ id, text ] of _transcripts) {\n            paragraphs.push(this._renderParagraph(id, text));\n        }\n\n        return this._renderSubtitlesContainer(paragraphs);\n    }\n\n    /**\n     * Renders the transcription text.\n     *\n     * @abstract\n     * @param {string} id - The ID of the transcript message from which the\n     * {@code text} has been created.\n     * @param {string} text - Subtitles text formatted with the participant's\n     * name.\n     * @protected\n     * @returns {React$Element} - The React element which displays the text.\n     */\n    _renderParagraph: (id: string, text: string) => React$Element<*>;\n\n    /**\n     * Renders the subtitles container.\n     *\n     * @abstract\n     * @param {Array<React$Element>} paragraphs - An array of elements created\n     * for each subtitle using the {@link _renderParagraph} method.\n     * @protected\n     * @returns {React$Element} - The subtitles container.\n     */\n    _renderSubtitlesContainer: (Array<React$Element<*>>) => React$Element<*>;\n}\n\n/**\n * Formats the transcript messages into text by prefixing participant's name to\n * avoid duplicating the effort on platform specific component.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Map<string, string>} - Formatted transcript subtitles mapped by\n * transcript message IDs.\n */\nfunction _constructTranscripts(state: Object): Map<string, string> {\n    const { _transcriptMessages } = state['features/subtitles'];\n    const transcripts = new Map();\n\n    for (const [ id, transcriptMessage ] of _transcriptMessages) {\n        if (transcriptMessage) {\n            let text = `${transcriptMessage.participantName}: `;\n\n            if (transcriptMessage.final) {\n                text += transcriptMessage.final;\n            } else {\n                const stable = transcriptMessage.stable || '';\n                const unstable = transcriptMessage.unstable || '';\n\n                text += stable + unstable;\n            }\n\n            transcripts.set(id, text);\n        }\n    }\n\n    return transcripts;\n}\n\n/**\n * Maps the transcriptionSubtitles in the redux state to the associated props of\n * {@code AbstractCaptions}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _requestingSubtitles: boolean,\n *     _transcripts: Map<string, string>\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const transcripts = _constructTranscripts(state);\n\n    return {\n        _requestingSubtitles,\n\n        // avoid rerenders by setting to props new empty Map instances.\n        _transcripts: transcripts.size === 0 ? undefined : transcripts\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { getLocalParticipant } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { getLargeVideoParticipant } from '../../large-video/functions';\nimport { isLayoutTileView } from '../../video-layout';\n\nimport {\n    _abstractMapStateToProps,\n    AbstractCaptions,\n    type AbstractCaptionsProps\n} from './AbstractCaptions';\n\ntype Props = {\n\n    /**\n     * Whether the subtitles container is lifted above the invite box.\n     */\n    _isLifted: boolean\n} & AbstractCaptionsProps;\n\n/**\n * React {@code Component} which can display speech-to-text results from\n * Jigasi as subtitles.\n */\nclass Captions\n    extends AbstractCaptions<Props> {\n\n    /**\n     * Renders the transcription text.\n     *\n     * @param {string} id - The ID of the transcript message from which the\n     * {@code text} has been created.\n     * @param {string} text - Subtitles text formatted with the participant's\n     * name.\n     * @protected\n     * @returns {React$Element} - The React element which displays the text.\n     */\n    _renderParagraph(id: string, text: string): React$Element<*> {\n        return (\n            <p key = { id }>\n                <span>{ text }</span>\n            </p>\n        );\n    }\n\n    /**\n     * Renders the subtitles container.\n     *\n     * @param {Array<React$Element>} paragraphs - An array of elements created\n     * for each subtitle using the {@link _renderParagraph} method.\n     * @protected\n     * @returns {React$Element} - The subtitles container.\n     */\n    _renderSubtitlesContainer(\n            paragraphs: Array<React$Element<*>>): React$Element<*> {\n\n        const className = this.props._isLifted ? 'transcription-subtitles lifted' : 'transcription-subtitles';\n\n        return (\n            <div className = { className } >\n                { paragraphs }\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated {@code }'s\n * props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const isTileView = isLayoutTileView(state);\n    const largeVideoParticipant = getLargeVideoParticipant(state);\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _isLifted: largeVideoParticipant && largeVideoParticipant?.id !== localParticipant?.id && !isTileView\n    };\n}\n\nexport default connect(mapStateToProps)(Captions);\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { isLocalParticipantModerator } from '../../base/participants';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { maybeShowPremiumFeatureDialog } from '../../jaas/actions';\nimport { FEATURES } from '../../jaas/constants';\nimport { toggleRequestingSubtitles } from '../actions';\n\nexport type AbstractProps = AbstractButtonProps & {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Invoked to Dispatch an Action to the redux store.\n     */\n    dispatch: Function,\n\n    /**\n     * Whether the local participant is currently requesting subtitles.\n     */\n    _requestingSubtitles: Boolean\n};\n\n/**\n * The button component which starts/stops the transcription.\n */\nexport class AbstractClosedCaptionButton\n    extends AbstractButton<AbstractProps, *> {\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    async _handleClick() {\n        const { _requestingSubtitles, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('transcribing.ccButton',\n            {\n                'requesting_subtitles': Boolean(_requestingSubtitles)\n            }));\n\n\n        const dialogShown = await dispatch(maybeShowPremiumFeatureDialog(FEATURES.RECORDING));\n\n        if (!dialogShown) {\n            dispatch(toggleRequestingSubtitles());\n        }\n    }\n\n    /**\n     * Indicates whether this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return false;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._requestingSubtitles;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AbstractClosedCaptionButton} component.\n *\n * @param {Object} state - The redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component\n * instance.\n * @private\n * @returns {{\n *     _requestingSubtitles: boolean,\n *     visible: boolean\n * }}\n */\nexport function _abstractMapStateToProps(state: Object, ownProps: Object) {\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const { transcribingEnabled } = state['features/base/config'];\n    const { isTranscribing } = state['features/transcribing'];\n\n    // if the participant is moderator, it can enable transcriptions and if\n    // transcriptions are already started for the meeting, guests can just show them\n    const { visible = Boolean(transcribingEnabled\n        && (isLocalParticipantModerator(state) || isTranscribing)) } = ownProps;\n\n    return {\n        _requestingSubtitles,\n        visible\n    };\n}\n","// @flow\n\nimport { translate } from '../../base/i18n';\nimport { IconClosedCaption } from '../../base/icons';\nimport { connect } from '../../base/redux';\n\nimport {\n    AbstractClosedCaptionButton,\n    _abstractMapStateToProps\n} from './AbstractClosedCaptionButton';\n\n/**\n * A button which starts/stops the transcriptions.\n */\nclass ClosedCaptionButton\n    extends AbstractClosedCaptionButton {\n\n    accessibilityLabel = 'toolbar.accessibilityLabel.cc';\n    icon = IconClosedCaption;\n    tooltip = 'transcribing.ccButtonTooltip';\n    label = 'toolbar.startSubtitles';\n    toggledLabel = 'toolbar.stopSubtitles';\n}\n\nexport default translate(connect(_abstractMapStateToProps)(ClosedCaptionButton));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { getInviteURL } from '../base/connection';\nimport { getLocalParticipant, getParticipantCount } from '../base/participants';\nimport { inviteVideoRooms } from '../videosipgw';\n\nimport {\n    ADD_PENDING_INVITE_REQUEST,\n    BEGIN_ADD_PEOPLE,\n    HIDE_ADD_PEOPLE_DIALOG,\n    REMOVE_PENDING_INVITE_REQUESTS,\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED,\n    UPDATE_DIAL_IN_NUMBERS_SUCCESS\n} from './actionTypes';\nimport { INVITE_TYPES } from './constants';\nimport {\n    getDialInConferenceID,\n    getDialInNumbers,\n    invitePeopleAndChatRooms,\n    inviteSipEndpoints\n} from './functions';\nimport logger from './logger';\n\n/**\n * Creates a (redux) action to signal that a click/tap has been performed on\n * {@link InviteButton} and that the execution flow for adding/inviting people\n * to the current conference/meeting is to begin.\n *\n * @returns {{\n *     type: BEGIN_ADD_PEOPLE\n * }}\n */\nexport function beginAddPeople() {\n    return {\n        type: BEGIN_ADD_PEOPLE\n    };\n}\n\n/**\n * Creates a (redux) action to signal that the {@code AddPeopleDialog}\n * should close.\n *\n * @returns {{\n *     type: HIDE_ADD_PEOPLE_DIALOG\n * }}\n */\nexport function hideAddPeopleDialog() {\n    return {\n        type: HIDE_ADD_PEOPLE_DIALOG\n    };\n}\n\n\n/**\n * Invites (i.e. Sends invites to) an array of invitees (which may be a\n * combination of users, rooms, phone numbers, and video rooms.\n *\n * @param  {Array<Object>} invitees - The recipients to send invites to.\n * @param  {Array<Object>} showCalleeInfo - Indicates whether the\n * {@code CalleeInfo} should be displayed or not.\n * @returns {Promise<Array<Object>>} A {@code Promise} resolving with an array\n * of invitees who were not invited (i.e. Invites were not sent to them).\n */\nexport function invite(\n        invitees: Array<Object>,\n        showCalleeInfo: boolean = false) {\n    return (\n            dispatch: Dispatch<any>,\n            getState: Function): Promise<Array<Object>> => {\n        const state = getState();\n        const participantsCount = getParticipantCount(state);\n        const { calleeInfoVisible } = state['features/invite'];\n\n        if (showCalleeInfo\n                && !calleeInfoVisible\n                && invitees.length === 1\n                && invitees[0].type === INVITE_TYPES.USER\n                && participantsCount === 1) {\n            dispatch(setCalleeInfoVisible(true, invitees[0]));\n        }\n\n        const { conference, password } = state['features/base/conference'];\n\n        if (typeof conference === 'undefined') {\n            // Invite will fail before CONFERENCE_JOIN. The request will be\n            // cached in order to be executed on CONFERENCE_JOIN.\n            return new Promise(resolve => {\n                dispatch(addPendingInviteRequest({\n                    invitees,\n                    callback: failedInvitees => resolve(failedInvitees)\n                }));\n            });\n        }\n\n        let allInvitePromises = [];\n        let invitesLeftToSend = [ ...invitees ];\n\n        const {\n            callFlowsEnabled,\n            inviteServiceUrl,\n            inviteServiceCallFlowsUrl\n        } = state['features/base/config'];\n        const inviteUrl = getInviteURL(state);\n        const { sipInviteUrl } = state['features/base/config'];\n        const { locationURL } = state['features/base/connection'];\n        const { jwt } = state['features/base/jwt'];\n        const { name: displayName } = getLocalParticipant(state);\n\n        // First create all promises for dialing out.\n        const phoneNumbers\n            = invitesLeftToSend.filter(({ type }) => type === INVITE_TYPES.PHONE);\n\n        // For each number, dial out. On success, remove the number from\n        // {@link invitesLeftToSend}.\n        const phoneInvitePromises = phoneNumbers.map(item => {\n            const numberToInvite = item.number;\n\n            return conference.dial(numberToInvite)\n                .then(() => {\n                    invitesLeftToSend\n                        = invitesLeftToSend.filter(\n                            invitee => invitee !== item);\n                })\n                .catch(error =>\n                    logger.error('Error inviting phone number:', error));\n        });\n\n        allInvitePromises = allInvitePromises.concat(phoneInvitePromises);\n\n        const usersAndRooms\n            = invitesLeftToSend.filter(\n                ({ type }) => [ INVITE_TYPES.USER, INVITE_TYPES.ROOM ].includes(type));\n\n        if (usersAndRooms.length) {\n            // Send a request to invite all the rooms and users. On success,\n            // filter all rooms and users from {@link invitesLeftToSend}.\n            const peopleInvitePromise\n                = invitePeopleAndChatRooms(\n                    callFlowsEnabled\n                        ? inviteServiceCallFlowsUrl : inviteServiceUrl,\n                    inviteUrl,\n                    jwt,\n                    usersAndRooms)\n                .then(() => {\n                    invitesLeftToSend\n                        = invitesLeftToSend.filter(\n                            ({ type }) => ![ INVITE_TYPES.USER, INVITE_TYPES.ROOM ].includes(type));\n                })\n                .catch(error => {\n                    dispatch(setCalleeInfoVisible(false));\n                    logger.error('Error inviting people:', error);\n                });\n\n            allInvitePromises.push(peopleInvitePromise);\n        }\n\n        // Sipgw calls are fire and forget. Invite them to the conference, then\n        // immediately remove them from invitesLeftToSend.\n        const vrooms\n            = invitesLeftToSend.filter(({ type }) => type === INVITE_TYPES.VIDEO_ROOM);\n\n        conference\n            && vrooms.length > 0\n            && dispatch(inviteVideoRooms(conference, vrooms));\n\n        invitesLeftToSend\n            = invitesLeftToSend.filter(({ type }) => type !== INVITE_TYPES.VIDEO_ROOM);\n\n        const sipEndpoints\n            = invitesLeftToSend.filter(({ type }) => type === INVITE_TYPES.SIP);\n\n        conference && inviteSipEndpoints(\n            sipEndpoints,\n            locationURL,\n            sipInviteUrl,\n            jwt,\n            conference.options.name,\n            password,\n            displayName\n        );\n\n        invitesLeftToSend\n            = invitesLeftToSend.filter(({ type }) => type !== INVITE_TYPES.SIP);\n\n        return (\n            Promise.all(allInvitePromises)\n                .then(() => invitesLeftToSend));\n    };\n}\n\n/**\n * Sends AJAX requests for dial-in numbers and conference ID.\n *\n * @returns {Function}\n */\nexport function updateDialInNumbers() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { dialInConfCodeUrl, dialInNumbersUrl, hosts }\n            = state['features/base/config'];\n        const { numbersFetched } = state['features/invite'];\n        const mucURL = hosts && hosts.muc;\n\n        if (numbersFetched || !dialInConfCodeUrl || !dialInNumbersUrl || !mucURL) {\n            // URLs for fetching dial in numbers not defined\n            return;\n        }\n\n        const { room } = state['features/base/conference'];\n\n        Promise.all([\n            getDialInNumbers(dialInNumbersUrl, room, mucURL),\n            getDialInConferenceID(dialInConfCodeUrl, room, mucURL)\n        ])\n            .then(([ dialInNumbers, { conference, id, message, sipUri } ]) => {\n                if (!conference || !id) {\n                    return Promise.reject(message);\n                }\n\n                dispatch({\n                    type: UPDATE_DIAL_IN_NUMBERS_SUCCESS,\n                    conferenceID: id,\n                    dialInNumbers,\n                    sipUri\n                });\n            })\n            .catch(error => {\n                dispatch({\n                    type: UPDATE_DIAL_IN_NUMBERS_FAILED,\n                    error\n                });\n            });\n    };\n}\n\n/**\n * Sets the visibility of {@code CalleeInfo}.\n *\n * @param {boolean|undefined} [calleeInfoVisible] - If {@code CalleeInfo} is\n * to be displayed/visible, then {@code true}; otherwise, {@code false} or\n * {@code undefined}.\n * @param {Object|undefined} [initialCalleeInfo] - Callee information.\n * @returns {{\n *     type: SET_CALLEE_INFO_VISIBLE,\n *     calleeInfoVisible: (boolean|undefined),\n *     initialCalleeInfo\n * }}\n */\nexport function setCalleeInfoVisible(\n        calleeInfoVisible: boolean,\n        initialCalleeInfo: ?Object) {\n    return {\n        type: SET_CALLEE_INFO_VISIBLE,\n        calleeInfoVisible,\n        initialCalleeInfo\n    };\n}\n\n/**\n * Adds pending invite request.\n *\n * @param {Object} request - The request.\n * @returns {{\n *     type: ADD_PENDING_INVITE_REQUEST,\n *     request: Object\n * }}\n */\nexport function addPendingInviteRequest(\n        request: { invitees: Array<Object>, callback: Function }) {\n    return {\n        type: ADD_PENDING_INVITE_REQUEST,\n        request\n    };\n}\n\n/**\n * Removes all pending invite requests.\n *\n * @returns {{\n *     type: REMOVE_PENDING_INVITE_REQUEST\n * }}\n */\nexport function removePendingInviteRequests() {\n    return {\n        type: REMOVE_PENDING_INVITE_REQUESTS\n    };\n}\n","/* @flow */\n\nimport { SIP_GW_INVITE_ROOMS } from './actionTypes';\n\n/**\n * Invites room participants to the conference through the SIP Jibri service.\n *\n * @param {JitsiMeetConference} conference - The conference to which the rooms\n * will be invited to.\n * @param {Immutable.List} rooms - The list of the \"videosipgw\" type items to\n * invite.\n * @returns {void}\n */\nexport function inviteVideoRooms(\n        conference: Object,\n        rooms: Object) {\n    return {\n        type: SIP_GW_INVITE_ROOMS,\n        conference,\n        rooms\n    };\n}\n","// @flow\n\nimport { toState } from '../redux';\n\nimport JitsiMeetJS from './_';\n\nconst JitsiConferenceErrors = JitsiMeetJS.errors.conference;\nconst JitsiConnectionErrors = JitsiMeetJS.errors.connection;\n\n/**\n * Creates a {@link JitsiLocalTrack} model from the given device id.\n *\n * @param {string} type - The media type of track being created. Expected values\n * are \"video\" or \"audio\".\n * @param {string} deviceId - The id of the target media source.\n * @param {number} [timeout] - A timeout for the JitsiMeetJS.createLocalTracks function call.\n * @param {Object} additionalOptions - Extra options to be passed to lib-jitsi-meet's {@code createLocalTracks}.\n *\n * @returns {Promise<JitsiLocalTrack>}\n */\nexport function createLocalTrack(type: string, deviceId: string, timeout: ?number, additionalOptions: ?Object) {\n    return (\n        JitsiMeetJS.createLocalTracks({\n            cameraDeviceId: deviceId,\n            devices: [ type ],\n\n            // eslint-disable-next-line camelcase\n            firefox_fake_device:\n                window.config && window.config.firefox_fake_device,\n            micDeviceId: deviceId,\n            timeout,\n            ...additionalOptions\n        })\n            .then(([ jitsiLocalTrack ]) => jitsiLocalTrack));\n}\n\n/**\n * Determines whether analytics is enabled in a specific redux {@code store}.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean} If analytics is enabled, {@code true}; {@code false},\n * otherwise.\n */\nexport function isAnalyticsEnabled(stateful: Function | Object) {\n    const { disableThirdPartyRequests, analytics = {} } = toState(stateful)['features/base/config'];\n\n    return !(disableThirdPartyRequests || analytics.disabled);\n}\n\n/**\n * Determines whether a specific {@link JitsiConferenceErrors} instance\n * indicates a fatal {@link JitsiConference} error.\n *\n * FIXME Figure out the category of errors defined by the function and describe\n * that category. I've currently named the category fatal because it appears to\n * be used in the cases of unrecoverable errors that necessitate a reload.\n *\n * @param {Object|string} error - The {@code JitsiConferenceErrors} instance to\n * categorize/classify or an {@link Error}-like object.\n * @returns {boolean} If the specified {@code JitsiConferenceErrors} instance\n * indicates a fatal {@code JitsiConference} error, {@code true}; otherwise,\n * {@code false}.\n */\nexport function isFatalJitsiConferenceError(error: Object | string) {\n    if (typeof error !== 'string') {\n        error = error.name; // eslint-disable-line no-param-reassign\n    }\n\n    return (\n        error === JitsiConferenceErrors.FOCUS_DISCONNECTED\n            || error === JitsiConferenceErrors.FOCUS_LEFT\n            || error === JitsiConferenceErrors.ICE_FAILED\n            || error === JitsiConferenceErrors.OFFER_ANSWER_FAILED\n            || error === JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE);\n}\n\n/**\n * Determines whether a specific {@link JitsiConnectionErrors} instance\n * indicates a fatal {@link JitsiConnection} error.\n *\n * FIXME Figure out the category of errors defined by the function and describe\n * that category. I've currently named the category fatal because it appears to\n * be used in the cases of unrecoverable errors that necessitate a reload.\n *\n * @param {Object|string} error - The {@code JitsiConnectionErrors} instance to\n * categorize/classify or an {@link Error}-like object.\n * @returns {boolean} If the specified {@code JitsiConnectionErrors} instance\n * indicates a fatal {@code JitsiConnection} error, {@code true}; otherwise,\n * {@code false}.\n */\nexport function isFatalJitsiConnectionError(error: Object | string) {\n    if (typeof error !== 'string') {\n        error = error.name; // eslint-disable-line no-param-reassign\n    }\n\n    return (\n        error === JitsiConnectionErrors.CONNECTION_DROPPED_ERROR\n            || error === JitsiConnectionErrors.OTHER_ERROR\n            || error === JitsiConnectionErrors.SERVER_ERROR);\n}\n","// @flow\n\nexport * from './functions.any';\n\n/**\n * Loads config.js from a specific remote server.\n *\n * @param {string} url - The URL to load.\n * @returns {Promise<Object>}\n */\nexport async function loadConfig(url: string): Promise<Object> { // eslint-disable-line no-unused-vars\n    // Return \"the config.js file\" from the global scope - that is how the\n    // Web app on both the client and the server was implemented before the\n    // React Native app was even conceived.\n    return window.config;\n}\n","export default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}","/* global $ */\n\n/**\n * Created by hristo on 12/22/14.\n */\nconst UIUtil = {\n\n    /**\n     * Escapes the given text.\n     */\n    escapeHtml(unsafeText) {\n        return $('<div/>').text(unsafeText)\n            .html();\n    },\n\n    /**\n     * Inserts given child element as the first one into the container.\n     * @param container the container to which new child element will be added\n     * @param newChild the new element that will be inserted into the container\n     */\n    prependChild(container, newChild) {\n        const firstChild = container.childNodes[0];\n        let result;\n\n        if (firstChild) {\n            result = container.insertBefore(newChild, firstChild);\n        } else {\n            result = container.appendChild(newChild);\n        }\n\n        return result;\n    },\n\n    /**\n     * Redirects to a given URL.\n     *\n     * @param {string} url - The redirect URL.\n     * NOTE: Currently used to redirect to 3rd party location for\n     * authentication. In most cases redirectWithStoredParams action must be\n     * used instead of this method in order to preserve current URL params.\n     */\n    redirect(url) {\n        window.location.href = url;\n    },\n\n    /**\n     * Indicates if we're currently in full screen mode.\n     *\n     * @return {boolean} {true} to indicate that we're currently in full screen\n     * mode, {false} otherwise\n     */\n    isFullScreen() {\n        return Boolean(document.fullscreenElement\n            || document.mozFullScreenElement\n            || document.webkitFullscreenElement\n            || document.msFullscreenElement);\n    },\n\n    /**\n     * Checks if the given DOM element is currently visible. The offsetParent\n     * will be null if the \"display\" property of the element or any of its\n     * parent containers is set to \"none\". This method will NOT check the\n     * visibility property though.\n     * @param {el} The DOM element we'd like to check for visibility\n     */\n    isVisible(el) {\n        return el.offsetParent !== null;\n    }\n};\n\nexport default UIUtil;\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/invite');\n","/**\n * The type of the action which signals that E2EE needs to be enabled / disabled.\n *\n * {\n *     type: TOGGLE_E2EE\n * }\n */\nexport const TOGGLE_E2EE = 'TOGGLE_E2EE';\n\n/**\n * The type of the action which signals to set new value whether everyone has E2EE enabled.\n *\n * {\n *     type: SET_EVERYONE_ENABLED_E2EE,\n *     everyoneEnabledE2EE: boolean\n * }\n */\nexport const SET_EVERYONE_ENABLED_E2EE = 'SET_EVERYONE_ENABLED_E2EE';\n\n/**\n * The type of the action which signals to set new value whether everyone supports E2EE.\n *\n * {\n *     type: SET_EVERYONE_SUPPORT_E2EE\n * }\n */\nexport const SET_EVERYONE_SUPPORT_E2EE = 'SET_EVERYONE_SUPPORT_E2EE';\n","// @flow\n\n/**\n * The type of (redux) action which signals that all the stored notifications\n * need to be cleared.\n *\n * {\n *     type: CLEAR_NOTIFICATIONS\n * }\n */\nexport const CLEAR_NOTIFICATIONS = 'CLEAR_NOTIFICATIONS';\n\n/**\n * The type of (redux) action which signals that a specific notification should\n * not be displayed anymore.\n *\n * {\n *     type: HIDE_NOTIFICATION,\n *     uid: string\n * }\n */\nexport const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION';\n\n/**\n * The type of (redux) action which signals that a notification component should\n * be displayed.\n *\n * {\n *     type: SHOW_NOTIFICATION,\n *     component: ReactComponent,\n *     props: Object,\n *     timeout: number,\n *     uid: string\n * }\n */\nexport const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION';\n\n/**\n * The type of (redux) action which signals that notifications should not\n * display.\n *\n * {\n *     type: SET_NOTIFICATIONS_ENABLED,\n *     enabled: Boolean\n * }\n */\nexport const SET_NOTIFICATIONS_ENABLED = 'SET_NOTIFICATIONS_ENABLED';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/devices');\n","// @flow\n\n/**\n * The type of the action which signals to update the current known state of the\n * shared video.\n *\n * {\n *     type: SET_SHARED_VIDEO_STATUS,\n *     status: string\n * }\n */\nexport const SET_SHARED_VIDEO_STATUS = 'SET_SHARED_VIDEO_STATUS';\n\n/**\n * The type of the action which signals to reset the current known state of the\n * shared video.\n *\n * {\n *     type: RESET_SHARED_VIDEO_STATUS,\n * }\n */\nexport const RESET_SHARED_VIDEO_STATUS = 'RESET_SHARED_VIDEO_STATUS';\n\n/**\n * The type of the action which signals to disable or enable the shared video\n * button.\n *\n * {\n *     type: SET_DISABLE_BUTTON\n * }\n */\nexport const SET_DISABLE_BUTTON = 'SET_DISABLE_BUTTON';\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/tracks');\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * The aspect ratio constant which indicates that the width (of whatever the\n * aspect ratio constant is used for) is smaller than the height.\n *\n * @type {Symbol}\n */\nexport const ASPECT_RATIO_NARROW = Symbol('ASPECT_RATIO_NARROW');\n\n/**\n * The aspect ratio constant which indicates that the width (of whatever the\n * aspect ratio constant is used for) is larger than the height.\n *\n * @type {Symbol}\n */\nexport const ASPECT_RATIO_WIDE = Symbol('ASPECT_RATIO_WIDE');\n\n/**\n * Smallest supported mobile width.\n */\nexport const SMALL_MOBILE_WIDTH = '320';\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar WarningIcon = function WarningIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M12.938 4.967c-.518-.978-1.36-.974-1.876 0L3.938 18.425c-.518.978-.045 1.771 1.057 1.771h14.01c1.102 0 1.573-.797 1.057-1.771L12.938 4.967z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 15a1 1 0 0 1-1-1V9a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nWarningIcon.displayName = 'WarningIcon';\nvar _default = WarningIcon;\nexports.default = _default;","/**\n * The type of the action which signals document editing has stopped or started.\n *\n * {\n *     type: SET_DOCUMENT_EDITING_STATUS\n * }\n */\nexport const SET_DOCUMENT_EDITING_STATUS = 'SET_DOCUMENT_EDITING_STATUS';\n\n/**\n * The type of the action which updates the shared document URL.\n *\n * {\n *     type: SET_DOCUMENT_URL\n * }\n */\nexport const SET_DOCUMENT_URL = 'SET_DOCUMENT_URL';\n\n/**\n * The type of the action which signals to start or stop editing a shared\n * document.\n *\n * {\n *     type: TOGGLE_DOCUMENT_EDITING\n * }\n */\nexport const TOGGLE_DOCUMENT_EDITING = 'TOGGLE_DOCUMENT_EDITING';\n","import { useEffect, useRef } from 'react';\nexport var useTrackedRef = function useTrackedRef(value) {\n  var ref = useRef(value);\n  useEffect(function () {\n    ref.current = value;\n  }, [value]);\n  return ref;\n};","/**\n * Action to select the participant to be displayed in LargeVideo.\n *\n * {\n *     type: SELECT_LARGE_VIDEO_PARTICIPANT,\n *     participantId: (string|undefined)\n * }\n */\nexport const SELECT_LARGE_VIDEO_PARTICIPANT\n    = 'SELECT_LARGE_VIDEO_PARTICIPANT';\n\n/**\n * Action to update the redux store with the current resolution of large video.\n *\n * @returns {{\n *     type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n *     resolution: number\n * }}\n */\nexport const UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION\n    = 'UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION';\n\n/**\n * Action to update the redux store with the current media event name of large video.\n *\n * @returns {{\n *     type: UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT,\n *     name: string\n * }}\n */\nexport const UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT\n    = 'UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT';\n","// @flow\n\nimport React, { Component } from 'react';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link OverlayFrame}.\n */\ntype Props = {\n\n    /**\n     * The children components to be displayed into the overlay frame.\n     */\n    children: React$Node,\n\n    /**\n     * Indicates the css style of the overlay. If true, then lighter; darker,\n     * otherwise.\n     */\n    isLightOverlay?: boolean\n};\n\n/**\n * Implements a React {@link Component} for the frame of the overlays.\n */\nexport default class OverlayFrame extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement|null}\n     */\n    render() {\n        return (\n            <div\n                className = { this.props.isLightOverlay ? 'overlay__container-light' : 'overlay__container' }\n                id = 'overlay'>\n                <div className = { 'overlay__content' }>\n                    {\n                        this.props.children\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/overlay');\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { reloadNow } from '../../../app/actions';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of the React {@code Component} props of {@link ReloadButton}.\n */\ntype Props = {\n\n    /**\n     * Reloads the page.\n     */\n    _reloadNow: Function,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function,\n\n    /**\n     * The translation key for the text in the button.\n     */\n    textKey: string\n};\n\n/**\n * Implements a React Component for button for the overlays that will reload\n * the page.\n */\nclass ReloadButton extends Component<Props> {\n    /**\n     * Renders the button for relaod the page if necessary.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    render() {\n        const className\n            = 'button-control button-control_overlay button-control_center';\n\n        /* eslint-disable react/jsx-handler-names */\n\n        return (\n            <button\n                className = { className }\n                onClick = { this.props._reloadNow }>\n                { this.props.t(this.props.textKey) }\n            </button>\n        );\n\n        /* eslint-enable react/jsx-handler-names */\n    }\n}\n\n/**\n * Maps part of redux actions to component's props.\n *\n * @param {Function} dispatch - Redux's {@code dispatch} function.\n * @private\n * @returns {Object}\n */\nfunction _mapDispatchToProps(dispatch: Function): Object {\n    return {\n        /**\n         * Dispatches the redux action to reload the page.\n         *\n         * @protected\n         * @returns {Object} Dispatched action.\n         */\n        _reloadNow() {\n            dispatch(reloadNow());\n        }\n    };\n}\n\nexport default translate(connect(undefined, _mapDispatchToProps)(ReloadButton));\n","// @flow\n\nimport { randomInt } from '@jitsi/js-utils/random';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createPageReloadScheduledEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { reloadNow } from '../../app/actions';\nimport {\n    isFatalJitsiConferenceError,\n    isFatalJitsiConnectionError\n} from '../../base/lib-jitsi-meet';\nimport logger from '../logger';\n\nimport ReloadButton from './web/ReloadButton';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractPageReloadOverlay}.\n */\nexport type Props = {\n\n    /**\n     * The details is an object containing more information about the connection\n     * failed (shard changes, was the computer suspended, etc.)\n     */\n    details: Object,\n\n    dispatch: Dispatch<any>,\n\n    /**\n     * The indicator which determines whether the reload was caused by network\n     * failure.\n     */\n    isNetworkFailure: boolean,\n\n    /**\n     * The reason for the error that will cause the reload.\n     * NOTE: Used by PageReloadOverlay only.\n     */\n    reason: string,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link AbstractPageReloadOverlay}.\n */\ntype State = {\n\n    /**\n     * The translation key for the title of the overlay.\n     */\n    message: string,\n\n    /**\n     * Current value(time) of the timer.\n     */\n    timeLeft: number,\n\n    /**\n     * How long the overlay dialog will be displayed before the conference will\n     * be reloaded.\n     */\n    timeoutSeconds: number,\n\n    /**\n     * The translation key for the title of the overlay.\n     */\n    title: string\n};\n\n/**\n * Implements an abstract React {@link Component} for the page reload overlays.\n *\n * FIXME: This is not really an abstract class as some components and functions are very web specific.\n */\nexport default class AbstractPageReloadOverlay<P: Props>\n    extends Component<P, State> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        // FIXME web does not rely on the 'recoverable' flag set on an error\n        // action, but on a predefined list of fatal errors. Because of that\n        // the value of 'fatalError' which relies on the flag should not be used\n        // on web yet (until conference/connection and their errors handling is\n        // not unified).\n        return typeof APP === 'undefined'\n            ? Boolean(state['features/overlay'].fatalError)\n            : this.needsRenderWeb(state);\n    }\n\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRenderWeb(state: Object) {\n        const conferenceError = state['features/base/conference'].error;\n        const configError = state['features/base/config'].error;\n        const connectionError = state['features/base/connection'].error;\n\n        return (\n            (connectionError && isFatalJitsiConnectionError(connectionError))\n                || (conferenceError\n                    && isFatalJitsiConferenceError(conferenceError))\n                || configError);\n    }\n\n    _interval: ?IntervalID;\n\n    /**\n     * Initializes a new AbstractPageReloadOverlay instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     * @public\n     */\n    constructor(props: P) {\n        super(props);\n\n        /**\n         * How long the overlay dialog will be displayed, before the conference\n         * will be reloaded.\n         *\n         * @type {number}\n         */\n        const timeoutSeconds = 10 + randomInt(0, 20);\n\n        let message, title;\n\n        if (this.props.isNetworkFailure) {\n            title = 'dialog.conferenceDisconnectTitle';\n            message = 'dialog.conferenceDisconnectMsg';\n        } else {\n            title = 'dialog.conferenceReloadTitle';\n            message = 'dialog.conferenceReloadMsg';\n        }\n\n        this.state = {\n            message,\n            timeLeft: timeoutSeconds,\n            timeoutSeconds,\n            title\n        };\n    }\n\n    /**\n     * React Component method that executes once component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        // FIXME (CallStats - issue) This event will not make it to CallStats\n        // because the log queue is not flushed before \"fabric terminated\" is\n        // sent to the backed.\n        // FIXME: We should dispatch action for this.\n        if (typeof APP !== 'undefined') {\n            if (APP.conference && APP.conference._room) {\n                APP.conference._room.sendApplicationLog(JSON.stringify({\n                    name: 'page.reload',\n                    label: this.props.reason\n                }));\n            }\n        }\n\n        sendAnalytics(createPageReloadScheduledEvent(\n            this.props.reason,\n            this.state.timeoutSeconds,\n            this.props.details));\n\n        logger.info(\n            `The conference will be reloaded after ${\n                this.state.timeoutSeconds} seconds.`);\n\n        this._interval\n            = setInterval(\n                () => {\n                    if (this.state.timeLeft === 0) {\n                        if (this._interval) {\n                            clearInterval(this._interval);\n                            this._interval = undefined;\n                        }\n\n                        this.props.dispatch(reloadNow());\n                    } else {\n                        this.setState(prevState => {\n                            return {\n                                timeLeft: prevState.timeLeft - 1\n                            };\n                        });\n                    }\n                },\n                1000);\n    }\n\n    /**\n     * Clears the timer interval.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this._interval) {\n            clearInterval(this._interval);\n            this._interval = undefined;\n        }\n    }\n\n    /**\n     * Renders the button for reloading the page if necessary.\n     *\n     * @protected\n     * @returns {ReactElement|null}\n     */\n    _renderButton() {\n        if (this.props.isNetworkFailure) {\n            return (\n                <ReloadButton textKey = 'dialog.rejoinNow' />\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * Renders the progress bar.\n     *\n     * @protected\n     * @returns {ReactElement}\n     */\n    _renderProgressBar() {\n        const { timeLeft, timeoutSeconds } = this.state;\n        const timeRemaining = timeoutSeconds - timeLeft;\n        const percentageComplete\n            = Math.floor((timeRemaining / timeoutSeconds) * 100);\n\n        return (\n            <div\n                className = 'progress-indicator'\n                id = 'reloadProgressBar'>\n                <div\n                    className = 'progress-indicator-fill'\n                    style = {{ width: `${percentageComplete}%` }} />\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated component's props.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     details: Object,\n *     isNetworkFailure: boolean,\n *     reason: string\n * }}\n */\nexport function abstractMapStateToProps(state: Object) {\n    const { error: configError } = state['features/base/config'];\n    const { error: connectionError } = state['features/base/connection'];\n    const { fatalError } = state['features/overlay'];\n\n    return {\n        details: fatalError && fatalError.details,\n        isNetworkFailure:\n            fatalError === configError || fatalError === connectionError,\n        reason: fatalError && (fatalError.message || fatalError.name)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractPageReloadOverlay, {\n    abstractMapStateToProps,\n    type Props\n} from '../AbstractPageReloadOverlay';\n\nimport OverlayFrame from './OverlayFrame';\n\n/**\n * Implements a React Component for page reload overlay. Shown before the\n * conference is reloaded. Shows a warning message and counts down towards the\n * reload.\n */\nclass PageReloadOverlay extends AbstractPageReloadOverlay<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isNetworkFailure, t } = this.props;\n        const { message, timeLeft, title } = this.state;\n\n        return (\n            <OverlayFrame isLightOverlay = { isNetworkFailure }>\n                <div\n                    aria-describedby = 'reload_overlay_text'\n                    aria-labelledby = 'reload_overlay_title'\n                    className = 'inlay'\n                    role = 'dialog'>\n                    <span\n                        className = 'reload_overlay_title'\n                        id = 'reload_overlay_title'\n                        role = 'heading'>\n                        { t(title) }\n                    </span>\n                    <span\n                        className = 'reload_overlay_text'\n                        id = 'reload_overlay_text'>\n                        { t(message, { seconds: timeLeft }) }\n                    </span>\n                    { this._renderProgressBar() }\n                    { this._renderButton() }\n                </div>\n            </OverlayFrame>\n        );\n    }\n\n    _renderButton: () => React$Element<*>\n\n    _renderProgressBar: () => React$Element<*>\n}\n\nexport default translate(connect(abstractMapStateToProps)(PageReloadOverlay));\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractSuspendedOverlay}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} for suspended overlay. Shown when a\n * suspend is detected.\n */\nexport default class AbstractSuspendedOverlay extends Component<Props> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        return state['features/power-monitor'].suspendDetected;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\n\nimport AbstractSuspendedOverlay from './AbstractSuspendedOverlay';\nimport OverlayFrame from './OverlayFrame';\nimport ReloadButton from './ReloadButton';\n\n/**\n * Implements a React Component for suspended overlay. Shown when a suspend is\n * detected.\n */\nclass SuspendedOverlay extends AbstractSuspendedOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <OverlayFrame>\n                <div className = 'inlay'>\n                    <span className = 'inlay__icon icon-microphone' />\n                    <span className = 'inlay__icon icon-camera' />\n                    <h3\n                        className = 'inlay__title'>\n                        { t('suspendedoverlay.title') }\n                    </h3>\n                    <ReloadButton textKey = 'suspendedoverlay.rejoinKeyTitle' />\n                </div>\n            </OverlayFrame>\n        );\n    }\n}\n\nexport default translate(SuspendedOverlay);\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractUserMediaPermissionsOverlay}.\n */\ntype Props = {\n\n    /**\n     * The browser which is used currently. The text is different for every\n     * browser.\n     */\n    browser: string,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} for overlay with guidance how to proceed\n * with gUM prompt.\n */\nexport default class AbstractUserMediaPermissionsOverlay\n    extends Component<Props> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        return state['features/overlay'].isMediaPermissionPromptVisible;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated component's props.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     browser: string\n * }}\n */\nexport function abstractMapStateToProps(state: Object) {\n    const { browser } = state['features/overlay'];\n\n    return {\n        browser\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\nimport AbstractUserMediaPermissionsOverlay, { abstractMapStateToProps }\n    from './AbstractUserMediaPermissionsOverlay';\nimport OverlayFrame from './OverlayFrame';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a React Component for overlay with guidance how to proceed with\n * gUM prompt.\n */\nclass UserMediaPermissionsOverlay extends AbstractUserMediaPermissionsOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { browser, t } = this.props;\n\n        return (\n            <OverlayFrame>\n                <div className = 'inlay'>\n                    <span className = 'inlay__icon icon-microphone' />\n                    <span className = 'inlay__icon icon-camera' />\n                    <h3\n                        aria-label = { t('startupoverlay.genericTitle') }\n                        className = 'inlay__title'\n                        role = 'alert' >\n                        {\n                            t('startupoverlay.genericTitle')\n                        }\n                    </h3>\n                    <span\n                        className = 'inlay__text'\n                        role = 'alert' >\n                        {\n                            translateToHTML(t,\n                                `userMedia.${browser}GrantPermissions`)\n                        }\n                    </span>\n                </div>\n                <div className = 'policy overlay__policy'>\n                    <p\n                        className = 'policy__text'\n                        role = 'alert'>\n                        { translateToHTML(t, 'startupoverlay.policyText') }\n                    </p>\n                    {\n                        this._renderPolicyLogo()\n                    }\n                </div>\n            </OverlayFrame>\n        );\n    }\n\n    /**\n     * Renders the policy logo.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderPolicyLogo() {\n        const policyLogoSrc = interfaceConfig.POLICY_LOGO;\n\n        if (policyLogoSrc) {\n            return (\n                <div className = 'policy__logo'>\n                    <img\n                        alt = { this.props.t('welcomepage.logo.policyLogo') }\n                        src = { policyLogoSrc } />\n                </div>\n            );\n        }\n\n        return null;\n    }\n}\n\nexport default translate(\n    connect(abstractMapStateToProps)(UserMediaPermissionsOverlay));\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractSlowGUMOverlay}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} for slow gUM overlay. Shown when\n * a slow gUM promise resolution is detected\n */\nexport default class AbstractSlowGUMOverlay extends Component<Props> {\n    /**\n     * Determines whether this overlay needs to be rendered (according to a\n     * specific redux state). Called by {@link OverlayContainer}.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {boolean} - If this overlay needs to be rendered, {@code true};\n     * {@code false}, otherwise.\n     */\n    static needsRender(state: Object) {\n        return state['features/overlay'].isSlowGUMOverlayVisible;\n    }\n}\n","// @flow\nimport Spinner from '@atlaskit/spinner';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\n\nimport AbstractSlowGUMOverlay from './AbstractSlowGUMOverlay';\nimport OverlayFrame from './OverlayFrame';\n\n/**\n * Implements a React {@link Component} for slow gUM overlay. Shown when\n * a slow gUM promise resolution is detected\n */\nclass SlowGUMOverlay extends AbstractSlowGUMOverlay {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        // const { t } = this.props;\n\n        return (\n            <OverlayFrame>\n                <div className = { 'overlay__spinner-container' }>\n                    <Spinner\n                        invertColor = { true }\n                        size = { 'large' } />\n                </div>\n            </OverlayFrame>\n        );\n    }\n}\n\nexport default translate(SlowGUMOverlay);\n","// @flow\n\nimport { getOverlays } from './overlays';\n\n/**\n * Returns the overlay to be currently rendered.\n *\n * @param {Object} state - The Redux state.\n * @returns {?React$ComponentType<*>}\n */\nexport function getOverlayToRender(state: Object) {\n    for (const overlay of getOverlays()) {\n        // react-i18n / react-redux wrap components and thus we cannot access\n        // the wrapped component's static methods directly.\n        const component = overlay.WrappedComponent || overlay;\n\n        if (component.needsRender(state)) {\n            return overlay;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Returns the visibility of the media permissions prompt.\n *\n * @param {Object} state - The Redux state.\n * @returns {boolean}\n */\nexport function getMediaPermissionPromptVisibility(state: Object) {\n    return state['features/overlay'].isMediaPermissionPromptVisible;\n}\n","// @flow\n\nimport {\n    PageReloadOverlay,\n    SlowGUMOverlay,\n    SuspendedOverlay,\n    UserMediaPermissionsOverlay\n} from './components/web';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns the list of available platform specific overlays.\n *\n * @returns {Array<Object>}\n */\nexport function getOverlays(): Array<Object> {\n    return [\n        PageReloadOverlay,\n        SuspendedOverlay,\n        UserMediaPermissionsOverlay,\n        SlowGUMOverlay\n    ];\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../base/redux';\nimport { getOverlayToRender } from '../functions';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@link Component} props of {@code OverlayContainer}.\n */\ntype Props = {\n\n    /**\n     * The React {@link Component} type of overlay to be rendered by the\n     * associated {@code OverlayContainer}.\n     */\n    overlay: ?React$ComponentType<*>\n}\n\n/**\n * Implements a React {@link Component} that will display the correct overlay\n * when needed.\n */\nclass OverlayContainer extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @public\n     * @returns {ReactElement|null}\n     */\n    render() {\n        const { overlay } = this.props;\n\n        return overlay ? React.createElement(overlay, {}) : null;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated {@code OverlayContainer}'s\n * props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     overlay: ?Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        /**\n         * The React {@link Component} type of overlay to be rendered by the\n         * associated {@code OverlayContainer}.\n         */\n        overlay: getOverlayToRender(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(OverlayContainer);\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconShareDoc } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { toggleDocument } from '../actions';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the shared document is being edited or not.\n     */\n    _editing: boolean,\n\n    /**\n     * Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n};\n\n/**\n * Implements an {@link AbstractButton} to open the chat screen on mobile.\n */\nclass SharedDocumentButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.document';\n    icon = IconShareDoc;\n    label = 'toolbar.documentOpen';\n    toggledLabel = 'toolbar.documentClose';\n\n    /**\n     * Dynamically retrieves tooltip based on sharing state.\n     */\n    get tooltip() {\n        if (this._isToggled()) {\n            return 'toolbar.documentClose';\n        }\n\n        return 'toolbar.documentOpen';\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens / closes the appropriate dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.etherpad',\n            {\n                enable: !this.props._editing\n            }));\n        this.props.dispatch(toggleDocument());\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._editing;\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @param {Object} ownProps - The properties explicitly passed to the component\n * instance.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object, ownProps: Object) {\n    const { documentUrl, editing } = state['features/etherpad'];\n    const { visible = Boolean(documentUrl) } = ownProps;\n\n    return {\n        _editing: editing,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(SharedDocumentButton));\n","// @flow\n\nimport { toState } from '../base/redux';\n\nconst ETHERPAD_OPTIONS = {\n    showControls: 'true',\n    showChat: 'false',\n    showLineNumbers: 'true',\n    useMonospaceFont: 'false'\n};\n\n/**\n * Retrieves the current sahred document URL.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {?string} - Current shared document URL or undefined.\n */\nexport function getSharedDocumentUrl(stateful: Function | Object) {\n    const state = toState(stateful);\n    const { documentUrl } = state['features/etherpad'];\n    const { displayName } = state['features/base/settings'];\n\n    if (!documentUrl) {\n        return undefined;\n    }\n\n    const params = new URLSearchParams(ETHERPAD_OPTIONS);\n\n    if (displayName) {\n        params.append('userName', displayName);\n    }\n\n    return `${documentUrl}?${params.toString()}`;\n}\n","/**\n * Create an action for when the settings are updated.\n *\n * {\n *     type: SETTINGS_UPDATED,\n *     settings: {\n *         audioOutputDeviceId: string,\n *         avatarURL: string,\n *         cameraDeviceId: string,\n *         displayName: string,\n *         email: string,\n *         localFlipX: boolean,\n *         micDeviceId: string,\n *         serverURL: string,\n *         startAudioOnly: boolean,\n *         startWithAudioMuted: boolean,\n *         startWithVideoMuted: boolean\n *     }\n * }\n */\nexport const SETTINGS_UPDATED = 'SETTINGS_UPDATED';\n","// @flow\n\n/**\n * Extracts the fqn part from a path, where fqn represents\n * tenant/roomName.\n *\n * @param {string} path - The URL path.\n * @returns {string}\n */\nexport function extractFqnFromPath(path: string) {\n    const parts = path.split('/');\n    const len = parts.length;\n\n    return parts.length > 2 ? `${parts[len - 2]}/${parts[len - 1]}` : '';\n}\n\n/**\n * Returns the url used for fetching dynamic branding.\n *\n * @param {Object} state - The state of the app.\n * @returns {string}\n */\nexport function getDynamicBrandingUrl(state: Object) {\n    const { dynamicBrandingUrl } = state['features/base/config'];\n\n    if (dynamicBrandingUrl) {\n        return dynamicBrandingUrl;\n    }\n\n    const baseUrl = state['features/base/config'].brandingDataUrl;\n    const fqn = extractFqnFromPath(state['features/base/connection'].locationURL.pathname);\n\n    if (baseUrl && fqn) {\n        return `${baseUrl}?conferenceFqn=${encodeURIComponent(fqn)}`;\n    }\n}\n\n/**\n * Selector used for getting the load state of the dynamic branding data.\n *\n * @param {Object} state - Global state of the app.\n * @returns {boolean}\n */\nexport function isDynamicBrandingDataLoaded(state: Object) {\n    return state['features/dynamic-branding'].customizationReady;\n}\n","// @flow\n\nimport { createVirtualBackgroundEffect } from '../stream-effects/virtual-background';\n\nimport { BACKGROUND_ENABLED, SET_VIRTUAL_BACKGROUND } from './actionTypes';\nimport logger from './logger';\n\n/**\n * Signals the local participant activate the virtual background video or not.\n *\n * @param {Object} options - Represents the virtual background setted options.\n * @param {Object} jitsiTrack - Represents the jitsi track that will have backgraund effect applied.\n * @returns {Promise}\n */\nexport function toggleBackgroundEffect(options: Object, jitsiTrack: Object) {\n    return async function(dispatch: Object => Object, getState: () => any) {\n        await dispatch(backgroundEnabled(options.enabled));\n        await dispatch(setVirtualBackground(options));\n        const state = getState();\n        const virtualBackground = state['features/virtual-background'];\n\n        if (jitsiTrack) {\n            try {\n                if (options.enabled) {\n                    await jitsiTrack.setEffect(await createVirtualBackgroundEffect(virtualBackground, dispatch));\n                } else {\n                    await jitsiTrack.setEffect(undefined);\n                    dispatch(backgroundEnabled(false));\n                }\n            } catch (error) {\n                dispatch(backgroundEnabled(false));\n                logger.error('Error on apply background effect:', error);\n            }\n        }\n    };\n}\n\n/**\n * Sets the selected virtual background image object.\n *\n * @param {Object} options - Represents the virtual background setted options.\n * @returns {{\n *     type: SET_VIRTUAL_BACKGROUND,\n *     virtualSource: string,\n *     blurValue: number,\n *     type: string,\n * }}\n */\nexport function setVirtualBackground(options: Object) {\n    return {\n        type: SET_VIRTUAL_BACKGROUND,\n        virtualSource: options?.url,\n        blurValue: options?.blurValue,\n        backgroundType: options?.backgroundType,\n        selectedThumbnail: options?.selectedThumbnail\n    };\n}\n\n/**\n * Signals the local participant that the background effect has been enabled.\n *\n * @param {boolean} backgroundEffectEnabled - Indicate if virtual background effect is activated.\n * @returns {{\n *      type: BACKGROUND_ENABLED,\n *      backgroundEffectEnabled: boolean\n * }}\n */\nexport function backgroundEnabled(backgroundEffectEnabled: boolean) {\n    return {\n        type: BACKGROUND_ENABLED,\n        backgroundEffectEnabled\n    };\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { Icon } from '../../../base/icons';\n\n/**\n * The type of the React {@code Component} props of\n * {@link VideoMenuButton}.\n */\ntype Props = {\n\n    /**\n     * Text to display within the component that describes the onClick action.\n     */\n    buttonText: string,\n\n    /**\n     * Additional CSS classes to add to the component.\n     */\n    displayClass?: string,\n\n    /**\n     * The icon that will display within the component.\n     */\n    icon?: Object,\n\n    /**\n     * The id attribute to be added to the component's DOM for retrieval when\n     * querying the DOM. Not used directly by the component.\n     */\n    id: string,\n\n    /**\n     * Callback to invoke when the component is clicked.\n     */\n    onClick: Function,\n};\n\n/**\n * React {@code Component} for displaying an action in {@code VideoMenuButton}.\n *\n * @extends {Component}\n */\nexport default class VideoMenuButton extends Component<Props> {\n    /**\n     * Initializes a new {@code RemoteVideoMenuButton} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (this.props.onClick && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            this.props.onClick();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            buttonText,\n            displayClass,\n            icon,\n            id,\n            onClick\n        } = this.props;\n\n        const linkClassName = `popupmenu__link ${displayClass || ''}`;\n\n        return (\n            <li className = 'popupmenu__item'>\n                <a\n                    aria-label = { buttonText ? buttonText : 'some thing' }\n                    className = { linkClassName }\n                    id = { id }\n                    onClick = { onClick }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    <span className = 'popupmenu__icon'>\n                        { icon && <Icon src = { icon } /> }\n                    </span>\n                    <span className = 'popupmenu__text'>\n                        { buttonText }\n                    </span>\n                </a>\n            </li>\n        );\n    }\n}\n","// @flow\nimport React, { useCallback } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconInfo } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { renderConnectionStatus } from '../../actions.web';\n\nimport VideoMenuButton from './VideoMenuButton';\n\ntype Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant for which to show connection stats.\n     */\n    participantId: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n\nconst ConnectionStatusButton = ({\n    dispatch,\n    participantId,\n    t\n}: Props) => {\n    const onClick = useCallback(() => {\n        dispatch(renderConnectionStatus(true));\n    }, [ dispatch ]);\n\n    return (\n        <VideoMenuButton\n            buttonText = { t('videothumbnail.connectionInfo') }\n            icon = { IconInfo }\n            id = { `connstatus_${participantId}` }\n            onClick = { onClick } />\n    );\n};\n\nexport default translate(connect()(ConnectionStatusButton));\n","// @flow\n\nimport { openDialog } from '../../base/dialog';\nimport { IconCrown } from '../../base/icons';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    isParticipantModerator,\n    PARTICIPANT_ROLE\n} from '../../base/participants';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport { GrantModeratorDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant for whom to grant moderator status.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which kicks the remote participant.\n */\nexport default class AbstractGrantModeratorButton extends AbstractButton<Props, *> {\n  accessibilityLabel = 'toolbar.accessibilityLabel.grantModerator';\n  icon = IconCrown;\n  label = 'videothumbnail.grantModerator';\n\n  /**\n   * Handles clicking / pressing the button, and kicks the participant.\n   *\n   * @private\n   * @returns {void}\n   */\n  _handleClick() {\n      const { dispatch, participantID } = this.props;\n\n      dispatch(openDialog(GrantModeratorDialog, { participantID }));\n  }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @param {Object} ownProps - Properties of component.\n * @private\n * @returns {{\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { participantID } = ownProps;\n\n    const localParticipant = getLocalParticipant(state);\n    const targetParticipant = getParticipantById(state, participantID);\n\n    return {\n        visible: Boolean(localParticipant?.role === PARTICIPANT_ROLE.MODERATOR)\n          && !isParticipantModerator(targetParticipant)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconCrown } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractGrantModeratorButton, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractGrantModeratorButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implements a React {@link Component} which displays a button for granting\n * moderator to a participant.\n */\nclass GrantModeratorButton extends AbstractGrantModeratorButton {\n    /**\n     * Instantiates a new {@code GrantModeratorButton}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t, visible } = this.props;\n\n        if (!visible) {\n            return null;\n        }\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.grantModerator') }\n                displayClass = 'grantmoderatorlink'\n                icon = { IconCrown }\n                id = { `grantmoderatorlink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\n\nexport default translate(connect(_mapStateToProps)(GrantModeratorButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { grantModerator } from '../../base/participants';\n\ntype Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be granted moderator rights.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm granting moderator to a participant.\n */\nexport default class AbstractGrantModeratorDialog\n    extends Component<Props> {\n    /**\n     * Initializes a new {@code AbstractGrantModeratorDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback for the confirm button.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'grant.moderator.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(grantModerator(participantID));\n\n        return true;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractGrantModeratorDialog\n    from '../AbstractGrantModeratorDialog';\n\n/**\n * Dialog to confirm a grant moderator action.\n */\nclass GrantModeratorDialog extends AbstractGrantModeratorDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.Yes'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.grantModeratorTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.grantModeratorDialog') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(GrantModeratorDialog));\n","// @flow\n\nimport { openDialog } from '../../base/dialog';\nimport { IconCloseCircle } from '../../base/icons';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport { KickRemoteParticipantDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant that this button is supposed to kick.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which kicks the remote participant.\n */\nexport default class AbstractKickButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.kick';\n    icon = IconCloseCircle;\n    label = 'videothumbnail.kick';\n\n    /**\n     * Handles clicking / pressing the button, and kicks the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        dispatch(openDialog(KickRemoteParticipantDialog, { participantID }));\n    }\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconKick } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractKickButton, {\n    type Props\n} from '../AbstractKickButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for kicking out\n * a participant from the conference.\n *\n * NOTE: At the time of writing this is a button that doesn't use the\n * {@code AbstractButton} base component, but is inherited from the same\n * super class ({@code AbstractKickButton} that extends {@code AbstractButton})\n * for the sake of code sharing between web and mobile. Once web uses the\n * {@code AbstractButton} base component, this can be fully removed.\n */\nclass KickButton extends AbstractKickButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t } = this.props;\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.kick') }\n                displayClass = 'kicklink'\n                icon = { IconKick }\n                id = { `ejectlink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\nexport default translate(connect()(KickButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { kickParticipant } from '../../base/participants';\n\ntype Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be kicked.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm a remote participant kick action.\n */\nexport default class AbstractKickRemoteParticipantDialog\n    extends Component<Props> {\n    /**\n     * Initializes a new {@code AbstractKickRemoteParticipantDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback for the confirm button.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'kick.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(kickParticipant(participantID));\n\n        return true;\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractKickRemoteParticipantDialog\n    from '../AbstractKickRemoteParticipantDialog';\n\n/**\n * Dialog to confirm a remote participant kick action.\n */\nclass KickRemoteParticipantDialog extends AbstractKickRemoteParticipantDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.kickParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.kickParticipantTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.kickParticipantDialog') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(KickRemoteParticipantDialog));\n","// @flow\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { IconMicDisabled } from '../../base/icons';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { isRemoteTrackMuted } from '../../base/tracks';\n\nimport { MuteRemoteParticipantDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * Boolean to indicate if the audio track of the participant is muted or\n     * not.\n     */\n    _audioTrackMuted: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant object that this button is supposed to\n     * mute/unmute.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which mutes the remote participant.\n */\nexport default class AbstractMuteButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.remoteMute';\n    icon = IconMicDisabled;\n    label = 'videothumbnail.domute';\n    toggledLabel = 'videothumbnail.muted';\n\n    /**\n     * Handles clicking / pressing the button, and mutes the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'mute.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(openDialog(MuteRemoteParticipantDialog, { participantID }));\n    }\n\n    /**\n     * Renders the item disabled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isDisabled() {\n        return this.props._audioTrackMuted;\n    }\n\n    /**\n     * Renders the item toggled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isToggled() {\n        return this.props._audioTrackMuted;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @param {Object} ownProps - Properties of component.\n * @private\n * @returns {{\n *      _audioTrackMuted: boolean\n *  }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const tracks = state['features/base/tracks'];\n\n    return {\n        _audioTrackMuted: isRemoteTrackMuted(\n            tracks, MEDIA_TYPE.AUDIO, ownProps.participantID)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMicDisabled } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteButton, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractMuteButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * a participant in the conference.\n *\n * NOTE: At the time of writing this is a button that doesn't use the\n * {@code AbstractButton} base component, but is inherited from the same\n * super class ({@code AbstractMuteButton} that extends {@code AbstractButton})\n * for the sake of code sharing between web and mobile. Once web uses the\n * {@code AbstractButton} base component, this can be fully removed.\n */\nclass MuteButton extends AbstractMuteButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _audioTrackMuted, participantID, t } = this.props;\n        const muteConfig = _audioTrackMuted ? {\n            translationKey: 'videothumbnail.muted',\n            muteClassName: 'mutelink disabled'\n        } : {\n            translationKey: 'videothumbnail.domute',\n            muteClassName: 'mutelink'\n        };\n\n        return (\n            <VideoMenuButton\n                buttonText = { t(muteConfig.translationKey) }\n                displayClass = { muteConfig.muteClassName }\n                icon = { IconMicDisabled }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\n\nexport default translate(connect(_mapStateToProps)(MuteButton));\n","// @flow\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { IconVideoOff } from '../../base/icons';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { isRemoteTrackMuted } from '../../base/tracks';\n\nimport { MuteRemoteParticipantsVideoDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * Boolean to indicate if the video track of the participant is muted or\n     * not.\n     */\n    _videoTrackMuted: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant object that this button is supposed to\n     * mute/unmute.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which mutes the remote participant.\n */\nexport default class AbstractMuteVideoButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.remoteVideoMute';\n    icon = IconVideoOff;\n    label = 'videothumbnail.domuteVideo';\n    toggledLabel = 'videothumbnail.videoMuted';\n\n    /**\n     * Handles clicking / pressing the button, and mutes the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createRemoteVideoMenuButtonEvent(\n            'mute.button',\n            {\n                'participant_id': participantID\n            }));\n\n        dispatch(openDialog(MuteRemoteParticipantsVideoDialog, { participantID }));\n    }\n\n    /**\n     * Renders the item disabled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isDisabled() {\n        return this.props._videoTrackMuted;\n    }\n\n    /**\n     * Renders the item toggled if the participant is muted.\n     *\n     * @inheritdoc\n     */\n    _isToggled() {\n        return this.props._videoTrackMuted;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @param {Object} ownProps - Properties of component.\n * @private\n * @returns {{\n *      _videoTrackMuted: boolean\n *  }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const tracks = state['features/base/tracks'];\n\n    return {\n        _videoTrackMuted: isRemoteTrackMuted(\n            tracks, MEDIA_TYPE.VIDEO, ownProps.participantID)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconCameraDisabled } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteVideoButton, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractMuteVideoButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for disabling\n * the camera of a participant in the conference.\n *\n * NOTE: At the time of writing this is a button that doesn't use the\n * {@code AbstractButton} base component, but is inherited from the same\n * super class ({@code AbstractMuteVideoButton} that extends {@code AbstractButton})\n * for the sake of code sharing between web and mobile. Once web uses the\n * {@code AbstractButton} base component, this can be fully removed.\n */\nclass MuteVideoButton extends AbstractMuteVideoButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _videoTrackMuted, participantID, t } = this.props;\n        const muteConfig = _videoTrackMuted ? {\n            translationKey: 'videothumbnail.videoMuted',\n            muteClassName: 'mutelink disabled'\n        } : {\n            translationKey: 'videothumbnail.domuteVideo',\n            muteClassName: 'mutelink'\n        };\n\n        return (\n            <VideoMenuButton\n                buttonText = { t(muteConfig.translationKey) }\n                displayClass = { muteConfig.muteClassName }\n                icon = { IconCameraDisabled }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void\n}\n\nexport default translate(connect(_mapStateToProps)(MuteVideoButton));\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { getLocalParticipant, getParticipantDisplayName } from '../../base/participants';\nimport { muteAllParticipants } from '../actions';\n\nimport AbstractMuteRemoteParticipantDialog, {\n    type Props as AbstractProps\n} from './AbstractMuteRemoteParticipantDialog';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractMuteEveryoneDialog}.\n */\nexport type Props = AbstractProps & {\n\n    content: string,\n    exclude: Array<string>,\n    title: string\n};\n\n/**\n *\n * An abstract Component with the contents for a dialog that asks for confirmation\n * from the user before muting all remote participants.\n *\n * @extends AbstractMuteRemoteParticipantDialog\n */\nexport default class AbstractMuteEveryoneDialog<P: Props> extends AbstractMuteRemoteParticipantDialog<P> {\n    static defaultProps = {\n        exclude: [],\n        muteLocal: false\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { content, title } = this.props;\n\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleString = { title }\n                width = 'small'>\n                <div>\n                    { content }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback to be invoked when the value of this dialog is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const {\n            dispatch,\n            exclude\n        } = this.props;\n\n        dispatch(muteAllParticipants(exclude, MEDIA_TYPE.AUDIO));\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code AbstractMuteEveryoneDialog}'s props.\n *\n * @param {Object} state - The redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component.\n * @returns {Props}\n */\nexport function abstractMapStateToProps(state: Object, ownProps: Props) {\n    const { exclude = [], t } = ownProps;\n\n    const whom = exclude\n        // eslint-disable-next-line no-confusing-arrow\n        .map(id => id === getLocalParticipant(state).id\n            ? t('dialog.muteEveryoneSelf')\n            : getParticipantDisplayName(state, id))\n        .join(', ');\n\n    return whom.length ? {\n        content: t('dialog.muteEveryoneElseDialog'),\n        title: t('dialog.muteEveryoneElseTitle', { whom })\n    } : {\n        content: t('dialog.muteEveryoneDialog'),\n        title: t('dialog.muteEveryoneTitle')\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteEveryoneDialog, { abstractMapStateToProps, type Props } from '../AbstractMuteEveryoneDialog';\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before muting all remote participants.\n *\n * @extends AbstractMuteEveryoneDialog\n */\nclass MuteEveryoneDialog extends AbstractMuteEveryoneDialog<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleString = { this.props.title }\n                width = 'small'>\n                <div>\n                    { this.props.content }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect(abstractMapStateToProps)(MuteEveryoneDialog));\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { getLocalParticipant, getParticipantDisplayName } from '../../base/participants';\nimport { muteAllParticipants } from '../actions';\n\nimport AbstractMuteRemoteParticipantsVideoDialog, {\n    type Props as AbstractProps\n} from './AbstractMuteRemoteParticipantsVideoDialog';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractMuteEveryonesVideoDialog}.\n */\nexport type Props = AbstractProps & {\n\n    content: string,\n    exclude: Array<string>,\n    title: string\n};\n\n/**\n *\n * An abstract Component with the contents for a dialog that asks for confirmation\n * from the user before disabling all remote participants cameras.\n *\n * @extends AbstractMuteRemoteParticipantsVideoDialog\n */\nexport default class AbstractMuteEveryonesVideoDialog<P: Props> extends AbstractMuteRemoteParticipantsVideoDialog<P> {\n    static defaultProps = {\n        exclude: [],\n        muteLocal: false\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { content, title } = this.props;\n\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantsVideoButton'\n                onSubmit = { this._onSubmit }\n                titleString = { title }\n                width = 'small'>\n                <div>\n                    { content }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback to be invoked when the value of this dialog is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const {\n            dispatch,\n            exclude\n        } = this.props;\n\n        dispatch(muteAllParticipants(exclude, MEDIA_TYPE.VIDEO));\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code AbstractMuteEveryonesVideoDialog}'s props.\n *\n * @param {Object} state - The redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component.\n * @returns {Props}\n */\nexport function abstractMapStateToProps(state: Object, ownProps: Props) {\n    const { exclude, t } = ownProps;\n\n    const whom = exclude\n        // eslint-disable-next-line no-confusing-arrow\n        .map(id => id === getLocalParticipant(state).id\n            ? t('dialog.muteEveryoneSelf')\n            : getParticipantDisplayName(state, id))\n        .join(', ');\n\n    return whom.length ? {\n        content: t('dialog.muteEveryoneElsesVideoDialog'),\n        title: t('dialog.muteEveryoneElsesVideoTitle', { whom })\n    } : {\n        content: t('dialog.muteEveryonesVideoDialog'),\n        title: t('dialog.muteEveryonesVideoTitle')\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteEveryonesVideoDialog, { abstractMapStateToProps, type Props }\n    from '../AbstractMuteEveryonesVideoDialog';\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before disabling all remote participants cameras.\n *\n * @extends AbstractMuteEveryonesVideoDialog\n */\nclass MuteEveryonesVideoDialog extends AbstractMuteEveryonesVideoDialog<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantsVideoButton'\n                onSubmit = { this._onSubmit }\n                titleString = { this.props.title }\n                width = 'small'>\n                <div>\n                    { this.props.content }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect(abstractMapStateToProps)(MuteEveryonesVideoDialog));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { IconMuteEveryone } from '../../base/icons';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport { MuteEveryoneDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant object that this button is supposed to keep unmuted.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which mutes all the other participants.\n */\nexport default class AbstractMuteEveryoneElseButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryoneElse';\n    icon = IconMuteEveryone;\n    label = 'videothumbnail.domuteOthers';\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyoneelse.pressed'));\n        dispatch(openDialog(MuteEveryoneDialog, { exclude: [ participantID ] }));\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMuteEveryoneElse } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteEveryoneElseButton, {\n    type Props\n} from '../AbstractMuteEveryoneElseButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * every participant in the conference except the one with the given\n * participantID\n */\nclass MuteEveryoneElseButton extends AbstractMuteEveryoneElseButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t } = this.props;\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.domuteOthers') }\n                displayClass = { 'mutelink' }\n                icon = { IconMuteEveryoneElse }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void;\n}\n\nexport default translate(connect()(MuteEveryoneElseButton));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { IconMuteVideoEveryone } from '../../base/icons';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport { MuteEveryonesVideoDialog } from '.';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant object that this button is supposed to keep unmuted.\n     */\n    participantID: string,\n\n    /**\n     * The function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * An abstract remote video menu button which disables the camera of all the other participants.\n */\nexport default class AbstractMuteEveryoneElsesVideoButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryoneElsesVideo';\n    icon = IconMuteVideoEveryone;\n    label = 'videothumbnail.domuteVideoOfOthers';\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, participantID } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyoneelsesvideo.pressed'));\n        dispatch(openDialog(MuteEveryonesVideoDialog, { exclude: [ participantID ] }));\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMuteVideoEveryoneElse } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteEveryoneElsesVideoButton, {\n    type Props\n} from '../AbstractMuteEveryoneElsesVideoButton';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * every participant in the conference except the one with the given\n * participantID\n */\nclass MuteEveryoneElsesVideoButton extends AbstractMuteEveryoneElsesVideoButton {\n    /**\n     * Instantiates a new {@code Component}.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._handleClick = this._handleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t } = this.props;\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.domuteVideoOfOthers') }\n                displayClass = { 'mutelink' }\n                icon = { IconMuteVideoEveryoneElse }\n                id = { `mutelink_${participantID}` }\n                // eslint-disable-next-line react/jsx-handler-names\n                onClick = { this._handleClick } />\n        );\n    }\n\n    _handleClick: () => void;\n}\n\nexport default translate(connect()(MuteEveryoneElsesVideoButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconMessage } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { openChat } from '../../../chat/';\nimport {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../../../chat/components/PrivateMessageButton';\nimport { isButtonEnabled } from '../../../toolbox/functions.web';\n\nimport VideoMenuButton from './VideoMenuButton';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * True if the private chat functionality is disabled, hence the button is not visible.\n     */\n    _hidden: boolean\n};\n\n/**\n * A custom implementation of the PrivateMessageButton specialized for\n * the web version of the remote video menu. When the web platform starts to use\n * the {@code AbstractButton} component for the remote video menu, we can get rid\n * of this component and use the generic button in the chat feature.\n */\nclass PrivateMessageMenuButton extends Component<Props> {\n    /**\n     * Instantiates a new Component instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { participantID, t, _hidden } = this.props;\n\n        if (_hidden) {\n            return null;\n        }\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('toolbar.privateMessage') }\n                icon = { IconMessage }\n                id = { `privmsglink_${participantID}` }\n                onClick = { this._onClick } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Callback to be invoked on pressing the button.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { dispatch, _participant } = this.props;\n\n        dispatch(openChat(_participant));\n    }\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    return {\n        ..._abstractMapStateToProps(state, ownProps),\n        _hidden: typeof interfaceConfig !== 'undefined'\n            && (interfaceConfig.DISABLE_PRIVATE_MESSAGES || !isButtonEnabled('chat', state))\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(PrivateMessageMenuButton));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport {\n    createRemoteVideoMenuButtonEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconRemoteControlStart, IconRemoteControlStop } from '../../../base/icons';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n// TODO: Move these enums into the store after further reactification of the\n// non-react RemoteVideo component.\nexport const REMOTE_CONTROL_MENU_STATES = {\n    NOT_SUPPORTED: 0,\n    NOT_STARTED: 1,\n    REQUESTING: 2,\n    STARTED: 3\n};\n\n/**\n * The type of the React {@code Component} props of {@link RemoteControlButton}.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the component is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The ID of the participant linked to the onClick callback.\n     */\n    participantID: string,\n\n    /**\n     * The current status of remote control. Should be a number listed in the\n     * enum REMOTE_CONTROL_MENU_STATES.\n     */\n    remoteControlState: number,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a button showing the\n * current state of remote control for a participant and can start or stop a\n * remote control session.\n *\n * @extends Component\n */\nclass RemoteControlButton extends Component<Props> {\n    /**\n     * Initializes a new {@code RemoteControlButton} instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {null|ReactElement}\n     */\n    render() {\n        const {\n            participantID,\n            remoteControlState,\n            t\n        } = this.props;\n\n        let className, icon;\n\n        switch (remoteControlState) {\n        case REMOTE_CONTROL_MENU_STATES.NOT_STARTED:\n            icon = IconRemoteControlStart;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.REQUESTING:\n            className = ' disabled';\n            icon = IconRemoteControlStart;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.STARTED:\n            icon = IconRemoteControlStop;\n            break;\n        case REMOTE_CONTROL_MENU_STATES.NOT_SUPPORTED:\n\n            // Intentionally fall through.\n        default:\n            return null;\n        }\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.remoteControl') }\n                displayClass = { className }\n                icon = { icon }\n                id = { `remoteControl_${participantID}` }\n                onClick = { this._onClick } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Sends analytics event for pressing the button and executes the passed\n     * onClick handler.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { onClick, participantID, remoteControlState } = this.props;\n\n        // TODO: What do we do in case the state is e.g. \"requesting\"?\n        if (remoteControlState === REMOTE_CONTROL_MENU_STATES.STARTED\n            || remoteControlState === REMOTE_CONTROL_MENU_STATES.NOT_STARTED) {\n\n            const enable\n                = remoteControlState === REMOTE_CONTROL_MENU_STATES.NOT_STARTED;\n\n            sendAnalytics(createRemoteVideoMenuButtonEvent(\n                'remote.control.button',\n                {\n                    enable,\n                    'participant_id': participantID\n                }));\n        }\n\n        if (onClick) {\n            onClick();\n        }\n    }\n}\n\nexport default translate(RemoteControlButton);\n","// @flow\n\nimport React from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link VideoMenu}.\n */\ntype Props = {\n\n    /**\n     * The components to place as the body of the {@code VideoMenu}.\n     */\n    children: React$Node,\n\n    /**\n     * The id attribute to be added to the component's DOM for retrieval when\n     * querying the DOM. Not used directly by the component.\n     */\n    id: string\n};\n\n/**\n * Click handler.\n *\n * @param {SyntheticEvent} event - The click event.\n * @returns {void}\n */\nfunction onClick(event) {\n    // If the event is propagated to the thumbnail container the participant will be pinned. That's why the propagation\n    // needs to be stopped.\n    event.stopPropagation();\n}\n\n/**\n * React {@code Component} responsible for displaying other components as a menu\n * for manipulating participant state.\n *\n * @param {Props} props - The component's props.\n * @returns {Component}\n */\nexport default function VideoMenu(props: Props) {\n    return (\n        <ul\n            className = 'popupmenu'\n            id = { props.id }\n            onClick = { onClick }>\n            { props.children }\n        </ul>\n    );\n}\n\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport ConnectionIndicatorContent from\n    '../../../../features/connection-indicator/components/web/ConnectionIndicatorContent';\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconMenuThumb } from '../../../base/icons';\nimport { getLocalParticipant, getParticipantById, PARTICIPANT_ROLE } from '../../../base/participants';\nimport { Popover } from '../../../base/popover';\nimport { connect } from '../../../base/redux';\nimport { requestRemoteControl, stopController } from '../../../remote-control';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\nimport { renderConnectionStatus } from '../../actions.web';\n\nimport ConnectionStatusButton from './ConnectionStatusButton';\nimport MuteEveryoneElseButton from './MuteEveryoneElseButton';\nimport MuteEveryoneElsesVideoButton from './MuteEveryoneElsesVideoButton';\nimport { REMOTE_CONTROL_MENU_STATES } from './RemoteControlButton';\n\n\nimport {\n    GrantModeratorButton,\n    MuteButton,\n    MuteVideoButton,\n    KickButton,\n    PrivateMessageMenuButton,\n    RemoteControlButton,\n    VideoMenu,\n    VolumeSlider\n} from './';\n\ndeclare var $: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link RemoteVideoMenuTriggerButton}.\n */\ntype Props = {\n\n    /**\n     * Whether or not to display the kick button.\n     */\n    _disableKick: boolean,\n\n    /**\n     * Whether or not to display the remote mute buttons.\n     */\n    _disableRemoteMute: Boolean,\n\n    /**\n     * Whether or not to display the grant moderator button.\n     */\n    _disableGrantModerator: Boolean,\n\n    /**\n     * Whether or not the participant is a conference moderator.\n     */\n    _isModerator: boolean,\n\n    /**\n     * The position relative to the trigger the remote menu should display\n     * from. Valid values are those supported by AtlasKit\n     * {@code InlineDialog}.\n     */\n    _menuPosition: string,\n\n    /**\n     * Whether to display the Popover as a drawer.\n     */\n    _overflowDrawer: boolean,\n\n    /**\n     * The current state of the participant's remote control session.\n     */\n    _remoteControlState: number,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Gets a ref to the current component instance.\n     */\n    getRef: Function,\n\n    /**\n     * A value between 0 and 1 indicating the volume of the participant's\n     * audio element.\n     */\n    initialVolumeValue: ?number,\n\n    /**\n     * Callback to invoke when changing the level of the participant's\n     * audio element.\n     */\n    onVolumeChange: Function,\n\n    /**\n     * The ID for the participant on which the remote video menu will act.\n     */\n    participantID: string,\n\n    /**\n     * The ID for the participant on which the remote video menu will act.\n     */\n    _participantDisplayName: string,\n\n    /**\n     * Whether the popover should render the Connection Info stats.\n     */\n    _showConnectionInfo: Boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} for displaying an icon associated with opening the\n * the {@code VideoMenu}.\n *\n * @extends {Component}\n */\nclass RemoteVideoMenuTriggerButton extends Component<Props> {\n    /**\n     * Reference to the Popover instance.\n     */\n    popoverRef: Object;\n\n    /**\n     * Initializes a new RemoteVideoMenuTriggerButton instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.popoverRef = React.createRef();\n        this._onPopoverClose = this._onPopoverClose.bind(this);\n    }\n\n    /**\n     * Triggers showing the popover's context menu.\n     *\n     * @returns {void}\n     */\n    showContextMenu() {\n        if (this.popoverRef && this.popoverRef.current) {\n            this.popoverRef.current.showDialog();\n        }\n    }\n\n    /**\n     * Calls the ref(instance) getter.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (this.props.getRef) {\n            this.props.getRef(this);\n        }\n    }\n\n    /**\n     * Calls the ref(instance) getter.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this.props.getRef) {\n            this.props.getRef(null);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _showConnectionInfo, _participantDisplayName, participantID } = this.props;\n        const content = _showConnectionInfo\n            ? <ConnectionIndicatorContent participantId = { participantID } />\n            : this._renderRemoteVideoMenu();\n\n        if (!content) {\n            return null;\n        }\n\n        const username = _participantDisplayName;\n\n        return (\n            <Popover\n                content = { content }\n                onPopoverClose = { this._onPopoverClose }\n                overflowDrawer = { this.props._overflowDrawer }\n                position = { this.props._menuPosition }\n                ref = { this.popoverRef }>\n                {!isMobileBrowser() && (\n                    <span className = 'popover-trigger remote-video-menu-trigger'>\n                        <Icon\n                            ariaLabel = { this.props.t('dialog.remoteUserControls', { username }) }\n                            role = 'button'\n                            size = '1.4em'\n                            src = { IconMenuThumb }\n                            tabIndex = { 0 }\n                            title = { this.props.t('dialog.remoteUserControls', { username }) } />\n                    </span>\n                )}\n            </Popover>\n        );\n    }\n\n    _onPopoverClose: () => void;\n\n    /**\n     * Render normal context menu next time popover dialog opens.\n     *\n     * @returns {void}\n     */\n    _onPopoverClose() {\n        this.props.dispatch(renderConnectionStatus(false));\n    }\n\n    /**\n     * Creates a new {@code VideoMenu} with buttons for interacting with\n     * the remote participant.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderRemoteVideoMenu() {\n        const {\n            _disableKick,\n            _disableRemoteMute,\n            _disableGrantModerator,\n            _isModerator,\n            dispatch,\n            initialVolumeValue,\n            onVolumeChange,\n            _remoteControlState,\n            participantID\n        } = this.props;\n\n        const buttons = [];\n\n        if (_isModerator) {\n            if (!_disableRemoteMute) {\n                buttons.push(\n                    <MuteButton\n                        key = 'mute'\n                        participantID = { participantID } />\n                );\n                buttons.push(\n                    <MuteEveryoneElseButton\n                        key = 'mute-others'\n                        participantID = { participantID } />\n                );\n                buttons.push(\n                    <MuteVideoButton\n                        key = 'mute-video'\n                        participantID = { participantID } />\n                );\n                buttons.push(\n                    <MuteEveryoneElsesVideoButton\n                        key = 'mute-others-video'\n                        participantID = { participantID } />\n                );\n            }\n\n            if (!_disableGrantModerator) {\n                buttons.push(\n                    <GrantModeratorButton\n                        key = 'grant-moderator'\n                        participantID = { participantID } />\n                );\n            }\n\n            if (!_disableKick) {\n                buttons.push(\n                    <KickButton\n                        key = 'kick'\n                        participantID = { participantID } />\n                );\n            }\n        }\n\n        if (_remoteControlState) {\n            let onRemoteControlToggle = null;\n\n            if (_remoteControlState === REMOTE_CONTROL_MENU_STATES.STARTED) {\n                onRemoteControlToggle = () => dispatch(stopController(true));\n            } else if (_remoteControlState === REMOTE_CONTROL_MENU_STATES.NOT_STARTED) {\n                onRemoteControlToggle = () => dispatch(requestRemoteControl(participantID));\n            }\n\n            buttons.push(\n                <RemoteControlButton\n                    key = 'remote-control'\n                    onClick = { onRemoteControlToggle }\n                    participantID = { participantID }\n                    remoteControlState = { _remoteControlState } />\n            );\n        }\n\n        buttons.push(\n            <PrivateMessageMenuButton\n                key = 'privateMessage'\n                participantID = { participantID } />\n        );\n\n        if (isMobileBrowser()) {\n            buttons.push(\n                <ConnectionStatusButton\n                    participantId = { participantID } />\n            );\n        }\n\n        if (onVolumeChange && typeof initialVolumeValue === 'number' && !isNaN(initialVolumeValue)) {\n            buttons.push(\n                <VolumeSlider\n                    initialValue = { initialVolumeValue }\n                    key = 'volume-slider'\n                    onChange = { onVolumeChange } />\n            );\n        }\n\n        if (buttons.length > 0) {\n            return (\n                <VideoMenu id = { participantID }>\n                    { buttons }\n                </VideoMenu>\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code RemoteVideoMenuTriggerButton}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { participantID } = ownProps;\n    const localParticipant = getLocalParticipant(state);\n    const { remoteVideoMenu = {}, disableRemoteMute } = state['features/base/config'];\n    const { disableKick, disableGrantModerator } = remoteVideoMenu;\n    let _remoteControlState = null;\n    const participant = getParticipantById(state, participantID);\n    const _participantDisplayName = participant.name;\n    const _isRemoteControlSessionActive = participant?.remoteControlSessionStatus ?? false;\n    const _supportsRemoteControl = participant?.supportsRemoteControl ?? false;\n    const { active, controller } = state['features/remote-control'];\n    const { requestedParticipant, controlled } = controller;\n    const activeParticipant = requestedParticipant || controlled;\n    const { overflowDrawer } = state['features/toolbox'];\n    const { showConnectionInfo } = state['features/base/connection'];\n\n    if (_supportsRemoteControl\n            && ((!active && !_isRemoteControlSessionActive) || activeParticipant === participantID)) {\n        if (requestedParticipant === participantID) {\n            _remoteControlState = REMOTE_CONTROL_MENU_STATES.REQUESTING;\n        } else if (controlled) {\n            _remoteControlState = REMOTE_CONTROL_MENU_STATES.STARTED;\n        } else {\n            _remoteControlState = REMOTE_CONTROL_MENU_STATES.NOT_STARTED;\n        }\n    }\n\n    const currentLayout = getCurrentLayout(state);\n    let _menuPosition;\n\n    switch (currentLayout) {\n    case LAYOUTS.TILE_VIEW:\n        _menuPosition = 'left-start';\n        break;\n    case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n        _menuPosition = 'left-end';\n        break;\n    default:\n        _menuPosition = 'auto';\n    }\n\n    return {\n        _isModerator: Boolean(localParticipant?.role === PARTICIPANT_ROLE.MODERATOR),\n        _disableKick: Boolean(disableKick),\n        _disableRemoteMute: Boolean(disableRemoteMute),\n        _remoteControlState,\n        _menuPosition,\n        _overflowDrawer: overflowDrawer,\n        _participantDisplayName,\n        _disableGrantModerator: Boolean(disableGrantModerator),\n        _showConnectionInfo: showConnectionInfo\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RemoteVideoMenuTriggerButton));\n","/* @flow */\n\nimport React, { PureComponent } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { updateSettings } from '../../../base/settings';\n\nimport VideoMenuButton from './VideoMenuButton';\n\n/**\n * The type of the React {@code Component} props of {@link FlipLocalVideoButton}.\n */\ntype Props = {\n\n    /**\n     * The current local flip x status.\n     */\n    _localFlipX: boolean,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a button for flipping the local viedo.\n *\n * @extends Component\n */\nclass FlipLocalVideoButton extends PureComponent<Props> {\n    /**\n     * Initializes a new {@code FlipLocalVideoButton} instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {null|ReactElement}\n     */\n    render() {\n        const {\n            t\n        } = this.props;\n\n        return (\n            <VideoMenuButton\n                buttonText = { t('videothumbnail.flip') }\n                displayClass = 'fliplink'\n                id = 'flipLocalVideoButton'\n                onClick = { this._onClick } />\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Flips the local video.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { _localFlipX, dispatch } = this.props;\n\n        dispatch(updateSettings({\n            localFlipX: !_localFlipX\n        }));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code FlipLocalVideoButton}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { localFlipX } = state['features/base/settings'];\n\n    return {\n        _localFlipX: Boolean(localFlipX)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(FlipLocalVideoButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconMenuThumb } from '../../../base/icons';\nimport {\n    getLocalParticipant\n} from '../../../base/participants';\nimport { Popover } from '../../../base/popover';\nimport { connect } from '../../../base/redux';\nimport { getLocalVideoTrack } from '../../../base/tracks';\nimport ConnectionIndicatorContent from '../../../connection-indicator/components/web/ConnectionIndicatorContent';\nimport { getCurrentLayout, LAYOUTS } from '../../../video-layout';\nimport { renderConnectionStatus } from '../../actions.web';\n\nimport ConnectionStatusButton from './ConnectionStatusButton';\nimport FlipLocalVideoButton from './FlipLocalVideoButton';\nimport VideoMenu from './VideoMenu';\n\n\n/**\n * The type of the React {@code Component} props of\n * {@link LocalVideoMenuTriggerButton}.\n */\ntype Props = {\n\n    /**\n     * The redux dispatch function.\n     */\n     dispatch: Function,\n\n    /**\n     * Gets a ref to the current component instance.\n     */\n     getRef: Function,\n\n    /**\n     * The id of the local participant.\n     */\n    _localParticipantId: string,\n\n    /**\n     * The position relative to the trigger the local video menu should display\n     * from. Valid values are those supported by AtlasKit\n     * {@code InlineDialog}.\n     */\n    _menuPosition: string,\n\n    /**\n     * Whether to display the Popover as a drawer.\n     */\n    _overflowDrawer: boolean,\n\n    /**\n     * Whether to render the connection info pane.\n     */\n    _showConnectionInfo: boolean,\n\n    /**\n     * Shows/hides the local video flip button.\n     */\n    _showLocalVideoFlipButton: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React Component for displaying an icon associated with opening the\n * the video menu for the local participant.\n *\n * @extends {Component}\n */\nclass LocalVideoMenuTriggerButton extends Component<Props> {\n    /**\n     * Reference to the Popover instance.\n     */\n    popoverRef: Object;\n\n    /**\n     * Initializes a new LocalVideoMenuTriggerButton instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.popoverRef = React.createRef();\n        this._onPopoverClose = this._onPopoverClose.bind(this);\n    }\n\n    /**\n     * Triggers showing the popover's context menu.\n     *\n     * @returns {void}\n     */\n    showContextMenu() {\n        if (this.popoverRef && this.popoverRef.current) {\n            this.popoverRef.current.showDialog();\n        }\n    }\n\n    /**\n     * Calls the ref(instance) getter.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (this.props.getRef) {\n            this.props.getRef(this);\n        }\n    }\n\n    /**\n     * Calls the ref(instance) getter.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this.props.getRef) {\n            this.props.getRef(null);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _localParticipantId,\n            _menuPosition,\n            _showConnectionInfo,\n            _overflowDrawer,\n            _showLocalVideoFlipButton,\n            t\n        } = this.props;\n\n        const content = _showConnectionInfo\n            ? <ConnectionIndicatorContent participantId = { _localParticipantId } />\n            : (\n                <VideoMenu id = 'localVideoMenu'>\n                    <FlipLocalVideoButton />\n                    { isMobileBrowser()\n                            && <ConnectionStatusButton participantId = { _localParticipantId } />\n                    }\n                </VideoMenu>\n            );\n\n        return (\n            isMobileBrowser() || _showLocalVideoFlipButton\n                ? <Popover\n                    content = { content }\n                    onPopoverClose = { this._onPopoverClose }\n                    overflowDrawer = { _overflowDrawer }\n                    position = { _menuPosition }\n                    ref = { this.popoverRef }>\n                    {!isMobileBrowser() && (\n                        <span\n                            className = 'popover-trigger local-video-menu-trigger'>\n                            <Icon\n                                ariaLabel = { t('dialog.localUserControls') }\n                                role = 'button'\n                                size = '1em'\n                                src = { IconMenuThumb }\n                                tabIndex = { 0 }\n                                title = { t('dialog.localUserControls') } />\n                        </span>\n                    )}\n                </Popover>\n                : null\n        );\n    }\n\n    _onPopoverClose: () => void;\n\n    /**\n     * Render normal context menu next time popover dialog opens.\n     *\n     * @returns {void}\n     */\n    _onPopoverClose() {\n        this.props.dispatch(renderConnectionStatus(false));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code LocalVideoMenuTriggerButton}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const currentLayout = getCurrentLayout(state);\n    const localParticipant = getLocalParticipant(state);\n    const { disableLocalVideoFlip } = state['features/base/config'];\n    const videoTrack = getLocalVideoTrack(state['features/base/tracks']);\n    const { overflowDrawer } = state['features/toolbox'];\n    const { showConnectionInfo } = state['features/base/connection'];\n\n    let _menuPosition;\n\n    switch (currentLayout) {\n    case LAYOUTS.TILE_VIEW:\n        _menuPosition = 'left-start';\n        break;\n    case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n        _menuPosition = 'left-end';\n        break;\n    default:\n        _menuPosition = 'auto';\n    }\n\n    return {\n        _menuPosition,\n        _showLocalVideoFlipButton: !disableLocalVideoFlip && videoTrack?.videoType !== 'desktop',\n        _overflowDrawer: overflowDrawer,\n        _localParticipantId: localParticipant.id,\n        _showConnectionInfo: showConnectionInfo\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LocalVideoMenuTriggerButton));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconVolume } from '../../../base/icons';\nimport { VOLUME_SLIDER_SCALE } from '../../constants';\n\n/**\n * The type of the React {@code Component} props of {@link VolumeSlider}.\n */\ntype Props = {\n\n    /**\n     * The value of the audio slider should display at when the component first\n     * mounts. Changes will be stored in state. The value should be a number\n     * between 0 and 1.\n     */\n    initialValue: number,\n\n    /**\n     * The callback to invoke when the audio slider value changes.\n     */\n    onChange: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link VolumeSlider}.\n */\ntype State = {\n\n    /**\n     * The volume of the participant's audio element. The value will\n     * be represented by a slider.\n     */\n    volumeLevel: number\n};\n\n/**\n * Implements a React {@link Component} which displays an input slider for\n * adjusting the local volume of a remote participant.\n *\n * @extends Component\n */\nclass VolumeSlider extends Component<Props, State> {\n    /**\n     * Initializes a new {@code VolumeSlider} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            volumeLevel: (props.initialValue || 0) * VOLUME_SLIDER_SCALE\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVolumeChange = this._onVolumeChange.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <li\n                aria-label = { this.props.t('volumeSlider') }\n                className = 'popupmenu__item'>\n                <div className = 'popupmenu__contents'>\n                    <span className = 'popupmenu__icon'>\n                        <Icon src = { IconVolume } />\n                    </span>\n                    <div className = 'popupmenu__slider_container'>\n                        <input\n                            aria-valuemax = { VOLUME_SLIDER_SCALE }\n                            aria-valuemin = { 0 }\n                            aria-valuenow = { this.state.volumeLevel }\n                            className = 'popupmenu__slider'\n                            max = { VOLUME_SLIDER_SCALE }\n                            min = { 0 }\n                            onChange = { this._onVolumeChange }\n                            tabIndex = { 0 }\n                            type = 'range'\n                            value = { this.state.volumeLevel } />\n                    </div>\n                </div>\n            </li>\n        );\n    }\n\n    _onVolumeChange: (Object) => void;\n\n    /**\n     * Sets the internal state of the volume level for the volume slider.\n     * Invokes the prop onVolumeChange to notify of volume changes.\n     *\n     * @param {Object} event - DOM Event for slider change.\n     * @private\n     * @returns {void}\n     */\n    _onVolumeChange(event) {\n        const volumeLevel = event.currentTarget.value;\n\n        this.props.onChange(volumeLevel / VOLUME_SLIDER_SCALE);\n        this.setState({ volumeLevel });\n    }\n}\n\nexport default translate(VolumeSlider);\n","// @flow\n\n/**\n * Used to modify initialValue, which is expected to be a decimal value between\n * 0 and 1, and converts it to a number representable by an input slider, which\n * recognizes whole numbers.\n */\nexport const VOLUME_SLIDER_SCALE = 100;\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED,\n    SET_TILE_VIEW\n} from './actionTypes';\nimport { shouldDisplayTileView } from './functions';\n\n/**\n * Creates a (redux) action which signals that the list of known remote participants\n * with screen shares has changed.\n *\n * @param {string} participantIds - The remote participants which currently have active\n * screen share streams.\n * @returns {{\n *     type: SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED,\n *     participantId: string\n * }}\n */\nexport function setRemoteParticipantsWithScreenShare(participantIds: Array<string>) {\n    return {\n        type: SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED,\n        participantIds\n    };\n}\n\n/**\n * Creates a (redux) action which signals to set the UI layout to be tiled view\n * or not.\n *\n * @param {boolean} enabled - Whether or not tile view should be shown.\n * @returns {{\n *     type: SET_TILE_VIEW,\n *     enabled: ?boolean\n * }}\n */\nexport function setTileView(enabled: ?boolean) {\n    return {\n        type: SET_TILE_VIEW,\n        enabled\n    };\n}\n\n/**\n * Creates a (redux) action which signals either to exit tile view if currently\n * enabled or enter tile view if currently disabled.\n *\n * @returns {Function}\n */\nexport function toggleTileView() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const tileViewActive = shouldDisplayTileView(getState());\n\n        dispatch(setTileView(!tileViewActive));\n    };\n}\n","// @flow\n\n/**\n * The type of the Redux action which signals that a suspend was detected.\n *\n * {\n *     type: SUSPEND_DETECTED\n * }\n * @public\n */\nexport const SUSPEND_DETECTED = 'SUSPEND_DETECTED';\n\n/**\n * The type of the Redux action which signals that a transport needs to be stored.\n *\n * {\n *     type: SET_TRANSPORT\n * }\n * @public\n */\nexport const SET_TRANSPORT = 'SET_TRANSPORT';\n","// @flow\n\n/**\n * Type of action which sets the current state of screen audio sharing.\n *\n * {\n *     type: SET_SCREEN_AUDIO_SHARE_STATE,\n *     isSharingAudio: boolean\n * }\n */\nexport const SET_SCREEN_AUDIO_SHARE_STATE = 'SET_SCREEN_AUDIO_SHARE_STATE';\n\n/**\n * Type of action which sets the capture frame rate for screenshare.\n * {\n *      type: SET_SCREENSHARE_CAPTURE_FRAME_RATE,\n *      captureFrameRate: number\n * }\n */\nexport const SET_SCREENSHARE_CAPTURE_FRAME_RATE = 'SET_SCREENSHARE_CAPTURE_FRAME_RATE';\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\nimport { MEDIA_TYPE } from '../base/media';\nimport { getTrackByMediaTypeAndParticipant } from '../base/tracks';\n\nimport { UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT } from './actionTypes';\n\nexport * from './actions.any';\n\n/**\n* Captures a screenshot of the video displayed on the large video.\n*\n* @returns {Function}\n*/\nexport function captureLargeVideoScreenshot() {\n    return (dispatch: Dispatch<any>, getState: Function): Promise<string> => {\n        const state = getState();\n        const largeVideo = state['features/large-video'];\n        const promise = Promise.resolve();\n\n        if (!largeVideo) {\n            return promise;\n        }\n        const tracks = state['features/base/tracks'];\n        const participantTrack = getTrackByMediaTypeAndParticipant(tracks, MEDIA_TYPE.VIDEO, largeVideo.participantId);\n\n        // Participants that join the call video muted do not have a jitsiTrack attached.\n        if (!(participantTrack && participantTrack.jitsiTrack)) {\n            return promise;\n        }\n        const videoStream = participantTrack.jitsiTrack.getOriginalStream();\n\n        if (!videoStream) {\n            return promise;\n        }\n\n        // Get the video element for the large video, cast HTMLElement to HTMLVideoElement to make flow happy.\n        /* eslint-disable-next-line no-extra-parens*/\n        const videoElement = ((document.getElementById('largeVideo'): any): HTMLVideoElement);\n\n        if (!videoElement) {\n            return promise;\n        }\n\n        // Create a HTML canvas and draw video on to the canvas.\n        const [ track ] = videoStream.getVideoTracks();\n        const { height, width } = track.getSettings() ?? track.getConstraints();\n        const canvasElement = document.createElement('canvas');\n        const ctx = canvasElement.getContext('2d');\n\n        canvasElement.style.display = 'none';\n        canvasElement.height = parseInt(height, 10);\n        canvasElement.width = parseInt(width, 10);\n        ctx.drawImage(videoElement, 0, 0);\n        const dataURL = canvasElement.toDataURL('image/png', 1.0);\n\n        // Cleanup.\n        ctx.clearRect(0, 0, canvasElement.width, canvasElement.height);\n        canvasElement.remove();\n\n        return Promise.resolve(dataURL);\n    };\n}\n\n/**\n * Resizes the large video container based on the dimensions provided.\n *\n * @param {number} width - Width that needs to be applied on the large video container.\n * @param {number} height - Height that needs to be applied on the large video container.\n * @returns {Function}\n */\nexport function resizeLargeVideo(width: number, height: number) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const largeVideo = state['features/large-video'];\n\n        if (largeVideo) {\n            const largeVideoContainer = VideoLayout.getLargeVideo();\n\n            largeVideoContainer.updateContainerSize(width, height);\n            largeVideoContainer.resize();\n        }\n    };\n}\n\n/**\n * Updates the last media event received for the large video.\n *\n * @param {string} name - The current media event name for the video.\n * @returns {{\n *     type: UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT,\n *     name: string\n * }}\n */\nexport function updateLastLargeVideoMediaEvent(name: String) {\n    return {\n        type: UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT,\n        name\n    };\n}\n","import { useState, useRef, useEffect } from 'react';\n\nfunction areInputsEqual(newInputs, lastInputs) {\n  if (newInputs.length !== lastInputs.length) {\n    return false;\n  }\n\n  for (var i = 0; i < newInputs.length; i++) {\n    if (newInputs[i] !== lastInputs[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction useMemoOne(getResult, inputs) {\n  var initial = useState(function () {\n    return {\n      inputs: inputs,\n      result: getResult()\n    };\n  })[0];\n  var isFirstRun = useRef(true);\n  var committed = useRef(initial);\n  var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual(inputs, committed.current.inputs));\n  var cache = useCache ? committed.current : {\n    inputs: inputs,\n    result: getResult()\n  };\n  useEffect(function () {\n    isFirstRun.current = false;\n    committed.current = cache;\n  }, [cache]);\n  return cache.result;\n}\nfunction useCallbackOne(callback, inputs) {\n  return useMemoOne(function () {\n    return callback;\n  }, inputs);\n}\nvar useMemo = useMemoOne;\nvar useCallback = useCallbackOne;\n\nexport { useCallback, useCallbackOne, useMemo, useMemoOne };\n","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nvar AnalyticsEvent = /*#__PURE__*/function () {\n  function AnalyticsEvent(props) {\n    var _this = this;\n\n    _classCallCheck(this, AnalyticsEvent);\n\n    _defineProperty(this, \"clone\", function () {\n      // just a shallow clone, don't change sub refs unless you want to\n      // affect the original's too\n      var payload = _objectSpread({}, _this.payload);\n\n      return new AnalyticsEvent({\n        payload: payload\n      });\n    });\n\n    this.payload = props.payload;\n  }\n\n  _createClass(AnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (typeof updater === 'function') {\n        this.payload = updater(this.payload);\n      }\n\n      if (_typeof(updater) === 'object') {\n        this.payload = _objectSpread(_objectSpread({}, this.payload), updater);\n      }\n\n      return this;\n    }\n  }]);\n\n  return AnalyticsEvent;\n}();\n\nexport { AnalyticsEvent as default };","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport AnalyticsEvent from './AnalyticsEvent';\n\nvar UIAnalyticsEvent = /*#__PURE__*/function (_AnalyticsEvent) {\n  _inherits(UIAnalyticsEvent, _AnalyticsEvent);\n\n  var _super = _createSuper(UIAnalyticsEvent);\n\n  function UIAnalyticsEvent(props) {\n    var _this;\n\n    _classCallCheck(this, UIAnalyticsEvent);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"clone\", function () {\n      if (_this.hasFired) {\n        if (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n          // eslint-disable-next-line no-console\n          console.warn(\"Cannot clone an event after it's been fired.\");\n        }\n\n        return null;\n      }\n\n      var context = _toConsumableArray(_this.context);\n\n      var handlers = _toConsumableArray(_this.handlers);\n      /**\n       * A hacky \"deep clone\" of the object. This is limited in that it wont\n       * support functions, regexs, Maps, Sets, etc, but none of those need to\n       * be represented in our payload.\n       */\n\n\n      var payload = JSON.parse(JSON.stringify(_this.payload));\n      return new UIAnalyticsEvent({\n        context: context,\n        handlers: handlers,\n        payload: payload\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"fire\", function (channel) {\n      if (_this.hasFired) {\n        if (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n          // eslint-disable-next-line no-console\n          console.warn('Cannot fire an event twice.');\n        }\n\n        return;\n      }\n\n      _this.handlers.forEach(function (handler) {\n        return handler(_assertThisInitialized(_this), channel);\n      });\n\n      _this.hasFired = true;\n    });\n\n    _this.context = props.context || [];\n    _this.handlers = props.handlers || [];\n    _this.hasFired = false;\n    return _this;\n  }\n\n  _createClass(UIAnalyticsEvent, [{\n    key: \"update\",\n    value: function update(updater) {\n      if (this.hasFired) {\n        if (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n          // eslint-disable-next-line no-console\n          console.warn(\"Cannot update an event after it's been fired.\");\n        }\n\n        return this;\n      }\n\n      return _get(_getPrototypeOf(UIAnalyticsEvent.prototype), \"update\", this).call(this, updater);\n    }\n  }]);\n\n  return UIAnalyticsEvent;\n}(AnalyticsEvent);\n\nexport { UIAnalyticsEvent as default };","import { useCallbackOne } from 'use-memo-one';\nimport UIAnalyticsEvent from '../events/UIAnalyticsEvent';\nimport { useAnalyticsContext } from './useAnalyticsContext';\nexport function useAnalyticsEvents() {\n  var analyticsContext = useAnalyticsContext();\n  var createAnalyticsEvent = useCallbackOne(function (payload) {\n    return new UIAnalyticsEvent({\n      context: analyticsContext.getAtlaskitAnalyticsContext(),\n      handlers: analyticsContext.getAtlaskitAnalyticsEventHandlers(),\n      payload: payload\n    });\n  }, [analyticsContext]);\n  return {\n    createAnalyticsEvent: createAnalyticsEvent\n  };\n}","// @flow\n\nimport React, { Component, Fragment } from 'react';\n\nimport { statsEmitter } from '../../../connection-indicator';\nimport { getLocalParticipant } from '../../participants';\nimport { connect } from '../../redux';\nimport { isTestModeEnabled } from '../functions';\n\nimport { TestHint } from './index';\n\n/**\n * Defines the TestConnectionInfo's properties.\n */\ntype Props = {\n\n    /**\n     * The JitsiConference's connection state. It's the lib-jitsi-meet's event\n     * name converted to a string directly. At the time of this writing these\n     * are the possible values:\n     * 'conference.connectionEstablished'\n     * 'conference.connectionInterrupted'\n     * 'conference.connectionRestored'\n     */\n    _conferenceConnectionState: string,\n\n    /**\n     * This will be a boolean converted to a string. The value will be 'true'\n     * once the conference is joined (the XMPP MUC room to be specific).\n     */\n    _conferenceJoinedState: string,\n\n    /**\n     * The local participant's ID. Required to be able to observe the local RTP\n     * stats.\n     */\n    _localUserId: string,\n\n    /**\n     * The local participant's role.\n     */\n    _localUserRole: string,\n\n    /**\n     * Indicates whether or not the test mode is currently on. Otherwise the\n     * TestConnectionInfo component will not render.\n     */\n    _testMode: boolean\n}\n\n/**\n * Describes the TestConnectionInfo's state.\n */\ntype State = {\n\n    /**\n     * The RTP stats section.\n     */\n    stats: {\n\n        /**\n         * The local bitrate.\n         */\n        bitrate: {\n\n            /**\n             * The local download RTP bitrate.\n             */\n            download: number,\n\n            /**\n             * The local upload RTP bitrate.\n             */\n            upload: number\n        }\n    }\n}\n\n/**\n * The component will expose some of the app state to the jitsi-meet-torture\n * through the UI accessibility layer which is visible to the tests. The Web\n * tests currently will execute JavaScript and access globals variables to learn\n * this information, but there's no such option on React Native(maybe that's\n * a good thing).\n */\nclass TestConnectionInfo extends Component<Props, State> {\n    _onStatsUpdated: Object => void;\n\n    /**\n     * Initializes new <tt>TestConnectionInfo</tt> instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onStatsUpdated = this._onStatsUpdated.bind(this);\n\n        this.state = {\n            stats: {\n                bitrate: {\n                    download: 0,\n                    upload: 0\n                }\n            }\n        };\n    }\n\n    /**\n     * The {@link statsEmitter} callback hoked up for the local participant.\n     *\n     * @param {Object} stats - These are the RTP stats. Look in\n     * the lib-jitsi-meet for more details on the actual structure or add\n     * a console print and figure out there.\n     * @returns {void}\n     * @private\n     */\n    _onStatsUpdated(stats = {}) {\n        this.setState({\n            stats: {\n                bitrate: {\n                    download: stats.bitrate?.download || 0,\n                    upload: stats.bitrate?.upload || 0\n                }\n            }\n        });\n    }\n\n    /**\n     * Starts listening for the local RTP stat updates.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidMount() {\n        statsEmitter.subscribeToClientStats(\n            this.props._localUserId, this._onStatsUpdated);\n    }\n\n    /**\n     * Updates which user's stats are being listened to (the local participant's\n     * id changes).\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps._localUserId !== this.props._localUserId) {\n            statsEmitter.unsubscribeToClientStats(\n                prevProps._localUserId, this._onStatsUpdated);\n            statsEmitter.subscribeToClientStats(\n                this.props._localUserId, this._onStatsUpdated);\n        }\n    }\n\n    /**\n     * Removes the local stats listener.\n     *\n     * @private\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        statsEmitter.unsubscribeToClientStats(\n            this.props._localUserId, this._onStatsUpdated);\n    }\n\n    /**\n     * Renders the component if the app is currently running in the test mode\n     * (config.testing.testMode == true).\n     *\n     * @returns {ReactElement|null}\n     */\n    render() {\n        if (!this.props._testMode) {\n            return null;\n        }\n\n        return (\n            <Fragment accessible = { false } >\n                <TestHint\n                    id = 'org.jitsi.meet.conference.connectionState'\n                    value = { this.props._conferenceConnectionState } />\n                <TestHint\n                    id = 'org.jitsi.meet.conference.joinedState'\n                    value = { this.props._conferenceJoinedState } />\n                <TestHint\n                    id = 'org.jitsi.meet.conference.grantModeratorAvailable'\n                    value = { true } />\n                <TestHint\n                    id = 'org.jitsi.meet.conference.localParticipantRole'\n                    value = { this.props._localUserRole } />\n                <TestHint\n                    id = 'org.jitsi.meet.stats.rtp'\n                    value = { JSON.stringify(this.state.stats) } />\n            </Fragment>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated TestConnectionInfo's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const conferenceJoined\n        = Boolean(state['features/base/conference'].conference);\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        _conferenceConnectionState: state['features/testing'].connectionState,\n        _conferenceJoinedState: conferenceJoined.toString(),\n        _localUserId: localParticipant?.id,\n        _localUserRole: localParticipant?.role,\n        _testMode: isTestModeEnabled(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(TestConnectionInfo);\n","import EventEmitter from 'events';\n\n/**\n * Dummy implementation of Storage interface.\n */\nclass DummyLocalStorage extends EventEmitter {\n\n    /**\n     * The object used for storage.\n     */\n    _storage = {};\n\n    /**\n     * Empties all keys out of the storage.\n     *\n     * @returns {void}\n     */\n    clear() {\n        this._storage = {};\n    }\n\n    /**\n     * Returns the number of data items stored in the Storage object.\n     *\n     * @returns {number} - The number of data items stored in the Storage object.\n     */\n    get length() {\n        return Object.keys(this._storage).length;\n    }\n\n    /**\n     * Will return that key's value associated to the passed key name.\n     *\n     * @param {string} keyName - The key name.\n     * @returns {*} - The key value.\n     */\n    getItem(keyName) {\n        return this._storage[keyName];\n    }\n\n    /**\n     * When passed a key name and value, will add that key to the storage,\n     * or update that key's value if it already exists.\n     *\n     * @param {string} keyName - The key name.\n     * @param {*} keyValue - The key value.\n     * @returns {void}\n     */\n    setItem(keyName, keyValue) {\n        this._storage[keyName] = keyValue;\n    }\n\n    /**\n     * When passed a key name, will remove that key from the storage.\n     *\n     * @param {string} keyName - The key name.\n     * @returns {void}\n     */\n    removeItem(keyName) {\n        delete this._storage[keyName];\n    }\n\n    /**\n     * When passed a number n, this method will return the name of the nth key in the storage.\n     *\n     * @param {number} idx - The index of the key.\n     * @returns {string} - The nth key name.\n     */\n    key(n) {\n        const keys = Object.keys(this._storage);\n\n        if (keys.length <= n) {\n            return undefined;\n        }\n\n        return keys[n];\n    }\n\n    /**\n     * Serializes the content of the storage.\n     *\n     * @returns {string} - The serialized content.\n     */\n    serialize() {\n        return JSON.stringify(this._storage);\n    }\n}\n\n/**\n * Wrapper class for browser's local storage object.\n */\nclass JitsiLocalStorage extends EventEmitter {\n    /**\n     * @constructor\n     * @param {Storage} storage browser's local storage object.\n     */\n    constructor() {\n        super();\n\n        try {\n            this._storage = window.localStorage;\n            this._localStorageDisabled = false;\n        } catch (ignore) {\n            // localStorage throws an exception.\n        }\n\n        if (!this._storage) { // Handles the case when window.localStorage is undefined or throws an exception.\n            console.warn('Local storage is disabled.');\n            this._storage = new DummyLocalStorage();\n            this._localStorageDisabled = true;\n        }\n    }\n\n    /**\n     * Returns true if window.localStorage is disabled and false otherwise.\n     *\n     * @returns {boolean} - True if window.localStorage is disabled and false otherwise.\n     */\n    isLocalStorageDisabled() {\n        return this._localStorageDisabled;\n    }\n\n    /**\n     * Empties all keys out of the storage.\n     *\n     * @returns {void}\n     */\n    clear() {\n        this._storage.clear();\n        this.emit('changed');\n    }\n\n    /**\n     * Returns the number of data items stored in the Storage object.\n     *\n     * @returns {number} - The number of data items stored in the Storage object.\n     */\n    get length() {\n        return this._storage.length;\n    }\n\n    /**\n     * Returns that passed key's value.\n     * @param {string} keyName the name of the key you want to retrieve\n     * the value of.\n     * @returns {String|null} the value of the key. If the key does not exist,\n     * null is returned.\n     */\n    getItem(keyName) {\n        return this._storage.getItem(keyName);\n    }\n\n    /**\n     * Adds a key to the storage, or update key's value if it already exists.\n     * @param {string} keyName - the name of the key you want to create/update.\n     * @param {string} keyValue - the value you want to give the key you are\n     * creating/updating.\n     * @param {boolean} dontEmitChangedEvent - If true a changed event won't be emitted.\n     */\n    setItem(keyName, keyValue, dontEmitChangedEvent = false) {\n        this._storage.setItem(keyName, keyValue);\n\n        if (!dontEmitChangedEvent) {\n            this.emit('changed');\n        }\n    }\n\n    /**\n     * Remove a key from the storage.\n     * @param {string} keyName the name of the key you want to remove.\n     */\n    removeItem(keyName) {\n        this._storage.removeItem(keyName);\n        this.emit('changed');\n    }\n\n    /**\n     * Returns the name of the nth key in the list, or null if n is greater\n     * than or equal to the number of key/value pairs in the object.\n     *\n     * @param {number} i - The index of the key in the list.\n     * @returns {string}\n     */\n    key(i) {\n        return this._storage.key(i);\n    }\n\n    /**\n     * Serializes the content of the storage.\n     *\n     * @returns {string} - The serialized content.\n     */\n    serialize() {\n        if (this.isLocalStorageDisabled()) {\n            return this._storage.serialize();\n        }\n\n        const length = this._storage.length;\n        const localStorageContent = {};\n\n        for (let i = 0; i < length; i++) {\n            const key = this._storage.key(i);\n\n            localStorageContent[key] = this._storage.getItem(key);\n        }\n\n        return JSON.stringify(localStorageContent);\n    }\n}\n\nexport const jitsiLocalStorage = new JitsiLocalStorage();\n","/**\n * The command type for updating a participant's avatar URL.\n *\n * @type {string}\n */\nexport const AVATAR_URL_COMMAND = 'avatar-url';\n\n/**\n * The command type for updating a participant's e-mail address.\n *\n * @type {string}\n */\nexport const EMAIL_COMMAND = 'email';\n\n/**\n * The name of the {@code JitsiConference} property which identifies the URL of\n * the conference represented by the {@code JitsiConference} instance.\n *\n * TODO It was introduced in a moment of desperation. Jitsi Meet SDK for Android\n * and iOS needs to deliver events from the JavaScript side where they originate\n * to the Java and Objective-C sides, respectively, where they are to be\n * handled. The URL of the {@code JitsiConference} was chosen as the identifier\n * because the Java and Objective-C sides join by URL through their respective\n * loadURL methods. But features/base/connection's {@code locationURL} is not\n * guaranteed at the time of this writing to match the {@code JitsiConference}\n * instance when the events are to be fired. Patching {@code JitsiConference}\n * from the outside is not cool but it should suffice for now.\n */\nexport const JITSI_CONFERENCE_URL_KEY = Symbol('url');\n","/**\n * The type of the action which signals feedback was closed without submitting.\n *\n * {\n *     type: CANCEL_FEEDBACK,\n *     message: string,\n *     score: number\n * }\n */\nexport const CANCEL_FEEDBACK = 'CANCEL_FEEDBACK';\n\n/**\n * The type of the action which signals feedback failed to be recorded.\n *\n * {\n *     type: SUBMIT_FEEDBACK_ERROR\n *     error: string\n * }\n */\nexport const SUBMIT_FEEDBACK_ERROR = 'SUBMIT_FEEDBACK_ERROR';\n\n/**\n * The type of the action which signals feedback has been recorded.\n *\n * {\n *     type: SUBMIT_FEEDBACK_SUCCESS,\n * }\n */\nexport const SUBMIT_FEEDBACK_SUCCESS = 'SUBMIT_FEEDBACK_SUCCESS';\n","/**\n * Action to signal that the local client has started to perform recording,\n * (as in: {@code RecordingAdapter} is actively collecting audio data).\n *\n * {\n *     type: LOCAL_RECORDING_ENGAGED,\n *     recordingEngagedAt: Date\n * }\n */\nexport const LOCAL_RECORDING_ENGAGED = 'LOCAL_RECORDING_ENGAGED';\n\n/**\n * Action to signal that the local client has stopped recording,\n * (as in: {@code RecordingAdapter} is no longer collecting audio data).\n *\n * {\n *     type: LOCAL_RECORDING_UNENGAGED\n * }\n */\nexport const LOCAL_RECORDING_UNENGAGED = 'LOCAL_RECORDING_UNENGAGED';\n\n/**\n * Action to update {@code LocalRecordingInfoDialog} with stats from all\n * clients.\n *\n * {\n *     type: LOCAL_RECORDING_STATS_UPDATE,\n *     stats: Object\n * }\n */\nexport const LOCAL_RECORDING_STATS_UPDATE\n    = 'LOCAL_RECORDING_STATS_UPDATE';\n","\n// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconFeedback } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { openFeedbackDialog } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@link FeedbackButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n     _conference: Object,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Implementation of a button for opening feedback dialog.\n */\nclass FeedbackButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.feedback';\n    icon = IconFeedback;\n    label = 'toolbar.feedback';\n    tooltip = 'toolbar.feedback';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _conference, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('feedback'));\n        dispatch(openFeedbackDialog(_conference));\n    }\n}\n\nconst mapStateToProps = state => {\n    return {\n        _conference: state['features/base/conference'].conference\n    };\n};\n\nexport default translate(connect(mapStateToProps)(FeedbackButton));\n","import styled, { css } from 'styled-components';\nimport { codeFontFamily, fontSize } from '@atlaskit/theme/constants';\nimport { placeholderText } from '@atlaskit/theme/colors';\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], placeholderText); // Safari puts on some difficult to remove styles, mainly for disabled inputs\n// but we want full control so need to override them in all cases\n\nvar overrideSafariDisabledStyles = \"\\n  -webkit-text-fill-color: unset;\\n  -webkit-opacity: 1;\\n\";\n\nvar getMinimumRowsHeight = function getMinimumRowsHeight(_ref) {\n  var minimumRows = _ref.minimumRows;\n  return \"min-height: \".concat(20 * minimumRows, \"px;\");\n};\n\nvar getResizeStyles = function getResizeStyles(_ref2) {\n  var enableResize = _ref2.enableResize;\n\n  if (!enableResize) {\n    return \"resize: none;\";\n  }\n\n  if (enableResize === 'horizontal') {\n    return \"resize: horizontal;\";\n  }\n\n  if (enableResize === 'vertical') {\n    return \"resize: vertical;\";\n  }\n\n  return null;\n};\n\nvar TextArea = styled.textarea.withConfig({\n  displayName: \"TextArea\",\n  componentId: \"l4fqfr-0\"\n})([\"\\n  background: transparent;\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: inherit;\\n  font-family: \", \";\\n  font-size: \", \"px;\\n  line-height: \", \";\\n  min-width: 0;\\n  outline: none;\\n  width: 100%;\\n\\n  [disabled] {\\n    \", \";\\n  }\\n\\n  \", \" \", \"\\n\\n  &::-ms-clear {\\n    display: none;\\n  }\\n\\n  &:invalid {\\n    box-shadow: none;\\n  }\\n\\n  \", \";\\n\"], function (p) {\n  return p.isMonospaced ? codeFontFamily() : 'inherit';\n}, fontSize, 20 / fontSize(), overrideSafariDisabledStyles, getMinimumRowsHeight, getResizeStyles, getPlaceholderStyle(getPlaceholderColor));\nexport default TextArea;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Base, { Label } from '@atlaskit/field-base';\nimport { name as packageName, version as packageVersion } from './version.json';\nimport TextArea from './styled/TextArea';\nvar Wrapper = styled.div.withConfig({\n  displayName: \"FieldTextAreaStateless__Wrapper\",\n  componentId: \"sc-159dr31-0\"\n})([\"\\n  flex: 1 1 100%;\\n\"]);\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('@atlaskit/field-text-area has been deprecated. Please use the @atlaskit/textarea package instead.');\n}\n\nvar FieldTextAreaStateless = /*#__PURE__*/function (_Component) {\n  _inherits(FieldTextAreaStateless, _Component);\n\n  var _super = _createSuper(FieldTextAreaStateless);\n\n  function FieldTextAreaStateless() {\n    var _this;\n\n    _classCallCheck(this, FieldTextAreaStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"input\", void 0);\n\n    return _this;\n  }\n\n  _createClass(FieldTextAreaStateless, [{\n    key: \"focus\",\n    value: function focus() {\n      this.input.focus();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          autoFocus = _this$props.autoFocus,\n          compact = _this$props.compact,\n          disabled = _this$props.disabled,\n          id = _this$props.id,\n          invalidMessage = _this$props.invalidMessage,\n          isInvalid = _this$props.isInvalid,\n          isLabelHidden = _this$props.isLabelHidden,\n          isMonospaced = _this$props.isMonospaced,\n          isReadOnly = _this$props.isReadOnly,\n          isSpellCheckEnabled = _this$props.isSpellCheckEnabled,\n          label = _this$props.label,\n          maxLength = _this$props.maxLength,\n          minimumRows = _this$props.minimumRows,\n          name = _this$props.name,\n          onBlur = _this$props.onBlur,\n          onChange = _this$props.onChange,\n          onFocus = _this$props.onFocus,\n          placeholder = _this$props.placeholder,\n          enableResize = _this$props.enableResize,\n          required = _this$props.required,\n          shouldFitContainer = _this$props.shouldFitContainer,\n          value = _this$props.value,\n          isValidationHidden = _this$props.isValidationHidden;\n      return /*#__PURE__*/React.createElement(Wrapper, null, !isLabelHidden && /*#__PURE__*/React.createElement(Label, {\n        htmlFor: id,\n        isDisabled: disabled,\n        isLabelHidden: isLabelHidden,\n        isRequired: required,\n        label: label\n      }), /*#__PURE__*/React.createElement(Base, {\n        isCompact: compact,\n        isDisabled: disabled,\n        isInvalid: isInvalid,\n        isReadOnly: isReadOnly,\n        isRequired: required,\n        invalidMessage: invalidMessage,\n        isFitContainerWidthEnabled: shouldFitContainer,\n        isValidationHidden: isValidationHidden\n      }, /*#__PURE__*/React.createElement(TextArea, {\n        disabled: disabled,\n        readOnly: isReadOnly,\n        name: name,\n        placeholder: placeholder,\n        value: value,\n        required: required,\n        isMonospaced: isMonospaced,\n        minimumRows: minimumRows,\n        enableResize: enableResize,\n        onBlur: onBlur,\n        onChange: onChange,\n        onFocus: onFocus,\n        id: id,\n        autoFocus: autoFocus,\n        spellCheck: isSpellCheckEnabled,\n        maxLength: maxLength,\n        innerRef: function innerRef(input) {\n          _this2.input = input;\n        }\n      })));\n    }\n  }]);\n\n  return FieldTextAreaStateless;\n}(Component);\n\n_defineProperty(FieldTextAreaStateless, \"defaultProps\", {\n  compact: false,\n  disabled: false,\n  isReadOnly: false,\n  required: false,\n  isInvalid: false,\n  label: '',\n  type: 'text',\n  isSpellCheckEnabled: true,\n  minimumRows: 1,\n  isValidationHidden: false\n});\n\nexport { FieldTextAreaStateless as FieldTextAreaStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'fieldTextArea',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'textArea',\n    attributes: {\n      componentName: 'fieldTextArea',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'textArea',\n    attributes: {\n      componentName: 'fieldTextArea',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(FieldTextAreaStateless));","// @flow\n\nimport { FieldTextAreaStateless } from '@atlaskit/field-text-area';\nimport StarIcon from '@atlaskit/icon/glyph/star';\nimport StarFilledIcon from '@atlaskit/icon/glyph/star-filled';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createFeedbackOpenEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { Dialog } from '../../base/dialog';\nimport { isMobileBrowser } from '../../base/environment/utils';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { cancelFeedback, submitFeedback } from '../actions';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\nconst scoreAnimationClass\n    = interfaceConfig.ENABLE_FEEDBACK_ANIMATION ? 'shake-rotate' : '';\n\n/**\n * The scores to display for selecting. The score is the index in the array and\n * the value of the index is a translation key used for display in the dialog.\n *\n * @types {string[]}\n */\nconst SCORES = [\n    'feedback.veryBad',\n    'feedback.bad',\n    'feedback.average',\n    'feedback.good',\n    'feedback.veryGood'\n];\n\n/**\n * The type of the React {@code Component} props of {@link FeedbackDialog}.\n */\ntype Props = {\n\n    /**\n     * The cached feedback message, if any, that was set when closing a previous\n     * instance of {@code FeedbackDialog}.\n     */\n    _message: string,\n\n    /**\n     * The cached feedback score, if any, that was set when closing a previous\n     * instance of {@code FeedbackDialog}.\n     */\n    _score: number,\n\n    /**\n     * The JitsiConference that is being rated. The conference is passed in\n     * because feedback can occur after a conference has been left, so\n     * references to it may no longer exist in redux.\n     */\n    conference: Object,\n\n    /**\n     * Invoked to signal feedback submission or canceling.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Callback invoked when {@code FeedbackDialog} is unmounted.\n     */\n    onClose: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link FeedbackDialog}.\n */\ntype State = {\n\n    /**\n     * The currently entered feedback message.\n     */\n    message: string,\n\n    /**\n     * The score selection index which is currently being hovered. The value -1\n     * is used as a sentinel value to match store behavior of using -1 for no\n     * score having been selected.\n     */\n    mousedOverScore: number,\n\n    /**\n     * The currently selected score selection index. The score will not be 0\n     * indexed so subtract one to map with SCORES.\n     */\n    score: number\n};\n\n/**\n * A React {@code Component} for displaying a dialog to rate the current\n * conference quality, write a message describing the experience, and submit\n * the feedback.\n *\n * @extends Component\n */\nclass FeedbackDialog extends Component<Props, State> {\n    /**\n     * An array of objects with click handlers for each of the scores listed in\n     * the constant SCORES. This pattern is used for binding event handlers only\n     * once for each score selection icon.\n     */\n    _scoreClickConfigurations: Array<Object>;\n\n    /**\n     * Initializes a new {@code FeedbackDialog} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const { _message, _score } = this.props;\n\n        this.state = {\n            /**\n             * The currently entered feedback message.\n             *\n             * @type {string}\n             */\n            message: _message,\n\n            /**\n             * The score selection index which is currently being hovered. The\n             * value -1 is used as a sentinel value to match store behavior of\n             * using -1 for no score having been selected.\n             *\n             * @type {number}\n             */\n            mousedOverScore: -1,\n\n            /**\n             * The currently selected score selection index. The score will not\n             * be 0 indexed so subtract one to map with SCORES.\n             *\n             * @type {number}\n             */\n            score: _score > -1 ? _score - 1 : _score\n        };\n\n        this._scoreClickConfigurations = SCORES.map((textKey, index) => {\n            return {\n                _onClick: () => this._onScoreSelect(index),\n                _onKeyPres: e => {\n                    if (e.key === ' ' || e.key === 'Enter') {\n                        e.preventDefault();\n                        this._onScoreSelect(index);\n                    }\n                },\n                _onMouseOver: () => this._onScoreMouseOver(index)\n            };\n        });\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCancel = this._onCancel.bind(this);\n        this._onMessageChange = this._onMessageChange.bind(this);\n        this._onScoreContainerMouseLeave\n            = this._onScoreContainerMouseLeave.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Emits an analytics event to notify feedback has been opened.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(createFeedbackOpenEvent());\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyFeedbackPromptDisplayed();\n        }\n    }\n\n    /**\n     * Invokes the onClose callback, if defined, to notify of the close event.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        if (this.props.onClose) {\n            this.props.onClose();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { message, mousedOverScore, score } = this.state;\n        const scoreToDisplayAsSelected\n            = mousedOverScore > -1 ? mousedOverScore : score;\n\n        const { t } = this.props;\n\n        const scoreIcons = this._scoreClickConfigurations.map(\n            (config, index) => {\n                const isFilled = index <= scoreToDisplayAsSelected;\n                const activeClass = isFilled ? 'active' : '';\n                const className\n                    = `star-btn ${scoreAnimationClass} ${activeClass}`;\n\n                return (\n                    <span\n                        aria-label = { t(SCORES[index]) }\n                        className = { className }\n                        key = { index }\n                        onClick = { config._onClick }\n                        onKeyPress = { config._onKeyPres }\n                        role = 'button'\n                        tabIndex = { 0 }\n                        { ...(isMobileBrowser() ? {} : {\n                            onMouseOver: config._onMouseOver\n                        }) }>\n                        { isFilled\n                            ? <StarFilledIcon\n                                label = 'star-filled'\n                                size = 'xlarge' />\n                            : <StarIcon\n                                label = 'star'\n                                size = 'xlarge' /> }\n                    </span>\n                );\n            });\n\n\n        return (\n            <Dialog\n                okKey = 'dialog.Submit'\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'feedback.rateExperience'>\n                <div className = 'feedback-dialog'>\n                    <div className = 'rating'>\n                        <div\n                            aria-label = { this.props.t('feedback.star') }\n                            className = 'star-label' >\n                            <p id = 'starLabel'>\n                                { t(SCORES[scoreToDisplayAsSelected]) }\n                            </p>\n                        </div>\n                        <div\n                            className = 'stars'\n                            onMouseLeave = { this._onScoreContainerMouseLeave }>\n                            { scoreIcons }\n                        </div>\n                    </div>\n                    <div className = 'details'>\n                        <FieldTextAreaStateless\n                            autoFocus = { true }\n                            className = 'input-control'\n                            id = 'feedbackTextArea'\n                            label = { t('feedback.detailsLabel') }\n                            onChange = { this._onMessageChange }\n                            shouldFitContainer = { true }\n                            value = { message } />\n                    </div>\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Dispatches an action notifying feedback was not submitted. The submitted\n     * score will have one added as the rest of the app does not expect 0\n     * indexing.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onCancel() {\n        const { message, score } = this.state;\n        const scoreToSubmit = score > -1 ? score + 1 : score;\n\n        this.props.dispatch(cancelFeedback(scoreToSubmit, message));\n\n        return true;\n    }\n\n    _onMessageChange: (Object) => void;\n\n    /**\n     * Updates the known entered feedback message.\n     *\n     * @param {Object} event - The DOM event from updating the textfield for the\n     * feedback message.\n     * @private\n     * @returns {void}\n     */\n    _onMessageChange(event) {\n        this.setState({ message: event.target.value });\n    }\n\n    /**\n     * Updates the currently selected score.\n     *\n     * @param {number} score - The index of the selected score in SCORES.\n     * @private\n     * @returns {void}\n     */\n    _onScoreSelect(score) {\n        this.setState({ score });\n    }\n\n    _onScoreContainerMouseLeave: () => void;\n\n    /**\n     * Sets the currently hovered score to null to indicate no hover is\n     * occurring.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onScoreContainerMouseLeave() {\n        this.setState({ mousedOverScore: -1 });\n    }\n\n    /**\n     * Updates the known state of the score icon currently behind hovered over.\n     *\n     * @param {number} mousedOverScore - The index of the SCORES value currently\n     * being moused over.\n     * @private\n     * @returns {void}\n     */\n    _onScoreMouseOver(mousedOverScore) {\n        this.setState({ mousedOverScore });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Dispatches the entered feedback for submission. The submitted score will\n     * have one added as the rest of the app does not expect 0 indexing.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onSubmit() {\n        const { conference, dispatch } = this.props;\n        const { message, score } = this.state;\n\n        const scoreToSubmit = score > -1 ? score + 1 : score;\n\n        dispatch(submitFeedback(scoreToSubmit, message, conference));\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code FeedbackDialog}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { message, score } = state['features/feedback'];\n\n    return {\n        /**\n         * The cached feedback message, if any, that was set when closing a\n         * previous instance of {@code FeedbackDialog}.\n         *\n         * @type {string}\n         */\n        _message: message,\n\n        /**\n         * The currently selected score selection index.\n         *\n         * @type {number}\n         */\n        _score: score\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(FeedbackDialog));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { FEEDBACK_REQUEST_IN_PROGRESS } from '../../../modules/UI/UIErrors';\nimport { openDialog } from '../base/dialog';\nimport { extractFqnFromPath } from '../dynamic-branding/functions';\nimport { isVpaasMeeting } from '../jaas/functions';\n\nimport {\n    CANCEL_FEEDBACK,\n    SUBMIT_FEEDBACK_ERROR,\n    SUBMIT_FEEDBACK_SUCCESS\n} from './actionTypes';\nimport { FeedbackDialog } from './components';\nimport { sendFeedbackToJaaSRequest } from './functions';\n\ndeclare var config: Object;\n\n/**\n * Caches the passed in feedback in the redux store.\n *\n * @param {number} score - The quality score given to the conference.\n * @param {string} message - A description entered by the participant that\n * explains the rating.\n * @returns {{\n *     type: CANCEL_FEEDBACK,\n *     message: string,\n *     score: number\n * }}\n */\nexport function cancelFeedback(score: number, message: string) {\n    return {\n        type: CANCEL_FEEDBACK,\n        message,\n        score\n    };\n}\n\n/**\n * Potentially open the {@code FeedbackDialog}. It will not be opened if it is\n * already open or feedback has already been submitted.\n *\n * @param {JistiConference} conference - The conference for which the feedback\n * would be about. The conference is passed in because feedback can occur after\n * a conference has been left, so references to it may no longer exist in redux.\n * @returns {Promise} Resolved with value - false if the dialog is enabled and\n * resolved with true if the dialog is disabled or the feedback was already\n * submitted. Rejected if another dialog is already displayed.\n */\nexport function maybeOpenFeedbackDialog(conference: Object) {\n    type R = {\n        feedbackSubmitted: boolean,\n        showThankYou: boolean\n    };\n\n    return (dispatch: Dispatch<any>, getState: Function): Promise<R> => {\n        const state = getState();\n        const { feedbackPercentage = 100 } = state['features/base/config'];\n\n        if (config.iAmRecorder) {\n            // Intentionally fall through the if chain to prevent further action\n            // from being taken with regards to showing feedback.\n        } else if (state['features/base/dialog'].component === FeedbackDialog) {\n            // Feedback is currently being displayed.\n\n            return Promise.reject(FEEDBACK_REQUEST_IN_PROGRESS);\n        } else if (state['features/feedback'].submitted) {\n            // Feedback has been submitted already.\n\n            return Promise.resolve({\n                feedbackSubmitted: true,\n                showThankYou: true\n            });\n        } else if (conference.isCallstatsEnabled() && feedbackPercentage > Math.random() * 100) {\n            return new Promise(resolve => {\n                dispatch(openFeedbackDialog(conference, () => {\n                    const { submitted } = getState()['features/feedback'];\n\n                    resolve({\n                        feedbackSubmitted: submitted,\n                        showThankYou: false\n                    });\n                }));\n            });\n        }\n\n        // If the feedback functionality isn't enabled we show a \"thank you\"\n        // message. Signaling it (true), so the caller of requestFeedback can\n        // act on it.\n        return Promise.resolve({\n            feedbackSubmitted: false,\n            showThankYou: true\n        });\n    };\n}\n\n/**\n * Opens {@code FeedbackDialog}.\n *\n * @param {JitsiConference} conference - The JitsiConference that is being\n * rated. The conference is passed in because feedback can occur after a\n * conference has been left, so references to it may no longer exist in redux.\n * @param {Function} [onClose] - An optional callback to invoke when the dialog\n * is closed.\n * @returns {Object}\n */\nexport function openFeedbackDialog(conference: Object, onClose: ?Function) {\n    return openDialog(FeedbackDialog, {\n        conference,\n        onClose\n    });\n}\n\n/**\n * Sends feedback metadata to JaaS endpoint.\n *\n * @param {JitsiConference} conference - The JitsiConference that is being rated.\n * @param {Object} feedback - The feedback message and score.\n *\n * @returns {Promise}\n */\nexport function sendJaasFeedbackMetadata(conference: Object, feedback: Object) {\n    return (dispatch: Dispatch<any>, getState: Function): Promise<any> => {\n        const state = getState();\n        const { jaasFeedbackMetadataURL } = state['features/base/config'];\n\n        const { jwt, user, tenant } = state['features/base/jwt'];\n\n        if (!isVpaasMeeting(state) || !jaasFeedbackMetadataURL) {\n            return Promise.resolve();\n        }\n\n        const meetingFqn = extractFqnFromPath(state['features/base/connection'].locationURL.pathname);\n        const feedbackData = {\n            ...feedback,\n            sessionId: conference.sessionId,\n            userId: user.id,\n            meetingFqn,\n            jwt,\n            tenant\n        };\n\n        return sendFeedbackToJaaSRequest(jaasFeedbackMetadataURL, feedbackData);\n    };\n}\n\n/**\n * Send the passed in feedback.\n *\n * @param {number} score - An integer between 1 and 5 indicating the user\n * feedback. The negative integer -1 is used to denote no score was selected.\n * @param {string} message - Detailed feedback from the user to explain the\n * rating.\n * @param {JitsiConference} conference - The JitsiConference for which the\n * feedback is being left.\n * @returns {Function}\n */\nexport function submitFeedback(\n        score: number,\n        message: string,\n        conference: Object) {\n    return (dispatch: Dispatch<any>) =>\n        conference.sendFeedback(score, message)\n        .then(() => dispatch({ type: SUBMIT_FEEDBACK_SUCCESS }))\n        .then(() => dispatch(sendJaasFeedbackMetadata(conference, { score,\n            message }))\n        .catch(error => {\n            dispatch({\n                type: SUBMIT_FEEDBACK_ERROR,\n                error\n            });\n\n            return Promise.reject(error);\n        }));\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/feedback');\n","// @flow\n\nimport logger from './logger';\n\n/**\n * Sends feedback metadata to JaaS endpoints.\n *\n * @param {string} url - The JaaS metadata endpoint URL.\n * @param {Object} feedbackData - The feedback data object.\n * @returns {Promise}\n */\nexport async function sendFeedbackToJaaSRequest(url: string, feedbackData: Object) {\n    const {\n        jwt,\n        sessionId,\n        meetingFqn,\n        score,\n        message,\n        userId,\n        tenant\n    } = feedbackData;\n    const headers = {\n        'Authorization': `Bearer ${jwt}`,\n        'Content-Type': 'application/json'\n    };\n    const data = {\n        sessionId,\n        meetingFqn,\n        userId,\n        tenant,\n        submitted: new Date().getTime(),\n        rating: score,\n        comments: message\n    };\n\n    try {\n        const res = await fetch(url, {\n            method: 'POST',\n            headers,\n            body: JSON.stringify(data)\n        });\n\n        if (!res.ok) {\n            logger.error('Status error:', res.status);\n        }\n    } catch (err) {\n        logger.error('Could not send request', err);\n    }\n}\n\n","// @flow\n\nimport { Dropbox } from 'dropbox';\n\nimport {\n    getJitsiMeetGlobalNS,\n    parseStandardURIString,\n    parseURLParams\n} from '../base/util';\n\n/**\n * Executes the oauth flow.\n *\n * @param {string} authUrl - The URL to oauth service.\n * @returns {Promise<string>} - The URL with the authorization details.\n */\nfunction authorize(authUrl: string): Promise<string> {\n    const windowName = `oauth${Date.now()}`;\n    const gloabalNS = getJitsiMeetGlobalNS();\n\n    gloabalNS.oauthCallbacks = gloabalNS.oauthCallbacks || {};\n\n    return new Promise(resolve => {\n        const popup = window.open(authUrl, windowName);\n\n        gloabalNS.oauthCallbacks[windowName] = url => {\n            popup.close();\n            delete gloabalNS.oauthCallbacks.windowName;\n            resolve(url);\n        };\n    });\n}\n\n/**\n * Action to authorize the Jitsi Recording app in dropbox.\n *\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @param {string} redirectURI - The return URL.\n * @returns {Promise<string>}\n */\nexport function _authorizeDropbox(\n        appKey: string,\n        redirectURI: string\n): Promise<string> {\n    const dropboxAPI = new Dropbox({ clientId: appKey });\n    const url = dropboxAPI.getAuthenticationUrl(redirectURI);\n\n    return authorize(url).then(returnUrl => {\n        const params\n            = parseURLParams(parseStandardURIString(returnUrl), true) || {};\n\n        return params.access_token;\n    });\n}\n\n/**\n * Returns the display name for the current dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<string>}\n */\nexport function getDisplayName(token: string, appKey: string) {\n    const dropboxAPI = new Dropbox({\n        accessToken: token,\n        clientId: appKey\n    });\n\n    return (\n        dropboxAPI.usersGetCurrentAccount()\n            .then(account => account.name.display_name));\n}\n\n/**\n * Returns information about the space usage for the current dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<Object>}\n */\nexport function getSpaceUsage(token: string, appKey: string) {\n    const dropboxAPI = new Dropbox({\n        accessToken: token,\n        clientId: appKey\n    });\n\n    return dropboxAPI.usersGetSpaceUsage().then(space => {\n        const { allocation, used } = space;\n        const { allocated } = allocation;\n\n        return {\n            allocated,\n            used\n        };\n    });\n}\n\n/**\n * Returns <tt>true</tt> if the dropbox features is enabled and <tt>false</tt>\n * otherwise.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isEnabled(state: Object) {\n    const { dropbox = {} } = state['features/base/config'];\n\n    return typeof dropbox.appKey === 'string';\n}\n","// @flow\n\nimport { UPDATE_DROPBOX_TOKEN } from './actionTypes';\nimport { _authorizeDropbox } from './functions';\n\n/**\n * Action to authorize the Jitsi Recording app in dropbox.\n *\n * @returns {Function}\n */\nexport function authorizeDropbox() {\n    return (dispatch: Function, getState: Function) => {\n        const state = getState();\n        const { locationURL } = state['features/base/connection'];\n        const { dropbox = {} } = state['features/base/config'];\n\n        // By default we use the static page on the main domain for redirection.\n        // So we need to setup only one redirect URI in dropbox app\n        // configuration (not multiple for all the tenants).\n        // In case deployment is running in subfolder dropbox.redirectURI\n        // can be configured.\n        const redirectURI\n            = dropbox.redirectURI || `${locationURL.origin}/static/oauth.html`;\n\n        _authorizeDropbox(dropbox.appKey, redirectURI)\n            .then(\n                token => dispatch(updateDropboxToken(token)));\n    };\n}\n\n/**\n * Action to update the dropbox access token.\n *\n * @param {string} token - The new token.\n * @returns {{\n *     type: UPDATE_DROPBOX_TOKEN,\n *     token: string\n * }}\n */\nexport function updateDropboxToken(token: string) {\n    return {\n        type: UPDATE_DROPBOX_TOKEN,\n        token\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/dropbox');\n","// @flow\nexport * from './functions';\n\nimport { getDisplayName, getSpaceUsage } from './functions';\nimport logger from './logger';\n\n/**\n * Information related to the user's dropbox account.\n */\ntype DropboxUserData = {\n\n    /**\n     * The available space left in MB into the user's Dropbox account.\n     */\n    spaceLeft: number,\n\n    /**\n     * The display name of the user in Dropbox.\n     */\n    userName: string\n};\n\n/**\n * Fetches information about the user's dropbox account.\n *\n * @param {string} token - The dropbox access token.\n * @param {string} appKey - The Jitsi Recorder dropbox app key.\n * @returns {Promise<DropboxUserData|undefined>}\n */\nexport function getDropboxData(\n        token: string,\n        appKey: string\n): Promise<?DropboxUserData> {\n    return Promise.all(\n        [ getDisplayName(token, appKey), getSpaceUsage(token, appKey) ]\n    ).then(([ userName, space ]) => {\n        const { allocated, used } = space;\n\n        return {\n            userName,\n            spaceLeft: Math.floor((allocated - used) / 1048576)// 1MiB=1048576B\n        };\n\n    }, error => {\n        logger.error(error);\n\n        return undefined;\n    });\n}\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  var contentValuePattern = /(attr|calc|counters?|url)\\(/;\n  var contentValues = ['normal', 'none', 'counter', 'open-quote', 'close-quote', 'no-open-quote', 'no-close-quote', 'initial', 'inherit', 'unset'];\n  var oldProcessStyleValue = processStyleValue;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g;\n  var hyphenatedCache = {};\n\n  processStyleValue = function processStyleValue(key, value) {\n    if (key === 'content') {\n      if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n        console.error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n      }\n    }\n\n    var processed = oldProcessStyleValue(key, value);\n\n    if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n      hyphenatedCache[key] = true;\n      console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n        return _char.toUpperCase();\n      }) + \"?\");\n    }\n\n    return processed;\n  };\n}\n\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\n\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  if (interpolation.__emotion_styles !== undefined) {\n    if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n      throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n    }\n\n    return interpolation;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        if (interpolation.anim === 1) {\n          cursor = {\n            name: interpolation.name,\n            styles: interpolation.styles,\n            next: cursor\n          };\n          return interpolation.name;\n        }\n\n        if (interpolation.styles !== undefined) {\n          var next = interpolation.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = interpolation.styles + \";\";\n\n          if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n            styles += interpolation.map;\n          }\n\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n        } else if (process.env.NODE_ENV !== 'production') {\n          console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n        }\n\n        break;\n      }\n\n    case 'string':\n      if (process.env.NODE_ENV !== 'production') {\n        var matched = [];\n        var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n          var fakeVarName = \"animation\" + matched.length;\n          matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n          return \"${\" + fakeVarName + \"}\";\n        });\n\n        if (matched.length) {\n          console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n        }\n      }\n\n      break;\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  if (registered == null) {\n    return interpolation;\n  }\n\n  var cached = registered[interpolation];\n\n  if (process.env.NODE_ENV !== 'production' && couldBeSelectorInterpolation && shouldWarnAboutInterpolatingClassNameFromCss && cached !== undefined) {\n    console.error('Interpolating a className from css`` is not recommended and will cause problems with composition.\\n' + 'Interpolating a className from css`` will be completely unsupported in a future major version of Emotion');\n    shouldWarnAboutInterpolatingClassNameFromCss = false;\n  }\n\n  return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i], false);\n    }\n  } else {\n    for (var _key in obj) {\n      var value = obj[_key];\n\n      if (typeof value !== 'object') {\n        if (registered != null && registered[value] !== undefined) {\n          string += _key + \"{\" + registered[value] + \"}\";\n        } else if (isProcessableValue(value)) {\n          string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n        }\n      } else {\n        if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n          throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value, false);\n\n          switch (_key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(_key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n                if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n                  console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n                }\n\n                string += _key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n  sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings, false);\n  } else {\n    if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n      console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n    }\n\n    styles += strings[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n\n    if (stringMode) {\n      if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n      }\n\n      styles += strings[i];\n    }\n  }\n\n  var sourceMap;\n\n  if (process.env.NODE_ENV !== 'production') {\n    styles = styles.replace(sourceMapPattern, function (match) {\n      sourceMap = match;\n      return '';\n    });\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + // $FlowFixMe we know it's not null\n    match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n    return {\n      name: name,\n      styles: styles,\n      map: sourceMap,\n      next: cursor,\n      toString: function toString() {\n        return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n      }\n    };\n  }\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n};\n\nexport { serializeStyles };\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/audio-only');\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport { createAudioOnlyChangedEvent, sendAnalytics } from '../../analytics';\n\nimport { SET_AUDIO_ONLY } from './actionTypes';\nimport logger from './logger';\n\n\ndeclare var APP: Object;\n\n/**\n * Sets the audio-only flag for the current JitsiConference.\n *\n * @param {boolean} audioOnly - True if the conference should be audio only;\n * false, otherwise.\n * @param {boolean} ensureVideoTrack - Define if conference should ensure\n * to create a video track.\n * @returns {{\n *     type: SET_AUDIO_ONLY,\n *     audioOnly: boolean,\n *     ensureVideoTrack: boolean\n * }}\n */\nexport function setAudioOnly(audioOnly: boolean, ensureVideoTrack: boolean = false) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { enabled: oldValue } = getState()['features/base/audio-only'];\n\n        if (oldValue !== audioOnly) {\n            sendAnalytics(createAudioOnlyChangedEvent(audioOnly));\n            logger.log(`Audio-only ${audioOnly ? 'enabled' : 'disabled'}`);\n\n            dispatch({\n                type: SET_AUDIO_ONLY,\n                audioOnly,\n                ensureVideoTrack\n            });\n\n            if (typeof APP !== 'undefined') {\n                // TODO This should be a temporary solution that lasts only until video\n                // tracks and all ui is moved into react/redux on the web.\n                APP.UI.emitEvent(UIEvents.TOGGLE_AUDIO_ONLY, audioOnly);\n            }\n        }\n    };\n}\n\n/**\n * Toggles the audio-only flag for the current JitsiConference.\n *\n * @returns {Function}\n */\nexport function toggleAudioOnly() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { enabled } = getState()['features/base/audio-only'];\n\n        return dispatch(setAudioOnly(!enabled, true));\n    };\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/base/reactions');\n","// @flow\n\nimport uuid from 'uuid';\n\nimport { getLocalParticipant } from '../base/participants';\nimport { extractFqnFromPath } from '../dynamic-branding/functions';\n\nimport { REACTIONS } from './constants';\nimport logger from './logger';\n\n/**\n * Returns the queue of reactions.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getReactionsQueue(state: Object) {\n    return state['features/reactions'].queue;\n}\n\n/**\n * Returns chat message from reactions buffer.\n *\n * @param {Array} buffer - The reactions buffer.\n * @returns {string}\n */\nexport function getReactionMessageFromBuffer(buffer: Array<string>) {\n    return buffer.map(reaction => REACTIONS[reaction].message).reduce((acc, val) => `${acc}${val}`);\n}\n\n/**\n * Returns reactions array with uid.\n *\n * @param {Array} buffer - The reactions buffer.\n * @returns {Array}\n */\nexport function getReactionsWithId(buffer: Array<string>) {\n    return buffer.map<Object>(reaction => {\n        return {\n            reaction,\n            uid: uuid.v4()\n        };\n    });\n}\n\n/**\n * Sends reactions to the backend.\n *\n * @param {Object} state - The redux state object.\n * @param {Array} reactions - Reactions array to be sent.\n * @returns {void}\n */\nexport async function sendReactionsWebhook(state: Object, reactions: Array<?string>) {\n    const { webhookProxyUrl: url } = state['features/base/config'];\n    const { conference } = state['features/base/conference'];\n    const { jwt } = state['features/base/jwt'];\n    const { locationURL } = state['features/base/connection'];\n    const localParticipant = getLocalParticipant(state);\n\n    const headers = {\n        'Authorization': `Bearer ${jwt}`,\n        'Content-Type': 'application/json'\n    };\n\n\n    const reqBody = {\n        meetingFqn: extractFqnFromPath(locationURL.pathname),\n        sessionId: conference.sessionId,\n        submitted: Date.now(),\n        reactions,\n        participantId: localParticipant.id,\n        participantName: localParticipant.name\n    };\n\n    if (url) {\n        try {\n            const res = await fetch(`${url}/reactions`, {\n                method: 'POST',\n                headers,\n                body: JSON.stringify(reqBody)\n            });\n\n            if (!res.ok) {\n                logger.error('Status error:', res.status);\n            }\n        } catch (err) {\n            logger.error('Could not send request', err);\n        }\n    }\n}\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className]);\n    } else {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      var maybeStyles = cache.insert(\".\" + className, current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles };\n","export * from './actions';\nexport * from './components';\nexport * from './constants';\nexport * from './functions';\n","/* global $, APP, interfaceConfig */\n\nimport { getVerticalFilmstripVisibleAreaWidth, isFilmstripVisible } from '../../../react/features/filmstrip';\n\nconst Filmstrip = {\n    /**\n     * Returns the height of filmstrip\n     * @returns {number} height\n     */\n    getFilmstripHeight() {\n        // FIXME Make it more clear the getFilmstripHeight check is used in\n        // horizontal film strip mode for calculating how tall large video\n        // display should be.\n        if (isFilmstripVisible(APP.store) && !interfaceConfig.VERTICAL_FILMSTRIP) {\n            return $('.filmstrip').outerHeight();\n        }\n\n        return 0;\n    },\n\n    /**\n     * Returns the width of the vertical filmstip if the filmstrip is visible and 0 otherwise.\n     *\n     * @returns {number} - The width of the vertical filmstip if the filmstrip is visible and 0 otherwise.\n     */\n    getVerticalFilmstripWidth() {\n        return isFilmstripVisible(APP.store) ? getVerticalFilmstripVisibleAreaWidth() : 0;\n    }\n};\n\nexport default Filmstrip;\n","/**\n * Action type to signal the closing of the participants pane.\n */\nexport const PARTICIPANTS_PANE_CLOSE = 'PARTICIPANTS_PANE_CLOSE';\n\n/**\n * Action type to signal the opening of the participants pane.\n */\nexport const PARTICIPANTS_PANE_OPEN = 'PARTICIPANTS_PANE_OPEN';\n\n/**\n * Action type to set the volume of the participant.\n */\nexport const SET_VOLUME = 'SET_VOLUME';\n","import * as colors from '@atlaskit/theme/colors';\n// Hard coding the active rgba color value rather than using a helper to convert it\n// With helper it would be: hex2rgba(colors.B75, 0.6)\nvar fadedB75 = 'rgba(179, 212, 255, 0.6)';\nvar values = {\n  // Default appearance\n  background: {\n    default: {\n      default: {\n        light: colors.N20A,\n        dark: colors.DN70\n      },\n      hover: {\n        light: colors.N30A,\n        dark: colors.DN60\n      },\n      active: {\n        light: fadedB75,\n        dark: colors.B75\n      },\n      disabled: {\n        light: colors.N20A,\n        dark: colors.DN70\n      },\n      selected: {\n        light: colors.N700,\n        dark: colors.DN0\n      },\n      focusSelected: {\n        light: colors.N700,\n        dark: colors.DN0\n      }\n    },\n    primary: {\n      default: {\n        light: colors.B400,\n        dark: colors.B100\n      },\n      hover: {\n        light: colors.B300,\n        dark: colors.B75\n      },\n      active: {\n        light: colors.B500,\n        dark: colors.B200\n      },\n      disabled: {\n        light: colors.N20A,\n        dark: colors.DN70\n      },\n      selected: {\n        light: colors.N700,\n        dark: colors.DN0\n      },\n      focusSelected: {\n        light: colors.N700,\n        dark: colors.DN0\n      }\n    },\n    warning: {\n      default: {\n        light: colors.Y300,\n        dark: colors.Y300\n      },\n      hover: {\n        light: colors.Y200,\n        dark: colors.Y200\n      },\n      active: {\n        light: colors.Y400,\n        dark: colors.Y400\n      },\n      disabled: {\n        light: colors.N20A,\n        dark: colors.DN70\n      },\n      selected: {\n        light: colors.Y400,\n        dark: colors.Y400\n      },\n      focusSelected: {\n        light: colors.Y400,\n        dark: colors.Y400\n      }\n    },\n    danger: {\n      default: {\n        light: colors.R400,\n        dark: colors.R400\n      },\n      hover: {\n        light: colors.R300,\n        dark: colors.R300\n      },\n      active: {\n        light: colors.R500,\n        dark: colors.R500\n      },\n      disabled: {\n        light: colors.N20A,\n        dark: colors.DN70\n      },\n      selected: {\n        light: colors.R500,\n        dark: colors.R500\n      },\n      focusSelected: {\n        light: colors.R500,\n        dark: colors.R500\n      }\n    },\n    link: {\n      default: {\n        light: 'none',\n        dark: 'none'\n      },\n      selected: {\n        light: colors.N700,\n        dark: colors.N20\n      },\n      focusSelected: {\n        light: colors.N700,\n        dark: colors.N20\n      }\n    },\n    subtle: {\n      default: {\n        light: 'none',\n        dark: 'none'\n      },\n      hover: {\n        light: colors.N30A,\n        dark: colors.DN60\n      },\n      active: {\n        light: fadedB75,\n        dark: colors.B75\n      },\n      disabled: {\n        light: 'none',\n        dark: 'none'\n      },\n      selected: {\n        light: colors.N700,\n        dark: colors.DN0\n      },\n      focusSelected: {\n        light: colors.N700,\n        dark: colors.DN0\n      }\n    },\n    'subtle-link': {\n      default: {\n        light: 'none',\n        dark: 'none'\n      },\n      selected: {\n        light: colors.N700,\n        dark: colors.N20\n      },\n      focusSelected: {\n        light: colors.N700,\n        dark: colors.N20\n      }\n    }\n  },\n  boxShadowColor: {\n    default: {\n      focus: {\n        light: colors.B100,\n        dark: colors.B75\n      },\n      focusSelected: {\n        light: colors.B100,\n        dark: colors.B75\n      }\n    },\n    primary: {\n      focus: {\n        light: colors.B100,\n        dark: colors.B75\n      },\n      focusSelected: {\n        light: colors.B100,\n        dark: colors.B75\n      }\n    },\n    warning: {\n      focus: {\n        light: colors.Y500,\n        dark: colors.Y500\n      },\n      focusSelected: {\n        light: colors.Y500,\n        dark: colors.Y500\n      }\n    },\n    danger: {\n      focus: {\n        light: colors.R100,\n        dark: colors.R100\n      },\n      focusSelected: {\n        light: colors.R100,\n        dark: colors.R100\n      }\n    },\n    link: {\n      focus: {\n        light: colors.B100,\n        dark: colors.B75\n      },\n      focusSelected: {\n        light: colors.B100,\n        dark: colors.B75\n      }\n    },\n    subtle: {\n      focus: {\n        light: colors.B100,\n        dark: colors.B75\n      },\n      focusSelected: {\n        light: colors.B100,\n        dark: colors.B75\n      }\n    },\n    'subtle-link': {\n      focus: {\n        light: colors.B100,\n        dark: colors.B75\n      },\n      focusSelected: {\n        light: colors.B100,\n        dark: colors.B75\n      }\n    }\n  },\n  color: {\n    default: {\n      default: {\n        light: colors.N500,\n        dark: colors.DN400\n      },\n      active: {\n        light: colors.B400,\n        dark: colors.B400\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN30\n      },\n      selected: {\n        light: colors.N20,\n        dark: colors.DN400\n      },\n      focusSelected: {\n        light: colors.N20,\n        dark: colors.DN400\n      }\n    },\n    primary: {\n      default: {\n        light: colors.N0,\n        dark: colors.DN30\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN30\n      },\n      selected: {\n        light: colors.N20,\n        dark: colors.DN400\n      },\n      focusSelected: {\n        light: colors.N20,\n        dark: colors.DN400\n      }\n    },\n    warning: {\n      default: {\n        light: colors.N800,\n        dark: colors.N800\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN30\n      },\n      selected: {\n        light: colors.N800,\n        dark: colors.N800\n      },\n      focusSelected: {\n        light: colors.N800,\n        dark: colors.N800\n      }\n    },\n    danger: {\n      default: {\n        light: colors.N0,\n        dark: colors.N0\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN30\n      },\n      selected: {\n        light: colors.N0,\n        dark: colors.N0\n      },\n      focusSelected: {\n        light: colors.N0,\n        dark: colors.N0\n      }\n    },\n    link: {\n      default: {\n        light: colors.B400,\n        dark: colors.B100\n      },\n      hover: {\n        light: colors.B300,\n        dark: colors.B75\n      },\n      active: {\n        light: colors.B500,\n        dark: colors.B200\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN100\n      },\n      selected: {\n        light: colors.N20,\n        dark: colors.N700\n      },\n      focusSelected: {\n        light: colors.N20,\n        dark: colors.N700\n      }\n    },\n    subtle: {\n      default: {\n        light: colors.N500,\n        dark: colors.DN400\n      },\n      active: {\n        light: colors.B400,\n        dark: colors.B400\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN100\n      },\n      selected: {\n        light: colors.N20,\n        dark: colors.DN400\n      },\n      focusSelected: {\n        light: colors.N20,\n        dark: colors.DN400\n      }\n    },\n    'subtle-link': {\n      default: {\n        light: colors.N200,\n        dark: colors.DN400\n      },\n      hover: {\n        light: colors.N90,\n        dark: colors.B50\n      },\n      active: {\n        light: colors.N400,\n        dark: colors.DN300\n      },\n      disabled: {\n        light: colors.N70,\n        dark: colors.DN100\n      },\n      selected: {\n        light: colors.N20,\n        dark: colors.DN400\n      },\n      focusSelected: {\n        light: colors.N20,\n        dark: colors.DN400\n      }\n    }\n  }\n};\nexport default values;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { borderRadius as getBorderRadius, fontSize as getFontSize, gridSize as getGridSize } from '@atlaskit/theme/constants';\nimport colors from './colors';\nvar borderRadius = getBorderRadius();\nvar gridSize = getGridSize();\nvar fontSize = getFontSize(); // ## Button layout\n//\n// /------------------------------------------------------------------------------------------------------------------\\\n// |       →  |  ←      |          |      →  |  ←      |           |      →  |  ←      |         |      →  |  ←       |\n// |  10px →  |  ← 2px  |   icon   |  2px →  |  ← 2px  |           |  2px →  |  ← 2px  |  icon   |  2px →  |  ← 10px  |\n// |  padding |  margin |  before  |  margin |  margin |  content  |  margin |  margin |  after  |  margin |  padding |\n// |    (12px total)    |          |    (4px total)    |           |    (4px total)    |         |    (12px total)    |\n// |       →  |  ←      |          |      →  |  ←      |           |      →  |  ←      |         |      →  |  ←       |\n// \\------------------------------------------------------------------------------------------------------------------/\n//                                           ↑                               ↑\n//                                        Margins don't collapse with inline-flex\n//\n\nvar heights = {\n  default: \"\".concat(gridSize * 4 / fontSize, \"em\"),\n  // 32px\n  compact: \"\".concat(gridSize * 3 / fontSize, \"em\"),\n  none: 'auto'\n};\nvar lineHeights = {\n  default: heights.default,\n  compact: heights.compact,\n  none: 'inherit'\n};\nvar padding = {\n  // 10px gutter\n  default: \"0 \".concat(gridSize + gridSize / 4, \"px\"),\n  compact: \"0 \".concat(gridSize + gridSize / 4, \"px\"),\n  none: '0'\n};\nvar singleIconPadding = {\n  // 2px gutter\n  compact: \"0 \".concat(gridSize / 4, \"px\"),\n  default: \"0 \".concat(gridSize / 4, \"px\"),\n  none: '0'\n};\nvar verticalAlign = {\n  default: 'middle',\n  compact: 'middle',\n  none: 'baseline'\n};\nvar innerMargin = {\n  content: \"0 \".concat(gridSize / 4, \"px\"),\n  icon: \"0 \".concat(gridSize / 4, \"px\")\n};\n\nfunction getColor(_ref) {\n  var group = _ref.group,\n      key = _ref.key,\n      mode = _ref.mode;\n  var rule = group[key] || group.default;\n  return rule[mode];\n}\n\nfunction getColors(_ref2) {\n  var appearance = _ref2.appearance,\n      key = _ref2.key,\n      mode = _ref2.mode;\n  return {\n    background: getColor({\n      group: colors.background[appearance],\n      key: key,\n      mode: mode\n    }),\n    // Needing to add !important to overcome specificity issue caused by deprecated AtlaskitThemeProvider\n    color: \"\".concat(getColor({\n      group: colors.color[appearance],\n      key: key,\n      mode: mode\n    }), \" !important\")\n  };\n}\n\nexport function getCss(_ref3) {\n  var appearance = _ref3.appearance,\n      spacing = _ref3.spacing,\n      mode = _ref3.mode,\n      isSelected = _ref3.isSelected,\n      shouldFitContainer = _ref3.shouldFitContainer,\n      isOnlySingleIcon = _ref3.isOnlySingleIcon;\n  var baseColors = getColors({\n    appearance: appearance,\n    key: isSelected ? 'selected' : 'default',\n    mode: mode\n  });\n  return _objectSpread(_objectSpread({\n    alignItems: 'baseline',\n    borderWidth: 0,\n    borderRadius: borderRadius,\n    boxSizing: 'border-box',\n    display: 'inline-flex',\n    fontSize: 'inherit',\n    fontStyle: 'normal',\n    // Chrome recently changed button so that they use 'arial' as the font family\n    fontFamily: 'inherit',\n    fontWeight: 500,\n    maxWidth: '100%',\n    // Needed to position overlay\n    position: 'relative',\n    textAlign: 'center',\n    textDecoration: 'none',\n    transition: 'background 0.1s ease-out, box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38)',\n    whiteSpace: 'nowrap'\n  }, baseColors), {}, {\n    cursor: 'pointer',\n    height: heights[spacing],\n    lineHeight: lineHeights[spacing],\n    padding: isOnlySingleIcon ? singleIconPadding[spacing] : padding[spacing],\n    verticalAlign: verticalAlign[spacing],\n    width: shouldFitContainer ? '100%' : 'auto',\n    // justifyContent required for shouldFitContainer buttons with an icon inside\n    justifyContent: 'center',\n    // Note: we cannot disable pointer events when there is an overlay.\n    // That would be easy for styling, but it would start letting events through on disabled buttons\n    // Disabling visited styles (just using the base colors)\n    '&:visited': _objectSpread({}, baseColors),\n    '&:hover': _objectSpread(_objectSpread({}, getColors({\n      appearance: appearance,\n      key: isSelected ? 'selected' : 'hover',\n      mode: mode\n    })), {}, {\n      textDecoration: !isSelected && (appearance === 'link' || appearance === 'subtle-link') ? 'underline' : 'inherit',\n      // background, box-shadow\n      transitionDuration: '0s, 0.15s'\n    }),\n    '&:focus': _objectSpread(_objectSpread({}, getColors({\n      appearance: appearance,\n      key: isSelected ? 'focusSelected' : 'focus',\n      mode: mode\n    })), {}, {\n      boxShadow: \"0 0 0 2px \".concat(colors.boxShadowColor[appearance].focus[mode]),\n      // background, box-shadow\n      transitionDuration: '0s, 0.2s',\n      // disabling browser focus outline\n      outline: 'none'\n    }),\n    // giving active styles preference by listing them after focus\n    '&:active': _objectSpread(_objectSpread({}, getColors({\n      appearance: appearance,\n      key: isSelected ? 'selected' : 'active',\n      mode: mode\n    })), {}, {\n      // background, box-shadow\n      transitionDuration: '0s, 0s'\n    }),\n    // preventDefault prevents regular active styles from applying in Firefox\n    '&[data-firefox-is-active=\"true\"]': _objectSpread(_objectSpread({}, getColors({\n      appearance: appearance,\n      key: isSelected ? 'selected' : 'active',\n      mode: mode\n    })), {}, {\n      // background, box-shadow\n      transitionDuration: '0s, 0s'\n    }),\n    // Giving disabled styles preference over active by listing them after.\n    // Not using '&:disabled' because :disabled is not a valid state for all element types\n    // so we are targeting the attribute\n    // Attributes have the same specificity a pesudo classes so we are overriding :disabled here\n    '&[disabled]': _objectSpread(_objectSpread({}, getColors({\n      appearance: appearance,\n      key: 'disabled',\n      mode: mode\n    })), {}, {\n      cursor: 'not-allowed',\n      textDecoration: 'none'\n    }),\n    '&[data-has-overlay=\"true\"]': {\n      cursor: 'default',\n      textDecoration: 'none'\n    },\n    // disabling hover and active color changes when there is an overlay, but the button is not disabled\n    '&[data-has-overlay=\"true\"]:not([disabled]):hover, &[data-has-overlay=\"true\"]:not([disabled]):active': _objectSpread({}, getColors({\n      appearance: appearance,\n      key: isSelected ? 'selected' : 'default',\n      mode: mode\n    })),\n    '&::-moz-focus-inner': {\n      border: 0,\n      margin: 0,\n      padding: 0\n    }\n  });\n} // inline-flex child\n\nexport function getIconStyle(_ref4) {\n  var spacing = _ref4.spacing;\n  return {\n    alignSelf: 'center',\n    display: 'flex',\n    // icon size cannot grow and shrink\n    flexGrow: 0,\n    flexShrink: 0,\n    lineHeight: 0,\n    fontSize: 0,\n    userSelect: 'none',\n    margin: spacing === 'none' ? 0 : innerMargin.icon\n  };\n} // inline-flex child\n\nexport function getContentStyle(_ref5) {\n  var spacing = _ref5.spacing;\n  return {\n    margin: spacing === 'none' ? 0 : innerMargin.content,\n    // content can grow and shrink\n    flexGrow: 1,\n    flexShrink: 1,\n    // ellipsis for overflow text\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap'\n  };\n}\nexport function getFadingCss(_ref6) {\n  var hasOverlay = _ref6.hasOverlay;\n  return {\n    transition: 'opacity 0.3s',\n    opacity: hasOverlay ? 0 : 1\n  };\n}\nexport var overlayCss = {\n  // stretching to full width / height of button\n  // this is important as we need it to still block\n  // event if clicking in the button's own padding\n  position: 'absolute',\n  left: 0,\n  top: 0,\n  right: 0,\n  bottom: 0,\n  // Putting all children in the center\n  display: 'flex',\n  justifyContent: 'center',\n  alignItems: 'center'\n};","/**\n * The type of Redux action which changes Google API state.\n *\n * {\n *     type: SET_GOOGLE_API_STATE\n * }\n * @public\n */\nexport const SET_GOOGLE_API_STATE = 'SET_GOOGLE_API_STATE';\n\n/**\n * The type of Redux action which changes Google API profile state.\n *\n * {\n *     type: SET_GOOGLE_API_PROFILE\n * }\n * @public\n */\nexport const SET_GOOGLE_API_PROFILE = 'SET_GOOGLE_API_PROFILE';\n","/* global $, APP */\n\nimport {\n    NOTIFICATION_TIMEOUT,\n    showErrorNotification,\n    showNotification,\n    showWarningNotification\n} from '../../../react/features/notifications';\n\nconst messageHandler = {\n    OK: 'dialog.OK',\n    CANCEL: 'dialog.Cancel',\n\n    /**\n     * Returns the formatted title string.\n     *\n     * @return the title string formatted as a div.\n     */\n    _getFormattedTitleString(titleKey) {\n        const $titleString = $('<h2>');\n\n        $titleString.addClass('aui-dialog2-header-main');\n        $titleString.attr('data-i18n', titleKey);\n\n        return $('<div>').append($titleString)\n            .html();\n    },\n\n    /**\n     * Returns the dialog css classes.\n     *\n     * @return the dialog css classes\n     */\n    _getDialogClasses(size = 'small') {\n        return {\n            box: '',\n            form: '',\n            prompt: `dialog aui-layer aui-dialog2 aui-dialog2-${size}`,\n            close: 'aui-hide',\n            fade: 'aui-blanket',\n            button: 'button-control',\n            message: 'aui-dialog2-content',\n            buttons: 'aui-dialog2-footer',\n            defaultButton: 'button-control_primary',\n            title: 'aui-dialog2-header'\n        };\n    },\n\n    /**\n     * Opens new popup window for given <tt>url</tt> centered over current\n     * window.\n     *\n     * @param url the URL to be displayed in the popup window\n     * @param w the width of the popup window\n     * @param h the height of the popup window\n     * @param onPopupClosed optional callback function called when popup window\n     *        has been closed.\n     *\n     * @returns {object} popup window object if opened successfully or undefined\n     *          in case we failed to open it(popup blocked)\n     */\n    // eslint-disable-next-line max-params\n    openCenteredPopup(url, w, h, onPopupClosed) {\n        const l = window.screenX + (window.innerWidth / 2) - (w / 2);\n        const t = window.screenY + (window.innerHeight / 2) - (h / 2);\n        const popup = window.open(\n            url, '_blank',\n            String(`top=${t}, left=${l}, width=${w}, height=${h}`));\n\n        if (popup && onPopupClosed) {\n            const pollTimer = window.setInterval(() => {\n                if (popup.closed !== false) {\n                    window.clearInterval(pollTimer);\n                    onPopupClosed();\n                }\n            }, 200);\n        }\n\n        return popup;\n    },\n\n    /**\n     * Shows an error dialog to the user.\n     *\n     * @param {object} props - The properties to pass to the\n     * showErrorNotification action.\n     */\n    showError(props) {\n        APP.store.dispatch(showErrorNotification(props));\n    },\n\n    /**\n     * Shows a warning dialog to the user.\n     *\n     * @param {object} props - The properties to pass to the\n     * showWarningNotification action.\n     */\n    showWarning(props) {\n        APP.store.dispatch(showWarningNotification(props));\n    },\n\n    /**\n     * Displays a notification about participant action.\n     * @param displayName the display name of the participant that is\n     * associated with the notification.\n     * @param displayNameKey the key from the language file for the display\n     * name. Only used if displayName is not provided.\n     * @param cls css class for the notification\n     * @param messageKey the key from the language file for the text of the\n     * message.\n     * @param messageArguments object with the arguments for the message.\n     * @param optional configurations for the notification (e.g. timeout)\n     */\n    participantNotification( // eslint-disable-line max-params\n            displayName,\n            displayNameKey,\n            cls,\n            messageKey,\n            messageArguments,\n            timeout = NOTIFICATION_TIMEOUT) {\n        APP.store.dispatch(showNotification({\n            descriptionArguments: messageArguments,\n            descriptionKey: messageKey,\n            titleKey: displayNameKey,\n            title: displayName\n        },\n        timeout));\n    }\n};\n\nexport default messageHandler;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","// FIXME: change to '../API' when we update to webpack2. If we do this now all\n// files from API modules will be included in external_api.js.\nimport { PostMessageTransportBackend, Transport } from '@jitsi/js-utils/transport';\n\nimport { getJitsiMeetGlobalNS } from '../../react/features/base/util';\nimport { API_ID } from '../API/constants';\n\n\nexport {\n    PostMessageTransportBackend,\n    Transport\n};\n\n/**\n * Option for the default low level transport.\n *\n * @type {Object}\n */\nconst postisOptions = {};\n\nif (typeof API_ID === 'number') {\n    postisOptions.scope = `jitsi_meet_external_api_${API_ID}`;\n}\n\n/**\n * The instance of Transport class that will be used by Jitsi Meet.\n *\n * @type {Transport}\n */\nlet transport;\n\n/**\n * Returns the instance of Transport class that will be used by Jitsi Meet.\n *\n * @returns {Transport}\n */\nexport function getJitsiMeetTransport() {\n    if (!transport) {\n        transport = new Transport({ backend: new PostMessageTransportBackend({ postisOptions }) });\n    }\n\n    return transport;\n}\n\n/**\n * Sets the transport to passed transport.\n *\n * @param {Object} externalTransportBackend - The new transport.\n * @returns {void}\n */\ngetJitsiMeetGlobalNS().setExternalTransportBackend = externalTransportBackend =>\n    transport.setBackend(externalTransportBackend);\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { SET_MAX_RECEIVER_VIDEO_QUALITY, SET_PREFERRED_VIDEO_QUALITY } from './actionTypes';\nimport { VIDEO_QUALITY_LEVELS } from './constants';\nimport logger from './logger';\n\n/**\n * Sets the max frame height the user prefers to send and receive from the\n * remote participants.\n *\n * @param {number} preferredVideoQuality - The max video resolution to send and\n * receive.\n * @returns {{\n *     type: SET_PREFERRED_VIDEO_QUALITY,\n *     preferredVideoQuality: number\n * }}\n */\nexport function setPreferredVideoQuality(preferredVideoQuality: number) {\n    return {\n        type: SET_PREFERRED_VIDEO_QUALITY,\n        preferredVideoQuality\n    };\n}\n\n/**\n * Sets the max frame height that should be received from remote videos.\n *\n * @param {number} maxReceiverVideoQuality - The max video frame height to\n * receive.\n * @returns {{\n *     type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n *     maxReceiverVideoQuality: number\n * }}\n */\nexport function setMaxReceiverVideoQuality(maxReceiverVideoQuality: number) {\n    return {\n        type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n        maxReceiverVideoQuality\n    };\n}\n\n\n/**\n * Sets the maximum video size the local participant should send and receive from\n * remote participants.\n *\n * @param {number} frameHeight - The user preferred max frame height for send and\n * receive video.\n * @returns {void}\n */\nexport function setVideoQuality(frameHeight: number) {\n    return (dispatch: Dispatch<any>) => {\n        if (frameHeight < VIDEO_QUALITY_LEVELS.LOW) {\n            logger.error(`Invalid frame height for video quality - ${frameHeight}`);\n\n            return;\n        }\n\n        dispatch(setPreferredVideoQuality(Math.min(frameHeight, VIDEO_QUALITY_LEVELS.HIGH)));\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { toggleScreensharing } from '../../base/tracks';\n\nexport type Props = {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n     dispatch: Dispatch<any>,\n\n    /**\n     * Whether or not the dialog was opened for the audio screen sharing flow or the normal one.\n     */\n    _isAudioScreenShareWarning: Boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n *  Component that displays the share audio helper dialog.\n */\nclass ShareScreenWarningDialog extends Component<Props> {\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this._onStopSharing = this._onStopSharing.bind(this);\n    }\n\n    _onStopSharing: () => boolean;\n\n    /**\n     * Stop current screen sharing session.\n     *\n     * @returns {boolean}\n     */\n    _onStopSharing() {\n        // Depending on the context from which this dialog is opened we'll either be toggling off an audio only\n        // share session or a normal screen sharing one, this is indicated by the _isAudioScreenShareWarning prop.\n        this.props.dispatch(toggleScreensharing(undefined,\n            !this.props._isAudioScreenShareWarning));\n\n        return true;\n    }\n\n    /**\n     * Implements {@Component#render}.\n     *§\n     * @inheritdoc\n     */\n    render() {\n        const { t } = this.props;\n\n        let description1, description2, header1, header2, stopSharing, title;\n\n        if (this.props._isAudioScreenShareWarning) {\n            header1 = 'dialog.shareAudioWarningH1';\n            header2 = 'dialog.shareMediaWarningGenericH2';\n            description1 = 'dialog.shareAudioWarningD1';\n            description2 = 'dialog.shareAudioWarningD2';\n            title = 'dialog.shareAudioWarningTitle';\n            stopSharing = 'toolbar.stopScreenSharing';\n        } else {\n            header1 = 'dialog.shareScreenWarningTitle';\n            header2 = 'dialog.shareMediaWarningGenericH2';\n            description1 = 'dialog.shareScreenWarningD1';\n            description2 = 'dialog.shareScreenWarningD2';\n            title = 'dialog.shareScreenWarningTitle';\n            stopSharing = 'toolbar.stopAudioSharing';\n        }\n\n        return (<Dialog\n            hideCancelButton = { false }\n            okKey = { t(stopSharing) }\n            onSubmit = { this._onStopSharing }\n            titleKey = { t(title) }\n            width = { 'small' }>\n            <div className = 'share-screen-warn-dialog'>\n                <p className = 'header'> { t(header1) } </p>\n                <p className = 'description' > { t(description1) } </p>\n                <div className = 'separator-line' />\n                <p className = 'header' > { t(header2) } </p>\n                <p className = 'description' > { t(description2) } </p>\n            </div>\n        </Dialog>);\n\n    }\n}\n\nexport default translate(connect()(ShareScreenWarningDialog));\n","// @flow\n\nimport { openDialog } from '../base/dialog/actions';\nimport { browser } from '../base/lib-jitsi-meet';\nimport { shouldHideShareAudioHelper } from '../base/settings';\nimport { toggleScreensharing } from '../base/tracks';\n\nimport { SET_SCREEN_AUDIO_SHARE_STATE, SET_SCREENSHARE_CAPTURE_FRAME_RATE } from './actionTypes';\nimport { ShareAudioDialog } from './components';\nimport ShareMediaWarningDialog from './components/ShareScreenWarningDialog';\nimport { isAudioOnlySharing, isScreenVideoShared } from './functions';\n\n/**\n * Updates the current known status of the shared video.\n *\n * @param {boolean} isSharingAudio - Is audio currently being shared or not.\n * @returns {{\n *     type: SET_SCREEN_AUDIO_SHARE_STATE,\n *     isSharingAudio: boolean\n * }}\n */\nexport function setScreenAudioShareState(isSharingAudio: boolean) {\n    return {\n        type: SET_SCREEN_AUDIO_SHARE_STATE,\n        isSharingAudio\n    };\n}\n\n/**\n * Updates the capture frame rate for screenshare in redux.\n *\n * @param {number} captureFrameRate - The frame rate to be used for screenshare.\n * @returns {{\n *      type: SET_SCREENSHARE_CAPTURE_FRAME_RATE,\n *      captureFrameRate: number\n * }}\n */\nexport function setScreenshareFramerate(captureFrameRate: number) {\n    return {\n        type: SET_SCREENSHARE_CAPTURE_FRAME_RATE,\n        captureFrameRate\n    };\n}\n\n/**\n * Start the audio only screen sharing flow. Function will switch between off and on states depending on the context.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function startAudioScreenShareFlow() {\n    return (dispatch: Object => Object, getState: () => any) => {\n        const state = getState();\n        const audioOnlySharing = isAudioOnlySharing(state);\n\n        // If we're already in a normal screen sharing session, warn the user.\n        if (isScreenVideoShared(state)) {\n            dispatch(openDialog(ShareMediaWarningDialog, { _isAudioScreenShareWarning: true }));\n\n            return;\n        }\n\n        // If users opted out of the helper dialog toggle directly.\n        // If we're in an electron environment the helper dialog is not needed as there's only one option\n        // available for audio screen sharing, namely full window audio.\n        // If we're already sharing audio, toggle off.\n        if (shouldHideShareAudioHelper(state) || browser.isElectron() || audioOnlySharing) {\n            // We don't want to explicity set the screens share state, by passing undefined we let the\n            // underlying logic decide if it's on or off.\n            dispatch(toggleScreensharing(undefined, true));\n\n            return;\n        }\n\n        dispatch(openDialog(ShareAudioDialog));\n    };\n}\n\n/**\n * Start normal screen sharing flow.Function will switch between off and on states depending on the context, and if\n * not explicity told otherwise.\n *\n * @param {boolean} enabled - Explicitly set the screen sharing state. This has been kept for backward compatibility\n * with the external API exposed by the iframe, even though it might not be used.\n * @returns {void}\n */\nexport function startScreenShareFlow(enabled: boolean) {\n    return (dispatch: Object => Object, getState: () => any) => {\n        const state = getState();\n        const audioOnlySharing = isAudioOnlySharing(state);\n\n        // If we're in an audio screen sharing session, warn the user.\n        if (audioOnlySharing) {\n            dispatch(openDialog(ShareMediaWarningDialog, { _isAudioScreenShareWarning: false }));\n\n            return;\n        }\n\n        dispatch(toggleScreensharing(enabled));\n    };\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n","export * from './actions';\nexport * from './actionTypes';\n","/* @flow */\n\nimport { toState } from '../redux';\nimport { getPropertyValue } from '../settings';\n\nimport { VIDEO_MUTISM_AUTHORITY } from './constants';\n\n\n// XXX The configurations/preferences/settings startWithAudioMuted and startWithVideoMuted were introduced for\n// conferences/meetings. So it makes sense for these to not be considered outside of conferences/meetings\n// (e.g. WelcomePage). Later on, though, we introduced a \"Video <-> Voice\" toggle on the WelcomePage which utilizes\n// startAudioOnly outside of conferences/meetings so that particular configuration/preference/setting employs slightly\n// exclusive logic.\nconst START_WITH_AUDIO_VIDEO_MUTED_SOURCES = {\n    // We have startWithAudioMuted and startWithVideoMuted here:\n    config: true,\n    settings: true,\n\n    // XXX We've already overwritten base/config with urlParams. However,\n    // settings are more important than the server-side config.\n    // Consequently, we need to read from urlParams anyway:\n    urlParams: true,\n\n    // We don't have startWithAudioMuted and startWithVideoMuted here:\n    jwt: false\n};\n\n/**\n * Determines whether audio is currently muted.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean}\n */\nexport function isAudioMuted(stateful: Function | Object) {\n    return Boolean(toState(stateful)['features/base/media'].audio.muted);\n}\n\n/**\n * Determines whether video is currently muted by the audio-only authority.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean}\n */\nexport function isVideoMutedByAudioOnly(stateful: Function | Object) {\n    return (\n        _isVideoMutedByAuthority(stateful, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY));\n}\n\n/**\n * Determines whether video is currently muted by a specific\n * {@code VIDEO_MUTISM_AUTHORITY}.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @param {number} videoMutismAuthority - The {@code VIDEO_MUTISM_AUTHORITY}\n * which is to be checked whether it has muted video.\n * @returns {boolean} If video is currently muted by the specified\n * {@code videoMutismAuthority}, then {@code true}; otherwise, {@code false}.\n */\nfunction _isVideoMutedByAuthority(\n        stateful: Function | Object,\n        videoMutismAuthority: number) {\n    const { muted } = toState(stateful)['features/base/media'].video;\n\n    // eslint-disable-next-line no-bitwise\n    return Boolean(muted & videoMutismAuthority);\n}\n\n/**\n * Computes the startWithAudioMuted by retrieving its values from config, URL and settings.\n *\n * @param {Object|Function} stateful - The redux state object or {@code getState} function.\n * @returns {boolean} - The computed startWithAudioMuted value that will be used.\n */\nexport function getStartWithAudioMuted(stateful: Object | Function) {\n    return Boolean(getPropertyValue(stateful, 'startWithAudioMuted', START_WITH_AUDIO_VIDEO_MUTED_SOURCES));\n}\n\n/**\n * Computes the startWithVideoMuted by retrieving its values from config, URL and settings.\n *\n * @param {Object|Function} stateful - The redux state object or {@code getState} function.\n * @returns {boolean} - The computed startWithVideoMuted value that will be used.\n */\nexport function getStartWithVideoMuted(stateful: Object | Function) {\n    return Boolean(getPropertyValue(stateful, 'startWithVideoMuted', START_WITH_AUDIO_VIDEO_MUTED_SOURCES));\n}\n\n/**\n * Determines whether video is currently muted by the user authority.\n *\n * @param {Function|Object} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {boolean}\n */\nexport function isVideoMutedByUser(stateful: Function | Object) {\n    return _isVideoMutedByAuthority(stateful, VIDEO_MUTISM_AUTHORITY.USER);\n}\n\n/**\n * Determines whether a specific videoTrack should be rendered.\n *\n * @param {Track} videoTrack - The video track which is to be rendered.\n * @param {boolean} waitForVideoStarted - True if the specified videoTrack\n * should be rendered only after its associated video has started;\n * otherwise, false.\n * @returns {boolean} True if the specified videoTrack should be renderd;\n * otherwise, false.\n */\nexport function shouldRenderVideoTrack(\n        videoTrack: ?{ muted: boolean, videoStarted: boolean },\n        waitForVideoStarted: boolean) {\n    return (\n        videoTrack\n            && !videoTrack.muted\n            && (!waitForVideoStarted || videoTrack.videoStarted));\n}\n","import JitsiMeetJS from '../lib-jitsi-meet';\nimport {\n    getUserSelectedOutputDeviceId,\n    updateSettings\n} from '../settings';\n\nimport {\n    ADD_PENDING_DEVICE_REQUEST,\n    CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n    DEVICE_PERMISSIONS_CHANGED,\n    NOTIFY_CAMERA_ERROR,\n    NOTIFY_MIC_ERROR,\n    REMOVE_PENDING_DEVICE_REQUESTS,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE,\n    UPDATE_DEVICE_LIST\n} from './actionTypes';\nimport {\n    areDeviceLabelsInitialized,\n    getDeviceIdByLabel,\n    getDeviceLabelById,\n    getDevicesFromURL,\n    setAudioOutputDeviceId\n} from './functions';\nimport logger from './logger';\n\n/**\n * Maps the WebRTC string for device type to the keys used to store configure,\n * within redux, which devices should be used by default.\n */\nconst DEVICE_TYPE_TO_SETTINGS_KEYS = {\n    audioInput: {\n        currentDeviceId: 'micDeviceId',\n        userSelectedDeviceId: 'userSelectedMicDeviceId',\n        userSelectedDeviceLabel: 'userSelectedMicDeviceLabel'\n    },\n    audioOutput: {\n        currentDeviceId: 'audioOutputDeviceId',\n        userSelectedDeviceId: 'userSelectedAudioOutputDeviceId',\n        userSelectedDeviceLabel: 'userSelectedAudioOutputDeviceLabel'\n    },\n    videoInput: {\n        currentDeviceId: 'audioOutputDeviceId',\n        userSelectedDeviceId: 'userSelectedCameraDeviceId',\n        userSelectedDeviceLabel: 'userSelectedCameraDeviceLabel'\n    }\n};\n\n/**\n * Adds a pending device request.\n *\n * @param {Object} request - The request to be added.\n * @returns {{\n *      type: ADD_PENDING_DEVICE_REQUEST,\n *      request: Object\n * }}\n */\nexport function addPendingDeviceRequest(request) {\n    return {\n        type: ADD_PENDING_DEVICE_REQUEST,\n        request\n    };\n}\n\n/**\n * Configures the initial A/V devices before the conference has started.\n *\n * @returns {Function}\n */\nexport function configureInitialDevices() {\n    return (dispatch, getState) => {\n        const deviceLabels = getDevicesFromURL(getState());\n        let updateSettingsPromise;\n\n        if (deviceLabels) {\n            updateSettingsPromise = dispatch(getAvailableDevices()).then(() => {\n                const state = getState();\n\n                if (!areDeviceLabelsInitialized(state)) {\n                    // The labels are not available if the A/V permissions are\n                    // not yet granted.\n\n                    Object.keys(deviceLabels).forEach(key => {\n                        dispatch(addPendingDeviceRequest({\n                            type: 'devices',\n                            name: 'setDevice',\n                            device: {\n                                kind: key.toLowerCase(),\n                                label: deviceLabels[key]\n                            },\n                            // eslint-disable-next-line no-empty-function\n                            responseCallback() {}\n                        }));\n                    });\n\n                    return;\n                }\n\n                const newSettings = {};\n\n                Object.keys(deviceLabels).forEach(key => {\n                    const label = deviceLabels[key];\n                    const deviceId = getDeviceIdByLabel(state, label, key);\n\n                    if (deviceId) {\n                        const settingsTranslationMap = DEVICE_TYPE_TO_SETTINGS_KEYS[key];\n\n                        newSettings[settingsTranslationMap.currentDeviceId] = deviceId;\n                        newSettings[settingsTranslationMap.userSelectedDeviceId] = deviceId;\n                        newSettings[settingsTranslationMap.userSelectedDeviceLabel] = label;\n                    }\n                });\n\n                dispatch(updateSettings(newSettings));\n            });\n        } else {\n            updateSettingsPromise = Promise.resolve();\n        }\n\n        return updateSettingsPromise\n            .then(() => {\n                const userSelectedAudioOutputDeviceId = getUserSelectedOutputDeviceId(getState());\n\n                return setAudioOutputDeviceId(userSelectedAudioOutputDeviceId, dispatch)\n                    .catch(ex => logger.warn(`Failed to set audio output device.\n                        Default audio output device will be used instead ${ex}`));\n            });\n    };\n}\n\n/**\n * Queries for connected A/V input and output devices and updates the redux\n * state of known devices.\n *\n * @returns {Function}\n */\nexport function getAvailableDevices() {\n    return dispatch => new Promise(resolve => {\n        const { mediaDevices } = JitsiMeetJS;\n\n        if (mediaDevices.isDeviceListAvailable()\n                && mediaDevices.isDeviceChangeAvailable()) {\n            mediaDevices.enumerateDevices(devices => {\n                dispatch(updateDeviceList(devices));\n\n                resolve(devices);\n            });\n        } else {\n            resolve([]);\n        }\n    });\n}\n\n/**\n * Signals that an error occurred while trying to obtain a track from a camera.\n *\n * @param {Object} error - The device error, as provided by lib-jitsi-meet.\n * @param {string} error.name - The constant for the type of the error.\n * @param {string} error.message - Optional additional information about the\n * error.\n * @returns {{\n *     type: NOTIFY_CAMERA_ERROR,\n *     error: Object\n * }}\n */\nexport function notifyCameraError(error) {\n    return {\n        type: NOTIFY_CAMERA_ERROR,\n        error\n    };\n}\n\n/**\n * Signals that an error occurred while trying to obtain a track from a mic.\n *\n * @param {Object} error - The device error, as provided by lib-jitsi-meet.\n * @param {Object} error.name - The constant for the type of the error.\n * @param {string} error.message - Optional additional information about the\n * error.\n * @returns {{\n *     type: NOTIFY_MIC_ERROR,\n *     error: Object\n * }}\n */\nexport function notifyMicError(error) {\n    return {\n        type: NOTIFY_MIC_ERROR,\n        error\n    };\n}\n\n/**\n * Remove all pending device requests.\n *\n * @returns {{\n *      type: REMOVE_PENDING_DEVICE_REQUESTS\n * }}\n */\nexport function removePendingDeviceRequests() {\n    return {\n        type: REMOVE_PENDING_DEVICE_REQUESTS\n    };\n}\n\n/**\n * Signals to update the currently used audio input device.\n *\n * @param {string} deviceId - The id of the new audio input device.\n * @returns {{\n *      type: SET_AUDIO_INPUT_DEVICE,\n *      deviceId: string\n * }}\n */\nexport function setAudioInputDevice(deviceId) {\n    return {\n        type: SET_AUDIO_INPUT_DEVICE,\n        deviceId\n    };\n}\n\n/**\n * Sets the audio input device id and updates the settings\n * so they are persisted across sessions.\n *\n * @param {string} deviceId - The id of the new audio input device.\n * @returns {Function}\n */\nexport function setAudioInputDeviceAndUpdateSettings(deviceId) {\n    return function(dispatch, getState) {\n        const deviceLabel = getDeviceLabelById(getState(), deviceId, 'audioInput');\n\n        dispatch(setAudioInputDevice(deviceId));\n        dispatch(updateSettings({\n            userSelectedMicDeviceId: deviceId,\n            userSelectedMicDeviceLabel: deviceLabel\n        }));\n    };\n}\n\n/**\n * Updates the output device id.\n *\n * @param {string} deviceId - The id of the new output device.\n * @returns {Function}\n */\nexport function setAudioOutputDevice(deviceId) {\n    return function(dispatch, getState) {\n        const deviceLabel = getDeviceLabelById(getState(), deviceId, 'audioOutput');\n\n        return setAudioOutputDeviceId(deviceId, dispatch, true, deviceLabel);\n    };\n}\n\n/**\n * Signals to update the currently used video input device.\n *\n * @param {string} deviceId - The id of the new video input device.\n * @returns {{\n *      type: SET_VIDEO_INPUT_DEVICE,\n *      deviceId: string\n * }}\n */\nexport function setVideoInputDevice(deviceId) {\n    return {\n        type: SET_VIDEO_INPUT_DEVICE,\n        deviceId\n    };\n}\n\n/**\n * Sets the video input device id and updates the settings\n * so they are persisted across sessions.\n *\n * @param {string} deviceId - The id of the new video input device.\n * @returns {Function}\n */\nexport function setVideoInputDeviceAndUpdateSettings(deviceId) {\n    return function(dispatch, getState) {\n        const deviceLabel = getDeviceLabelById(getState(), deviceId, 'videoInput');\n\n        dispatch(setVideoInputDevice(deviceId));\n        dispatch(updateSettings({\n            userSelectedCameraDeviceId: deviceId,\n            userSelectedCameraDeviceLabel: deviceLabel\n        }));\n    };\n}\n\n/**\n * Signals to update the list of known audio and video devices.\n *\n * @param {Array<MediaDeviceInfo>} devices - All known available audio input,\n * audio output, and video input devices.\n * @returns {{\n *      type: UPDATE_DEVICE_LIST,\n *      devices: Array<MediaDeviceInfo>\n * }}\n */\nexport function updateDeviceList(devices) {\n    return {\n        type: UPDATE_DEVICE_LIST,\n        devices\n    };\n}\n\n/**\n * Signals to check new and old devices for newly added devices and notify.\n *\n * @param {Array<MediaDeviceInfo>} newDevices - Array of the new devices.\n * @param {Array<MediaDeviceInfo>} oldDevices - Array of the old devices.\n * @returns {{\n *      type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n *      newDevices: Array<MediaDeviceInfo>,\n *      oldDevices: Array<MediaDeviceInfo>\n * }}\n */\nexport function checkAndNotifyForNewDevice(newDevices, oldDevices) {\n    return {\n        type: CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n        newDevices,\n        oldDevices\n    };\n}\n\n/**\n * Signals that the device permissions have changed.\n *\n * @param {Object} permissions - Object with the permissions.\n * @returns {{\n *      type: DEVICE_PERMISSIONS_CHANGED,\n *      permissions: Object\n * }}\n */\nexport function devicePermissionsChanged(permissions) {\n    return {\n        type: DEVICE_PERMISSIONS_CHANGED,\n        permissions\n    };\n}\n","// @flow\n\nimport { MEDIA_TYPE } from '../media';\nimport { getTrackByMediaTypeAndParticipant } from '../tracks';\n\n/**\n * Indicates whether the test mode is enabled. When it's enabled\n * {@link TestHint} and other components from the testing package will be\n * rendered in various places across the app to help with automatic testing.\n *\n * @param {Object} state - The redux store state.\n * @returns {boolean}\n */\nexport function isTestModeEnabled(state: Object): boolean {\n    const testingConfig = state['features/base/config'].testing;\n\n    return Boolean(testingConfig && testingConfig.testMode);\n}\n\n/**\n * Returns the video type of the remote participant's video.\n *\n * @param {Store} store - The redux store.\n * @param {string} id - The participant ID for the remote video.\n * @returns {MEDIA_TYPE}\n */\nexport function getRemoteVideoType({ getState }: Object, id: String): boolean {\n    return getTrackByMediaTypeAndParticipant(getState()['features/base/tracks'], MEDIA_TYPE.VIDEO, id)?.videoType;\n}\n\n/**\n * Returns whether the last media event received for large video indicates that the video is playing, if not muted.\n *\n * @param {Store} store - The redux store.\n * @returns {boolean}\n */\nexport function isLargeVideoReceived({ getState }: Object): boolean {\n    const largeVideoParticipantId = getState()['features/large-video'].participantId;\n    const videoTrack = getTrackByMediaTypeAndParticipant(\n        getState()['features/base/tracks'], MEDIA_TYPE.VIDEO, largeVideoParticipantId);\n    const lastMediaEvent = getState()['features/large-video']?.lastMediaEvent;\n\n    return videoTrack && !videoTrack.muted && (lastMediaEvent === 'playing' || lastMediaEvent === 'canplaythrough');\n}\n\n/**\n * Returns whether the last media event received for a remote video indicates that the video is playing, if not muted.\n *\n * @param {Store} store - The redux store.\n * @param {string} id - The participant ID for the remote video.\n * @returns {boolean}\n */\nexport function isRemoteVideoReceived({ getState }: Object, id: String): boolean {\n    const videoTrack = getTrackByMediaTypeAndParticipant(getState()['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n    const lastMediaEvent = videoTrack?.lastMediaEvent;\n\n    return videoTrack && !videoTrack.muted && (lastMediaEvent === 'playing' || lastMediaEvent === 'canplaythrough');\n}\n","/**\n * The type of (redux) action which sets the preferred maximum video height that\n * should be sent to and received from remote participants.\n *\n * {\n *     type: SET_PREFERRED_VIDEO_QUALITY,\n *     preferredVideoQuality: number\n * }\n */\nexport const SET_PREFERRED_VIDEO_QUALITY = 'SET_PREFERRED_VIDEO_QUALITY';\n\n\n/**\n * The type of (redux) action which sets the maximum video height that should be\n * received from remote participants, even if the user prefers a larger video\n * height.\n *\n * {\n *     type: SET_MAX_RECEIVER_VIDEO_QUALITY,\n *     maxReceiverVideoQuality: number\n * }\n */\nexport const SET_MAX_RECEIVER_VIDEO_QUALITY = 'SET_MAX_RECEIVER_VIDEO_QUALITY';\n","/**\n * Copyright (c) 2013-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\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/* @flow */\n\nimport type { Dispatch } from 'redux';\n\nimport { showModeratedNotification } from '../../av-moderation/actions';\nimport { shouldShowModeratedNotification } from '../../av-moderation/functions';\n\nimport {\n    SET_AUDIO_MUTED,\n    SET_AUDIO_AVAILABLE,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_AVAILABLE,\n    SET_VIDEO_MUTED,\n    STORE_VIDEO_TRANSFORM,\n    TOGGLE_CAMERA_FACING_MODE\n} from './actionTypes';\nimport {\n    MEDIA_TYPE,\n    type MediaType,\n    VIDEO_MUTISM_AUTHORITY\n} from './constants';\n\n/**\n * Action to adjust the availability of the local audio.\n *\n * @param {boolean} available - True if the local audio is to be marked as\n * available or false if the local audio is not available.\n * @returns {{\n *     type: SET_AUDIO_AVAILABLE,\n *     available: boolean\n * }}\n */\nexport function setAudioAvailable(available: boolean) {\n    return {\n        type: SET_AUDIO_AVAILABLE,\n        available\n    };\n}\n\n/**\n * Action to set the muted state of the local audio.\n *\n * @param {boolean} muted - True if the local audio is to be muted or false if\n * the local audio is to be unmuted.\n * @param {boolean} ensureTrack - True if we want to ensure that a new track is\n * created if missing.\n * @returns {{\n *     type: SET_AUDIO_MUTED,\n *     ensureTrack: boolean,\n *     muted: boolean\n * }}\n */\nexport function setAudioMuted(muted: boolean, ensureTrack: boolean = false) {\n    return {\n        type: SET_AUDIO_MUTED,\n        ensureTrack,\n        muted\n    };\n}\n\n/**\n * Action to set the facing mode of the local camera.\n *\n * @param {CAMERA_FACING_MODE} cameraFacingMode - The camera facing mode to set.\n * @returns {{\n *     type: SET_CAMERA_FACING_MODE,\n *     cameraFacingMode: CAMERA_FACING_MODE\n * }}\n */\nexport function setCameraFacingMode(cameraFacingMode: string) {\n    return {\n        type: SET_CAMERA_FACING_MODE,\n        cameraFacingMode\n    };\n}\n\n/**\n * Action to adjust the availability of the local video.\n *\n * @param {boolean} available - True if the local video is to be marked as\n * available or false if the local video is not available.\n * @returns {{\n *     type: SET_VIDEO_AVAILABLE,\n *     available: boolean\n * }}\n */\nexport function setVideoAvailable(available: boolean) {\n    return {\n        type: SET_VIDEO_AVAILABLE,\n        available\n    };\n}\n\n/**\n * Action to set the muted state of the local video.\n *\n * @param {boolean} muted - True if the local video is to be muted or false if\n * the local video is to be unmuted.\n * @param {MEDIA_TYPE} mediaType - The type of media.\n * @param {number} authority - The {@link VIDEO_MUTISM_AUTHORITY} which is\n * muting/unmuting the local video.\n * @param {boolean} ensureTrack - True if we want to ensure that a new track is\n * created if missing.\n * @returns {Function}\n */\nexport function setVideoMuted(\n        muted: boolean,\n        mediaType: MediaType = MEDIA_TYPE.VIDEO,\n        authority: number = VIDEO_MUTISM_AUTHORITY.USER,\n        ensureTrack: boolean = false) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n\n        // check for A/V Moderation when trying to unmute\n        if (!muted && shouldShowModeratedNotification(MEDIA_TYPE.VIDEO, state)) {\n            ensureTrack && dispatch(showModeratedNotification(MEDIA_TYPE.VIDEO));\n\n            return;\n        }\n\n        const oldValue = state['features/base/media'].video.muted;\n\n        // eslint-disable-next-line no-bitwise\n        const newValue = muted ? oldValue | authority : oldValue & ~authority;\n\n        return dispatch({\n            type: SET_VIDEO_MUTED,\n            authority,\n            mediaType,\n            ensureTrack,\n            muted: newValue\n        });\n    };\n}\n\n/**\n * Creates an action to store the last video {@link Transform} applied to a\n * stream.\n *\n * @param {string} streamId - The ID of the stream.\n * @param {Object} transform - The {@code Transform} to store.\n * @returns {{\n *     type: STORE_VIDEO_TRANSFORM,\n *     streamId: string,\n *     transform: Object\n * }}\n */\nexport function storeVideoTransform(streamId: string, transform: Object) {\n    return {\n        type: STORE_VIDEO_TRANSFORM,\n        streamId,\n        transform\n    };\n}\n\n/**\n * Toggles the camera facing mode. Most commonly, for example, mobile devices\n * such as phones have a front/user-facing and a back/environment-facing\n * cameras. In contrast to setCameraFacingMode, allows the toggling to be\n * optimally and/or natively implemented without the overhead of separate reads\n * and writes of the current/effective camera facing mode.\n *\n * @returns {{\n *     type: TOGGLE_CAMERA_FACING_MODE\n * }}\n */\nexport function toggleCameraFacingMode() {\n    return {\n        type: TOGGLE_CAMERA_FACING_MODE\n    };\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/media');\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/conference');\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconConnectionActive, IconConnectionInactive } from '../../../base/icons';\nimport { JitsiParticipantConnectionStatus } from '../../../base/lib-jitsi-meet';\nimport { getLocalParticipant, getParticipantById } from '../../../base/participants';\nimport { Popover } from '../../../base/popover';\nimport { connect } from '../../../base/redux';\nimport AbstractConnectionIndicator, {\n    INDICATOR_DISPLAY_THRESHOLD,\n    type Props as AbstractProps,\n    type State as AbstractState\n} from '../AbstractConnectionIndicator';\n\nimport ConnectionIndicatorContent from './ConnectionIndicatorContent';\n\n/**\n * An array of display configurations for the connection indicator and its bars.\n * The ordering is done specifically for faster iteration to find a matching\n * configuration to the current connection strength percentage.\n *\n * @type {Object[]}\n */\nconst QUALITY_TO_WIDTH: Array<Object> = [\n\n    // Full (3 bars)\n    {\n        colorClass: 'status-high',\n        percent: INDICATOR_DISPLAY_THRESHOLD,\n        tip: 'connectionindicator.quality.good',\n        width: '100%'\n    },\n\n    // 2 bars\n    {\n        colorClass: 'status-med',\n        percent: 10,\n        tip: 'connectionindicator.quality.nonoptimal',\n        width: '66%'\n    },\n\n    // 1 bar\n    {\n        colorClass: 'status-low',\n        percent: 0,\n        tip: 'connectionindicator.quality.poor',\n        width: '33%'\n    }\n\n    // Note: we never show 0 bars as long as there is a connection.\n];\n\n/**\n * The type of the React {@code Component} props of {@link ConnectionIndicator}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The current condition of the user's connection, matching one of the\n     * enumerated values in the library.\n     */\n    _connectionStatus: string,\n\n    /**\n     * Whether or not the component should ignore setting a visibility class for\n     * hiding the component when the connection quality is not strong.\n     */\n    alwaysVisible: boolean,\n\n    /**\n     * The audio SSRC of this client.\n     */\n    audioSsrc: number,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n\n    /**\n     * Whether or not clicking the indicator should display a popover for more\n     * details.\n     */\n    enableStatsDisplay: boolean,\n\n    /**\n     * The font-size for the icon.\n     */\n    iconSize: number,\n\n    /**\n     * Relative to the icon from where the popover for more connection details\n     * should display.\n     */\n    statsPopoverPosition: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * Implements a React {@link Component} which displays the current connection\n * quality percentage and has a popover to show more detailed connection stats.\n *\n * @extends {Component}\n */\nclass ConnectionIndicator extends AbstractConnectionIndicator<Props, AbstractState> {\n    /**\n     * Initializes a new {@code ConnectionIndicator} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            autoHideTimeout: undefined,\n            showIndicator: false,\n            stats: {}\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const visibilityClass = this._getVisibilityClass();\n        const rootClassNames = `indicator-container ${visibilityClass}`;\n\n        const colorClass = this._getConnectionColorClass();\n        const indicatorContainerClassNames\n            = `connection-indicator indicator ${colorClass}`;\n\n        return (\n            <Popover\n                className = { rootClassNames }\n                content = { <ConnectionIndicatorContent\n                    inheritedStats = { this.state.stats }\n                    participantId = { this.props.participantId } /> }\n                disablePopover = { !this.props.enableStatsDisplay }\n                position = { this.props.statsPopoverPosition }>\n                <div className = 'popover-trigger'>\n                    <div\n                        className = { indicatorContainerClassNames }\n                        style = {{ fontSize: this.props.iconSize }}>\n                        <div className = 'connection indicatoricon'>\n                            { this._renderIcon() }\n                        </div>\n                    </div>\n                </div>\n            </Popover>\n        );\n    }\n\n    /**\n     * Returns a CSS class that interprets the current connection status as a\n     * color.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getConnectionColorClass() {\n        const { _connectionStatus } = this.props;\n        const { percent } = this.state.stats;\n        const { INACTIVE, INTERRUPTED } = JitsiParticipantConnectionStatus;\n\n        if (_connectionStatus === INACTIVE) {\n            return 'status-other';\n        } else if (_connectionStatus === INTERRUPTED) {\n            return 'status-lost';\n        } else if (typeof percent === 'undefined') {\n            return 'status-high';\n        }\n\n        return this._getDisplayConfiguration(percent).colorClass;\n    }\n\n    /**\n     * Get the icon configuration from QUALITY_TO_WIDTH which has a percentage\n     * that matches or exceeds the passed in percentage. The implementation\n     * assumes QUALITY_TO_WIDTH is already sorted by highest to lowest\n     * percentage.\n     *\n     * @param {number} percent - The connection percentage, out of 100, to find\n     * the closest matching configuration for.\n     * @private\n     * @returns {Object}\n     */\n    _getDisplayConfiguration(percent: number): Object {\n        return QUALITY_TO_WIDTH.find(x => percent >= x.percent) || {};\n    }\n\n    /**\n     * Returns additional class names to add to the root of the component. The\n     * class names are intended to be used for hiding or showing the indicator.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getVisibilityClass() {\n        const { _connectionStatus } = this.props;\n\n        return this.state.showIndicator\n            || this.props.alwaysVisible\n            || _connectionStatus === JitsiParticipantConnectionStatus.INTERRUPTED\n            || _connectionStatus === JitsiParticipantConnectionStatus.INACTIVE\n            ? 'show-connection-indicator' : 'hide-connection-indicator';\n    }\n\n    /**\n     * Creates a ReactElement for displaying an icon that represents the current\n     * connection quality.\n     *\n     * @returns {ReactElement}\n     */\n    _renderIcon() {\n        if (this.props._connectionStatus\n            === JitsiParticipantConnectionStatus.INACTIVE) {\n            return (\n                <span className = 'connection_ninja'>\n                    <Icon\n                        className = 'icon-ninja'\n                        size = '1.5em'\n                        src = { IconConnectionInactive } />\n                </span>\n            );\n        }\n\n        let iconWidth;\n        let emptyIconWrapperClassName = 'connection_empty';\n\n        if (this.props._connectionStatus\n            === JitsiParticipantConnectionStatus.INTERRUPTED) {\n\n            // emptyIconWrapperClassName is used by the torture tests to\n            // identify lost connection status handling.\n            emptyIconWrapperClassName = 'connection_lost';\n            iconWidth = '0%';\n        } else if (typeof this.state.stats.percent === 'undefined') {\n            iconWidth = '100%';\n        } else {\n            const { percent } = this.state.stats;\n\n            iconWidth = this._getDisplayConfiguration(percent).width;\n        }\n\n        return [\n            <span\n                className = { emptyIconWrapperClassName }\n                key = 'icon-empty'>\n                <Icon\n                    className = 'icon-gsm-bars'\n                    size = '1em'\n                    src = { IconConnectionActive } />\n            </span>,\n            <span\n                className = 'connection_full'\n                key = 'icon-full'\n                style = {{ width: iconWidth }}>\n                <Icon\n                    className = 'icon-gsm-bars'\n                    size = '1em'\n                    src = { IconConnectionActive } />\n            </span>\n        ];\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { participantId } = ownProps;\n    const participant\n        = participantId ? getParticipantById(state, participantId) : getLocalParticipant(state);\n\n    return {\n        _connectionStatus: participant?.connectionStatus\n    };\n}\nexport default translate(connect(_mapStateToProps)(ConnectionIndicator));\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/redux');\n","// @flow\n\nimport JitsiMeetJS from '../../../react/features/base/lib-jitsi-meet';\n\n\n/**\n * Checks if the token for authentication is available.\n *\n * @param {Object} config - Configuration state object from store.\n * @returns {boolean}\n */\nexport const isTokenAuthEnabled = (config: Object) =>\n    typeof config.tokenAuthUrl === 'string'\n    && config.tokenAuthUrl.length;\n\n\n/**\n * Token url.\n *\n * @param {Object} config - Configuration state object from store.\n * @returns {string}\n */\nexport const getTokenAuthUrl = (config: Object) =>\n    JitsiMeetJS.util.AuthUtil.getTokenAuthUrl.bind(null,\n         config.tokenAuthUrl);\n","/* global $, APP, interfaceConfig */\n\n/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { browser } from '../../../react/features/base/lib-jitsi-meet';\nimport { isTestModeEnabled } from '../../../react/features/base/testing';\nimport { ORIENTATION, LargeVideoBackground, updateLastLargeVideoMediaEvent } from '../../../react/features/large-video';\nimport { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout';\n/* eslint-enable no-unused-vars */\nimport UIUtil from '../util/UIUtil';\n\nimport Filmstrip from './Filmstrip';\nimport LargeContainer from './LargeContainer';\n\n// FIXME should be 'video'\nexport const VIDEO_CONTAINER_TYPE = 'camera';\n\nconst FADE_DURATION_MS = 300;\n\n/**\n * List of container events that we are going to process, will be added as listener to the\n * container for every event in the list. The latest event will be stored in redux.\n */\nconst containerEvents = [\n    'abort', 'canplay', 'canplaythrough', 'emptied', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart',\n    'pause', 'play', 'playing', 'ratechange', 'stalled', 'suspend', 'waiting'\n];\n\n/**\n * Returns an array of the video dimensions, so that it keeps it's aspect\n * ratio and fits available area with it's larger dimension. This method\n * ensures that whole video will be visible and can leave empty areas.\n *\n * @param videoWidth the width of the video to position\n * @param videoHeight the height of the video to position\n * @param videoSpaceWidth the width of the available space\n * @param videoSpaceHeight the height of the available space\n * @return an array with 2 elements, the video width and the video height\n */\nfunction computeDesktopVideoSize( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight) {\n    if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) {\n        // Avoid NaN values caused by division by 0.\n        return [ 0, 0 ];\n    }\n\n    const aspectRatio = videoWidth / videoHeight;\n    let availableWidth = Math.max(videoWidth, videoSpaceWidth);\n    let availableHeight = Math.max(videoHeight, videoSpaceHeight);\n\n    if (interfaceConfig.VERTICAL_FILMSTRIP) {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceWidth -= Filmstrip.getVerticalFilmstripWidth();\n    } else {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceHeight -= Filmstrip.getFilmstripHeight();\n    }\n\n    if (availableWidth / aspectRatio >= videoSpaceHeight) {\n        availableHeight = videoSpaceHeight;\n        availableWidth = availableHeight * aspectRatio;\n    }\n\n    if (availableHeight * aspectRatio >= videoSpaceWidth) {\n        availableWidth = videoSpaceWidth;\n        availableHeight = availableWidth / aspectRatio;\n    }\n\n    return [ availableWidth, availableHeight ];\n}\n\n\n/**\n * Returns an array of the video dimensions. It respects the\n * VIDEO_LAYOUT_FIT config, to fit the video to the screen, by hiding some parts\n * of it, or to fit it to the height or width.\n *\n * @param videoWidth the original video width\n * @param videoHeight the original video height\n * @param videoSpaceWidth the width of the video space\n * @param videoSpaceHeight the height of the video space\n * @return an array with 2 elements, the video width and the video height\n */\nfunction computeCameraVideoSize( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight,\n        videoLayoutFit) {\n    if (videoWidth === 0 || videoHeight === 0 || videoSpaceWidth === 0 || videoSpaceHeight === 0) {\n        // Avoid NaN values caused by division by 0.\n        return [ 0, 0 ];\n    }\n\n    const aspectRatio = videoWidth / videoHeight;\n\n    switch (videoLayoutFit) {\n    case 'height':\n        return [ videoSpaceHeight * aspectRatio, videoSpaceHeight ];\n    case 'width':\n        return [ videoSpaceWidth, videoSpaceWidth / aspectRatio ];\n    case 'both': {\n        const videoSpaceRatio = videoSpaceWidth / videoSpaceHeight;\n        const maxZoomCoefficient = interfaceConfig.MAXIMUM_ZOOMING_COEFFICIENT\n            || Infinity;\n\n        if (videoSpaceRatio === aspectRatio) {\n            return [ videoSpaceWidth, videoSpaceHeight ];\n        }\n\n        let [ width, height ] = computeCameraVideoSize(\n            videoWidth,\n            videoHeight,\n            videoSpaceWidth,\n            videoSpaceHeight,\n            videoSpaceRatio < aspectRatio ? 'height' : 'width');\n        const maxWidth = videoSpaceWidth * maxZoomCoefficient;\n        const maxHeight = videoSpaceHeight * maxZoomCoefficient;\n\n        if (width > maxWidth) {\n            width = maxWidth;\n            height = width / aspectRatio;\n        } else if (height > maxHeight) {\n            height = maxHeight;\n            width = height * aspectRatio;\n        }\n\n        return [ width, height ];\n    }\n    default:\n        return [ videoWidth, videoHeight ];\n    }\n}\n\n/**\n * Returns an array of the video horizontal and vertical indents,\n * so that if fits its parent.\n *\n * @return an array with 2 elements, the horizontal indent and the vertical\n * indent\n */\nfunction getCameraVideoPosition( // eslint-disable-line max-params\n        videoWidth,\n        videoHeight,\n        videoSpaceWidth,\n        videoSpaceHeight) {\n    // Parent height isn't completely calculated when we position the video in\n    // full screen mode and this is why we use the screen height in this case.\n    // Need to think it further at some point and implement it properly.\n    if (UIUtil.isFullScreen()) {\n        // eslint-disable-next-line no-param-reassign\n        videoSpaceHeight = window.innerHeight;\n    }\n\n    const horizontalIndent = (videoSpaceWidth - videoWidth) / 2;\n    const verticalIndent = (videoSpaceHeight - videoHeight) / 2;\n\n    return { horizontalIndent,\n        verticalIndent };\n}\n\n/**\n * Container for user video.\n */\nexport class VideoContainer extends LargeContainer {\n    /**\n     *\n     */\n    get $video() {\n        return $('#largeVideo');\n    }\n\n    /**\n     *\n     */\n    get id() {\n        return this.userId;\n    }\n\n    /**\n     * Creates new VideoContainer instance.\n     * @param resizeContainer {Function} function that takes care of the size\n     * of the video container.\n     */\n    constructor(resizeContainer) {\n        super();\n        this.stream = null;\n        this.userId = null;\n        this.videoType = null;\n        this.localFlipX = true;\n        this.resizeContainer = resizeContainer;\n\n        /**\n         * Whether the background should fit the height of the container\n         * (portrait) or fit the width of the container (landscape).\n         *\n         * @private\n         * @type {string|null}\n         */\n        this._backgroundOrientation = null;\n\n        /**\n         * Flag indicates whether or not the background should be rendered.\n         * If the background will not be visible then it is hidden to save\n         * on performance.\n         * @type {boolean}\n         */\n        this._hideBackground = true;\n\n        this._isHidden = false;\n\n        /**\n         * Flag indicates whether or not the avatar is currently displayed.\n         * @type {boolean}\n         */\n        this.avatarDisplayed = false;\n        this.$avatar = $('#dominantSpeaker');\n\n        /**\n         * A jQuery selector of the remote connection message.\n         * @type {jQuery|HTMLElement}\n         */\n        this.$remoteConnectionMessage = $('#remoteConnectionMessage');\n\n        this.$remotePresenceMessage = $('#remotePresenceMessage');\n\n        this.$wrapper = $('#largeVideoWrapper');\n\n        /**\n         * FIXME: currently using parent() because I can't come up with name\n         * for id. We'll need to probably refactor the HTML related to the large\n         * video anyway.\n         */\n        this.$wrapperParent = this.$wrapper.parent();\n        this.avatarHeight = $('#dominantSpeakerAvatarContainer').height();\n        this.$video[0].onplaying = function(event) {\n            if (typeof resizeContainer === 'function') {\n                resizeContainer(event);\n            }\n        };\n\n        /**\n         * A Set of functions to invoke when the video element resizes.\n         *\n         * @private\n         */\n        this._resizeListeners = new Set();\n\n        this.$video[0].onresize = this._onResize.bind(this);\n\n        if (isTestModeEnabled(APP.store.getState())) {\n            const cb = name => APP.store.dispatch(updateLastLargeVideoMediaEvent(name));\n\n            containerEvents.forEach(event => {\n                this.$video[0].addEventListener(event, cb.bind(this, event));\n            });\n        }\n    }\n\n    /**\n     * Adds a function to the known subscribers of video element resize\n     * events.\n     *\n     * @param {Function} callback - The subscriber to notify when the video\n     * element resizes.\n     * @returns {void}\n     */\n    addResizeListener(callback) {\n        this._resizeListeners.add(callback);\n    }\n\n    /**\n     * Obtains media stream ID of the underlying {@link JitsiTrack}.\n     * @return {string|null}\n     */\n    getStreamID() {\n        return this.stream ? this.stream.getId() : null;\n    }\n\n    /**\n     * Get size of video element.\n     * @returns {{width, height}}\n     */\n    getStreamSize() {\n        const video = this.$video[0];\n\n\n        return {\n            width: video.videoWidth,\n            height: video.videoHeight\n        };\n    }\n\n    /**\n     * Calculate optimal video size for specified container size.\n     * @param {number} containerWidth container width\n     * @param {number} containerHeight container height\n     * @returns {{availableWidth, availableHeight}}\n     */\n    _getVideoSize(containerWidth, containerHeight) {\n        const { width, height } = this.getStreamSize();\n\n        if (this.stream && this.isScreenSharing()) {\n            return computeDesktopVideoSize(width,\n                height,\n                containerWidth,\n                containerHeight);\n        }\n\n        return computeCameraVideoSize(width,\n            height,\n            containerWidth,\n            containerHeight,\n            interfaceConfig.VIDEO_LAYOUT_FIT);\n    }\n\n    /* eslint-disable max-params */\n    /**\n     * Calculate optimal video position (offset for top left corner)\n     * for specified video size and container size.\n     * @param {number} width video width\n     * @param {number} height video height\n     * @param {number} containerWidth container width\n     * @param {number} containerHeight container height\n     * @returns {{horizontalIndent, verticalIndent}}\n     */\n    getVideoPosition(width, height, containerWidth, containerHeight) {\n        let containerWidthToUse = containerWidth;\n\n        /* eslint-enable max-params */\n        if (this.stream && this.isScreenSharing()) {\n            if (interfaceConfig.VERTICAL_FILMSTRIP) {\n                containerWidthToUse -= Filmstrip.getVerticalFilmstripWidth();\n            }\n\n            return getCameraVideoPosition(width,\n                height,\n                containerWidthToUse,\n                containerHeight);\n        }\n\n        return getCameraVideoPosition(width,\n                height,\n                containerWidthToUse,\n                containerHeight);\n\n    }\n\n    /**\n     * Updates the positioning of the remote connection presence message and the\n     * connection status message which escribes that the remote user is having\n     * connectivity issues.\n     *\n     * @returns {void}\n     */\n    positionRemoteStatusMessages() {\n        this._positionParticipantStatus(this.$remoteConnectionMessage);\n        this._positionParticipantStatus(this.$remotePresenceMessage);\n    }\n\n    /**\n     * Modifies the position of the passed in jQuery object so it displays\n     * in the middle of the video container or below the avatar.\n     *\n     * @private\n     * @returns {void}\n     */\n    _positionParticipantStatus($element) {\n        if (this.avatarDisplayed) {\n            const $avatarImage = $('#dominantSpeakerAvatarContainer');\n\n            $element.css(\n                'top',\n                $avatarImage.offset().top + $avatarImage.height() + 10);\n        } else {\n            const height = $element.height();\n            const parentHeight = $element.parent().height();\n\n            $element.css('top', (parentHeight / 2) - (height / 2));\n        }\n    }\n\n    /**\n     *\n     */\n    resize(containerWidth, containerHeight, animate = false) {\n        // XXX Prevent TypeError: undefined is not an object when the Web\n        // browser does not support WebRTC (yet).\n        if (this.$video.length === 0) {\n            return;\n        }\n        const currentLayout = getCurrentLayout(APP.store.getState());\n\n        if (currentLayout === LAYOUTS.TILE_VIEW) {\n            // We don't need to resize the large video since it won't be displayed and we'll resize when returning back\n            // to stage view.\n            return;\n        }\n\n        this.positionRemoteStatusMessages();\n\n        const [ width, height ] = this._getVideoSize(containerWidth, containerHeight);\n\n        if (width === 0 || height === 0) {\n            // We don't need to set 0 for width or height since the visibility is controlled by the visibility css prop\n            // on the largeVideoElementsContainer. Also if the width/height of the video element is 0 the attached\n            // stream won't be played. Normally if we attach a new stream we won't resize the video element until the\n            // stream has been played. But setting width/height to 0 will prevent the video from playing.\n\n            return;\n        }\n\n        if ((containerWidth > width) || (containerHeight > height)) {\n            this._backgroundOrientation = containerWidth > width ? ORIENTATION.LANDSCAPE : ORIENTATION.PORTRAIT;\n            this._hideBackground = false;\n        } else {\n            this._hideBackground = true;\n        }\n\n        this._updateBackground();\n\n        const { horizontalIndent, verticalIndent }\n            = this.getVideoPosition(width, height, containerWidth, containerHeight);\n\n        this.$wrapper.animate({\n            width,\n            height,\n\n            top: verticalIndent,\n            bottom: verticalIndent,\n\n            left: horizontalIndent,\n            right: horizontalIndent\n        }, {\n            queue: false,\n            duration: animate ? 500 : 0\n        });\n    }\n\n    /**\n     * Removes a function from the known subscribers of video element resize\n     * events.\n     *\n     * @param {Function} callback - The callback to remove from known\n     * subscribers of video resize events.\n     * @returns {void}\n     */\n    removeResizeListener(callback) {\n        this._resizeListeners.delete(callback);\n    }\n\n    /**\n     * Update video stream.\n     * @param {string} userID\n     * @param {JitsiTrack?} stream new stream\n     * @param {string} videoType video type\n     */\n    setStream(userID, stream, videoType) {\n        this.userId = userID;\n        if (this.stream === stream) {\n            // Handles the use case for the remote participants when the\n            // videoType is received with delay after turning on/off the\n            // desktop sharing.\n            if (this.videoType !== videoType) {\n                this.videoType = videoType;\n                this.resizeContainer();\n            }\n\n            return;\n        }\n\n        // detach old stream\n        if (this.stream) {\n            this.stream.detach(this.$video[0]);\n        }\n\n        this.stream = stream;\n        this.videoType = videoType;\n\n        if (!stream) {\n            return;\n        }\n\n        stream.attach(this.$video[0]);\n\n        const flipX = stream.isLocal() && this.localFlipX && !this.isScreenSharing();\n\n        this.$video.css({\n            transform: flipX ? 'scaleX(-1)' : 'none'\n        });\n\n        this._updateBackground();\n    }\n\n    /**\n     * Changes the flipX state of the local video.\n     * @param val {boolean} true if flipped.\n     */\n    setLocalFlipX(val) {\n        this.localFlipX = val;\n        if (!this.$video || !this.stream || !this.stream.isLocal()) {\n            return;\n        }\n        this.$video.css({\n            transform: this.localFlipX ? 'scaleX(-1)' : 'none'\n        });\n\n        this._updateBackground();\n    }\n\n\n    /**\n     * Check if current video stream is screen sharing.\n     * @returns {boolean}\n     */\n    isScreenSharing() {\n        return this.videoType === 'desktop';\n    }\n\n    /**\n     * Show or hide user avatar.\n     * @param {boolean} show\n     */\n    showAvatar(show) {\n        this.$avatar.css('visibility', show ? 'visible' : 'hidden');\n        this.avatarDisplayed = show;\n\n        APP.API.notifyLargeVideoVisibilityChanged(show);\n    }\n\n    /**\n     * We are doing fadeOut/fadeIn animations on parent div which wraps\n     * largeVideo, because when Temasys plugin is in use it replaces\n     * <video> elements with plugin <object> tag. In Safari jQuery is\n     * unable to store values on this plugin object which breaks all\n     * animation effects performed on it directly.\n     *\n     * TODO: refactor this since Temasys is no longer supported.\n     */\n    show() {\n        return new Promise(resolve => {\n            this.$wrapperParent.css('visibility', 'visible').fadeTo(\n                FADE_DURATION_MS,\n                1,\n                () => {\n                    this._isHidden = false;\n                    this._updateBackground();\n                    resolve();\n                }\n            );\n        });\n    }\n\n    /**\n     *\n     */\n    hide() {\n        // as the container is hidden/replaced by another container\n        // hide its avatar\n        this.showAvatar(false);\n\n        return new Promise(resolve => {\n            this.$wrapperParent.fadeTo(FADE_DURATION_MS, 0, () => {\n                this.$wrapperParent.css('visibility', 'hidden');\n                this._isHidden = true;\n                this._updateBackground();\n                resolve();\n            });\n        });\n    }\n\n    /**\n     * @return {boolean} switch on dominant speaker event if on stage.\n     */\n    stayOnStage() {\n        return false;\n    }\n\n    /**\n     * Callback invoked when the video element changes dimensions.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onResize() {\n        this._resizeListeners.forEach(callback => callback());\n    }\n\n    /**\n     * Attaches and/or updates a React Component to be used as a background for\n     * the large video, to display blurred video and fill up empty space not\n     * taken up by the large video.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateBackground() {\n        // Do not the background display on browsers that might experience\n        // performance issues from the presence of the background or if\n        // explicitly disabled.\n        if (interfaceConfig.DISABLE_VIDEO_BACKGROUND\n                || browser.isFirefox()\n                || browser.isWebKitBased()) {\n            return;\n        }\n\n        ReactDOM.render(\n            <LargeVideoBackground\n                hidden = { this._hideBackground || this._isHidden }\n                mirror = {\n                    this.stream\n                    && this.stream.isLocal()\n                    && this.localFlipX\n                }\n                orientationFit = { this._backgroundOrientation }\n                videoElement = { this.$video && this.$video[0] }\n                videoTrack = { this.stream } />,\n            document.getElementById('largeVideoBackgroundContainer')\n        );\n    }\n}\n","/*!\n  Copyright (c) 2015 Jed Watson.\n  Based on code that is Copyright 2013-2015, Facebook, Inc.\n  All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","/* @flow */\n\nimport Bourne from '@hapi/bourne';\n\nimport { reportError } from './helpers';\n\n/**\n * A list if keys to ignore when parsing.\n * @type {string[]}\n */\nconst blacklist = [ '__proto__', 'constructor', 'prototype' ];\n\n/**\n * Parses the query/search or fragment/hash parameters out of a specific URL and\n * returns them as a JS object.\n *\n * @param {URL} url - The URL to parse.\n * @param {boolean} dontParse - If falsy, some transformations (for parsing the\n * value as JSON) will be executed.\n * @param {string} source - If {@code 'search'}, the parameters will parsed out\n * of {@code url.search}; otherwise, out of {@code url.hash}.\n * @returns {Object}\n */\nexport function parseURLParams(\n        url: URL,\n        dontParse: boolean = false,\n        source: string = 'hash'): Object {\n    const paramStr = source === 'search' ? url.search : url.hash;\n    const params = {};\n    const paramParts = (paramStr && paramStr.substr(1).split('&')) || [];\n\n    // Detect and ignore hash params for hash routers.\n    if (source === 'hash' && paramParts.length === 1) {\n        const firstParam = paramParts[0];\n\n        if (firstParam.startsWith('/') && firstParam.split('&').length === 1) {\n            return params;\n        }\n    }\n\n    paramParts.forEach(part => {\n        const param = part.split('=');\n        const key = param[0];\n\n        if (!key || key.split('.').some(k => blacklist.includes(k))) {\n            return;\n        }\n\n        let value;\n\n        try {\n            value = param[1];\n\n            if (!dontParse) {\n                const decoded = decodeURIComponent(value).replace(/\\\\&/, '&');\n\n                value = decoded === 'undefined' ? undefined : Bourne.parse(decoded);\n            }\n        } catch (e) {\n            reportError(\n                e, `Failed to parse URL parameter value: ${String(value)}`);\n\n            return;\n        }\n        params[key] = value;\n    });\n\n    return params;\n}\n","/**\n * The type of redux action which stores a specific JSON Web Token (JWT) into\n * the redux store.\n *\n * {\n *     type: SET_JWT,\n *     jwt: string\n * }\n */\nexport const SET_JWT = 'SET_JWT';\n","// @flow\n\n/**\n * The type of (redux) action which sets the audio-only flag for the current\n * conference.\n *\n * {\n *     type: SET_AUDIO_ONLY,\n *     audioOnly: boolean\n * }\n */\nexport const SET_AUDIO_ONLY = 'SET_AUDIO_ONLY';\n","/**\n * The prefix of the {@code localStorage} key into which {@link storeConfig}\n * stores and from which {@link restoreConfig} restores.\n *\n * @protected\n * @type string\n */\nexport const _CONFIG_STORE_PREFIX = 'config.js';\n\n/**\n * The list of all possible UI buttons.\n *\n * @protected\n * @type Array<string>\n */\nexport const TOOLBAR_BUTTONS = [\n    'camera',\n    'chat',\n    'closedcaptions',\n    'desktop',\n    'download',\n    'embedmeeting',\n    'etherpad',\n    'feedback',\n    'filmstrip',\n    'fullscreen',\n    'hangup',\n    'help',\n    'invite',\n    'livestreaming',\n    'microphone',\n    'mute-everyone',\n    'mute-video-everyone',\n    'participants-pane',\n    'profile',\n    'raisehand',\n    'recording',\n    'security',\n    'select-background',\n    'settings',\n    'shareaudio',\n    'sharedvideo',\n    'shortcuts',\n    'stats',\n    'tileview',\n    'toggle-camera',\n    'videoquality'\n];\n","// @flow\n\nimport {\n    ENDPOINT_MESSAGE_RECEIVED,\n    REMOVE_TRANSCRIPT_MESSAGE,\n    TOGGLE_REQUESTING_SUBTITLES,\n    UPDATE_TRANSCRIPT_MESSAGE\n} from './actionTypes';\n\n/**\n * Signals that a participant sent an endpoint message on the data channel.\n *\n * @param {Object} participant - The participant details sending the message.\n * @param {Object} json - The json carried by the endpoint message.\n * @returns {{\n *      type: ENDPOINT_MESSAGE_RECEIVED,\n *      participant: Object,\n *      json: Object\n * }}\n */\nexport function endpointMessageReceived(participant: Object, json: Object) {\n    return {\n        type: ENDPOINT_MESSAGE_RECEIVED,\n        participant,\n        json\n    };\n}\n\n/**\n * Signals that a transcript has to be removed from the state.\n *\n * @param {string} transcriptMessageID - The message_id to be removed.\n * @returns {{\n *      type: REMOVE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n * }}\n */\nexport function removeTranscriptMessage(transcriptMessageID: string) {\n    return {\n        type: REMOVE_TRANSCRIPT_MESSAGE,\n        transcriptMessageID\n    };\n}\n\n/**\n * Signals that a transcript with the given message_id to be added or updated\n * is received.\n *\n * @param {string} transcriptMessageID -The transcript message_id to be updated.\n * @param {Object} newTranscriptMessage - The updated transcript message.\n * @returns {{\n *      type: UPDATE_TRANSCRIPT_MESSAGE,\n *      transcriptMessageID: string,\n *      newTranscriptMessage: Object\n * }}\n */\nexport function updateTranscriptMessage(transcriptMessageID: string,\n        newTranscriptMessage: Object) {\n    return {\n        type: UPDATE_TRANSCRIPT_MESSAGE,\n        transcriptMessageID,\n        newTranscriptMessage\n    };\n}\n\n/**\n * Signals that the local user has toggled the ClosedCaption button.\n *\n * @returns {{\n *      type: TOGGLE_REQUESTING_SUBTITLES\n * }}\n */\nexport function toggleRequestingSubtitles() {\n    return {\n        type: TOGGLE_REQUESTING_SUBTITLES\n    };\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar ChevronDownIcon = function ChevronDownIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M8.292 10.293a1.009 1.009 0 0 0 0 1.419l2.939 2.965c.218.215.5.322.779.322s.556-.107.769-.322l2.93-2.955a1.01 1.01 0 0 0 0-1.419.987.987 0 0 0-1.406 0l-2.298 2.317-2.307-2.327a.99.99 0 0 0-1.406 0z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronDownIcon.displayName = 'ChevronDownIcon';\nvar _default = ChevronDownIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar ErrorIcon = function ErrorIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M13.416 4.417a2.002 2.002 0 0 0-2.832 0l-6.168 6.167a2.002 2.002 0 0 0 0 2.833l6.168 6.167a2.002 2.002 0 0 0 2.832 0l6.168-6.167a2.002 2.002 0 0 0 0-2.833l-6.168-6.167z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M12 14a1 1 0 0 1-1-1V8a1 1 0 0 1 2 0v5a1 1 0 0 1-1 1m0 3a1 1 0 0 1 0-2 1 1 0 0 1 0 2\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nErrorIcon.displayName = 'ErrorIcon';\nvar _default = ErrorIcon;\nexports.default = _default;","// @flow\n\nimport { getFakeParticipants } from '../base/participants';\n\nimport { VIDEO_PLAYER_PARTICIPANT_NAME, YOUTUBE_PLAYER_PARTICIPANT_NAME } from './constants';\n\n/**\n * Validates the entered video url.\n *\n * It returns a boolean to reflect whether the url matches the youtube regex.\n *\n * @param {string} url - The entered video link.\n * @returns {string} The youtube video id if matched.\n */\nexport function getYoutubeId(url: string) {\n    if (!url) {\n        return null;\n    }\n\n    const p = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|(?:m\\.)?youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;// eslint-disable-line max-len\n    const result = url.match(p);\n\n    return result ? result[1] : null;\n}\n\n/**\n * Checks if the status is one that is actually sharing the video - playing, pause or start.\n *\n * @param {string} status - The shared video status.\n * @returns {boolean}\n */\nexport function isSharingStatus(status: string) {\n    return [ 'playing', 'pause', 'start' ].includes(status);\n}\n\n\n/**\n * Returns true if there is a video being shared in the meeting.\n *\n * @param {Object | Function} stateful - The Redux state or a function that gets resolved to the Redux state.\n * @returns {boolean}\n */\nexport function isVideoPlaying(stateful: Object | Function): boolean {\n    let videoPlaying = false;\n\n    // eslint-disable-next-line no-unused-vars\n    for (const [ id, p ] of getFakeParticipants(stateful)) {\n        if (p.name === VIDEO_PLAYER_PARTICIPANT_NAME || p.name === YOUTUBE_PLAYER_PARTICIPANT_NAME) {\n            videoPlaying = true;\n            break;\n        }\n    }\n\n    return videoPlaying;\n}\n\n","/**\n * The type of Redux action which closes a dialog\n *\n * {\n *     type: HIDE_DIALOG\n * }\n */\nexport const HIDE_DIALOG = 'HIDE_DIALOG';\n\n/**\n * The type of Redux action which begins a request to open a dialog.\n *\n * {\n *     type: OPEN_DIALOG,\n *     component: React.Component,\n *     props: PropTypes\n * }\n *\n */\nexport const OPEN_DIALOG = 'OPEN_DIALOG';\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './functions';\nexport * from './constants';\n","// @flow\n\nimport { isWindows } from '../base/environment';\nimport { isMobileBrowser } from '../base/environment/utils';\nimport { browser } from '../base/lib-jitsi-meet';\nimport { VIDEO_TYPE } from '../base/media';\nimport { getLocalVideoTrack } from '../base/tracks';\n\n/**\n * Is the current screen sharing session audio only.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function isAudioOnlySharing(state: Object) {\n    return isScreenAudioShared(state) && !isScreenVideoShared(state);\n}\n\n/**\n * State of audio sharing.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function isScreenAudioShared(state: Object) {\n    return state['features/screen-share'].isSharingAudio;\n}\n\n/**\n * Returns the visibility of the audio only screen share button. Currently only chrome browser and electron on\n * windows supports this functionality.\n *\n * @returns {boolean}\n */\nexport function isScreenAudioSupported() {\n    return (!isMobileBrowser() && browser.isChrome()) || (browser.isElectron() && isWindows());\n}\n\n/**\n * Is any screen media currently being shared, audio or video.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function isScreenMediaShared(state: Object) {\n    return isScreenAudioShared(state) || isScreenVideoShared(state);\n}\n\n/**\n * Is screen sharing currently active.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function isScreenVideoShared(state: Object) {\n    const localVideo = getLocalVideoTrack(state['features/base/tracks']);\n\n    // $FlowFixMe - No support for optional chain method calls in flow atm.\n    return localVideo?.jitsiTrack?.getVideoType() === VIDEO_TYPE.DESKTOP;\n}\n","/**\n * The type of (redux) action which sets the visibility of the audio settings popup.\n */\nexport const SET_AUDIO_SETTINGS_VISIBILITY = 'SET_AUDIO_SETTINGS_VISIBILITY';\n\n/**\n * The type of (redux) action which sets the visibility of the video settings popup.\n */\nexport const SET_VIDEO_SETTINGS_VISIBILITY = 'SET_VIDEO_SETTINGS_VISIBILITY';\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './constants';\n","// @flow\n\nimport {\n    SET_DOCUMENT_EDITING_STATUS,\n    SET_DOCUMENT_URL,\n    TOGGLE_DOCUMENT_EDITING\n} from './actionTypes';\n\n/**\n * Dispatches an action to set whether document editing has started or stopped.\n *\n * @param {boolean} editing - Whether or not a document is currently being\n * edited.\n * @returns {{\n *    type: SET_DOCUMENT_EDITING_STATUS,\n *    editing: boolean\n * }}\n */\nexport function setDocumentEditingState(editing: boolean) {\n    return {\n        type: SET_DOCUMENT_EDITING_STATUS,\n        editing\n    };\n}\n\n/**\n * Dispatches an action to set the shared document URL.\n *\n * @param {string} documentUrl - The shared document URL.\n * @returns {{\n *    type: SET_DOCUMENT_URL,\n *    documentUrl: string\n * }}\n */\nexport function setDocumentUrl(documentUrl: ?string) {\n    return {\n        type: SET_DOCUMENT_URL,\n        documentUrl\n    };\n}\n\n/**\n * Dispatches an action to show or hide Etherpad.\n *\n * @returns {{\n *    type: TOGGLE_DOCUMENT_EDITING\n * }}\n */\nexport function toggleDocument() {\n    return {\n        type: TOGGLE_DOCUMENT_EDITING\n    };\n}\n","// @flow\n\n/**\n * Constant. Rnnoise default sample size, samples of different size won't work.\n */\nexport const RNNOISE_SAMPLE_LENGTH: number = 480;\n\n/**\n *  Constant. Rnnoise only takes inputs of 480 PCM float32 samples thus 480*4.\n */\nconst RNNOISE_BUFFER_SIZE: number = RNNOISE_SAMPLE_LENGTH * 4;\n\n/**\n *  Constant. Rnnoise only takes operates on 44.1Khz float 32 little endian PCM.\n */\nconst PCM_FREQUENCY: number = 44100;\n\n/**\n * Represents an adaptor for the rnnoise library compiled to webassembly. The class takes care of webassembly\n * memory management and exposes rnnoise functionality such as PCM audio denoising and VAD (voice activity\n * detection) scores.\n */\nexport default class RnnoiseProcessor {\n    /**\n     * Rnnoise context object needed to perform the audio processing.\n     */\n    _context: ?Object;\n\n    /**\n     * State flag, check if the instance was destroyed.\n     */\n    _destroyed: boolean = false;\n\n    /**\n     * WASM interface through which calls to rnnoise are made.\n     */\n    _wasmInterface: Object;\n\n    /**\n     * WASM dynamic memory buffer used as input for rnnoise processing method.\n     */\n    _wasmPcmInput: Object;\n\n    /**\n     * The Float32Array index representing the start point in the wasm heap of the _wasmPcmInput buffer.\n     */\n    _wasmPcmInputF32Index: number;\n\n    /**\n     * WASM dynamic memory buffer used as output for rnnoise processing method.\n     */\n    _wasmPcmOutput: Object;\n\n    /**\n     * Constructor.\n     *\n     * @class\n     * @param {Object} wasmInterface - WebAssembly module interface that exposes rnnoise functionality.\n     */\n    constructor(wasmInterface: Object) {\n        // Considering that we deal with dynamic allocated memory employ exception safety strong guarantee\n        // i.e. in case of exception there are no side effects.\n        try {\n            this._wasmInterface = wasmInterface;\n\n            // For VAD score purposes only allocate the buffers once and reuse them\n            this._wasmPcmInput = this._wasmInterface._malloc(RNNOISE_BUFFER_SIZE);\n\n            if (!this._wasmPcmInput) {\n                throw Error('Failed to create wasm input memory buffer!');\n            }\n\n            this._wasmPcmOutput = this._wasmInterface._malloc(RNNOISE_BUFFER_SIZE);\n\n            if (!this._wasmPcmOutput) {\n                wasmInterface._free(this._wasmPcmInput);\n                throw Error('Failed to create wasm output memory buffer!');\n            }\n\n            // The HEAPF32.set function requires an index relative to a Float32 array view of the wasm memory model\n            // which is an array of bytes. This means we have to divide it by the size of a float to get the index\n            // relative to a Float32 Array.\n            this._wasmPcmInputF32Index = this._wasmPcmInput / 4;\n\n            this._context = this._wasmInterface._rnnoise_create();\n        } catch (error) {\n            // release can be called even if not all the components were initialized.\n            this._releaseWasmResources();\n            throw error;\n        }\n    }\n\n    /**\n     * Copy the input PCM Audio Sample to the wasm input buffer.\n     *\n     * @param {Float32Array} pcmSample - Array containing 16 bit format PCM sample stored in 32 Floats .\n     * @returns {void}\n     */\n    _copyPCMSampleToWasmBuffer(pcmSample: Float32Array) {\n        this._wasmInterface.HEAPF32.set(pcmSample, this._wasmPcmInputF32Index);\n    }\n\n    /**\n     * Convert 32 bit Float PCM samples to 16 bit Float PCM samples and store them in 32 bit Floats.\n     *\n     * @param {Float32Array} f32Array - Array containing 32 bit PCM samples.\n     * @returns {void}\n     */\n    _convertTo16BitPCM(f32Array: Float32Array) {\n        for (const [ index, value ] of f32Array.entries()) {\n            f32Array[index] = value * 0x7fff;\n        }\n    }\n\n    /**\n     * Release resources associated with the wasm context. If something goes downhill here\n     * i.e. Exception is thrown, there is nothing much we can do.\n     *\n     * @returns {void}\n     */\n    _releaseWasmResources() {\n        // For VAD score purposes only allocate the buffers once and reuse them\n        if (this._wasmPcmInput) {\n            this._wasmInterface._free(this._wasmPcmInput);\n            this._wasmPcmInput = null;\n        }\n\n        if (this._wasmPcmOutput) {\n            this._wasmInterface._free(this._wasmPcmOutput);\n            this._wasmPcmOutput = null;\n        }\n\n        if (this._context) {\n            this._wasmInterface._rnnoise_destroy(this._context);\n            this._context = null;\n        }\n    }\n\n    /**\n     * Rnnoise can only operate on a certain PCM array size.\n     *\n     * @returns {number} - The PCM sample array size as required by rnnoise.\n     */\n    getSampleLength() {\n        return RNNOISE_SAMPLE_LENGTH;\n    }\n\n    /**\n     * Rnnoise can only operate on a certain format of PCM sample namely float 32 44.1Kz.\n     *\n     * @returns {number} - PCM sample frequency as required by rnnoise.\n     */\n    getRequiredPCMFrequency() {\n        return PCM_FREQUENCY;\n    }\n\n    /**\n     * Release any resources required by the rnnoise context this needs to be called\n     * before destroying any context that uses the processor.\n     *\n     * @returns {void}\n     */\n    destroy() {\n        // Attempting to release a non initialized processor, do nothing.\n        if (this._destroyed) {\n            return;\n        }\n\n        this._releaseWasmResources();\n\n        this._destroyed = true;\n    }\n\n    /**\n     * Calculate the Voice Activity Detection for a raw Float32 PCM sample Array.\n     * The size of the array must be of exactly 480 samples, this constraint comes from the rnnoise library.\n     *\n     * @param {Float32Array} pcmFrame - Array containing 32 bit PCM samples.\n     * @returns {Float} Contains VAD score in the interval 0 - 1 i.e. 0.90 .\n     */\n    calculateAudioFrameVAD(pcmFrame: Float32Array) {\n        if (this._destroyed) {\n            throw new Error('RnnoiseProcessor instance is destroyed, please create another one!');\n        }\n\n        const pcmFrameLength = pcmFrame.length;\n\n        if (pcmFrameLength !== RNNOISE_SAMPLE_LENGTH) {\n            throw new Error(`Rnnoise can only process PCM frames of 480 samples! Input sample was:${pcmFrameLength}`);\n        }\n\n        this._convertTo16BitPCM(pcmFrame);\n        this._copyPCMSampleToWasmBuffer(pcmFrame);\n\n        return this._wasmInterface._rnnoise_process_frame(this._context, this._wasmPcmOutput, this._wasmPcmInput);\n    }\n}\n","// @flow\n\n// Script expects to find rnnoise webassembly binary in the same public path root, otherwise it won't load\n// During the build phase this needs to be taken care of manually\nimport rnnoiseWasmInit from 'rnnoise-wasm';\n\nimport RnnoiseProcessor from './RnnoiseProcessor';\n\nexport { RNNOISE_SAMPLE_LENGTH } from './RnnoiseProcessor';\nexport type { RnnoiseProcessor };\n\nlet rnnoiseModule;\n\n/**\n * Creates a new instance of RnnoiseProcessor.\n *\n * @returns {Promise<RnnoiseProcessor>}\n */\nexport function createRnnoiseProcessor() {\n    if (!rnnoiseModule) {\n        rnnoiseModule = rnnoiseWasmInit();\n    }\n\n    return rnnoiseModule.then(mod => new RnnoiseProcessor(mod));\n}\n","import { toState } from '../base/redux';\nimport { areThereNotifications } from '../notifications';\nimport { getOverlayToRender } from '../overlay';\n\n/**\n * Tells whether or not the notifications should be displayed within\n * the conference feature based on the current Redux state.\n *\n * @param {Object|Function} stateful - The redux store state.\n * @returns {boolean}\n */\nexport function shouldDisplayNotifications(stateful) {\n    const state = toState(stateful);\n    const isAnyOverlayVisible = Boolean(getOverlayToRender(state));\n    const { calleeInfoVisible } = state['features/invite'];\n\n    return areThereNotifications(state)\n      && !isAnyOverlayVisible\n      && !calleeInfoVisible;\n}\n","import { getName } from '../app/functions.web';\nimport { isSuboptimalBrowser } from '../base/environment';\nimport { translateToHTML } from '../base/i18n';\nimport { getLocalParticipant } from '../base/participants';\nimport { toState } from '../base/redux';\nimport { getBackendSafePath, getJitsiMeetGlobalNS } from '../base/util';\nimport { showWarningNotification } from '../notifications';\nimport { createRnnoiseProcessor } from '../stream-effects/rnnoise';\n\nexport * from './functions.any';\n\n/**\n * Returns the result of getWiFiStats from the global NS or does nothing\n(returns empty result).\n * Fixes a concurrency problem where we need to pass a function when creating\n * a JitsiConference, but that method is added to the context later.\n *\n * @returns {Promise}\n * @private\n */\nconst getWiFiStatsMethod = () => {\n    const gloabalNS = getJitsiMeetGlobalNS();\n\n    return gloabalNS.getWiFiStats ? gloabalNS.getWiFiStats() : Promise.resolve('{}');\n};\n\n/**\n * Shows the suboptimal experience notification if needed.\n *\n * @param {Function} dispatch - The dispatch method.\n * @param {Function} t - The translation function.\n * @returns {void}\n */\nexport function maybeShowSuboptimalExperienceNotification(dispatch, t) {\n    if (isSuboptimalBrowser()) {\n        dispatch(\n            showWarningNotification(\n                {\n                    titleKey: 'notify.suboptimalExperienceTitle',\n                    description: translateToHTML(\n                        t,\n                        'notify.suboptimalBrowserWarning',\n                        {\n                            recommendedBrowserPageLink: `${window.location.origin}/static/recommendedBrowsers.html`\n                        }\n                    )\n                }\n            )\n        );\n    }\n}\n\n/**\n * Returns an object aggregating the conference options.\n *\n * @param {Object|Function} stateful - The redux store state.\n * @returns {Object} - Options object.\n */\nexport function getConferenceOptions(stateful) {\n    const state = toState(stateful);\n\n    const options = state['features/base/config'];\n    const { locationURL } = state['features/base/connection'];\n    const { tenant } = state['features/base/jwt'];\n\n    const { email, name: nick } = getLocalParticipant(state);\n\n    if (tenant) {\n        options.siteID = tenant;\n    }\n\n    if (options.enableDisplayNameInStats && nick) {\n        options.statisticsDisplayName = nick;\n    }\n\n    if (options.enableEmailInStats && email) {\n        options.statisticsId = email;\n    }\n\n    if (locationURL) {\n        options.confID = `${locationURL.host}${getBackendSafePath(locationURL.pathname)}`;\n    }\n\n    options.applicationName = getName();\n    options.getWiFiStatsMethod = getWiFiStatsMethod;\n    options.createVADProcessor = createRnnoiseProcessor;\n\n    // Disable CallStats, if requessted.\n    if (options.disableThirdPartyRequests) {\n        delete options.callStatsID;\n        delete options.callStatsSecret;\n        delete options.getWiFiStatsMethod;\n    }\n\n    return options;\n}\n","import Postis from './postis';\n\n/**\n * The default options for postis.\n *\n * @type {Object}\n */\nconst DEFAULT_POSTIS_OPTIONS = {\n    window: window.opener || window.parent\n};\n\n/**\n * The postis method used for all messages.\n *\n * @type {string}\n */\nconst POSTIS_METHOD_NAME = 'message';\n\n/**\n * Implements message transport using the postMessage API.\n */\nexport default class PostMessageTransportBackend {\n    /**\n     * Creates new PostMessageTransportBackend instance.\n     *\n     * @param {Object} options - Optional parameters for configuration of the\n     * transport.\n     */\n    constructor({ postisOptions } = {}) {\n        // eslint-disable-next-line new-cap\n        this.postis = Postis({\n            ...DEFAULT_POSTIS_OPTIONS,\n            ...postisOptions\n        });\n\n        this._receiveCallback = () => {\n            // Do nothing until a callback is set by the consumer of\n            // PostMessageTransportBackend via setReceiveCallback.\n        };\n\n        this.postis.listen(\n            POSTIS_METHOD_NAME,\n            message => this._receiveCallback(message));\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        this.postis.destroy();\n    }\n\n    /**\n     * Sends the passed message.\n     *\n     * @param {Object} message - The message to be sent.\n     * @returns {void}\n     */\n    send(message) {\n        this.postis.send({\n            method: POSTIS_METHOD_NAME,\n            params: message\n        });\n    }\n\n    /**\n     * Sets the callback for receiving data.\n     *\n     * @param {Function} callback - The new callback.\n     * @returns {void}\n     */\n    setReceiveCallback(callback) {\n        this._receiveCallback = callback;\n    }\n}\n","import {\n    MESSAGE_TYPE_EVENT,\n    MESSAGE_TYPE_REQUEST,\n    MESSAGE_TYPE_RESPONSE\n} from './constants';\n\n/**\n* Stores the currnet transport backend that have to be used. Also implements\n* request/response mechanism.\n*/\nexport default class Transport {\n    /**\n     * Creates new instance.\n     *\n     * @param {Object} options - Optional parameters for configuration of the\n     * transport backend.\n     */\n    constructor({ backend } = {}) {\n        /**\n         * Maps an event name and listener that have been added to the Transport\n         * instance.\n         *\n         * @type {Map<string, Function>}\n         */\n        this._listeners = new Map();\n\n        /**\n         * The request ID counter used for the id property of the request. This\n         * property is used to match the responses with the request.\n         *\n         * @type {number}\n         */\n        this._requestID = 0;\n\n        /**\n         * Maps an IDs of the requests and handlers that will process the\n         * responses of those requests.\n         *\n         * @type {Map<number, Function>}\n         */\n        this._responseHandlers = new Map();\n\n        /**\n         * A set with the events and requests that were received but not\n         * processed by any listener. They are later passed on every new\n         * listener until they are processed.\n         *\n         * @type {Set<Object>}\n         */\n        this._unprocessedMessages = new Set();\n\n        /**\n         * Alias.\n         */\n        this.addListener = this.on;\n\n        if (backend) {\n            this.setBackend(backend);\n        }\n    }\n\n    /**\n     * Disposes the current transport backend.\n     *\n     * @returns {void}\n     */\n    _disposeBackend() {\n        if (this._backend) {\n            this._backend.dispose();\n            this._backend = null;\n        }\n    }\n\n    /**\n     * Handles incoming messages from the transport backend.\n     *\n     * @param {Object} message - The message.\n     * @returns {void}\n     */\n    _onMessageReceived(message) {\n        if (message.type === MESSAGE_TYPE_RESPONSE) {\n            const handler = this._responseHandlers.get(message.id);\n\n            if (handler) {\n                handler(message);\n                this._responseHandlers.delete(message.id);\n            }\n        } else if (message.type === MESSAGE_TYPE_REQUEST) {\n            this.emit('request', message.data, (result, error) => {\n                this._backend.send({\n                    type: MESSAGE_TYPE_RESPONSE,\n                    error,\n                    id: message.id,\n                    result\n                });\n            });\n        } else {\n            this.emit('event', message.data);\n        }\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        this._responseHandlers.clear();\n        this._unprocessedMessages.clear();\n        this.removeAllListeners();\n        this._disposeBackend();\n    }\n\n    /**\n     * Calls each of the listeners registered for the event named eventName, in\n     * the order they were registered, passing the supplied arguments to each.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @returns {boolean} True if the event has been processed by any listener,\n     * false otherwise.\n     */\n    emit(eventName, ...args) {\n        const listenersForEvent = this._listeners.get(eventName);\n        let isProcessed = false;\n\n        if (listenersForEvent && listenersForEvent.size) {\n            listenersForEvent.forEach(listener => {\n                isProcessed = listener(...args) || isProcessed;\n            });\n        }\n\n        if (!isProcessed) {\n            this._unprocessedMessages.add(args);\n        }\n\n        return isProcessed;\n    }\n\n    /**\n     * Adds the listener function to the listeners collection for the event\n     * named eventName.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @param {Function} listener - The listener that will be added.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    on(eventName, listener) {\n        let listenersForEvent = this._listeners.get(eventName);\n\n        if (!listenersForEvent) {\n            listenersForEvent = new Set();\n            this._listeners.set(eventName, listenersForEvent);\n        }\n\n        listenersForEvent.add(listener);\n\n        this._unprocessedMessages.forEach(args => {\n            if (listener(...args)) {\n                this._unprocessedMessages.delete(args);\n            }\n        });\n\n        return this;\n    }\n\n    /**\n     * Removes all listeners, or those of the specified eventName.\n     *\n     * @param {string} [eventName] - The name of the event. If this parameter is\n     * not specified all listeners will be removed.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    removeAllListeners(eventName) {\n        if (eventName) {\n            this._listeners.delete(eventName);\n        } else {\n            this._listeners.clear();\n        }\n\n        return this;\n    }\n\n    /**\n     * Removes the listener function from the listeners collection for the event\n     * named eventName.\n     *\n     * @param {string} eventName -  The name of the event.\n     * @param {Function} listener - The listener that will be removed.\n     * @returns {Transport} References to the instance of Transport class, so\n     * that calls can be chained.\n     */\n    removeListener(eventName, listener) {\n        const listenersForEvent = this._listeners.get(eventName);\n\n        if (listenersForEvent) {\n            listenersForEvent.delete(listener);\n        }\n\n        return this;\n    }\n\n    /**\n     * Sends the passed event.\n     *\n     * @param {Object} event - The event to be sent.\n     * @returns {void}\n     */\n    sendEvent(event = {}) {\n        if (this._backend) {\n            this._backend.send({\n                type: MESSAGE_TYPE_EVENT,\n                data: event\n            });\n        }\n    }\n\n    /**\n     * Sending request.\n     *\n     * @param {Object} request - The request to be sent.\n     * @returns {Promise}\n     */\n    sendRequest(request) {\n        if (!this._backend) {\n            return Promise.reject(new Error('No transport backend defined!'));\n        }\n\n        this._requestID++;\n\n        const id = this._requestID;\n\n        return new Promise((resolve, reject) => {\n            this._responseHandlers.set(id, ({ error, result }) => {\n                if (typeof result !== 'undefined') {\n                    resolve(result);\n\n                // eslint-disable-next-line no-negated-condition\n                } else if (typeof error !== 'undefined') {\n                    reject(error);\n                } else { // no response\n                    reject(new Error('Unexpected response format!'));\n                }\n            });\n\n            this._backend.send({\n                type: MESSAGE_TYPE_REQUEST,\n                data: request,\n                id\n            });\n        });\n    }\n\n    /**\n     * Changes the current backend transport.\n     *\n     * @param {Object} backend - The new transport backend that will be used.\n     * @returns {void}\n     */\n    setBackend(backend) {\n        this._disposeBackend();\n\n        this._backend = backend;\n        this._backend.setReceiveCallback(this._onMessageReceived.bind(this));\n    }\n}\n","/**\n * The message type for events.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_EVENT = 'event';\n\n/**\n * The message type for requests.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_REQUEST = 'request';\n\n/**\n * The message type for responses.\n *\n * @type {string}\n */\nexport const MESSAGE_TYPE_RESPONSE = 'response';\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { openURLInBrowser } from '../../../base/util';\nimport { JAAS_UPGRADE_URL } from '../../constants';\n\n/**\n * Component that renders the premium feature dialog.\n *\n * @returns {React$Element<any>}\n */\nclass PremiumFeatureDialog extends PureComponent<*> {\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this._onSubmitValue = this._onSubmitValue.bind(this);\n    }\n\n\n    _onSubmitValue: () => void;\n\n    /**\n     * Callback to be invoked when the dialog ok is pressed.\n     *\n     * @returns {boolean}\n     */\n    _onSubmitValue() {\n        openURLInBrowser(JAAS_UPGRADE_URL, true);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                hideCancelButton = { true }\n                okKey = { t('dialog.viewUpgradeOptions') }\n                onSubmit = { this._onSubmitValue }\n                titleKey = { t('dialog.viewUpgradeOptionsTitle') }\n                width = { 'small' }>\n                <span>{t('dialog.viewUpgradeOptionsContent')}</span>\n            </Dialog>\n        );\n    }\n}\n\nexport default translate(PremiumFeatureDialog);\n","// @flow\n\nimport { openDialog } from '../base/dialog';\n\nimport { SET_DETAILS } from './actionTypes';\nimport { PremiumFeatureDialog } from './components';\nimport { VPAAS_TENANT_PREFIX } from './constants';\nimport { getVpaasTenant, isFeatureDisabled, sendGetDetailsRequest } from './functions';\nimport logger from './logger';\n\n/**\n * Action used to set the jaas customer details in store.\n *\n * @param {Object} details - The customer details object.\n * @returns {Object}\n */\nfunction setCustomerDetails(details) {\n    return {\n        type: SET_DETAILS,\n        payload: details\n    };\n}\n\n/**\n * Sends a request for retrieving jaas customer details.\n *\n * @returns {Function}\n */\nexport function getCustomerDetails() {\n    return async function(dispatch: Function, getState: Function) {\n        const state = getState();\n        const baseUrl = state['features/base/config'].jaasActuatorUrl;\n        const jwt = state['features/base/jwt'].jwt;\n        const appId = getVpaasTenant(state).replace(VPAAS_TENANT_PREFIX, '');\n\n        const shouldSendRequest = Boolean(baseUrl && jwt && appId);\n\n        if (shouldSendRequest) {\n            try {\n                const details = await sendGetDetailsRequest({\n                    baseUrl,\n                    jwt,\n                    appId\n                });\n\n                dispatch(setCustomerDetails(details));\n            } catch (err) {\n                logger.error('Could not send request', err);\n            }\n        }\n    };\n}\n\n\n/**\n * Shows a dialog prompting users to upgrade, if requested feature is disabled.\n *\n * @param {string} feature - The feature to check availability for.\n *\n * @returns {Function}\n */\nexport function maybeShowPremiumFeatureDialog(feature: string) {\n    return function(dispatch: Function, getState: Function) {\n        if (isFeatureDisabled(getState(), feature)) {\n            dispatch(openDialog(PremiumFeatureDialog));\n\n            return true;\n        }\n\n        return false;\n    };\n}\n","/**\n * Alphanumeric characters.\n * @const\n */\nconst ALPHANUM\n    = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n/**\n * Hexadecimal digit characters.\n * @const\n */\nconst HEX_DIGITS = '0123456789abcdef';\n\n/**\n * Generate a string with random alphanumeric characters with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @returns {string} A string of random alphanumeric characters with the\n * specified length.\n */\nexport function randomAlphanumString(length) {\n    return _randomString(length, ALPHANUM);\n}\n\n/**\n * Get random element of array or string.\n *\n * @param {Array|string} arr - Source.\n * @returns {Array|string} Array element or string character.\n */\nexport function randomElement(arr) {\n    return arr[randomInt(0, arr.length - 1)];\n}\n\n/**\n * Returns a random hex digit.\n *\n * @returns {Array|string}\n */\nexport function randomHexDigit() {\n    return randomElement(HEX_DIGITS);\n}\n\n/**\n * Generates a string of random hexadecimal digits with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @returns {string} A string of random hexadecimal digits with the specified\n * length.\n */\nexport function randomHexString(length) {\n    return _randomString(length, HEX_DIGITS);\n}\n\n/**\n * Generates random int within the range [min, max].\n *\n * @param {number} min - The minimum value for the generated number.\n * @param {number} max - The maximum value for the generated number.\n * @returns {number} Random int number.\n */\nexport function randomInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n/**\n * Generates a string of random characters with a specific length.\n *\n * @param {number} length - The length of the string to return.\n * @param {string} characters - The characters from which the returned string is\n * to be constructed.\n * @private\n * @returns {string} A string of random characters with the specified length.\n */\nfunction _randomString(length, characters) {\n    let result = '';\n\n    for (let i = 0; i < length; ++i) {\n        result += randomElement(characters);\n    }\n\n    return result;\n}\n","import { randomElement } from './randomUtil';\n\n/*\nconst _NOUN_ = [\n];\n*/\n\n/**\n * The list of plural nouns.\n * @const\n */\nconst _PLURALNOUN_ = [\n    'Abilities', 'Absences', 'Abundances', 'Academics',\n    'Academies', 'Accents', 'Acceptances', 'Accesses', 'Accidents',\n    'Accommodations', 'Accomplishments', 'Accordances', 'Accountabilities',\n    'Accountants', 'Accounts', 'Accumulations', 'Accuracies', 'Accusations',\n    'Accused', 'Achievements', 'Acids', 'Acquisitions', 'Acres', 'Actions',\n    'Activations', 'Activists', 'Activities', 'Actors', 'Actresses', 'Acts',\n    'Adaptations', 'Addictions', 'Additions', 'Addresses', 'Adjustments',\n    'Administrations', 'Administrators', 'Admissions', 'Adolescents',\n    'Adoptions', 'Ads', 'Adults', 'Advances', 'Advantages', 'Adventures',\n    'Advertisements', 'Advertisings', 'Advice', 'Advocates', 'Affairs',\n    'Affections', 'Aftermaths', 'Afternoons', 'Agencies', 'Agendas',\n    'Agents', 'Ages', 'Aggressions', 'Agreements', 'Agricultures', 'Aides',\n    'Alarms', 'Albums', 'Alerts', 'Aliens', 'Alignments',\n    'Allegations', 'Alliances', 'Allies', 'Allocations', 'Allowances',\n    'Alternatives', 'Aluminium', 'Amateurs', 'Ambassadors', 'Ambitions',\n    'Ambulances', 'Amendments', 'Amounts', 'Analogies', 'Analyses',\n    'Analysts', 'Ancestors', 'Anchors', 'Angels', 'Angers', 'Angles',\n    'Animals', 'Animations', 'Ankles', 'Anniversaries', 'Announcements',\n    'Answers', 'Anxieties', 'Apartments', 'Apologies', 'Apparatus',\n    'Appeals', 'Appearances', 'Appetites', 'Apples', 'Applicants',\n    'Applications', 'Appointments', 'Appreciations', 'Approaches',\n    'Approvals', 'Apps', 'Aprils', 'Architects', 'Architectures',\n    'Archives', 'Areas', 'Arenas', 'Arguments', 'Armies',\n    'Arrangements', 'Arrays', 'Arrests', 'Arrivals', 'Arrows', 'Articles',\n    'Artists', 'Arts', 'Artworks', 'Ashes', 'Aspects', 'Aspirations',\n    'Assaults', 'Assemblies', 'Assertions', 'Assessments',\n    'Assets', 'Assignments', 'Assistances', 'Assistants', 'Associations',\n    'Assumptions', 'Assurances', 'Asylums', 'Athletes', 'Atmospheres',\n    'Attachments', 'Attacks', 'Attempts', 'Attendances',\n    'Attentions', 'Attitudes', 'Attorneys', 'Attractions', 'Attributes',\n    'Auctions', 'Audiences', 'Audits', 'Augusts', 'Aunts', 'Authorities',\n    'Authors', 'Autonomies', 'Autos', 'Autumns', 'Availabilities',\n    'Averages', 'Awards', 'Awarenesses', 'Babies', 'Backdrops',\n    'Backgrounds', 'Backings', 'Backs', 'Backups', 'Bacterias', 'Badges',\n    'Bags', 'Bails', 'Balances', 'Ballets', 'Balloons', 'Ballots', 'Balls',\n    'Bananas', 'Bands', 'Banks', 'Banners', 'Bans', 'Bargains', 'Barrels',\n    'Barriers', 'Bars', 'Baseballs', 'Basements', 'Bases',\n    'Basketballs', 'Baskets', 'Basses', 'Bathrooms', 'Baths', 'Bats',\n    'Batteries', 'Battlefields', 'Battles', 'Bays', 'Beaches', 'Beams',\n    'Beans', 'Bears', 'Beasts', 'Beats', 'Beauties', 'Bedrooms', 'Beds',\n    'Beefs', 'Beers', 'Bees', 'Beginnings', 'Behalves', 'Behaviours',\n    'Beings', 'Beliefs', 'Bells', 'Belts', 'Benches', 'Benchmarks', 'Bends',\n    'Beneficiaries', 'Benefits', 'Bests', 'Bets', 'Betters', 'Biases',\n    'Bicycles', 'Bids', 'Bikes', 'Bills', 'Bins', 'Biographies',\n    'Biologies', 'Birds', 'Birthdays', 'Births', 'Biscuits', 'Bishops',\n    'Bites', 'Bits', 'Blades', 'Blames', 'Blankets', 'Blanks',\n    'Blasts', 'Blends', 'Blessings', 'Blocks', 'Blogs', 'Bloods', 'Blows',\n    'Blues', 'Boards', 'Boats', 'Bonds',\n    'Bones', 'Bonus', 'Bookings', 'Books', 'Booms', 'Boosts', 'Boots',\n    'Borders', 'Bosses', 'Bottles', 'Boundaries', 'Bowls',\n    'Bows', 'Boxes', 'Brains', 'Branches', 'Brands',\n    'Breaches', 'Breads', 'Breakdowns', 'Breakfasts', 'Breaks',\n    'Breakthroughs', 'Breathings', 'Breaths', 'Breeds',\n    'Brethren', 'Bricks', 'Brides', 'Bridges', 'Broadbands', 'Broadcasters',\n    'Broadcasts', 'Browsers', 'Brushes', 'Bubbles', 'Bucks',\n    'Buddies', 'Budgets', 'Buffers', 'Bugs', 'Buildings', 'Bulks',\n    'Bullets', 'Bunches', 'Burdens', 'Bureaucracies', 'Burials', 'Burns',\n    'Buses', 'Bushes', 'Businesses', 'Businessmen', 'Butters', 'Buttons',\n    'Cabinets', 'Cabins', 'Cables', 'Cafes', 'Cakes', 'Calculations',\n    'Calls', 'Calms', 'Cameras', 'Campaigns', 'Campings', 'Camps', 'Campus',\n    'Canals', 'Candidates', 'Candles', 'Cans', 'Canvas',\n    'Capabilities', 'Capacities', 'Capitalisms', 'Capitals', 'Caps',\n    'Captains', 'Captures', 'Carbons', 'Cards', 'Careers', 'Cares',\n    'Cargoes', 'Carpets', 'Carriages', 'Carrots', 'Cars', 'Cartoons',\n    'Cases', 'Cashes', 'Casinos', 'Castles', 'Casts',\n    'Catalogues', 'Catches', 'Categories', 'Cats', 'Cattle', 'Causes',\n    'Cautions', 'Caves', 'Cds', 'Ceilings', 'Celebrations', 'Celebrities',\n    'Cells', 'Cemeteries', 'Centres', 'Cents', 'Centuries', 'Ceremonies',\n    'Certainties', 'Certificates', 'Chains', 'Chairmen', 'Chairs',\n    'Challenges', 'Chambers', 'Champions', 'Championships', 'Chances',\n    'Changes', 'Channels', 'Chaos', 'Chapters', 'Characteristics',\n    'Characters', 'Charges', 'Charities', 'Charms', 'Charters', 'Charts',\n    'Chases', 'Chats', 'Cheats', 'Checks', 'Cheeks', 'Cheers', 'Cheeses',\n    'Chefs', 'Chemicals', 'Chemistries', 'Chests', 'Chickens', 'Chiefs',\n    'Childhoods', 'Chips', 'Chocolates', 'Choices', 'Choirs', 'Chunks',\n    'Churches', 'Cigarettes', 'Cinemas', 'Circles', 'Circuits',\n    'Circulations', 'Circumstances', 'Cities', 'Citizens', 'Citizenships',\n    'Civilians', 'Civilizations', 'Claims', 'Clarities', 'Clashes',\n    'Classes', 'Classics', 'Classifications', 'Classrooms', 'Clauses',\n    'Clerks', 'Clicks', 'Clients', 'Cliffs', 'Climates', 'Climbs',\n    'Clinics', 'Clips', 'Clocks', 'Closes', 'Closures', 'Clothes',\n    'Clothings', 'Cloths', 'Clouds', 'Clubs', 'Clues', 'Clusters',\n    'Coaches', 'Coalitions', 'Coals', 'Coasts', 'Coats', 'Cocktails',\n    'Codes', 'Coffees', 'Coincidences', 'Coins', 'Colds', 'Collaborations',\n    'Collapses', 'Colleagues', 'Collections', 'Collectors', 'Colleges',\n    'Collisions', 'Colonies', 'Colours', 'Columnists', 'Columns', 'Combats',\n    'Combinations', 'Comedies', 'Comforts', 'Comics', 'Commanders',\n    'Commands', 'Commentaries', 'Commentators', 'Comments', 'Commerces',\n    'Commercials', 'Commissioners', 'Commissions', 'Commitments',\n    'Committees', 'Commodities', 'Communications', 'Communities',\n    'Companies', 'Companions', 'Comparisons', 'Compassions',\n    'Compensations', 'Competences', 'Competitions', 'Competitors',\n    'Complaints', 'Completions', 'Complexes', 'Complexities', 'Compliances',\n    'Complications', 'Components', 'Composers', 'Compositions', 'Compounds',\n    'Compromises', 'Computers', 'Concentrations', 'Conceptions', 'Concepts',\n    'Concerns', 'Concerts', 'Concessions', 'Conclusions', 'Concretes',\n    'Conditions', 'Conducts', 'Conferences', 'Confessions', 'Confidences',\n    'Configurations', 'Confirmations', 'Conflicts', 'Confrontations',\n    'Confusions', 'Congregations', 'Connections', 'Consciences',\n    'Consciousnesses', 'Consensus', 'Consents', 'Consequences',\n    'Conservations', 'Conservatives', 'Considerations', 'Consistencies',\n    'Conspiracies', 'Constituencies', 'Constitutions', 'Constraints',\n    'Constructions', 'Consultants', 'Consultations', 'Consumers',\n    'Consumptions', 'Contacts', 'Containers', 'Contempts', 'Contenders',\n    'Contentions', 'Contents', 'Contests', 'Contexts', 'Continents',\n    'Contractors', 'Contracts', 'Contradictions', 'Contraries', 'Contrasts',\n    'Contributions', 'Contributors', 'Controls', 'Controversies',\n    'Conveniences', 'Conventions', 'Conversations', 'Conversions',\n    'Convictions', 'Cookers', 'Cookings', 'Cooks', 'Coordinations',\n    'Coordinators', 'Copies', 'Coppers', 'Cops', 'Copyrights', 'Cores',\n    'Corners', 'Corporations', 'Corrections', 'Correlations',\n    'Correspondences', 'Correspondents', 'Corridors', 'Corruptions',\n    'Costs', 'Costumes', 'Cottages', 'Cottons', 'Councillors', 'Councils',\n    'Counsellings', 'Counsellors', 'Counterparts', 'Counters', 'Counties',\n    'Countries', 'Countrysides', 'Counts', 'Couples', 'Coups', 'Courages',\n    'Courses', 'Courtesies', 'Courts', 'Cousins', 'Coverages', 'Covers',\n    'Cows', 'Cracks', 'Crafts', 'Crashes', 'Creams', 'Creations',\n    'Creativities', 'Creators', 'Creatures', 'Credibilities', 'Credits',\n    'Crews', 'Cries', 'Crises', 'Criteria',\n    'Criticisms', 'Critics', 'Critiques', 'Crops', 'Crosses', 'Crowds',\n    'Crowns', 'Cruises', 'Crystals', 'Cues', 'Cults', 'Cultures',\n    'Cupboards', 'Cups', 'Cures', 'Curiosities', 'Currencies', 'Currents',\n    'Curricula', 'Curtains', 'Custodies', 'Customers', 'Customs',\n    'Cuts', 'Cuttings', 'Cycles', 'Dads', 'Dairies', 'Damages', 'Dams',\n    'Dancers', 'Dances', 'Dancings', 'Dangers', 'Darknesses', 'Darks',\n    'Databases', 'Dates', 'Daughters', 'Dawns', 'Days',\n    'Deadlines', 'Dealers', 'Deals', 'Debates', 'Debris', 'Debts',\n    'Debuts', 'Decades', 'Decembers', 'DecisionMakings', 'Decisions',\n    'Decks', 'Declarations', 'Declines', 'Decorations', 'Decreases',\n    'Dedications', 'Deeds', 'Defaults', 'Defeats', 'Defects', 'Defences',\n    'Defenders', 'Deficiencies', 'Deficits', 'Definitions', 'Degrees',\n    'Delays', 'Delegates', 'Delegations', 'Delights', 'Deliveries',\n    'Demands', 'Democracies', 'Demons', 'Demonstrations', 'Denials',\n    'Densities', 'Dentists', 'Departments', 'Departures', 'Dependences',\n    'Deployments', 'Deposits', 'Depressions', 'Depths', 'Deputies',\n    'Descents', 'Descriptions', 'Deserts', 'Designers', 'Designs',\n    'Desires', 'Desks', 'Desktops', 'Destinations', 'Destructions',\n    'Details', 'Detections', 'Detectives', 'Detentions', 'Determinations',\n    'Developments', 'Devices', 'Devils', 'Diagnoses', 'Diagrams',\n    'Dialogues', 'Diamonds', 'Diaries', 'Dictators', 'Dictionaries',\n    'Diets', 'Differences', 'Difficulties', 'Dignities', 'Dilemmas',\n    'Dimensions', 'Dinners', 'Diplomats', 'Directions', 'Directories',\n    'Directors', 'Dirts', 'Disabilities', 'Disadvantages', 'Disagreements',\n    'Disappointments', 'Disciplines', 'Disclosures',\n    'Discounts', 'Discourses', 'Discoveries', 'Discretions',\n    'Discs', 'Discussions', 'Dishes',\n    'Disks', 'Dislikes', 'Dismissals', 'Disorders', 'Displays', 'Disposals',\n    'Disputes', 'Disruptions', 'Distances', 'Distinctions', 'Distresses',\n    'Distributions', 'Districts', 'Diversities', 'Dives', 'Divides',\n    'Divisions', 'Divorces', 'Doctors', 'Doctrines', 'Documentaries',\n    'Documentations', 'Documents', 'Dogs', 'Dollars', 'Domains',\n    'Dominances', 'Donations', 'Donors', 'Doors', 'Doses', 'Dots', 'Doubts',\n    'Downloads', 'Downtowns', 'Dozens', 'Drafts', 'Dramas', 'Drawings',\n    'Dreams', 'Dresses', 'Drinks', 'Drivers', 'Drives', 'Drivings', 'Drops',\n    'Droughts', 'Drums', 'Duos', 'Durations', 'Dusts', 'Duties',\n    'Dvds', 'Dynamics', 'Earnings', 'Ears', 'Earthquakes', 'Earths',\n    'Eases', 'Easts', 'Echoes', 'Economics', 'Economies', 'Economists',\n    'Edges', 'Editions', 'Editors', 'Educations', 'Educators',\n    'Effectivenesses', 'Effects', 'Efficiencies', 'Efforts', 'Eggs', 'Egos',\n    'Elbows', 'Elections', 'Electricities', 'Electronics', 'Elements',\n    'Elephants', 'Elites', 'Emails', 'Embarrassments', 'Embassies',\n    'Emergences', 'Emergencies', 'Emissions', 'Emotions', 'Emphases',\n    'Empires', 'Employees', 'Employers', 'Employments', 'Encounters',\n    'Encouragements', 'Endeavours', 'Endings', 'Endorsements', 'Ends',\n    'Enemies', 'Energies', 'Enforcements', 'Engagements', 'Engineerings',\n    'Engineers', 'Engines', 'Enquiries', 'Enterprises', 'Entertainments',\n    'Enthusiasms', 'Enthusiasts', 'Entities', 'Entrances', 'Entrepreneurs',\n    'Entries', 'Envelopes', 'Environments', 'Epidemics', 'Episodes',\n    'Equalities', 'Equals', 'Equations', 'Equipment', 'Equivalents', 'Eras',\n    'Errors', 'Escapes', 'Essays', 'Essences', 'Establishments', 'Estates',\n    'Estimates', 'Ethics', 'Euros', 'Evaluations', 'Evenings', 'Events',\n    'Evidence', 'Evils', 'Evolutions', 'Examinations', 'Examples', 'Exams',\n    'Excellences', 'Exceptions', 'Excesses', 'Exchanges', 'Excitements',\n    'Exclusions', 'Excuses', 'Executives', 'Exercises',\n    'Exhibitions', 'Exhibits', 'Exiles', 'Existences', 'Exits',\n    'Expansions', 'Expectations', 'Expeditions', 'Expenditures', 'Expenses',\n    'Experiences', 'Experiments', 'Expertises', 'Experts', 'Explanations',\n    'Exploitations', 'Explorations', 'Explosions', 'Explosives', 'Exports',\n    'Exposures', 'Expressions', 'Extensions', 'Extents', 'Extracts',\n    'Extras', 'Extremes', 'Eyes', 'Fabrics', 'Faces',\n    'Facilities', 'Factions', 'Factories', 'Factors', 'Facts', 'Faculties',\n    'Failures', 'Fairnesses', 'Faiths', 'Falls', 'Fames', 'Families',\n    'Fans', 'Fantasies', 'Fares', 'Farmers', 'Farmings', 'Farms',\n    'Fashions', 'Fates', 'Fats', 'Faults', 'Favourites', 'Favours', 'Fears',\n    'Feathers', 'Feats', 'Features', 'Februaries', 'Feedbacks', 'Feeds',\n    'Feelings', 'Feels', 'Fees', 'Feet', 'Feminists', 'Fences',\n    'Festivals', 'Fevers', 'Fibres', 'Fictions', 'Fields', 'Fightings',\n    'Fights', 'Figures', 'Files', 'FilmMakers', 'Films', 'Filters',\n    'Finals', 'Finances', 'Findings', 'Fines', 'Fingers', 'Finishes',\n    'Firefighters', 'Fires', 'Fireworks', 'Firms', 'Firsts',\n    'Fish', 'Fishings', 'Fitnesses', 'Fits', 'Fixes', 'Fixtures', 'Flags',\n    'Flames', 'Flashes', 'Flats', 'Flavours', 'Flaws', 'Fleets', 'Fleshes',\n    'Flexibilities', 'Flies', 'Flights', 'Floods', 'Floors', 'Flours',\n    'Flowers', 'Flows', 'Fluids', 'Flus', 'Flyings', 'Foci', 'Folds',\n    'Folks', 'Followings', 'Foods', 'Fools', 'Footages', 'Footballs',\n    'Forces', 'Forecasts', 'Foreigners', 'Forests', 'Forks', 'Formations',\n    'Formats', 'Forms', 'Formulae', 'Fortunes', 'Forums', 'Fossils',\n    'Foundations', 'Founders', 'Fractions', 'Fragments', 'Frames',\n    'Frameworks', 'Franchises', 'Frauds', 'Freedoms', 'Frequencies',\n    'Fridays', 'Fridges', 'Friends', 'Friendships', 'Frogs', 'Fronts',\n    'Fruits', 'Frustrations', 'Fuels', 'Functions', 'Fundings',\n    'Fundraisings', 'Funds', 'Funerals', 'Funs', 'Furnitures', 'Furs',\n    'Futures', 'Gains', 'Galleries', 'Gallons', 'Gamblings', 'Games',\n    'Gamings', 'Gaps', 'Garages', 'Gardens', 'Gases', 'Gates',\n    'Gatherings', 'Gazes', 'Gears', 'Genders', 'Generations', 'Genes',\n    'Genius', 'Genres', 'Gentlemen', 'Geographies', 'Gestures',\n    'Ghosts', 'Giants', 'Gifts', 'Gigs', 'Glances', 'Glasses', 'Glimpses',\n    'Globalizations', 'Globes', 'Glories', 'Gloves', 'Goals', 'Gods',\n    'Goes', 'Gold', 'Golfs', 'Goodbyes', 'Goodnesses', 'Goods',\n    'Governances', 'Governments', 'Governors', 'Graces', 'Grades',\n    'Graduates', 'Grains', 'Grandfathers', 'Grandmothers', 'Grandparents',\n    'Grants', 'Graphics', 'Grasps', 'Grasses', 'Graves', 'Gravities',\n    'Greenhouses', 'Greens', 'Greys', 'Grids', 'Griefs', 'Grins', 'Grips',\n    'Groceries', 'Grounds', 'Groups', 'Growths', 'Guarantees', 'Guards',\n    'Guerrillas', 'Guesses', 'Guests', 'Guidances', 'Guidelines', 'Guides',\n    'Guilts', 'Guitars', 'Guts', 'Guys', 'Gyms', 'Habitats',\n    'Habits', 'Hairs', 'Halls', 'Halts', 'Halves', 'Handfuls', 'Handles',\n    'Handlings', 'Hands', 'Happinesses', 'Harassments', 'Harbours',\n    'Hardwares', 'Harmonies', 'Harms', 'Harvests',\n    'Hats', 'Hazards', 'Headaches', 'Headlines', 'Headquarters', 'Heads',\n    'Healthcares', 'Healths', 'Hearings', 'Hearts', 'Heatings', 'Heats',\n    'Heavens', 'Heels', 'Heights', 'Helicopters', 'Hellos', 'Hells',\n    'Helmets', 'Helps', 'Herbs', 'Heritages', 'Heroes', 'Hierarchies',\n    'Highlights', 'Highs', 'Highways', 'Hills', 'Hints', 'Hips', 'Hires',\n    'Historians', 'Histories', 'Hits', 'Hobbies', 'Hockeys', 'Holds',\n    'Holes', 'Holidays', 'Homelands', 'Homes', 'Homework', 'Honesties',\n    'Honours', 'Hooks', 'Hopes', 'Horizons', 'Horns', 'Horrors', 'Horses',\n    'Hospitals', 'Hosts', 'Hotels', 'Hours',\n    'Households', 'Houses', 'Housings', 'Humanities', 'Humans', 'Humours',\n    'Hungers', 'Huntings', 'Hunts', 'Hurricanes', 'Hurries', 'Hurts',\n    'Hydrogens', 'Hypotheses', 'Ices', 'Icons', 'Ideals', 'Ideas',\n    'Identifications', 'Identities', 'Ideologies', 'Ids',\n    'Ignorances', 'Illusions', 'Illustrations', 'Imageries',\n    'Images', 'Imaginations', 'Immigrations', 'Impacts',\n    'Implementations', 'Implications', 'Importances', 'Imports',\n    'Impressions', 'Imprisonments', 'Improvements', 'Inabilities',\n    'Incentives', 'Inches', 'Incidences', 'Incidents', 'Inclusions',\n    'Incomes', 'Increases', 'Independences', 'Indications', 'Indicators',\n    'Indices', 'Indictments', 'Individuals', 'Industries', 'Inequalities',\n    'Infections', 'Inflations', 'Influences', 'Information',\n    'Infos', 'Infrastructures', 'Ingredients', 'Inhabitants', 'Initiatives',\n    'Injections', 'Injuries', 'Injustices', 'Inks',\n    'Innovations', 'Inputs', 'Inquiries', 'Insects', 'Insertions',\n    'Insiders', 'Insides', 'Insights', 'Inspections', 'Inspectors',\n    'Inspirations', 'Installations', 'Instances', 'Instincts', 'Institutes',\n    'Institutions', 'Instructions', 'Instructors', 'Instruments', 'Insults',\n    'Insurances', 'Intakes', 'Integrations', 'Integrities', 'Intellectuals',\n    'Intelligences', 'Intensities', 'Intentions', 'Intents', 'Interactions',\n    'Interests', 'Interfaces', 'Interferences', 'Interiors',\n    'Interpretations', 'Intervals', 'Interventions', 'Interviews',\n    'Introductions', 'Invasions', 'Inventions', 'Investigations',\n    'Investigators', 'Investments', 'Investors', 'Invitations',\n    'Involvements', 'Ironies', 'Irons', 'Islands', 'Isolations', 'Issues',\n    'Items', 'Its', 'Jackets', 'Jails', 'Jams', 'Januaries', 'Jazzes',\n    'Jeans', 'Jets', 'Jewelleries', 'Jobs', 'Joints', 'Jokes',\n    'Journalisms', 'Journalists', 'Journals', 'Journeys', 'Joys',\n    'Judgements', 'Judges', 'Juices', 'Julies', 'Jumps', 'Junctions',\n    'Junes', 'Juries', 'Jurisdictions', 'Justices', 'Justifications',\n    'Keyboards', 'Keys', 'Kicks', 'Kidneys', 'Kilometres',\n    'Kinds', 'Kingdoms', 'Kings', 'Kisses', 'Kitchens', 'Kits', 'Knees',\n    'Knives', 'Knocks', 'Knowledges', 'Labels', 'Laboratories', 'Labours',\n    'Labs', 'Lacks', 'Ladders', 'Lakes', 'Lamps',\n    'Landings', 'Landlords', 'Landmarks', 'Lands', 'Landscapes', 'Lanes',\n    'Languages', 'Laps', 'Laptops', 'Lasers', 'Lasts', 'Latests', 'Laughs',\n    'Laughters', 'Launches', 'Lawns', 'Laws', 'Lawsuits', 'Lawyers',\n    'Layers', 'Layouts', 'Leaders', 'Leaderships', 'Leads', 'Leaflets',\n    'Leagues', 'Leaks', 'Leaps', 'Learnings', 'Leathers',\n    'Leaves', 'Lectures', 'Lefts', 'Legacies', 'Legends', 'Legislations',\n    'Legislatures', 'Legs', 'Leisures', 'Lemons', 'Lengths', 'Lens',\n    'Lessons', 'Letters', 'Levels', 'Liberals', 'Liberations', 'Liberties',\n    'Libraries', 'Licences', 'Lies', 'Lifestyles', 'Lifetimes', 'Lifts',\n    'Lightings', 'Lights', 'Likelihoods', 'Likes', 'Limbs', 'Limitations',\n    'Limits', 'LineUps', 'Lines', 'Links', 'Lions', 'Lips', 'Liquids',\n    'Listeners', 'Listings', 'Lists', 'Literacies', 'Literatures', 'Litres',\n    'Litters', 'Livers', 'Lives', 'Livings', 'Loads', 'Loans', 'Lobbies',\n    'Locals', 'Locations', 'Locks', 'Logics', 'Logos', 'Logs', 'Looks',\n    'Loops', 'Lords', 'Lorries', 'Losses', 'Lotteries', 'Loves', 'Lows',\n    'Loyalties', 'Luck', 'Lunches', 'Lungs', 'Luxuries', 'Lyrics',\n    'Machineries', 'Machines', 'Magazines', 'Magics', 'Magistrates',\n    'Magnitudes', 'Mails', 'Mainlands', 'Mainstreams', 'Maintenances',\n    'Majorities', 'MakeUps', 'Makes', 'Makings', 'Malls',\n    'Managements', 'Managers', 'Mandates', 'Manipulations', 'Manners',\n    'Manufacturings', 'Manuscripts', 'Maps', 'Marathons',\n    'Marches', 'Margins', 'Markers', 'Marketings', 'Marketplaces',\n    'Markets', 'Marks', 'Marriages', 'Masks', 'Masses',\n    'Masters', 'Matches', 'Materials', 'Mates', 'Mathematics', 'Maths',\n    'Matters', 'Maximums', 'Mayors', 'Mays', 'Meals', 'Meanings', 'Means',\n    'Meantimes', 'Measurements', 'Measures', 'Meats', 'Mechanics',\n    'Mechanisms', 'Medals', 'Media', 'Medications', 'Medicines',\n    'Meditations', 'Meetings', 'Melodies', 'Members', 'Memberships',\n    'Memoirs', 'Memorials', 'Memories', 'Memos', 'Mentions',\n    'Mentors', 'Menus', 'Merchants', 'Mercies', 'Mergers', 'Merits',\n    'Messages', 'Messes', 'Metals', 'Metaphors', 'Methodologies', 'Methods',\n    'Metres', 'Mice', 'Middles', 'Midnights', 'Midsts', 'Migrations',\n    'Miles', 'Milks', 'Mills',\n    'Minds', 'Minerals', 'Miners', 'Mines', 'Minimums', 'Minings',\n    'Ministers', 'Ministries', 'Minutes', 'Miracles',\n    'Mirrors', 'Miseries', 'Missiles', 'Missions', 'Mistakes', 'Mixes',\n    'Mixtures', 'Mobiles', 'Mobilities', 'Mobs', 'Modes',\n    'Modifications', 'Momenta', 'Moments', 'Mondays', 'Moneys', 'Monitors',\n    'Monkeys', 'Monks', 'Monopolies', 'Monsters', 'Months', 'Monuments',\n    'Moods', 'Moons', 'Moralities', 'Morals', 'Mornings', 'Mortgages',\n    'Mothers', 'Motions', 'Motivations', 'Motives',\n    'Motorcycles', 'Motorists', 'Motors', 'Mountains', 'Mouths',\n    'Movements', 'Moves', 'Movies', 'Muds', 'Mums', 'Muscles',\n    'Museums', 'Music', 'Musicals', 'Musicians', 'Mysteries', 'Myths',\n    'Nails', 'Names', 'Narratives', 'Nationals', 'Nations',\n    'Natures', 'Navigations', 'Necessities', 'Necks', 'Needles', 'Needs',\n    'Negatives', 'Neglects', 'Negotiations', 'Neighbourhoods', 'Neighbours',\n    'Nerves', 'Nests', 'Nets', 'Networks', 'News', 'Newsletters',\n    'Newspapers', 'Niches', 'Nightmares', 'Nights', 'Noises', 'Nominations',\n    'Nominees', 'Nonsenses', 'Noons', 'Normals', 'Norms', 'Norths', 'Noses',\n    'Notebooks', 'Notes', 'Notices', 'Notions', 'Novelists', 'Novels',\n    'Novembers', 'Numbers', 'Nurseries', 'Nurses', 'Nursings', 'Nutritions',\n    'Nuts', 'Obesities', 'Objections', 'Objectives', 'Objects',\n    'Obligations', 'Observations', 'Observers', 'Obsessions', 'Obstacles',\n    'Occasions', 'Occupations', 'Occurrences', 'Oceans', 'Octobers', 'Odds',\n    'Offences', 'Offerings', 'Offers', 'Officers', 'Offices',\n    'Officials', 'Offspring', 'Oils', 'Onions', 'Openings', 'Operas',\n    'Operations', 'Operators', 'Opinions', 'Opponents', 'Opportunities',\n    'Opposites', 'Oppositions', 'Optimisms', 'Options', 'Oranges',\n    'Orchestras', 'Orders', 'Organizations', 'Organizers', 'Organs',\n    'Orientations', 'Originals', 'Origins', 'Outbreaks', 'Outcomes',\n    'Outfits', 'Outings', 'Outlets', 'Outlines', 'Outlooks', 'Outputs',\n    'Outrages', 'Outsiders', 'Outsides', 'Ovens', 'Owners', 'Ownerships',\n    'Oxygens', 'Paces', 'Packages', 'Packets', 'Packs', 'Pads', 'Pages',\n    'Pains', 'Painters', 'Paintings', 'Paints', 'Pairs', 'Palaces', 'Palms',\n    'Panels', 'Panics', 'Pans', 'Pants', 'Papers', 'Parades', 'Paragraphs',\n    'Parallels', 'Parameters', 'Parents', 'Parishes', 'Parkings', 'Parks',\n    'Parliaments', 'Participants', 'Participations', 'Parties', 'Partners',\n    'Partnerships', 'Parts', 'Passages', 'Passengers', 'Passes', 'Passings',\n    'Passions', 'Passports', 'Passwords', 'Pastors', 'Pasts', 'Patches',\n    'Patents', 'Paths', 'Pathways', 'Patiences', 'Patients', 'Patrols',\n    'Patrons', 'Patterns', 'Pauses', 'Payments', 'Pays', 'Peaces', 'Peaks',\n    'Peasants', 'Peers', 'Penalties', 'Pencils', 'Pennies', 'Pens',\n    'Pensions', 'People', 'Peoples', 'Peppers', 'Percentages',\n    'Perceptions', 'Performances', 'Periods', 'Permissions', 'Permits',\n    'Personalities', 'Personnels', 'Perspectives', 'Petitions', 'Petrols',\n    'Pets', 'Phases', 'Phenomena', 'Philosophers', 'Philosophies', 'Phones',\n    'Photographers', 'Photographies', 'Photographs', 'Photos', 'Phrases',\n    'Physicians', 'Physics', 'Pianos', 'Picks', 'Pictures', 'Pieces',\n    'Pigs', 'Piles', 'Pills', 'Pilots', 'Pinks', 'Pins', 'Pioneers',\n    'Pipelines', 'Pipes', 'Pirates', 'Pitches', 'Pities', 'Pits',\n    'Placements', 'Places', 'Planes', 'Planets', 'Plannings', 'Plans',\n    'Plants', 'Plastics', 'Plates', 'Platforms', 'Players', 'Plays',\n    'Pleas', 'Pleasures', 'Pledges', 'Plots', 'Plugs', 'Plus', 'Pockets',\n    'Poems', 'Poetries', 'Poets', 'Points', 'Poisons', 'Poles', 'Police',\n    'Policemen', 'Policies', 'Politicians', 'Politics', 'Polls',\n    'Pollutions', 'Ponds', 'Pools', 'Pops', 'Popularities', 'Populations',\n    'Portfolios', 'Portions', 'Portraits', 'Ports', 'Positions',\n    'Positives', 'Possessions', 'Possibilities', 'Posters', 'Posts',\n    'Potatoes', 'Potentials', 'Pots', 'Pounds', 'Poverties', 'Powders',\n    'Powers', 'Practices', 'Practitioners', 'Praises', 'Prayers',\n    'Precedents', 'Precisions', 'Predators', 'Predecessors', 'Predictions',\n    'Preferences', 'Pregnancies', 'Prejudices', 'Premises', 'Premiums',\n    'Preparations', 'Prescriptions', 'Presences', 'Presentations',\n    'Presents', 'Preservations', 'Presidencies', 'Presidents', 'Presses',\n    'Pressures', 'Prevalences', 'Preventions', 'Preys', 'Prices', 'Prides',\n    'Priests', 'Princes', 'Princesses', 'Principals', 'Principles',\n    'Printers', 'Printings', 'Prints', 'Priorities', 'Prisons',\n    'Privacies', 'Privatizations', 'Privileges', 'Prizes', 'Probabilities',\n    'Probes', 'Problems', 'Procedures', 'Proceedings', 'Proceeds',\n    'Processes', 'Processings', 'Processors', 'Producers', 'Produces',\n    'Productions', 'Productivities', 'Products', 'Professionals',\n    'Professions', 'Professors', 'Profiles', 'Profits', 'Programmes',\n    'Programmings', 'Programs', 'Progresses', 'Projections', 'Projects',\n    'Promises', 'Promotions', 'Proofs', 'Propagandas', 'Properties',\n    'Proportions', 'Proposals', 'Propositions', 'Prosecutions',\n    'Prosecutors', 'Prospects', 'Prosperities', 'Protections', 'Proteins',\n    'Protesters', 'Protests', 'Protocols', 'Provinces', 'Provisions',\n    'Psychologies', 'Psychologists', 'Publications', 'Publicities',\n    'Publics', 'Publishings', 'Pubs', 'Pulls', 'Pulses', 'Pumps', 'Punches',\n    'Punishments', 'Punks', 'Pupils', 'Purchases', 'Purples', 'Purposes',\n    'Pursuits', 'Pushes', 'Puzzles', 'Qualifications', 'Qualities',\n    'Quantities', 'Quarters', 'Queens', 'Queries', 'Questionnaires',\n    'Questions', 'Quests', 'Queues', 'Quotas', 'Quotations', 'Quotes',\n    'Races', 'Racings', 'Radars', 'Radiations',\n    'Radios', 'Rages', 'Raids', 'Rails', 'Railways', 'Rains', 'Rallies',\n    'Ranges', 'Rankings', 'Ranks', 'Rates', 'Ratings', 'Ratios',\n    'Rats', 'Rays', 'Reaches', 'Reactions', 'Readers', 'Readings',\n    'Realities', 'Realizations', 'Realms', 'Rears', 'Reasonings', 'Reasons',\n    'Rebellions', 'Rebels', 'Receipts', 'Receivers', 'Receptions',\n    'Recessions', 'Recipes', 'Recipients', 'Recognitions',\n    'Recommendations', 'Reconstructions', 'Recordings', 'Records',\n    'Recoveries', 'Recruitments', 'Recruits', 'Reductions',\n    'Referees', 'References', 'Referendums', 'Reflections', 'Reforms',\n    'Refusals', 'Regards', 'Regimes', 'Regions',\n    'Registers', 'Registrations', 'Regrets', 'Regulations', 'Regulators',\n    'Rehabilitations', 'Reigns', 'Rejections', 'Relations', 'Relationships',\n    'Relatives', 'Releases', 'Relevances', 'Reliabilities', 'Reliefs',\n    'Religions', 'Remainders', 'Remains', 'Remarks', 'Remedies',\n    'Reminders', 'Removals', 'Rentals', 'Rents', 'Repairs', 'Repeats',\n    'Replacements', 'Replies', 'Reporters', 'Reportings', 'Reports',\n    'Representations', 'Representatives', 'Reproductions', 'Republics',\n    'Reputations', 'Requests', 'Requirements', 'Rescues', 'Researchers',\n    'Researches', 'Reservations', 'Reserves', 'Residences', 'Residents',\n    'Residues', 'Resignations', 'Resistances', 'Resolutions', 'Resorts',\n    'Resources', 'Respects', 'Responses', 'Responsibilities', 'Restaurants',\n    'Restorations', 'Restraints', 'Restrictions', 'Rests', 'Results',\n    'Retails', 'Retirements', 'Retreats', 'Returns', 'Revelations',\n    'Revenges', 'Revenues', 'Reverses', 'Reviews', 'Revisions', 'Revivals',\n    'Revolutions', 'Rewards', 'Rhetorics', 'Rhythms', 'Rices', 'Rides',\n    'Rifles', 'Rights', 'Rings', 'Riots', 'Rises', 'Risks', 'Rituals',\n    'Rivals', 'Rivers', 'Roads', 'Robberies', 'Robots', 'Rockets', 'Rocks',\n    'Rods', 'Roles', 'Rolls', 'Romances', 'Roofs', 'Rooms', 'Roots',\n    'Ropes', 'Roses', 'Rotations', 'Rounds', 'Routes', 'Routines', 'Rows',\n    'Rubbers', 'Rubbishes', 'Rugbies', 'Ruins', 'Rules', 'Rulings',\n    'Rumours', 'Runners', 'Runnings', 'Runs', 'Rushes', 'Sacrifices',\n    'Safeties', 'Sailings', 'Sailors', 'Sails', 'Saints', 'Sakes', 'Salads',\n    'Salaries', 'Sales', 'Salts', 'Samples', 'Sanctions', 'Sands',\n    'Sandwiches', 'Satellites', 'Satisfactions', 'Saturdays', 'Sauces',\n    'Savings', 'Says', 'Scales', 'Scandals', 'Scares', 'Scenarios',\n    'Scenes', 'Schedules', 'Schemes', 'Scholars', 'Scholarships', 'Schools',\n    'Sciences', 'Scientists', 'Scopes', 'Scores', 'Scratches', 'Screams',\n    'Screenings', 'Screens', 'Screws', 'Scripts', 'Scrutinies',\n    'Sculptures', 'Seals', 'Searches', 'Seas', 'Seasons', 'Seats',\n    'Seconds', 'Secretaries', 'Secrets', 'Sections', 'Sectors',\n    'Securities', 'Seeds', 'Seekers', 'Segments', 'Selections', 'Selves',\n    'Seminars', 'Senators', 'Sensations', 'Senses', 'Sensitivities',\n    'Sentences', 'Sentiments', 'Separations', 'Septembers', 'Sequences',\n    'Series', 'Servants', 'Services', 'Sessions', 'SetUps', 'Sets',\n    'Settings', 'Settlements', 'Settlers', 'Shades',\n    'Shadows', 'Shakes', 'Shames', 'Shapes', 'Shareholders', 'Shares',\n    'Sheep', 'Sheets', 'Shells', 'Shelters', 'Shelves', 'Shifts',\n    'Shippings', 'Ships', 'Shirts', 'Shocks', 'Shoes', 'Shootings',\n    'Shoots', 'Shoppings', 'Shops', 'Shores', 'Shortages', 'Shots',\n    'Shoulders', 'Shouts', 'Showers', 'Shows', 'Siblings', 'Sides', 'Sighs',\n    'Sights', 'Signals', 'Signatures', 'Significances', 'Signs', 'Silences',\n    'Silks', 'Silver', 'Similarities', 'Simulations', 'Singers', 'Singings',\n    'Singles', 'Sins', 'Sirs', 'Sites', 'Situations', 'Sizes',\n    'Sketches', 'Skies', 'Skiings', 'Skills', 'Skins', 'Skirts', 'Skis',\n    'Skulls', 'Sleeps', 'Slices', 'Slides',\n    'Slogans', 'Slopes', 'Slots', 'Smartphones', 'Smells', 'Smiles',\n    'Smokes', 'Smokings', 'Snakes', 'Snows', 'Soaps', 'Soccers',\n    'Societies', 'Socks', 'Softwares', 'Soils', 'Soldiers', 'Solicitors',\n    'Solidarities', 'Solids', 'Solos', 'Solutions', 'Songs', 'Sons',\n    'Sorts', 'Souls', 'Sounds', 'Soups', 'Sources',\n    'Sovereignties', 'Spaces', 'Spams', 'Spans', 'Speakers', 'Specialists',\n    'Species', 'Specifications', 'Specimens', 'Spectacles', 'Spectators',\n    'Spectra', 'Speculations', 'Speeches', 'Speeds', 'Spellings', 'Spells',\n    'Spendings', 'Spheres', 'Spices', 'Spiders', 'Spies', 'Spines', 'Spins',\n    'Spirits', 'Spites', 'Splits', 'Spokesmen', 'Spokespeople', 'Sponsors',\n    'Sponsorships', 'Spoons', 'Sports', 'Spotlights', 'Spots', 'Spouses',\n    'Spreads', 'Springs', 'Squads', 'Squares', 'Stabilities', 'Stadiums',\n    'Staffs', 'Stages', 'Stairs', 'Stakes', 'Stalls', 'Stamps', 'Stances',\n    'Standards', 'Stands', 'Stars', 'Starts', 'Statements', 'States',\n    'Stations', 'Statistics', 'Statues', 'Status', 'Stays', 'Steams',\n    'Steels', 'Stems', 'Steps', 'Stereotypes', 'Sticks', 'Stimuli',\n    'Stocks', 'Stomachs', 'Stones', 'Stops', 'Storages', 'Stores',\n    'Stories', 'Storms', 'Strains', 'Strands', 'Strangers', 'Strategies',\n    'Streams', 'Streets', 'Strengths', 'Stresses', 'Stretches', 'Strikes',\n    'Strings', 'Strips', 'Strokes', 'Structures', 'Struggles', 'Students',\n    'Studies', 'Studios', 'Stuffs', 'Styles', 'Subjects', 'Submissions',\n    'Subscribers', 'Subscriptions', 'Subsidies', 'Substances',\n    'Substitutes', 'Substitutions', 'Suburbs', 'Successes', 'Successions',\n    'Successors', 'Sufferings', 'Sugars', 'Suggestions',\n    'Suites', 'Suits', 'Summaries', 'Summers', 'Summits', 'Sums', 'Sundays',\n    'Suns', 'Supermarkets', 'Supervisions', 'Supervisors', 'Supplements',\n    'Supplies', 'Supporters', 'Supports', 'Surfaces', 'Surgeons',\n    'Surgeries', 'Surges', 'Surplus', 'Surprises', 'Surveillances',\n    'Surveys', 'Survivals', 'Survivors', 'Suspects', 'Suspensions',\n    'Suspicions', 'Sweaters', 'Sweets', 'Swimmings', 'Swims', 'Swings',\n    'Switches', 'Swords', 'Symbols', 'Sympathies', 'Symptoms', 'Syndromes',\n    'Syntheses', 'Systems', 'TShirts', 'Tables', 'Tablets', 'Tackles',\n    'Tactics', 'Tags', 'Tails', 'Talents', 'Tales', 'Talks', 'Tanks',\n    'Tapes', 'Taps', 'Targets', 'Tasks', 'Tastes', 'Taxes', 'Taxis',\n    'Taxpayers', 'Teachers', 'Teachings', 'Teams', 'Tears', 'Teas',\n    'Techniques', 'Technologies', 'Teenagers', 'Teens', 'Teeth',\n    'Telephones', 'Televisions', 'Temperatures', 'Temples', 'Tenants',\n    'Tendencies', 'Tennis', 'Tensions', 'Tents', 'Tenures', 'Terminals',\n    'Terms', 'Terrains', 'Territories',\n    'Testimonies', 'Testings', 'Tests', 'Textbooks', 'Texts',\n    'Textures', 'Thanks', 'Theatres', 'Thefts', 'Themes', 'Theologies',\n    'Theories', 'Therapies', 'Therapists', 'Theses', 'Thieves', 'Things',\n    'Thinkings', 'Thirds', 'Thoughts', 'Threads', 'Threats', 'Thresholds',\n    'Throats', 'Thumbs', 'Thursdays', 'Tickets', 'Tides', 'Ties', 'Timbers',\n    'Times', 'Timings', 'Tins', 'Tips', 'Tissues', 'Titles', 'Tobaccos',\n    'Todays', 'Toes', 'Toilets', 'Tolerances', 'Tolls', 'Tomatoes',\n    'Tomorrows', 'Tones', 'Tongues', 'Tonights', 'Tonnes', 'Tons', 'Tools',\n    'Topics', 'Tops', 'Tortoises', 'Totals', 'Touches', 'Tourisms',\n    'Tourists', 'Tournaments', 'Tours', 'Towels', 'Towers', 'Towns', 'Toys',\n    'Traces', 'Tracks', 'Trademarks', 'Trades', 'Tradings', 'Traditions',\n    'Traffics', 'Tragedies', 'Trailers', 'Trails', 'Trainers', 'Trainings',\n    'Trains', 'Traits', 'Transactions', 'Transcripts', 'Transfers',\n    'Transformations', 'Transitions', 'Transits', 'Translations',\n    'Transmissions', 'Transparencies', 'Transportations', 'Transports',\n    'Traps', 'Traumas', 'Travellers', 'Travels', 'Treasures', 'Treaties',\n    'Treatments', 'Trees', 'Trends', 'Trials', 'Tribes', 'Tribunals',\n    'Tributes', 'Tricks', 'Tries', 'Triggers', 'Trios', 'Trips', 'Triumphs',\n    'Troops', 'Trophies', 'Troubles', 'Trousers', 'Trucks', 'Trustees',\n    'Trusts', 'Truths', 'Tsunamis', 'Tubes', 'Tuesdays', 'Tuitions',\n    'Tunes', 'Tunnels', 'Turnouts', 'Turnovers', 'Turns', 'Tvs',\n    'Twists', 'Types', 'Tyres', 'Umbrellas', 'Uncertainties', 'Uncles',\n    'Undergraduates', 'Understandings', 'Underwears', 'Unemployments',\n    'Uniforms', 'Unions', 'Unities', 'Units', 'Universes', 'Universities',\n    'Updates', 'Upgrades', 'Usages', 'Users', 'Uses', 'Utilities',\n    'Vacations', 'Vacuums', 'Validities', 'Valleys', 'Values', 'Vans',\n    'Variables', 'Variations', 'Varieties', 'Vegetables', 'Vehicles',\n    'Veins', 'Ventures', 'Venues', 'Verdicts', 'Verses', 'Versions',\n    'Vessels', 'Veterans', 'Vices', 'Victories', 'Videos',\n    'Viewers', 'Viewpoints', 'Views', 'Villagers', 'Villages', 'Violations',\n    'Violences', 'Virtues', 'Viruses', 'Visas', 'Visions', 'Visitors',\n    'Visits', 'Vitamins', 'Voices', 'Volumes', 'Volunteers', 'Votes',\n    'Votings', 'Vulnerabilities', 'Wages', 'Waiters', 'Waits', 'Walks',\n    'Walls', 'Wards', 'Warehouses', 'Warfares', 'Warmings', 'Warnings',\n    'Warrants', 'Warriors', 'Washes', 'Washings', 'Wastes',\n    'Watches', 'Waters', 'Waves', 'Ways', 'Weaknesses', 'Wealths',\n    'Weathers', 'Webs', 'Websites', 'Weddings', 'Wednesdays',\n    'Weeds', 'Weekends', 'Weeks', 'Weights', 'Welcomes', 'Welfares',\n    'WellBeings', 'Wells', 'Wests', 'Wheat', 'Wheels', 'Whispers',\n    'Wholes', 'Widows', 'Widths', 'Wildlives', 'Willingnesses',\n    'Wills', 'Windows', 'Winds', 'Wines', 'Wings', 'Winners', 'Wins',\n    'Winters', 'Wires', 'Wisdoms', 'Wishes', 'Withdrawals', 'Witnesses',\n    'Wits', 'Wonders', 'Woods', 'Wools', 'Words', 'Workers', 'Workforces',\n    'Workouts', 'Workplaces', 'Works', 'Workshops', 'Worlds', 'Worms',\n    'Worries', 'Worses', 'Worships', 'Worsts', 'Worths', 'Wounds', 'Wrists',\n    'Writers', 'Writings', 'Wrongs', 'Yards', 'Years', 'Yellows',\n    'Yesterdays', 'Yields', 'Zones'\n];\n\n/*\nconst _PLACE_ = [\n    'Pub', 'University', 'Airport', 'Library', 'Mall', 'Theater', 'Stadium',\n    'Office', 'Show', 'Gallows', 'Beach', 'Cemetery', 'Hospital', 'Reception',\n    'Restaurant', 'Bar', 'Church', 'House', 'School', 'Square', 'Village',\n    'Cinema', 'Movies', 'Party', 'Restroom', 'End', 'Jail', 'PostOffice',\n    'Station', 'Circus', 'Gates', 'Entrance', 'Bridge'\n];\n*/\n\n/**\n * The list of verbs.\n * @const\n */\nconst _VERB_ = [\n    'Abolish', 'Absorb', 'Accelerate', 'Accept',\n    'Access', 'Accommodate', 'Accompany', 'Accomplish', 'Account',\n    'Accumulate', 'Accuse', 'Achieve', 'Acknowledge', 'Acquire', 'Act',\n    'Activate', 'Adapt', 'Add', 'Address', 'Adhere', 'Adjust', 'Administer',\n    'Admire', 'Admit', 'Adopt', 'Advance', 'Advertise', 'Advise',\n    'Advocate', 'Affect', 'Afford', 'Age', 'Agree', 'Aid', 'Aim', 'Alarm',\n    'Alert', 'Align', 'Allege', 'Allocate', 'Allow', 'Alter', 'Amend',\n    'Amount', 'Analyse', 'Announce', 'Annoy', 'Answer', 'Anticipate',\n    'Apologize', 'Appeal', 'Appear', 'Applaud', 'Apply', 'Appoint',\n    'Appreciate', 'Approach', 'Approve', 'Argue', 'Arise', 'Arm', 'Arrange',\n    'Arrest', 'Arrive', 'Articulate', 'Ask', 'Aspire',\n    'Assemble', 'Assert', 'Assess', 'Assign', 'Assist', 'Associate',\n    'Assume', 'Assure', 'Attach', 'Attain', 'Attempt', 'Attend',\n    'Attract', 'Attribute', 'Authorize', 'Average', 'Avoid', 'Await',\n    'Award', 'Back', 'Bake', 'Balance', 'Ban', 'Bar', 'Base', 'Bat',\n    'Battle', 'Be', 'Bear', 'Beat', 'Become', 'Beg', 'Begin', 'Behave',\n    'Believe', 'Belong', 'Bend', 'Benefit', 'Bet', 'Betray', 'Bid', 'Bill',\n    'Bind', 'Bite', 'Blame', 'Blast', 'Blend', 'Bless', 'Block',\n    'Blow', 'Board', 'Boast', 'Boil', 'Book', 'Boost', 'Border',\n    'Borrow', 'Bother', 'Bounce', 'Bow', 'Brand', 'Breach', 'Break',\n    'Breathe', 'Breed', 'Bring', 'Broadcast', 'Brush', 'Build', 'Burn',\n    'Burst', 'Bury', 'Buy', 'Calculate', 'Call', 'Calm', 'Camp', 'Campaign',\n    'Cancel', 'Capture', 'Care', 'Carry', 'Carve', 'Cast', 'Catch', 'Cater',\n    'Cause', 'Cease', 'Celebrate', 'Centre', 'Chain', 'Chair', 'Challenge',\n    'Change', 'Characterize', 'Charge', 'Chart', 'Chase', 'Chat', 'Cheat',\n    'Check', 'Cheer', 'Choose', 'Chop', 'Circle', 'Circulate', 'Cite',\n    'Claim', 'Clarify', 'Classify', 'Clean', 'Clear', 'Click', 'Climb',\n    'Cling', 'Close', 'Coach', 'Coincide', 'Collaborate', 'Collapse',\n    'Collect', 'Combat', 'Combine', 'Come', 'Comfort', 'Command',\n    'Commence', 'Comment', 'Commission', 'Commit', 'Communicate', 'Compare',\n    'Compel', 'Compensate', 'Compete', 'Compile', 'Complain', 'Complement',\n    'Complete', 'Comply', 'Compose', 'Comprise', 'Compromise', 'Compute',\n    'Conceal', 'Concede', 'Conceive', 'Concentrate', 'Concern', 'Conclude',\n    'Condemn', 'Conduct', 'Confer', 'Confess', 'Confine', 'Confirm',\n    'Conflict', 'Confront', 'Confuse', 'Congratulate', 'Connect', 'Conquer',\n    'Consent', 'Conserve', 'Consider', 'Consist', 'Consolidate',\n    'Constitute', 'Construct', 'Consult', 'Consume', 'Contact', 'Contain',\n    'Contemplate', 'Contend', 'Contest', 'Continue', 'Contract', 'Contrast',\n    'Contribute', 'Control', 'Convert', 'Convey', 'Convict', 'Convince',\n    'Cook', 'Cool', 'Cooperate', 'Coordinate', 'Cope', 'Copy', 'Correct',\n    'Correlate', 'Correspond', 'Cost', 'Count', 'Counter', 'Cover', 'Crack',\n    'Craft', 'Crash', 'Crawl', 'Create', 'Credit', 'Creep', 'Criticize',\n    'Cross', 'Cruise', 'Crush', 'Cry', 'Cultivate', 'Cure', 'Curve', 'Cut',\n    'Cycle', 'Damage', 'Dance', 'Dare', 'Date', 'Deal', 'Debate', 'Decide',\n    'Declare', 'Decline', 'Decorate', 'Decrease', 'Deem', 'Defeat',\n    'Defend', 'Define', 'Defy', 'Delay', 'Delete', 'Delight', 'Deliver',\n    'Demand', 'Demonstrate', 'Denounce', 'Deny', 'Depart', 'Depend',\n    'Depict', 'Deploy', 'Deposit', 'Deprive', 'Derive', 'Descend',\n    'Describe', 'Desert', 'Deserve', 'Design', 'Designate', 'Desire',\n    'Destroy', 'Detail', 'Detain', 'Detect', 'Deteriorate', 'Determine',\n    'Devastate', 'Develop', 'Devise', 'Devote', 'Diagnose', 'Dictate',\n    'Differ', 'Differentiate', 'Dig', 'Diminish', 'Dip', 'Direct',\n    'Disagree', 'Disappear', 'Disappoint', 'Discard', 'Discharge',\n    'Disclose', 'Discount', 'Discourage', 'Discover', 'Discuss', 'Dislike',\n    'Dismiss', 'Displace', 'Display', 'Dispose', 'Dispute', 'Disrupt',\n    'Dissolve', 'Distinguish', 'Distort', 'Distract', 'Distress',\n    'Distribute', 'Disturb', 'Dive', 'Divert', 'Divide', 'Divorce', 'Do',\n    'Document', 'Dominate', 'Donate', 'Double', 'Doubt', 'Download',\n    'Draft', 'Drag', 'Drain', 'Draw', 'Dream', 'Dress', 'Drift', 'Drink',\n    'Drive', 'Drop', 'Dry', 'Dub', 'Dump', 'Earn', 'Ease', 'Eat',\n    'Echo', 'Edit', 'Educate', 'Elect', 'Elevate', 'Eliminate', 'Email',\n    'Embark', 'Embed', 'Embody', 'Embrace', 'Emerge', 'Emphasize', 'Employ',\n    'Empower', 'Empty', 'Enable', 'Enact', 'Encompass', 'Encounter',\n    'Encourage', 'End', 'Endorse', 'Endure', 'Enforce', 'Engage', 'Enhance',\n    'Enjoy', 'Enquire', 'Enrich', 'Enrol', 'Ensue', 'Ensure', 'Enter',\n    'Entertain', 'Entitle', 'Equal', 'Equip', 'Erect', 'Erupt', 'Escalate',\n    'Escape', 'Establish', 'Estimate', 'Evacuate', 'Evaluate', 'Evoke',\n    'Evolve', 'Exaggerate', 'Examine', 'Exceed', 'Exchange', 'Exclude',\n    'Excuse', 'Execute', 'Exercise', 'Exert', 'Exhibit', 'Exist', 'Exit',\n    'Expand', 'Expect', 'Experience', 'Experiment', 'Expire', 'Explain',\n    'Explode', 'Exploit', 'Explore', 'Export', 'Expose', 'Express',\n    'Extend', 'Extract', 'Face', 'Facilitate', 'Fade', 'Fail', 'Fall',\n    'Fancy', 'Farm', 'Fasten', 'Favour', 'Fear', 'Feature', 'Feed', 'Feel',\n    'Fight', 'Figure', 'File', 'Fill', 'Film', 'Filter', 'Finance', 'Find',\n    'Fine', 'Finish', 'Fire', 'Fish', 'Fit', 'Fix', 'Flash', 'Flee',\n    'Float', 'Flood', 'Flourish', 'Flow', 'Fly', 'Focus', 'Fold', 'Follow',\n    'Forbid', 'Force', 'Forecast', 'Forge', 'Forget', 'Forgive', 'Form',\n    'Formulate', 'Foster', 'Found', 'Frame', 'Free', 'Freeze', 'Frighten',\n    'Fry', 'Fuel', 'Fulfil', 'Function', 'Fund', 'Gain', 'Gather', 'Gaze',\n    'Generate', 'Get', 'Give', 'Glance', 'Go', 'Govern', 'Grab', 'Grade',\n    'Graduate', 'Grant', 'Grasp', 'Greet', 'Grin', 'Grind', 'Grip', 'Grow',\n    'Guarantee', 'Guard', 'Guess', 'Guide', 'Hail', 'Halt', 'Hand',\n    'Handle', 'Hang', 'Happen', 'Harvest', 'Haunt', 'Have',\n    'Head', 'Heal', 'Hear', 'Heat', 'Heighten', 'Help', 'Hesitate', 'Hide',\n    'Highlight', 'Hint', 'Hire', 'Hit', 'Hold', 'Honour', 'Hook', 'Hope',\n    'Host', 'House', 'Hunt', 'Hurry', 'Identify', 'Ignore',\n    'Illustrate', 'Imagine', 'Impact', 'Implement', 'Imply', 'Import',\n    'Impose', 'Impress', 'Improve', 'Include', 'Incorporate',\n    'Increase', 'Incur', 'Indicate', 'Induce', 'Indulge', 'Infect', 'Infer',\n    'Inflict', 'Influence', 'Inform', 'Inherit', 'Inhibit', 'Initiate',\n    'Inject', 'Injure', 'Insert', 'Insist', 'Inspect', 'Inspire', 'Install',\n    'Instruct', 'Insult', 'Integrate', 'Intend', 'Intensify', 'Interact',\n    'Interest', 'Interfere', 'Interpret', 'Interrupt', 'Intervene',\n    'Interview', 'Introduce', 'Invade', 'Invent', 'Invest', 'Investigate',\n    'Invite', 'Invoke', 'Involve', 'Iron', 'Isolate', 'Issue',\n    'Join', 'Joke', 'Judge', 'Jump', 'Justify', 'Keep', 'Key', 'Kick',\n    'Kiss', 'Knock', 'Know', 'Label', 'Lack', 'Land',\n    'Last', 'Laugh', 'Launch', 'Lay', 'Lead', 'Leak', 'Lean', 'Leap',\n    'Learn', 'Leave', 'Lecture', 'Lend', 'Let', 'Level', 'License', 'Lift',\n    'Light', 'Like', 'Limit', 'Line', 'Linger', 'Link', 'List', 'Listen',\n    'Live', 'Load', 'Lobby', 'Locate', 'Lock', 'Log', 'Look', 'Loom',\n    'Lose', 'Love', 'Lower', 'Mail', 'Maintain', 'Make', 'Manage',\n    'Manifest', 'Manipulate', 'Manufacture', 'Map', 'March', 'Mark',\n    'Market', 'Marry', 'Master', 'Match', 'Mate', 'Matter', 'Mature',\n    'Maximize', 'Mean', 'Measure', 'Meet', 'Melt', 'Mention', 'Merge',\n    'Mind', 'Minimize', 'Miss', 'Mistake', 'Mix', 'Mobilize', 'Model',\n    'Modify', 'Monitor', 'Motivate', 'Mount', 'Move', 'Multiply',\n    'Name', 'Narrow', 'Need', 'Neglect', 'Negotiate', 'Nod', 'Nominate',\n    'Note', 'Notice', 'Notify', 'Number', 'Obey', 'Object', 'Oblige',\n    'Observe', 'Obsess', 'Obtain', 'Occupy', 'Occur', 'Offend', 'Offer',\n    'Open', 'Operate', 'Oppose', 'Opt', 'Order', 'Organize', 'Originate',\n    'Outline', 'Outrage', 'Overcome', 'Overlook', 'Oversee', 'Overturn',\n    'Overwhelm', 'Owe', 'Own', 'Pace', 'Pack', 'Package', 'Paint', 'Park',\n    'Participate', 'Pass', 'Patrol', 'Pause', 'Pay', 'Perceive', 'Perform',\n    'Permit', 'Persist', 'Persuade', 'Phone', 'Photograph', 'Pick',\n    'Picture', 'Pile', 'Pin', 'Pioneer', 'Place', 'Plan', 'Plant', 'Play',\n    'Plead', 'Please', 'Pledge', 'Plot', 'Plug', 'Plunge', 'Point',\n    'Pop', 'Portray', 'Pose', 'Position', 'Possess', 'Post',\n    'Postpone', 'Pour', 'Power', 'Practise', 'Praise', 'Pray', 'Preach',\n    'Precede', 'Predict', 'Prefer', 'Prepare', 'Prescribe', 'Present',\n    'Preserve', 'Preside', 'Press', 'Presume', 'Pretend', 'Prevail',\n    'Prevent', 'Price', 'Print', 'Probe', 'Proceed', 'Process', 'Proclaim',\n    'Produce', 'Program', 'Progress', 'Prohibit', 'Project', 'Promise',\n    'Promote', 'Prompt', 'Pronounce', 'Propose', 'Prosecute', 'Protect',\n    'Protest', 'Prove', 'Provide', 'Provoke', 'Publish', 'Pull', 'Pump',\n    'Punch', 'Punish', 'Purchase', 'Pursue', 'Push', 'Put', 'Qualify',\n    'Question', 'Queue', 'Quit', 'Quote', 'Race', 'Raid', 'Rain', 'Raise',\n    'Rally', 'Range', 'Rank', 'Rate', 'Reach', 'React', 'Read',\n    'Realize', 'Reassure', 'Rebuild', 'Recall', 'Receive', 'Reckon',\n    'Recognize', 'Recommend', 'Record', 'Recount', 'Recover', 'Recruit',\n    'Recycle', 'Reduce', 'Refer', 'Reflect', 'Reform', 'Refuse', 'Regain',\n    'Regard', 'Register', 'Regret', 'Regulate', 'Reign', 'Reinforce',\n    'Reject', 'Relate', 'Relax', 'Release', 'Relieve', 'Rely', 'Remain',\n    'Remark', 'Remember', 'Remind', 'Remove', 'Render', 'Renew', 'Rent',\n    'Repair', 'Repeat', 'Replace', 'Reply', 'Report', 'Represent',\n    'Reproduce', 'Request', 'Require', 'Rescue', 'Research', 'Resemble',\n    'Reserve', 'Reside', 'Resign', 'Resist', 'Resolve', 'Respect',\n    'Respond', 'Rest', 'Restore', 'Restrict', 'Result', 'Resume', 'Retain',\n    'Retire', 'Retreat', 'Retrieve', 'Return', 'Reveal', 'Reverse',\n    'Review', 'Revise', 'Revive', 'Reward', 'Rid', 'Ride', 'Ring', 'Rip',\n    'Rise', 'Risk', 'Rob', 'Rock', 'Roll', 'Rotate', 'Rub', 'Ruin', 'Rule',\n    'Run', 'Rush', 'Sack', 'Sacrifice', 'Sail', 'Sample', 'Satisfy', 'Save',\n    'Say', 'Scan', 'Scare', 'Schedule', 'Score', 'Scratch', 'Scream',\n    'Screen', 'Screw', 'Seal', 'Search', 'Seat', 'Secure', 'See', 'Seek',\n    'Seize', 'Select', 'Sell', 'Send', 'Sense', 'Sentence', 'Separate',\n    'Serve', 'Set', 'Settle', 'Shake', 'Shape', 'Share', 'Shatter', 'Shed',\n    'Shelter', 'Shift', 'Shine', 'Ship', 'Shock', 'Shoot', 'Shop', 'Shout',\n    'Show', 'Shrink', 'Shrug', 'Shut', 'Sigh', 'Sign', 'Signal', 'Simulate',\n    'Sing', 'Sink', 'Sit', 'Ski', 'Skip', 'Slam', 'Slap', 'Slash', 'Sleep',\n    'Slice', 'Slide', 'Slip', 'Slope', 'Slow', 'Smash', 'Smell', 'Smile',\n    'Smoke', 'Snap', 'Snow', 'Soak', 'Soar', 'Solve', 'Sort', 'Sound',\n    'Span', 'Spare', 'Spark', 'Speak', 'Specialize', 'Specify', 'Speculate',\n    'Speed', 'Spell', 'Spend', 'Spill', 'Spin', 'Split', 'Spoil', 'Sponsor',\n    'Spot', 'Spread', 'Spring', 'Spy', 'Squeeze', 'Stab', 'Stabilize',\n    'Stage', 'Stand', 'Star', 'Stare', 'Start', 'Starve', 'State', 'Stay',\n    'Steal', 'Steer', 'Stem', 'Step', 'Stick', 'Stimulate', 'Stir', 'Stop',\n    'Store', 'Strengthen', 'Stress', 'Stretch', 'Strike', 'Strip', 'Strive',\n    'Structure', 'Struggle', 'Study', 'Stuff', 'Stumble', 'Stun', 'Submit',\n    'Substitute', 'Succeed', 'Sue', 'Suffer', 'Suggest', 'Suit',\n    'Sum', 'Summarize', 'Supervise', 'Supplement', 'Supply', 'Support',\n    'Suppose', 'Suppress', 'Surge', 'Surprise', 'Surrender', 'Surround',\n    'Survey', 'Survive', 'Suspect', 'Suspend', 'Sustain', 'Swallow',\n    'Swear', 'Sweep', 'Swim', 'Swing', 'Switch', 'Tackle', 'Tag', 'Take',\n    'Talk', 'Tap', 'Target', 'Taste', 'Tax', 'Teach', 'Tear', 'Telephone',\n    'Tell', 'Tempt', 'Tend', 'Term', 'Terminate', 'Terrify', 'Test',\n    'Testify', 'Text', 'Thank', 'Think', 'Thrive', 'Throw',\n    'Tidy', 'Tie', 'Tighten', 'Time', 'Tip', 'Title', 'Tolerate', 'Top',\n    'Toss', 'Total', 'Touch', 'Tour', 'Trace', 'Track', 'Trade',\n    'Trail', 'Train', 'Transfer', 'Transform', 'Translate', 'Transmit',\n    'Transport', 'Trap', 'Travel', 'Treat', 'Trick', 'Trigger', 'Trip',\n    'Trouble', 'Trust', 'Try', 'Turn', 'Twist', 'Type', 'Undergo',\n    'Undermine', 'Understand', 'Undertake', 'Unfold', 'Unify', 'Unite',\n    'Unveil', 'Update', 'Upgrade', 'Uphold', 'Upset', 'Urge', 'Use',\n    'Utilize', 'Value', 'Vanish', 'Vary', 'Venture', 'Verify', 'View',\n    'Visit', 'Volunteer', 'Vote', 'Vow', 'Wait', 'Wake', 'Walk',\n    'Wander', 'Want', 'Warm', 'Warn', 'Warrant', 'Wash', 'Waste', 'Watch',\n    'Water', 'Wave', 'Weaken', 'Wear', 'Weave', 'Weigh', 'Welcome', 'Whip',\n    'Whisper', 'Widen', 'Win', 'Wind', 'Wipe', 'Wish', 'Withdraw',\n    'Witness', 'Wonder', 'Work', 'Worry', 'Worship', 'Wound', 'Wrap',\n    'Write', 'Yell', 'Yield'\n];\n\n/**\n * The list of adverbs.\n * @const\n */\nconst _ADVERB_ = [\n    'About', 'Above', 'Abroad', 'Absently', 'Absolutely', 'Accidentally',\n    'Accordingly', 'Accurately', 'Accusingly', 'Across', 'Actually',\n    'Additionally', 'Adequately', 'Adorably', 'After', 'Afterwards',\n    'Again', 'Ago', 'Ahead', 'Alike', 'All', 'Allegedly', 'AllTheTime',\n    'Almost', 'Alone', 'Along', 'Already', 'Also', 'Altogether', 'Always',\n    'Amazingly', 'Angrily', 'Annually', 'Anxiously', 'Any', 'Anyway',\n    'Anywhere', 'Apart', 'Appallingly', 'Apparently', 'Appropriately',\n    'Approximately', 'Arguably', 'Around', 'Articulately', 'As', 'Aside',\n    'Astonishingly', 'Automatically', 'Away', 'Back', 'Backwards', 'Badly',\n    'Barely', 'Basically', 'Beautifully', 'Before', 'Behind', 'Below',\n    'Besides', 'Best', 'Better', 'Between', 'Beyond', 'Blindly', 'Bravely',\n    'Briefly', 'Brightly', 'Briskly', 'Broadly', 'By', 'Calmly',\n    'Carefully', 'Casually', 'Cautiously', 'Certainly', 'Cheaply', 'Clearly',\n    'Cleverly', 'Close', 'Closely', 'Commonly', 'Completely',\n    'Consequently', 'Considerably', 'Consistently', 'Constantly',\n    'Continually', 'Correctly', 'Crazily', 'Critically', 'Curiously',\n    'Currently', 'Cynically', 'Daily', 'Dangerously', 'Deeply',\n    'Definitely', 'Deliberately', 'Delicately', 'Desperately',\n    'Differently', 'Directly', 'Discreetly', 'Double', 'Down',\n    'Downstairs', 'Downtown', 'Downwards', 'Dramatically', 'Each',\n    'Eagerly', 'Early', 'Easily', 'East', 'Effectively', 'Efficiently',\n    'Either', 'Else', 'Elsewhere', 'Emotionally', 'Enough', 'Entirely',\n    'Equally', 'Especially', 'Essentially', 'Euphoricly', 'Even', 'Evenly',\n    'Eventually', 'Ever', 'Everywhere', 'Exactly', 'Exclusively',\n    'Expectantly', 'Explicitly', 'Extensively', 'Extra', 'Extremely',\n    'Fairly', 'Far', 'Fast', 'Ferociously', 'Fiercely', 'Finally', 'Finely',\n    'Firmly', 'First', 'Firstly', 'Flatly', 'Forever', 'Formerly', 'Forth',\n    'Fortunately', 'Forward', 'Frankly', 'Free', 'Freely', 'Frequently',\n    'Frighteningly', 'FullTime', 'Fully', 'Fundamentally', 'Further',\n    'Furthermore', 'Generally', 'Gently', 'Genuinely', 'Gloriously',\n    'Gradually', 'Greatly', 'Grimly', 'Guiltily', 'Half', 'Halfway',\n    'Happily', 'Hard', 'Hardly', 'Hastily', 'Heavily', 'Hence', 'Here',\n    'Heroically', 'High', 'Highly', 'Home', 'Hopefully', 'Hourly', 'How',\n    'However', 'Humbly', 'Hysterically', 'Immediately', 'Immensely',\n    'Impartially', 'Impolitely', 'In', 'Increasingly', 'Incredibly',\n    'Indeed', 'Indifferently', 'Indoors', 'Inevitably', 'Initially',\n    'Inside', 'Instantly', 'Instead', 'Intensely', 'Ironically',\n    'Jealously', 'Jovially', 'Just', 'Kindly', 'Largely', 'Last', 'Late',\n    'Lately', 'Later', 'Lazily', 'Least', 'Left', 'Less', 'Lightly',\n    'Likewise', 'Literally', 'Little', 'Live', 'Long', 'LongTerm', 'Lot',\n    'Loud', 'Loudly', 'Lovingly', 'Low', 'Loyally', 'Magnificently',\n    'Mainly', 'Maybe', 'Meanwhile', 'Merely', 'Merrily',\n    'Mightily', 'Miserably', 'More', 'Moreover', 'Most', 'Mostly', 'Much',\n    'Mysteriously', 'Namely', 'Naturally', 'Near', 'Nearby', 'Nearly',\n    'Necessarily', 'Neither', 'Nervously', 'Never', 'Nevertheless', 'Newly',\n    'Next', 'Nicely', 'Nonetheless', 'Nor', 'Normally', 'North', 'Not',\n    'NOT', 'Notably', 'Now', 'Nowadays', 'Nowhere',\n    'Objectively', 'Obnoxiously', 'Obsessively', 'Obviously',\n    'Occasionally', 'Off', 'Often', 'Ok', 'On', 'Once', 'Online', 'Only',\n    'Openly', 'Opposite', 'Originally', 'Otherwise', 'Out', 'Outdoors',\n    'Outside', 'Over', 'Overall', 'Overly', 'Overnight', 'Overseas',\n    'Painfully', 'Partially', 'Particularly', 'Partly', 'Past', 'Patiently',\n    'Perfectly', 'Perhaps', 'Permanently', 'Personally', 'Playfully',\n    'Politely', 'Poorly', 'Possibly', 'Potentially', 'Precisely',\n    'Predominantly', 'Presently', 'Presumably', 'Pretty', 'Previously',\n    'Primarily', 'Probably', 'Promptly', 'Properly', 'Purely', 'Quickly',\n    'Quietly', 'Quite', 'Randomly', 'Rapidly', 'Rarely', 'Rather',\n    'Readily', 'Really', 'Reasonably', 'Recently', 'Recklessly',\n    'Regardless', 'Regularly', 'Relatively', 'Remarkably', 'Remorsefully',\n    'Reportedly', 'Respectively', 'Responsibly', 'Right', 'Roughly',\n    'Round', 'Rudely', 'Ruthlessly', 'Sadly', 'Same', 'Scornfully',\n    'Seamlessly', 'Second', 'Secondly', 'Seemingly', 'Seldom', 'Selfishly',\n    'Seriously', 'Severely', 'Shakily', 'Sharply', 'Shortly', 'Sideways',\n    'Significantly', 'Silently', 'Similarly', 'Simply', 'Simultaneously',\n    'Since', 'Sleepily', 'Slightly', 'Slowly', 'Slyly', 'Smoothly', 'So',\n    'Softly', 'Solely', 'Solemnly', 'Somehow', 'Sometime', 'Sometimes',\n    'Somewhat', 'Somewhere', 'Soon', 'South', 'Specifically', 'Steadily',\n    'Sternly', 'Still', 'Straight', 'Strangely', 'Strictly', 'Strongly',\n    'Stunningly', 'Subsequently', 'Substantially', 'Successfully',\n    'Suddenly', 'Sufficiently', 'Supposedly', 'Sure', 'Surely',\n    'Temporarily', 'Tenderly', 'Terribly', 'Thankfully', 'That', 'Then',\n    'There', 'Thereafter', 'Thereby', 'Therefore', 'This', 'Thoroughly',\n    'Though', 'Thoughtfully', 'Through', 'Throughout', 'Thus', 'Tightly',\n    'Today', 'Together', 'Tomorrow', 'Tonight', 'Too', 'Totally', 'Truly',\n    'Twice', 'Typically', 'Ultimately', 'Under', 'Underground',\n    'Undoubtedly', 'Uneasily', 'Unfortunately', 'Up', 'Upstairs', 'Upwards',\n    'Usually', 'Utterly', 'Vanishingly', 'Very', 'Warmly',\n    'Way', 'Weakly', 'Wearily', 'Weekly', 'Weirdly', 'Well', 'West',\n    'Whatever', 'Whatsoever', 'When', 'Where', 'Whereby', 'Wholly', 'Why',\n    'Wickedly', 'Widely', 'Wildly', 'Wisely', 'Wonderfully', 'Worldwide',\n    'Worse', 'Worst', 'Wrong', 'Yearly', 'Yesterday', 'Yet'\n];\n\n/**\n * The list of adjectives.\n * @const\n */\nconst _ADJECTIVE_ = [\n    'Able', 'Absent', 'Absolute', 'Abstract', 'Absurd', 'Academic',\n    'Acceptable', 'Accessible', 'Accountable', 'Accurate', 'Acid', 'Active',\n    'Actual', 'Acute', 'Additional', 'Adequate', 'Adjacent',\n    'Administrative', 'Adult', 'Advance', 'Advanced', 'Adverse',\n    'Aesthetic', 'Affordable', 'Afraid', 'Aged',\n    'Agricultural', 'Alert', 'Alien', 'Alike', 'Alive',\n    'Alone', 'Alternative', 'Amateur', 'Amazed', 'Amazing', 'Ambitious',\n    'Amusing', 'Ancient', 'Angry', 'Annoyed', 'Annoying', 'Annual',\n    'Anonymous', 'Anxious', 'Apparent', 'Appealing', 'Applicable',\n    'Appropriate', 'Arbitrary', 'Architectural', 'Artificial',\n    'Artistic', 'Ashamed', 'Asleep', 'Assistant', 'Associated',\n    'Astonishing', 'Attractive', 'Audio', 'Authentic', 'Automatic',\n    'Available', 'Average', 'Aware', 'Awful', 'Awkward', 'Back', 'Bad',\n    'Balanced', 'Bare', 'Based', 'Basic', 'Beautiful', 'Beloved',\n    'Beneficial', 'Bent', 'Best', 'Better', 'Big', 'Biological', 'Bitter',\n    'Bizarre', 'Blank', 'Blind', 'Blonde', 'Blue', 'Bold', 'Bored',\n    'Boring', 'Bottom', 'Bound', 'Brave', 'Brief', 'Bright', 'Brilliant',\n    'Broad', 'Broken', 'Brown', 'Busy', 'Calm', 'Capable',\n    'Capital', 'Capitalist', 'Careful', 'Careless', 'Casual', 'Cautious',\n    'Central', 'Certain', 'Challenging', 'Characteristic', 'Charming',\n    'Cheap', 'Cheerful', 'Chemical', 'Chief', 'Chronic', 'Civic', 'Civil',\n    'Civilian', 'Classic', 'Classical', 'Clean', 'Clear', 'Clever',\n    'Clinical', 'Close', 'Closed', 'Coastal', 'Cognitive', 'Cold',\n    'Collective', 'Colonial', 'Coloured', 'Colourful', 'Comfortable',\n    'Comic', 'Commercial', 'Common', 'Communist', 'Comparable',\n    'Comparative', 'Compelling', 'Competent', 'Competitive', 'Complete',\n    'Complex', 'Complicated', 'Comprehensive', 'Compulsory', 'Concerned',\n    'Concrete', 'Confident', 'Confused', 'Confusing', 'Congressional',\n    'Connected', 'Conscious', 'Consecutive', 'Conservative', 'Considerable',\n    'Consistent', 'Constant', 'Constitutional', 'Contemporary', 'Content',\n    'Continuous', 'Contrary', 'Controversial', 'Convenient', 'Conventional',\n    'Convinced', 'Convincing', 'Cool', 'Cooperative', 'Core', 'Corporate',\n    'Correct', 'Corresponding', 'Costly', 'Countless', 'Covered',\n    'Cream', 'Creative', 'Credible', 'Critical',\n    'Crowded', 'Crucial', 'Crude', 'Cruel', 'Cult', 'Cultural', 'Curious',\n    'Curly', 'Current', 'Curved', 'Cute', 'Cynical', 'Daily', 'Dairy',\n    'Damaging', 'Dangerous', 'Dark', 'Dead', 'Dear', 'Decent',\n    'Decisive', 'Dedicated', 'Deep', 'Defensive', 'Definite', 'Deliberate',\n    'Delicate', 'Delicious', 'Delighted', 'Democratic', 'Dense',\n    'Dependent', 'Depressed', 'Depressing', 'Desirable', 'Desperate',\n    'Destructive', 'Detailed', 'Determined', 'Different', 'Difficult',\n    'Digital', 'Diplomatic', 'Direct', 'Dirty', 'Disabled', 'Disappointed',\n    'Disappointing', 'Disastrous', 'Dishonest', 'Distant', 'Distinct',\n    'Distinctive', 'Disturbing', 'Diverse', 'Divine', 'Divorced',\n    'Domestic', 'Dominant', 'Double', 'Downstairs', 'Downtown', 'Dramatic',\n    'Dressed', 'Driving', 'Dry', 'Dual', 'Due', 'Dull', 'Dumb',\n    'Dynamic', 'Eager', 'Early', 'East', 'Eastern', 'Easy', 'Ecological',\n    'Economic', 'Editorial', 'Educated', 'Educational', 'Effective',\n    'Efficient', 'Elaborate', 'Elderly', 'Electoral', 'Electric',\n    'Electrical', 'Electronic', 'Elegant', 'Elementary', 'Eligible',\n    'Embarrassed', 'Embarrassing', 'Emotional', 'Empirical', 'Empty',\n    'Encouraging', 'Endless', 'Engaged', 'Engaging', 'Enjoyable',\n    'Enormous', 'Entertaining', 'Enthusiastic', 'Entire', 'Environmental',\n    'Equal', 'Equivalent', 'Essential', 'Eternal', 'Ethical', 'Ethnic',\n    'Even', 'Everyday', 'Evident', 'Evil', 'Evolutionary', 'Exact',\n    'Excellent', 'Exceptional', 'Excess', 'Excessive', 'Excited',\n    'Exciting', 'Exclusive', 'Executive', 'Exotic', 'Expected', 'Expensive',\n    'Experienced', 'Experimental', 'Expert', 'Explicit', 'Explosive',\n    'Extensive', 'External', 'Extra', 'Extraordinary', 'Extreme',\n    'Fabulous', 'Failed', 'Fair', 'Fake', 'False', 'Familiar', 'Family',\n    'Famous', 'Fancy', 'Fantastic', 'Far', 'Fascinating', 'Fashionable',\n    'Fast', 'Fat', 'Fatal', 'Favourable', 'Favourite', 'Federal', 'Fellow',\n    'Feminist', 'Few', 'Fierce', 'Final', 'Financial', 'Fine',\n    'Firm', 'Fit', 'Fixed', 'Flat', 'Flawed', 'Flexible', 'Flying',\n    'Folding', 'Folk', 'Following', 'Fond', 'Foreign', 'Formal', 'Former',\n    'Forthcoming', 'Fortunate', 'Forward', 'Fragile', 'Free', 'Frequent',\n    'Fresh', 'Friendly', 'Frightened', 'Frightening', 'Front', 'Frozen',\n    'Frustrated', 'Frustrating', 'Full', 'FullTime', 'Fun', 'Functional',\n    'Fundamental', 'Funny', 'Furious', 'Further', 'Future',\n    'General', 'Generic', 'Generous', 'Genetic', 'Gentle', 'Genuine',\n    'Giant', 'Glad', 'Global', 'Glorious', 'Gold', 'Golden', 'Good',\n    'Gorgeous', 'Grand', 'Graphic', 'Grateful', 'Grave', 'Great', 'Green',\n    'Grey', 'Gross', 'Guilty', 'Handy', 'Happy', 'Hard', 'Harmful', 'Harsh',\n    'Healthy', 'Heavy', 'Helpful', 'Hidden', 'High', 'HighProfile',\n    'Hilarious', 'Historic', 'Historical', 'Hollow', 'Holy', 'Home',\n    'Homeless', 'Honest', 'Hopeful', 'Horrible', 'Hot', 'Huge',\n    'Human', 'Humanitarian', 'Humble', 'Humorous', 'Hungry', 'Hurt',\n    'Ideal', 'Identical', 'Ideological', 'Ill', 'Illegal', 'Imaginary',\n    'Immediate', 'Immense', 'Imminent', 'Immune', 'Impatient', 'Important',\n    'Impossible', 'Impressed', 'Impressive', 'Inadequate', 'Inappropriate',\n    'Inclined', 'Included', 'Incorrect', 'Incredible', 'Independent',\n    'Indigenous', 'Indirect', 'Individual', 'Indoor', 'Industrial',\n    'Inevitable', 'Infamous', 'Influential', 'Informal', 'Inherent',\n    'Initial', 'Injured', 'Inner', 'Innocent', 'Innovative', 'Inside',\n    'Instant', 'Institutional', 'Instrumental', 'Insufficient', 'Intact',\n    'Integral', 'Integrated', 'Intellectual', 'Intelligent', 'Intended',\n    'Intense', 'Intensive', 'Interactive', 'Interested', 'Interesting',\n    'Interim', 'Interior', 'Intermediate', 'Internal', 'International',\n    'Intimate', 'Intriguing', 'Invisible', 'Involved', 'Ironic',\n    'Irrelevant', 'Isolated', 'Joint', 'Judicial', 'Junior', 'Just', 'Keen',\n    'Key', 'Kind', 'Large', 'LargeScale', 'Late', 'Later', 'Latest',\n    'Latter', 'Lazy', 'Leading', 'Left', 'Legal', 'Legendary',\n    'Legislative', 'Legitimate', 'Lengthy', 'Lesser',\n    'Level', 'Liable', 'Liberal', 'Lifelong', 'Light', 'Likely', 'Limited',\n    'Linear', 'Liquid', 'Literary', 'Little', 'Live', 'Lively', 'Living',\n    'Local', 'Located', 'Logical', 'Lonely', 'Long', 'LongStanding',\n    'LongTerm', 'LongTime', 'Loose', 'Lost', 'Loud', 'Lovely', 'Low',\n    'Loyal', 'Lucky', 'Luxury', 'Mad', 'Magic', 'Magical', 'Magnetic',\n    'Magnificent', 'Main', 'Mainstream', 'Major', 'Mandatory',\n    'Marginal', 'Marine', 'Married', 'Martial', 'Mass', 'Massive',\n    'Matching', 'Material', 'Mathematical', 'Mature', 'Maximum',\n    'Meaningful', 'Mechanical', 'Medical', 'Medieval', 'Medium',\n    'Memorable', 'Mental', 'Mere', 'Middle', 'Mild',\n    'Minimal', 'Minimum', 'Minute', 'Miserable', 'Misleading',\n    'Missing', 'Mixed', 'Mobile', 'Moderate', 'Modern', 'Modest', 'Monthly',\n    'Moral', 'Motor', 'Moving', 'Multiple', 'Municipal', 'Musical',\n    'Mutual', 'Mysterious', 'Narrative', 'Narrow',\n    'National', 'Nationwide', 'Native', 'Natural', 'Naval', 'Near',\n    'Nearby', 'Neat', 'Necessary', 'Negative', 'Neighbouring', 'Nervous',\n    'Net', 'Neutral', 'New', 'Next', 'Nice', 'Noble', 'Noisy', 'NonProfit',\n    'Normal', 'North', 'Northern', 'Notable', 'Notorious', 'Novel',\n    'Nuclear', 'Numerous', 'Objective', 'Obvious', 'Occasional', 'Odd',\n    'Offensive', 'Official', 'Ok', 'Old', 'OldFashioned', 'Ongoing',\n    'Online', 'Only', 'Open', 'Operational', 'Opposed', 'Opposite',\n    'Optical', 'Optimistic', 'Orange', 'Ordinary', 'Organic',\n    'Organizational', 'Organized', 'Original', 'Other', 'Outdoor', 'Outer',\n    'Outside', 'Outstanding', 'Overall', 'Overseas', 'Overwhelming', 'Own',\n    'Painful', 'Pale', 'Parallel', 'Parental', 'Parliamentary', 'PartTime',\n    'Partial', 'Particular', 'Passionate', 'Passive', 'Past', 'Patient',\n    'Peaceful', 'Peculiar', 'Perfect', 'Permanent', 'Persistent',\n    'Personal', 'Philosophical', 'Physical', 'Pink', 'Plain', 'Plastic',\n    'Pleasant', 'Pleased', 'Plus', 'Pointed', 'Poisonous', 'Polite',\n    'Political', 'Poor', 'Pop', 'Popular', 'Positive', 'Possible',\n    'PostWar', 'Potential', 'Powerful', 'Practical', 'Precious', 'Precise',\n    'Predictable', 'Preliminary', 'Premier', 'Prepared',\n    'Present', 'Presidential', 'Prestigious', 'Pretty', 'Previous',\n    'Primary', 'Prime', 'Principal', 'Prior', 'Private', 'Probable',\n    'Problematic', 'Productive', 'Professional', 'Profitable', 'Profound',\n    'Progressive', 'Prominent', 'Promising', 'Pronounced', 'Proper',\n    'Prospective', 'Protective', 'Proud', 'Provincial', 'Psychiatric',\n    'Psychological', 'Public', 'Pure', 'Purple', 'Qualified', 'Quick',\n    'Quiet', 'Radical', 'Random', 'Rapid', 'Rare',\n    'Rational', 'Raw', 'Ready', 'Real', 'Realistic', 'Rear', 'Reasonable',\n    'Recent', 'Red', 'Regional', 'Regular', 'Regulatory', 'Related',\n    'Relative', 'Relaxed', 'Relaxing', 'Relevant', 'Reliable', 'Relieved',\n    'Religious', 'Reluctant', 'Remarkable', 'Remote', 'Renowned',\n    'Repeated', 'Representative', 'Resident', 'Residential', 'Respective',\n    'Responsible', 'Retired', 'Reverse', 'Revolutionary', 'Rich',\n    'Ridiculous', 'Right', 'Risky', 'Rival', 'Robust', 'Romantic', 'Rough',\n    'Round', 'Routine', 'Royal', 'Rubber', 'Rude', 'Rural', 'Sacred', 'Sad',\n    'Safe', 'Same', 'Satisfied', 'Scary', 'Scattered',\n    'Sceptical', 'Scientific', 'Secondary', 'Secret', 'Secular', 'Secure',\n    'Selective', 'Senior', 'Sensible', 'Sensitive', 'Separate', 'Serial',\n    'Serious', 'Severe', 'Shallow', 'Shaped', 'Sharp',\n    'Sheer', 'Shiny', 'Shocked', 'Shocking', 'Short', 'ShortTerm', 'Shut',\n    'Shy', 'Significant', 'Silent', 'Silly', 'Silver', 'Similar',\n    'Simple', 'Sincere', 'Single', 'Situated', 'Ski', 'Skilled', 'Slight',\n    'Slow', 'Small', 'Smart', 'Smooth', 'SoCalled', 'Social', 'Socialist',\n    'Soft', 'Solar', 'Sole', 'Solid', 'Solo', 'Sophisticated',\n    'Sound', 'South', 'Spare', 'Special', 'Specialist',\n    'Specialized', 'Specific', 'Spectacular', 'Spicy', 'Spiritual',\n    'Spoken', 'Sporting', 'Square', 'Stable', 'Standard', 'Standing',\n    'Stark', 'State', 'Statistical', 'Steady', 'Steep', 'Sticky', 'Stiff',\n    'Still', 'Straight', 'Straightforward', 'Strange', 'Strategic',\n    'Strict', 'Striking', 'Strong', 'Structural', 'Stunning',\n    'Subject', 'Subsequent', 'Substantial', 'Subtle', 'Suburban',\n    'Successful', 'Successive', 'Sudden', 'Sufficient', 'Suitable', 'Super',\n    'Superb', 'Superior', 'Supportive', 'Supreme', 'Sure', 'Surgical',\n    'Surprised', 'Surprising', 'Surrounding', 'Suspicious', 'Sustainable',\n    'Sweet', 'Symbolic', 'Sympathetic', 'Systematic', 'Tactical',\n    'Talented', 'Tall', 'Technical', 'Technological',\n    'Temporary', 'Tender', 'Terminal', 'Terrible', 'Terrific', 'Theatrical',\n    'Theoretical', 'Thick', 'Thin', 'Thirsty', 'Thorough',\n    'ThoughtProvoking', 'Thoughtful', 'Thrilled', 'Tidy', 'Tight',\n    'Timely', 'Tiny', 'Tired', 'Top', 'Total', 'Tough', 'Toxic', 'Toy',\n    'Traditional', 'Transparent', 'Tremendous', 'Tribal',\n    'Tropical', 'True', 'Twin', 'Typical', 'Ultimate',\n    'Unable', 'Unacceptable', 'Uncomfortable', 'Underground',\n    'Underlying', 'Unemployed', 'Unexpected', 'Unfair', 'Unfortunate',\n    'Unique', 'United', 'Universal', 'Unknown', 'Unlikely',\n    'Unnecessary', 'Unpleasant', 'Unprecedented', 'Unusual', 'Upcoming',\n    'Upper', 'Upset', 'Upstairs', 'Urban', 'Urgent', 'Used', 'Useful',\n    'Useless', 'Usual', 'Vague', 'Valid', 'Valuable', 'Variable', 'Varied',\n    'Various', 'Vast', 'Verbal', 'Vertical', 'Very', 'Viable', 'Vibrant',\n    'Virtual', 'Visible', 'Visual', 'Vital', 'Vocal',\n    'Voluntary', 'Vulnerable', 'Warm', 'Waste', 'Weak', 'Wealthy', 'Weekly',\n    'Weird', 'Welcome', 'Well', 'West', 'Western', 'Wet', 'White', 'Whole',\n    'Wide', 'Widespread', 'Wild', 'Willing', 'Wise', 'Wonderful', 'Wooden',\n    'Working', 'Worldwide', 'Worried', 'Worse', 'Worst', 'Worth',\n    'Worthwhile', 'Worthy', 'Written', 'Wrong', 'Yellow'\n];\n\n/*\nconst _PRONOUN_ = [\n];\n*/\n\n/*\nconst _CONJUNCTION_ = [\n    'And', 'Or', 'For', 'Above', 'Before', 'Against', 'Between'\n];\n*/\n\n/**\n * Maps a string (category name) to the array of words from that category.\n * @const\n */\nconst CATEGORIES = {\n    _ADJECTIVE_,\n    _ADVERB_,\n    _PLURALNOUN_,\n    _VERB_\n\n//    _CONJUNCTION_,\n//    _NOUN_,\n//    _PLACE_,\n//    _PRONOUN_,\n};\n\n/**\n * The list of room name patterns.\n * @const\n */\nconst PATTERNS = [\n    '_ADJECTIVE__PLURALNOUN__VERB__ADVERB_'\n\n    // BeautifulFungiOrSpaghetti\n    //    '_ADJECTIVE__PLURALNOUN__CONJUNCTION__PLURALNOUN_',\n\n    // AmazinglyScaryToy\n    //    '_ADVERB__ADJECTIVE__NOUN_',\n\n    // NeitherTrashNorRifle\n    //    'Neither_NOUN_Nor_NOUN_',\n    //    'Either_NOUN_Or_NOUN_',\n\n    // EitherCopulateOrInvestigate\n    //    'Either_VERB_Or_VERB_',\n    //    'Neither_VERB_Nor_VERB_',\n\n    //    'The_ADJECTIVE__ADJECTIVE__NOUN_',\n    //    'The_ADVERB__ADJECTIVE__NOUN_',\n    //    'The_ADVERB__ADJECTIVE__NOUN_s',\n    //    'The_ADVERB__ADJECTIVE__PLURALNOUN__VERB_',\n\n    // WolvesComputeBadly\n    //    '_PLURALNOUN__VERB__ADVERB_',\n\n    // UniteFacilitateAndMerge\n    //    '_VERB__VERB_And_VERB_',\n\n    // NastyWitchesAtThePub\n    //    '_ADJECTIVE__PLURALNOUN_AtThe_PLACE_',\n];\n\n/**\n * Generates a new room name.\n *\n * @returns {string} A newly-generated room name.\n */\nexport function generateRoomWithoutSeparator() {\n    // XXX Note that if more than one pattern is available, the choice of 'name'\n    // won't have a uniform distribution amongst all patterns (names from\n    // patterns with fewer options will have higher probability of being chosen\n    // that names from patterns with more options).\n    let name = randomElement(PATTERNS);\n\n    while (_hasTemplate(name)) {\n        for (const template in CATEGORIES) { // eslint-disable-line guard-for-in\n            const word = randomElement(CATEGORIES[template]);\n\n            name = name.replace(template, word);\n        }\n    }\n\n    return name;\n}\n\n/**\n * Determines whether a specific string contains at least one of the\n * templates/categories.\n *\n * @param {string} s - String containing categories.\n * @private\n * @returns {boolean} True if the specified string contains at least one of the\n * templates/categories; otherwise, false.\n */\nfunction _hasTemplate(s) {\n    for (const template in CATEGORIES) {\n        if (s.indexOf(template) >= 0) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/*\nfunction findDuplicates(array) {\n    var dups = array.reduce(function (acc, cur) {\n        if (!acc[cur]) {\n            acc[cur] = 1;\n        } else {\n            acc[cur] += 1;\n        }\n\n        return acc;\n    }, {});\n    for (const word in dups) {\n        if (dups[word] > 1) {\n            console.log(`Duplicate: ${word} ${dups[word]}`);\n        }\n    }\n}\nfindDuplicates(_ADJECTIVE_);\nfindDuplicates(_PLURALNOUN_);\nfindDuplicates(_VERB_);\nfindDuplicates(_ADVERB_);\nvar combinations = _ADJECTIVE_.length * _PLURALNOUN_.length * _VERB_.length * _ADVERB_.length;\nconsole.log(`${combinations} combinations (${Math.log2(combinations)} bits of entropy)`)\n*/\n","/* global APP */\n\nimport {\n    createTrackMutedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { showErrorNotification, showNotification } from '../../notifications';\nimport { JitsiTrackErrors, JitsiTrackEvents, createLocalTrack } from '../lib-jitsi-meet';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    setAudioMuted,\n    setVideoMuted,\n    VIDEO_MUTISM_AUTHORITY,\n    VIDEO_TYPE\n} from '../media';\nimport { getLocalParticipant } from '../participants';\nimport { updateSettings } from '../settings';\n\nimport {\n    SET_NO_SRC_DATA_NOTIFICATION_UID,\n    TOGGLE_SCREENSHARING,\n    TRACK_ADDED,\n    TRACK_CREATE_CANCELED,\n    TRACK_CREATE_ERROR,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_STOPPED,\n    TRACK_UPDATED,\n    TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT,\n    TRACK_WILL_CREATE\n} from './actionTypes';\nimport {\n    createLocalTracksF,\n    getLocalTrack,\n    getLocalTracks,\n    getLocalVideoTrack,\n    getTrackByJitsiTrack\n} from './functions';\nimport logger from './logger';\n\n/**\n * Requests the creating of the desired media type tracks. Desire is expressed\n * by base/media unless the function caller specifies desired media types\n * explicitly and thus override base/media. Dispatches a\n * {@code createLocalTracksA} action for the desired media types for which there\n * are no existing tracks yet.\n *\n * @returns {Function}\n */\nexport function createDesiredLocalTracks(...desiredTypes) {\n    return (dispatch, getState) => {\n        const state = getState();\n\n        dispatch(destroyLocalDesktopTrackIfExists());\n\n        if (desiredTypes.length === 0) {\n            const { audio, video } = state['features/base/media'];\n\n            audio.muted || desiredTypes.push(MEDIA_TYPE.AUDIO);\n\n            // XXX When the app is coming into the foreground from the\n            // background in order to handle a URL, it may realize the new\n            // background state soon after it has tried to create the local\n            // tracks requested by the URL. Ignore\n            // VIDEO_MUTISM_AUTHORITY.BACKGROUND and create the local video\n            // track if no other VIDEO_MUTISM_AUTHORITY has muted it. The local\n            // video track will be muted until the app realizes the new\n            // background state.\n\n            // eslint-disable-next-line no-bitwise\n            (video.muted & ~VIDEO_MUTISM_AUTHORITY.BACKGROUND)\n                || desiredTypes.push(MEDIA_TYPE.VIDEO);\n        }\n\n        const availableTypes\n            = getLocalTracks(\n                    state['features/base/tracks'],\n                    /* includePending */ true)\n                .map(t => t.mediaType);\n\n        // We need to create the desired tracks which are not already available.\n        const createTypes\n            = desiredTypes.filter(type => availableTypes.indexOf(type) === -1);\n\n        createTypes.length\n            && dispatch(createLocalTracksA({ devices: createTypes }));\n    };\n}\n\n/**\n * Request to start capturing local audio and/or video. By default, the user\n * facing camera will be selected.\n *\n * @param {Object} [options] - For info @see JitsiMeetJS.createLocalTracks.\n * @returns {Function}\n */\nexport function createLocalTracksA(options = {}) {\n    return (dispatch, getState) => {\n        const devices\n            = options.devices || [ MEDIA_TYPE.AUDIO, MEDIA_TYPE.VIDEO ];\n        const store = {\n            dispatch,\n            getState\n        };\n\n        // The following executes on React Native only at the time of this\n        // writing. The effort to port Web's createInitialLocalTracksAndConnect\n        // is significant and that's where the function createLocalTracksF got\n        // born. I started with the idea a porting so that we could inherit the\n        // ability to getUserMedia for audio only or video only if getUserMedia\n        // for audio and video fails. Eventually though, I realized that on\n        // mobile we do not have combined permission prompts implemented anyway\n        // (either because there are no such prompts or it does not make sense\n        // to implement them) and the right thing to do is to ask for each\n        // device separately.\n        for (const device of devices) {\n            if (getLocalTrack(\n                    getState()['features/base/tracks'],\n                    device,\n                    /* includePending */ true)) {\n                throw new Error(`Local track for ${device} already exists`);\n            }\n\n            const gumProcess\n                = createLocalTracksF(\n                    {\n                        cameraDeviceId: options.cameraDeviceId,\n                        devices: [ device ],\n                        facingMode:\n                            options.facingMode || CAMERA_FACING_MODE.USER,\n                        micDeviceId: options.micDeviceId\n                    },\n                    store)\n                .then(\n                    localTracks => {\n                        // Because GUM is called for 1 device (which is actually\n                        // a media type 'audio', 'video', 'screen', etc.) we\n                        // should not get more than one JitsiTrack.\n                        if (localTracks.length !== 1) {\n                            throw new Error(\n                                `Expected exactly 1 track, but was given ${\n                                    localTracks.length} tracks for device: ${\n                                    device}.`);\n                        }\n\n                        if (gumProcess.canceled) {\n                            return _disposeTracks(localTracks)\n                                .then(() =>\n                                    dispatch(_trackCreateCanceled(device)));\n                        }\n\n                        return dispatch(trackAdded(localTracks[0]));\n                    },\n                    reason =>\n                        dispatch(\n                            gumProcess.canceled\n                                ? _trackCreateCanceled(device)\n                                : _onCreateLocalTracksRejected(\n                                    reason,\n                                    device)));\n\n            /**\n             * Cancels the {@code getUserMedia} process represented by this\n             * {@code Promise}.\n             *\n             * @returns {Promise} This {@code Promise} i.e. {@code gumProcess}.\n             */\n            gumProcess.cancel = () => {\n                gumProcess.canceled = true;\n\n                return gumProcess;\n            };\n\n            dispatch({\n                type: TRACK_WILL_CREATE,\n                track: {\n                    gumProcess,\n                    local: true,\n                    mediaType: device\n                }\n            });\n        }\n    };\n}\n\n/**\n * Calls JitsiLocalTrack#dispose() on all local tracks ignoring errors when\n * track is already disposed. After that signals tracks to be removed.\n *\n * @returns {Function}\n */\nexport function destroyLocalTracks() {\n    return (dispatch, getState) => {\n        // First wait until any getUserMedia in progress is settled and then get\n        // rid of all local tracks.\n        _cancelGUMProcesses(getState)\n            .then(() =>\n                dispatch(\n                    _disposeAndRemoveTracks(\n                        getState()['features/base/tracks']\n                            .filter(t => t.local)\n                            .map(t => t.jitsiTrack))));\n    };\n}\n\n/**\n * Signals that the passed JitsiLocalTrack has triggered a no data from source event.\n *\n * @param {JitsiLocalTrack} track - The track.\n * @returns {{\n*     type: TRACK_NO_DATA_FROM_SOURCE,\n*     track: Track\n* }}\n*/\nexport function noDataFromSource(track) {\n    return {\n        type: TRACK_NO_DATA_FROM_SOURCE,\n        track\n    };\n}\n\n/**\n * Displays a no data from source video error if needed.\n *\n * @param {JitsiLocalTrack} jitsiTrack - The track.\n * @returns {Function}\n */\nexport function showNoDataFromSourceVideoError(jitsiTrack) {\n    return (dispatch, getState) => {\n        let notificationInfo;\n\n        const track = getTrackByJitsiTrack(getState()['features/base/tracks'], jitsiTrack);\n\n        if (!track) {\n            return;\n        }\n\n        if (track.isReceivingData) {\n            notificationInfo = undefined;\n        } else {\n            const notificationAction = showErrorNotification({\n                descriptionKey: 'dialog.cameraNotSendingData',\n                titleKey: 'dialog.cameraNotSendingDataTitle'\n            });\n\n            dispatch(notificationAction);\n            notificationInfo = {\n                uid: notificationAction.uid\n            };\n        }\n        dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, notificationInfo));\n    };\n}\n\n/**\n * Signals that the local participant is ending screensharing or beginning the\n * screensharing flow.\n *\n * @param {boolean} enabled - The state to toggle screen sharing to.\n * @param {boolean} audioOnly - Only share system audio.\n * @returns {{\n *     type: TOGGLE_SCREENSHARING,\n *     on: boolean,\n *     audioOnly: boolean\n * }}\n */\nexport function toggleScreensharing(enabled, audioOnly = false) {\n    return {\n        type: TOGGLE_SCREENSHARING,\n        enabled,\n        audioOnly\n    };\n}\n\n/**\n * Replaces one track with another for one renegotiation instead of invoking\n * two renegotiations with a separate removeTrack and addTrack. Disposes the\n * removed track as well.\n *\n * @param {JitsiLocalTrack|null} oldTrack - The track to dispose.\n * @param {JitsiLocalTrack|null} newTrack - The track to use instead.\n * @param {JitsiConference} [conference] - The conference from which to remove\n * and add the tracks. If one is not provided, the conference in the redux store\n * will be used.\n * @returns {Function}\n */\nexport function replaceLocalTrack(oldTrack, newTrack, conference) {\n    return async (dispatch, getState) => {\n        conference\n\n            // eslint-disable-next-line no-param-reassign\n            || (conference = getState()['features/base/conference'].conference);\n\n        if (conference) {\n            await conference.replaceTrack(oldTrack, newTrack);\n        }\n\n        return dispatch(replaceStoredTracks(oldTrack, newTrack));\n    };\n}\n\n/**\n * Replaces a stored track with another.\n *\n * @param {JitsiLocalTrack|null} oldTrack - The track to dispose.\n * @param {JitsiLocalTrack|null} newTrack - The track to use instead.\n * @returns {Function}\n */\nfunction replaceStoredTracks(oldTrack, newTrack) {\n    return dispatch => {\n        // We call dispose after doing the replace because dispose will\n        // try and do a new o/a after the track removes itself. Doing it\n        // after means the JitsiLocalTrack.conference is already\n        // cleared, so it won't try and do the o/a.\n        const disposePromise\n              = oldTrack\n                  ? dispatch(_disposeAndRemoveTracks([ oldTrack ]))\n                  : Promise.resolve();\n\n        return disposePromise\n            .then(() => {\n                if (newTrack) {\n                    // The mute state of the new track should be\n                    // reflected in the app's mute state. For example,\n                    // if the app is currently muted and changing to a\n                    // new track that is not muted, the app's mute\n                    // state should be falsey. As such, emit a mute\n                    // event here to set up the app to reflect the\n                    // track's mute state. If this is not done, the\n                    // current mute state of the app will be reflected\n                    // on the track, not vice-versa.\n                    const setMuted\n                          = newTrack.isVideoTrack()\n                              ? setVideoMuted\n                              : setAudioMuted;\n                    const isMuted = newTrack.isMuted();\n\n                    sendAnalytics(createTrackMutedEvent(\n                        newTrack.getType(),\n                        'track.replaced',\n                        isMuted));\n                    logger.log(`Replace ${newTrack.getType()} track - ${\n                        isMuted ? 'muted' : 'unmuted'}`);\n\n                    return dispatch(setMuted(isMuted));\n                }\n            })\n            .then(() => {\n                if (newTrack) {\n                    return dispatch(_addTracks([ newTrack ]));\n                }\n            });\n    };\n}\n\n/**\n * Create an action for when a new track has been signaled to be added to the\n * conference.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{ type: TRACK_ADDED, track: Track }}\n */\nexport function trackAdded(track) {\n    return (dispatch, getState) => {\n        track.on(\n            JitsiTrackEvents.TRACK_MUTE_CHANGED,\n            () => dispatch(trackMutedChanged(track)));\n        track.on(\n            JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED,\n            type => dispatch(trackVideoTypeChanged(track, type)));\n\n        // participantId\n        const local = track.isLocal();\n        const mediaType = track.getType();\n        let isReceivingData, noDataFromSourceNotificationInfo, participantId;\n\n        if (local) {\n            // Reset the no data from src notification state when we change the track, as it's context is set\n            // on a per device basis.\n            dispatch(setNoSrcDataNotificationUid());\n            const participant = getLocalParticipant(getState);\n\n            if (participant) {\n                participantId = participant.id;\n            }\n\n            isReceivingData = track.isReceivingData();\n            track.on(JitsiTrackEvents.NO_DATA_FROM_SOURCE, () => dispatch(noDataFromSource({ jitsiTrack: track })));\n            if (!isReceivingData) {\n                if (mediaType === MEDIA_TYPE.AUDIO) {\n                    const notificationAction = showNotification({\n                        descriptionKey: 'dialog.micNotSendingData',\n                        titleKey: 'dialog.micNotSendingDataTitle'\n                    });\n\n                    dispatch(notificationAction);\n\n                    // Set the notification ID so that other parts of the application know that this was\n                    // displayed in the context of the current device.\n                    // I.E. The no-audio-signal notification shouldn't be displayed if this was already shown.\n                    dispatch(setNoSrcDataNotificationUid(notificationAction.uid));\n\n                    noDataFromSourceNotificationInfo = { uid: notificationAction.uid };\n                } else {\n                    const timeout = setTimeout(() => dispatch(showNoDataFromSourceVideoError(track)), 5000);\n\n                    noDataFromSourceNotificationInfo = { timeout };\n                }\n            }\n\n            track.on(JitsiTrackEvents.LOCAL_TRACK_STOPPED,\n                () => dispatch({\n                    type: TRACK_STOPPED,\n                    track: {\n                        jitsiTrack: track\n                    }\n                }));\n        } else {\n            participantId = track.getParticipantId();\n            isReceivingData = true;\n        }\n\n        return dispatch({\n            type: TRACK_ADDED,\n            track: {\n                jitsiTrack: track,\n                isReceivingData,\n                local,\n                mediaType,\n                mirror: _shouldMirror(track),\n                muted: track.isMuted(),\n                noDataFromSourceNotificationInfo,\n                participantId,\n                videoStarted: false,\n                videoType: track.videoType\n            }\n        });\n    };\n}\n\n/**\n * Create an action for when a track's muted state has been signaled to be\n * changed.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackMutedChanged(track) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            muted: track.isMuted()\n        }\n    };\n}\n\n/**\n * Create an action for when a track's no data from source notification information changes.\n *\n * @param {JitsiLocalTrack} track - JitsiTrack instance.\n * @param {Object} noDataFromSourceNotificationInfo - Information about no data from source notification.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackNoDataFromSourceNotificationInfoChanged(track, noDataFromSourceNotificationInfo) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            noDataFromSourceNotificationInfo\n        }\n    };\n}\n\n/**\n * Create an action for when a track has been signaled for removal from the\n * conference.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_REMOVED,\n *     track: Track\n * }}\n */\nexport function trackRemoved(track) {\n    track.removeAllListeners(JitsiTrackEvents.TRACK_MUTE_CHANGED);\n    track.removeAllListeners(JitsiTrackEvents.TRACK_VIDEOTYPE_CHANGED);\n    track.removeAllListeners(JitsiTrackEvents.NO_DATA_FROM_SOURCE);\n\n    return {\n        type: TRACK_REMOVED,\n        track: {\n            jitsiTrack: track\n        }\n    };\n}\n\n/**\n * Signal that track's video started to play.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackVideoStarted(track) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            videoStarted: true\n        }\n    };\n}\n\n/**\n * Create an action for when participant video type changes.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @param {VIDEO_TYPE|undefined} videoType - Video type.\n * @returns {{\n *     type: TRACK_UPDATED,\n *     track: Track\n * }}\n */\nexport function trackVideoTypeChanged(track, videoType) {\n    return {\n        type: TRACK_UPDATED,\n        track: {\n            jitsiTrack: track,\n            videoType\n        }\n    };\n}\n\n/**\n * Signals passed tracks to be added.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @private\n * @returns {Function}\n */\nfunction _addTracks(tracks) {\n    return dispatch => Promise.all(tracks.map(t => dispatch(trackAdded(t))));\n}\n\n/**\n * Cancels and waits for any {@code getUserMedia} process/currently in progress\n * to complete/settle.\n *\n * @param {Function} getState - The redux store {@code getState} function used\n * to obtain the state.\n * @private\n * @returns {Promise} - A {@code Promise} resolved once all\n * {@code gumProcess.cancel()} {@code Promise}s are settled because all we care\n * about here is to be sure that the {@code getUserMedia} callbacks have\n * completed (i.e. Returned from the native side).\n */\nfunction _cancelGUMProcesses(getState) {\n    const logError\n        = error =>\n            logger.error('gumProcess.cancel failed', JSON.stringify(error));\n\n    return Promise.all(\n        getState()['features/base/tracks']\n            .filter(t => t.local)\n            .map(({ gumProcess }) =>\n                gumProcess && gumProcess.cancel().catch(logError)));\n}\n\n/**\n * Disposes passed tracks and signals them to be removed.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @protected\n * @returns {Function}\n */\nexport function _disposeAndRemoveTracks(tracks) {\n    return dispatch =>\n        _disposeTracks(tracks)\n            .then(() =>\n                Promise.all(tracks.map(t => dispatch(trackRemoved(t)))));\n}\n\n/**\n * Disposes passed tracks.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)[]} tracks - List of tracks.\n * @private\n * @returns {Promise} - A Promise resolved once {@link JitsiTrack.dispose()} is\n * done for every track from the list.\n */\nfunction _disposeTracks(tracks) {\n    return Promise.all(\n        tracks.map(t =>\n            t.dispose()\n                .catch(err => {\n                    // Track might be already disposed so ignore such an error.\n                    // Of course, re-throw any other error(s).\n                    if (err.name !== JitsiTrackErrors.TRACK_IS_DISPOSED) {\n                        throw err;\n                    }\n                })));\n}\n\n/**\n * Implements the {@code Promise} rejection handler of\n * {@code createLocalTracksA} and {@code createLocalTracksF}.\n *\n * @param {Object} error - The {@code Promise} rejection reason.\n * @param {string} device - The device/{@code MEDIA_TYPE} associated with the\n * rejection.\n * @private\n * @returns {Function}\n */\nfunction _onCreateLocalTracksRejected(error, device) {\n    return dispatch => {\n        // If permissions are not allowed, alert the user.\n        dispatch({\n            type: TRACK_CREATE_ERROR,\n            permissionDenied: error?.name === 'SecurityError',\n            trackType: device\n        });\n    };\n}\n\n/**\n * Returns true if the provided {@code JitsiTrack} should be rendered as a\n * mirror.\n *\n * We only want to show a video in mirrored mode when:\n * 1) The video source is local, and not remote.\n * 2) The video source is a camera, not a desktop (capture).\n * 3) The camera is capturing the user, not the environment.\n *\n * TODO Similar functionality is part of lib-jitsi-meet. This function should be\n * removed after https://github.com/jitsi/lib-jitsi-meet/pull/187 is merged.\n *\n * @param {(JitsiLocalTrack|JitsiRemoteTrack)} track - JitsiTrack instance.\n * @private\n * @returns {boolean}\n */\nfunction _shouldMirror(track) {\n    return (\n        track\n            && track.isLocal()\n            && track.isVideoTrack()\n\n            // XXX The type of the return value of JitsiLocalTrack's\n            // getCameraFacingMode happens to be named CAMERA_FACING_MODE as\n            // well, it's defined by lib-jitsi-meet. Note though that the type\n            // of the value on the right side of the equality check is defined\n            // by jitsi-meet. The type definitions are surely compatible today\n            // but that may not be the case tomorrow.\n            && track.getCameraFacingMode() === CAMERA_FACING_MODE.USER);\n}\n\n/**\n * Signals that track create operation for given media track has been canceled.\n * Will clean up local track stub from the redux state which holds the\n * {@code gumProcess} reference.\n *\n * @param {MEDIA_TYPE} mediaType - The type of the media for which the track was\n * being created.\n * @private\n * @returns {{\n *     type,\n *     trackType: MEDIA_TYPE\n * }}\n */\nfunction _trackCreateCanceled(mediaType) {\n    return {\n        type: TRACK_CREATE_CANCELED,\n        trackType: mediaType\n    };\n}\n\n/**\n * If thee local track if of type Desktop, it calls _disposeAndRemoveTracks) on it.\n *\n * @returns {Function}\n */\nexport function destroyLocalDesktopTrackIfExists() {\n    return (dispatch, getState) => {\n        const videoTrack = getLocalVideoTrack(getState()['features/base/tracks']);\n        const isDesktopTrack = videoTrack && videoTrack.videoType === VIDEO_TYPE.DESKTOP;\n\n        if (isDesktopTrack) {\n            dispatch(_disposeAndRemoveTracks([ videoTrack.jitsiTrack ]));\n        }\n    };\n}\n\n/**\n * Sets UID of the displayed no data from source notification. Used to track\n * if the notification was previously displayed in this context.\n *\n * @param {number} uid - Notification UID.\n * @returns {{\n    *     type: SET_NO_AUDIO_SIGNAL_UID,\n    *     uid: number\n    * }}\n    */\nexport function setNoSrcDataNotificationUid(uid) {\n    return {\n        type: SET_NO_SRC_DATA_NOTIFICATION_UID,\n        uid\n    };\n}\n\n/**\n * Updates the last media event received for a video track.\n *\n * @param {JitsiRemoteTrack} track - JitsiTrack instance.\n * @param {string} name - The current media event name for the video.\n * @returns {{\n *     type: TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT,\n *     track: Track,\n *     name: string\n * }}\n */\nexport function updateLastTrackVideoMediaEvent(track, name) {\n    return {\n        type: TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT,\n        track,\n        name\n    };\n}\n\n/**\n * Toggles the facingMode constraint on the video stream.\n *\n * @returns {Function}\n */\nexport function toggleCamera() {\n    return async (dispatch, getState) => {\n        const state = getState();\n        const tracks = state['features/base/tracks'];\n        const localVideoTrack = getLocalVideoTrack(tracks).jitsiTrack;\n        const currentFacingMode = localVideoTrack.getCameraFacingMode();\n\n        /**\n         * FIXME: Ideally, we should be dispatching {@code replaceLocalTrack} here,\n         * but it seems to not trigger the re-rendering of the local video on Chrome;\n         * could be due to a plan B vs unified plan issue. Therefore, we use the legacy\n         * method defined in conference.js that manually takes care of updating the local\n         * video as well.\n         */\n        await APP.conference.useVideoStream(null);\n\n        const targetFacingMode = currentFacingMode === CAMERA_FACING_MODE.USER\n            ? CAMERA_FACING_MODE.ENVIRONMENT\n            : CAMERA_FACING_MODE.USER;\n\n        // Update the flipX value so the environment facing camera is not flipped, before the new track is created.\n        dispatch(updateSettings({ localFlipX: targetFacingMode === CAMERA_FACING_MODE.USER }));\n\n        const newVideoTrack = await createLocalTrack('video', null, null, { facingMode: targetFacingMode });\n\n        // FIXME: See above.\n        await APP.conference.useVideoStream(newVideoTrack);\n    };\n}\n","// @flow\n\n/**\n * The type of redux action dispatched which represents that the background\n * effect is enabled or not.\n *\n * @returns {{\n *     type: BACKGROUND_ENABLED,\n *     backgroundEffectEnabled: boolean\n * }}\n */\nexport const BACKGROUND_ENABLED = 'BACKGROUND_ENABLED';\n\n/**\n * The type of the action which enables or disables virtual background\n *\n * @returns {{\n *     type: SET_VIRTUAL_BACKGROUND,\n *     virtualSource: string,\n *     blurValue: number,\n *     backgroundType: string,\n *     selectedThumbnail: string\n * }}\n */\nexport const SET_VIRTUAL_BACKGROUND = 'SET_VIRTUAL_BACKGROUND';\n","// @flow\n\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    AUDIO_MUTE,\n    createShortcutEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { getFeatureFlag, AUDIO_MUTE_BUTTON_ENABLED } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { AbstractAudioMuteButton } from '../../base/toolbox/components';\nimport type { AbstractButtonProps } from '../../base/toolbox/components';\nimport { isLocalTrackMuted } from '../../base/tracks';\nimport { muteLocal } from '../../video-menu/actions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link AudioMuteButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether audio is currently muted or not.\n     */\n    _audioMuted: boolean,\n\n    /**\n     * Whether the button is disabled.\n     */\n    _disabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n}\n\n/**\n * Component that renders a toolbar button for toggling audio mute.\n *\n * @extends AbstractAudioMuteButton\n */\nclass AudioMuteButton extends AbstractAudioMuteButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.mute';\n    label = 'toolbar.mute';\n    tooltip = 'toolbar.mute';\n\n    /**\n     * Initializes a new {@code AudioMuteButton} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onKeyboardShortcut = this._onKeyboardShortcut.bind(this);\n    }\n\n    /**\n     * Registers the keyboard shortcut that toggles the audio muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.registerShortcut(\n                'M',\n                null,\n                this._onKeyboardShortcut,\n                'keyboardShortcuts.mute');\n    }\n\n    /**\n     * Unregisters the keyboard shortcut that toggles the audio muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.unregisterShortcut('M');\n    }\n\n    /**\n     * Indicates if audio is currently muted or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isAudioMuted() {\n        return this.props._audioMuted;\n    }\n\n    _onKeyboardShortcut: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action to\n     * toggle the audio muting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onKeyboardShortcut() {\n        sendAnalytics(\n            createShortcutEvent(\n                AUDIO_MUTE,\n                ACTION_SHORTCUT_TRIGGERED,\n                { enable: !this._isAudioMuted() }));\n\n        super._handleClick();\n    }\n\n    /**\n     * Changes the muted state.\n     *\n     * @param {boolean} audioMuted - Whether audio should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setAudioMuted(audioMuted: boolean) {\n        this.props.dispatch(muteLocal(audioMuted, MEDIA_TYPE.AUDIO));\n    }\n\n    /**\n     * Return a boolean value indicating if this button is disabled or not.\n     *\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AudioMuteButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioMuted: boolean,\n *     _disabled: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n    const _audioMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.AUDIO);\n    const _disabled = state['features/base/config'].startSilent;\n    const enabledFlag = getFeatureFlag(state, AUDIO_MUTE_BUTTON_ENABLED, true);\n\n    return {\n        _audioMuted,\n        _disabled,\n        visible: enabledFlag\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(AudioMuteButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { IconArrowUp } from '../../../base/icons';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet/_';\nimport { connect } from '../../../base/redux';\nimport { ToolboxButtonWithIcon } from '../../../base/toolbox/components';\nimport { AudioSettingsPopup, toggleAudioSettings } from '../../../settings';\nimport { getAudioSettingsVisibility } from '../../../settings/functions';\nimport { isAudioSettingsButtonDisabled } from '../../functions';\nimport AudioMuteButton from '../AudioMuteButton';\n\ntype Props = {\n\n    /**\n     * Indicates whether audio permissions have been granted or denied.\n     */\n    hasPermissions: boolean,\n\n    /**\n     * Click handler for the small icon. Opens audio options.\n     */\n    onAudioOptionsClick: Function,\n\n    /**\n     * If the button should be disabled.\n     */\n    isDisabled: boolean,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n\n    /**\n     * Flag controlling the visibility of the button.\n     * AudioSettings popup is disabled on mobile browsers.\n     */\n    visible: boolean,\n\n    /**\n     * Defines is popup is open\n     */\n    isOpen: boolean,\n};\n\n/**\n * Button used for audio & audio settings.\n *\n * @returns {ReactElement}\n */\nclass AudioSettingsButton extends Component<Props> {\n    /**\n     * Initializes a new {@code AudioSettingsButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onEscClick = this._onEscClick.bind(this);\n    }\n\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the more actions entries.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape' && this.props.isOpen) {\n            event.preventDefault();\n            event.stopPropagation();\n            this.props.onAudioOptionsClick();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { hasPermissions, isDisabled, onAudioOptionsClick, visible, isOpen, t } = this.props;\n        const settingsDisabled = !hasPermissions\n            || isDisabled\n            || !JitsiMeetJS.mediaDevices.isMultipleAudioInputSupported();\n\n        return visible ? (\n            <AudioSettingsPopup>\n                <ToolboxButtonWithIcon\n                    ariaControls = 'audio-settings-dialog'\n                    ariaExpanded = { isOpen }\n                    ariaHasPopup = { true }\n                    ariaLabel = { t('toolbar.audioSettings') }\n                    icon = { IconArrowUp }\n                    iconDisabled = { settingsDisabled }\n                    iconId = 'audio-settings-button'\n                    iconTooltip = { t('toolbar.audioSettings') }\n                    onIconClick = { onAudioOptionsClick }\n                    onIconKeyDown = { this._onEscClick }>\n                    <AudioMuteButton />\n                </ToolboxButtonWithIcon>\n            </AudioSettingsPopup>\n        ) : <AudioMuteButton />;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const { permissions = {} } = state['features/base/devices'];\n\n    return {\n        hasPermissions: permissions.audio,\n        isDisabled: isAudioSettingsButtonDisabled(state),\n        isOpen: getAudioSettingsVisibility(state),\n        visible: !isMobileBrowser()\n    };\n}\n\nconst mapDispatchToProps = {\n    onAudioOptionsClick: toggleAudioSettings\n};\n\nexport default translate(connect(\n    mapStateToProps,\n    mapDispatchToProps,\n)(AudioSettingsButton));\n","// @flow\n\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    VIDEO_MUTE,\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { setAudioOnly } from '../../base/audio-only';\nimport { getFeatureFlag, VIDEO_MUTE_BUTTON_ENABLED } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport {\n    VIDEO_MUTISM_AUTHORITY,\n    setVideoMuted\n} from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { AbstractVideoMuteButton } from '../../base/toolbox/components';\nimport type { AbstractButtonProps } from '../../base/toolbox/components';\nimport { getLocalVideoType, isLocalCameraTrackMuted } from '../../base/tracks';\nimport { isVideoMuteButtonDisabled } from '../functions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of {@link VideoMuteButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the current conference is in audio only mode or not.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * MEDIA_TYPE of the local video.\n     */\n    _videoMediaType: string,\n\n    /**\n     * Whether video is currently muted or not.\n     */\n    _videoMuted: boolean,\n\n    /**\n     * Whether video button is disabled or not.\n     */\n    _videoDisabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n}\n\n/**\n * Component that renders a toolbar button for toggling video mute.\n *\n * @extends AbstractVideoMuteButton\n */\nclass VideoMuteButton extends AbstractVideoMuteButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.videomute';\n    label = 'toolbar.videomute';\n    tooltip = 'toolbar.videomute';\n\n    /**\n     * Initializes a new {@code VideoMuteButton} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onKeyboardShortcut = this._onKeyboardShortcut.bind(this);\n    }\n\n    /**\n     * Registers the keyboard shortcut that toggles the video muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.registerShortcut(\n                'V',\n                null,\n                this._onKeyboardShortcut,\n                'keyboardShortcuts.videoMute');\n    }\n\n    /**\n     * Unregisters the keyboard shortcut that toggles the video muting.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        typeof APP === 'undefined'\n            || APP.keyboardshortcut.unregisterShortcut('V');\n    }\n\n    /**\n     * Indicates if video is currently disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._videoDisabled;\n    }\n\n    /**\n     * Indicates if video is currently muted or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isVideoMuted() {\n        return this.props._videoMuted;\n    }\n\n    _onKeyboardShortcut: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action to\n     * toggle the video muting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onKeyboardShortcut() {\n        sendAnalytics(\n            createShortcutEvent(\n                VIDEO_MUTE,\n                ACTION_SHORTCUT_TRIGGERED,\n                { enable: !this._isVideoMuted() }));\n\n        super._handleClick();\n    }\n\n    /**\n     * Changes the muted state.\n     *\n     * @override\n     * @param {boolean} videoMuted - Whether video should be muted or not.\n     * @protected\n     * @returns {void}\n     */\n    _setVideoMuted(videoMuted: boolean) {\n        sendAnalytics(createToolbarEvent(VIDEO_MUTE, { enable: videoMuted }));\n        if (this.props._audioOnly) {\n            this.props.dispatch(\n                setAudioOnly(false, /* ensureTrack */ true));\n        }\n        const mediaType = this.props._videoMediaType;\n\n        this.props.dispatch(\n            setVideoMuted(\n                videoMuted,\n                mediaType,\n                VIDEO_MUTISM_AUTHORITY.USER,\n                /* ensureTrack */ true));\n\n        // FIXME: The old conference logic still relies on this event being\n        // emitted.\n        typeof APP === 'undefined'\n            || APP.UI.emitEvent(UIEvents.VIDEO_MUTED, videoMuted, true);\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VideoMuteButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean,\n *     _videoMuted: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const tracks = state['features/base/tracks'];\n    const enabledFlag = getFeatureFlag(state, VIDEO_MUTE_BUTTON_ENABLED, true);\n\n    return {\n        _audioOnly: Boolean(audioOnly),\n        _videoDisabled: isVideoMuteButtonDisabled(state),\n        _videoMediaType: getLocalVideoType(tracks),\n        _videoMuted: isLocalCameraTrackMuted(tracks),\n        visible: enabledFlag\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoMuteButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { IconArrowUp } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { ToolboxButtonWithIcon } from '../../../base/toolbox/components';\nimport { getLocalJitsiVideoTrack } from '../../../base/tracks';\nimport { toggleVideoSettings, VideoSettingsPopup } from '../../../settings';\nimport { getVideoSettingsVisibility } from '../../../settings/functions';\nimport { isVideoSettingsButtonDisabled } from '../../functions';\nimport VideoMuteButton from '../VideoMuteButton';\n\n\ntype Props = {\n\n    /**\n     * Click handler for the small icon. Opens video options.\n     */\n    onVideoOptionsClick: Function,\n\n    /**\n     * Indicates whether video permissions have been granted or denied.\n     */\n    hasPermissions: boolean,\n\n    /**\n     * Whether there is a video track or not.\n     */\n    hasVideoTrack: boolean,\n\n    /**\n     * If the button should be disabled\n     */\n    isDisabled: boolean,\n\n    /**\n     * Flag controlling the visibility of the button.\n     * VideoSettings popup is currently disabled on mobile browsers\n     * as mobile devices do not support capture of more than one\n     * camera at a time.\n     */\n    visible: boolean,\n\n    /**\n     * Used for translation\n     */\n    t: Function,\n\n    /**\n     * Defines is popup is open\n     */\n    isOpen: boolean\n};\n\n/**\n * Button used for video & video settings.\n *\n * @returns {ReactElement}\n */\nclass VideoSettingsButton extends Component<Props> {\n    /**\n     * Initializes a new {@code AudioSettingsButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onEscClick = this._onEscClick.bind(this);\n    }\n\n    /**\n     * Returns true if the settings icon is disabled.\n     *\n     * @returns {boolean}\n     */\n    _isIconDisabled() {\n        const { hasPermissions, hasVideoTrack, isDisabled } = this.props;\n\n        return (!hasPermissions || isDisabled) && !hasVideoTrack;\n    }\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the more actions entries.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape' && this.props.isOpen) {\n            event.preventDefault();\n            event.stopPropagation();\n            this.props.onVideoOptionsClick();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { onVideoOptionsClick, t, visible, isOpen } = this.props;\n\n        return visible ? (\n            <VideoSettingsPopup>\n                <ToolboxButtonWithIcon\n                    ariaControls = 'video-settings-dialog'\n                    ariaExpanded = { isOpen }\n                    ariaHasPopup = { true }\n                    ariaLabel = { this.props.t('toolbar.videoSettings') }\n                    icon = { IconArrowUp }\n                    iconDisabled = { this._isIconDisabled() }\n                    iconId = 'video-settings-button'\n                    iconTooltip = { t('toolbar.videoSettings') }\n                    onIconClick = { onVideoOptionsClick }\n                    onIconKeyDown = { this._onEscClick }>\n                    <VideoMuteButton />\n                </ToolboxButtonWithIcon>\n            </VideoSettingsPopup>\n        ) : <VideoMuteButton />;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const { permissions = {} } = state['features/base/devices'];\n\n    return {\n        hasPermissions: permissions.video,\n        hasVideoTrack: Boolean(getLocalJitsiVideoTrack(state)),\n        isDisabled: isVideoSettingsButtonDisabled(state),\n        isOpen: getVideoSettingsVisibility(state),\n        visible: !isMobileBrowser()\n    };\n}\n\nconst mapDispatchToProps = {\n    onVideoOptionsClick: toggleVideoSettings\n};\n\nexport default translate(connect(\n    mapStateToProps,\n    mapDispatchToProps,\n)(VideoSettingsButton));\n","/* @flow */\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractToolbarButton}.\n */\nexport type Props = {\n\n    /**\n     * A succinct description of what the button does. Used by accessibility\n     * tools and torture tests.\n     */\n    accessibilityLabel: string,\n\n    /**\n     * The Icon of this {@code AbstractToolbarButton}.\n     */\n    icon: Object,\n\n    /**\n     * The style of the Icon of this {@code AbstractToolbarButton}.\n     */\n    iconStyle?: Object,\n\n    /**\n     * On click handler.\n     */\n    onClick: Function,\n\n    /**\n     * {@code AbstractToolbarButton} styles.\n     */\n    style?: Array<string> | Object,\n\n    /**\n     * An optional modifier to render the button toggled.\n     */\n    toggled?: boolean,\n\n    /**\n     * The color underlaying the button.\n     */\n    underlayColor?: any\n};\n\n/**\n * Abstract (base) class for a button in {@link Toolbar}.\n *\n * @abstract\n */\nexport default class AbstractToolbarButton<P: Props> extends Component<P> {\n    /**\n     * Initializes a new {@code AbstractToolbarButton} instance.\n     *\n     * @param {Object} props - The React {@code Component} props to initialize\n     * the new {@code AbstractToolbarButton} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onClick: (any) => any;\n\n    /**\n     * Handles clicking/pressing this {@code AbstractToolbarButton} by\n     * forwarding the event to the {@code onClick} prop of this instance if any.\n     *\n     * @protected\n     * @returns {*} The result returned by the invocation of the {@code onClick}\n     * prop of this instance if any.\n     */\n    _onClick(...args) {\n        const { onClick } = this.props;\n\n        return onClick && onClick(...args);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this._renderButton(this._renderIcon());\n    }\n\n    _renderButton: (React$Element<any> | null) => React$Element<any>;\n\n    _renderIcon: () => React$Element<any> | null;\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { Icon } from '../../../base/icons';\nimport { Tooltip } from '../../../base/tooltip';\nimport AbstractToolbarButton from '../AbstractToolbarButton';\nimport type { Props as AbstractToolbarButtonProps }\n    from '../AbstractToolbarButton';\n\n/**\n * The type of the React {@code Component} props of {@link ToolbarButton}.\n */\nexport type Props = AbstractToolbarButtonProps & {\n\n    /**\n     * The text to display in the tooltip.\n     */\n    tooltip: string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the\n     * button.\n     */\n    tooltipPosition: string,\n\n    /**\n     * keyDown handler\n     */\n    onKeyDown?: Function\n};\n\n/**\n * Represents a button in the toolbar.\n *\n * @extends AbstractToolbarButton\n */\nclass ToolbarButton extends AbstractToolbarButton<Props> {\n    /**\n     * Default values for {@code ToolbarButton} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        tooltipPosition: 'top'\n    };\n\n    /**\n     * Initializes a new {@code ToolbarButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * Handles 'Enter' and Space key on the button to trigger onClick for accessibility.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyPress(event) {\n        if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            this.props.onClick();\n        }\n    }\n    _onClick: (Object) => void;\n\n    /**\n     * Handles button click.\n     *\n     * @param {Object} e - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onClick(e) {\n        this.props.onClick(e);\n\n        // blur after click to release focus from button to allow PTT.\n        e && e.currentTarget && e.currentTarget.blur();\n    }\n\n    /**\n     * Renders the button of this {@code ToolbarButton}.\n     *\n     * @param {Object} children - The children, if any, to be rendered inside\n     * the button. Presumably, contains the icon of this {@code ToolbarButton}.\n     * @protected\n     * @returns {ReactElement} The button of this {@code ToolbarButton}.\n     */\n    _renderButton(children) {\n        return (\n            <div\n                aria-label = { this.props.accessibilityLabel }\n                aria-pressed = { this.props.toggled }\n                className = 'toolbox-button'\n                onClick = { this._onClick }\n                onKeyDown = { this.props.onKeyDown }\n                onKeyPress = { this._onKeyPress }\n                role = 'button'\n                tabIndex = { 0 }>\n                { this.props.tooltip\n                    ? <Tooltip\n                        content = { this.props.tooltip }\n                        position = { this.props.tooltipPosition }>\n                        { children }\n                    </Tooltip>\n                    : children }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the icon of this {@code ToolbarButton}.\n     *\n     * @inheritdoc\n     */\n    _renderIcon() {\n        return (\n            <div className = { `toolbox-icon ${this.props.toggled ? 'toggled' : ''}` }>\n                <Icon src = { this.props.icon } />\n            </div>\n        );\n    }\n}\n\nexport default ToolbarButton;\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconCodeBlock } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport EmbedMeetingDialog from './EmbedMeetingDialog';\n\n/**\n * The type of the React {@code Component} props of {@link EmbedMeetingButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Implementation of a button for opening embed meeting dialog.\n */\nclass EmbedMeetingButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.embedMeeting';\n    icon = IconCodeBlock;\n    label = 'toolbar.embedMeeting';\n    tooltip = 'toolbar.embedMeeting';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('embed.meeting'));\n        dispatch(openDialog(EmbedMeetingDialog));\n    }\n}\n\nexport default translate(connect()(EmbedMeetingButton));\n","/* @flow */\n\nimport React from 'react';\n\nimport { Tooltip } from '../../../base/tooltip';\nimport AbstractToolbarButton from '../../../toolbox/components/AbstractToolbarButton';\nimport type { Props as AbstractToolbarButtonProps } from '../../../toolbox/components/AbstractToolbarButton';\n\n/**\n * The type of the React {@code Component} props of {@link ReactionButton}.\n */\ntype Props = AbstractToolbarButtonProps & {\n\n    /**\n     * Optional text to display in the tooltip.\n     */\n    tooltip?: string,\n\n    /**\n     * From which direction the tooltip should appear, relative to the\n     * button.\n     */\n    tooltipPosition: string,\n\n    /**\n     * Optional label for the button\n     */\n    label?: string\n};\n\n/**\n * Represents a button in the reactions menu.\n *\n * @extends AbstractToolbarButton\n */\nclass ReactionButton extends AbstractToolbarButton<Props> {\n    /**\n     * Default values for {@code ReactionButton} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        tooltipPosition: 'top'\n    };\n\n    /**\n     * Initializes a new {@code ReactionButton} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onKeyDown = this._onKeyDown.bind(this);\n    }\n\n    _onKeyDown: (Object) => void;\n\n    /**\n     * Handles 'Enter' key on the button to trigger onClick for accessibility.\n     * We should be handling Space onKeyUp but it conflicts with PTT.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        // If the event coming to the dialog has been subject to preventDefault\n        // we don't handle it here.\n        if (event.defaultPrevented) {\n            return;\n        }\n\n        if (event.key === 'Enter') {\n            event.preventDefault();\n            event.stopPropagation();\n            this.props.onClick();\n        }\n    }\n\n    /**\n     * Renders the button of this {@code ReactionButton}.\n     *\n     * @param {Object} children - The children, if any, to be rendered inside\n     * the button. Presumably, contains the emoji of this {@code ReactionButton}.\n     * @protected\n     * @returns {ReactElement} The button of this {@code ReactionButton}.\n     */\n    _renderButton(children) {\n        return (\n            <div\n                aria-label = { this.props.accessibilityLabel }\n                aria-pressed = { this.props.toggled }\n                className = 'toolbox-button'\n                onClick = { this.props.onClick }\n                onKeyDown = { this._onKeyDown }\n                role = 'button'\n                tabIndex = { 0 }>\n                { this.props.tooltip\n                    ? <Tooltip\n                        content = { this.props.tooltip }\n                        position = { this.props.tooltipPosition }>\n                        { children }\n                    </Tooltip>\n                    : children }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the icon (emoji) of this {@code reactionButton}.\n     *\n     * @inheritdoc\n     */\n    _renderIcon() {\n        return (\n            <div className = { `toolbox-icon ${this.props.toggled ? 'toggled' : ''}` }>\n                <span className = 'emoji'>{this.props.icon}</span>\n                {this.props.label && <span className = 'text'>{this.props.label}</span>}\n            </div>\n        );\n    }\n}\n\nexport default ReactionButton;\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../../base/redux';\nimport { removeReaction } from '../../actions.any';\nimport { REACTIONS } from '../../constants';\n\ntype Props = {\n\n    /**\n     * Reaction to be displayed.\n     */\n    reaction: string,\n\n    /**\n     * Id of the reaction.\n     */\n    uid: Number,\n\n    /**\n     * Removes reaction from redux state.\n     */\n    removeReaction: Function,\n\n    /**\n     * Index of the reaction in the queue.\n     */\n    index: number\n};\n\ntype State = {\n\n    /**\n     * Index of CSS animation. Number between 0-20.\n     */\n    index: number\n}\n\n\n/**\n * Used to display animated reactions.\n *\n * @returns {ReactElement}\n */\nclass ReactionEmoji extends Component<Props, State> {\n    /**\n     * Initializes a new {@code ReactionEmoji} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            index: props.index % 21\n        };\n    }\n\n    /**\n     * Implements React Component's componentDidMount.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        setTimeout(() => this.props.removeReaction(this.props.uid), 5000);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { reaction, uid } = this.props;\n        const { index } = this.state;\n\n        return (\n            <div\n                className = { `reaction-emoji reaction-${index}` }\n                id = { uid }>\n                { REACTIONS[reaction].emoji }\n            </div>\n        );\n    }\n}\n\nconst mapDispatchToProps = {\n    removeReaction\n};\n\nexport default connect(\n    null,\n    mapDispatchToProps,\n)(ReactionEmoji);\n","// @flow\n\nimport {\n    TOGGLE_REACTIONS_VISIBLE\n} from './actionTypes';\n\n/**\n * Toggles the visibility of the reactions menu.\n *\n * @returns {Function}\n */\nexport function toggleReactionsMenuVisibility() {\n    return {\n        type: TOGGLE_REACTIONS_VISIBLE\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\n\nimport {\n    createReactionMenuEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { getLocalParticipant, getParticipantCount, participantUpdated } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { dockToolbox } from '../../../toolbox/actions.web';\nimport { addReactionToBuffer } from '../../actions.any';\nimport { toggleReactionsMenuVisibility } from '../../actions.web';\nimport { REACTIONS } from '../../constants';\n\nimport ReactionButton from './ReactionButton';\n\ntype Props = {\n\n    /**\n     * The number of conference participants.\n     */\n    _participantCount: number,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n\n    /**\n     * Whether or not the local participant's hand is raised.\n     */\n    _raisedHand: boolean,\n\n    /**\n     * The ID of the local participant.\n     */\n    _localParticipantID: String,\n\n    /**\n     * The Redux Dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Docks the toolbox\n     */\n    _dockToolbox: Function,\n\n    /**\n     * Whether or not it's displayed in the overflow menu.\n     */\n    overflowMenu: boolean\n};\n\ndeclare var APP: Object;\n\n/**\n * Implements the reactions menu.\n *\n * @returns {ReactElement}\n */\nclass ReactionsMenu extends Component<Props> {\n    /**\n     * Initializes a new {@code ReactionsMenu} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onToolbarToggleRaiseHand = this._onToolbarToggleRaiseHand.bind(this);\n        this._getReactionButtons = this._getReactionButtons.bind(this);\n    }\n\n    _onToolbarToggleRaiseHand: () => void;\n\n    _getReactionButtons: () => Array<React$Element<*>>;\n\n    /**\n     * Implements React Component's componentDidMount.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props._dockToolbox(true);\n    }\n\n    /**\n     * Implements React Component's componentWillUnmount.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this.props._dockToolbox(false);\n    }\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * raise hand.\n     *\n     * @returns {void}\n     */\n    _onToolbarToggleRaiseHand() {\n        sendAnalytics(createToolbarEvent(\n            'raise.hand',\n            { enable: !this.props._raisedHand }));\n        this._doToggleRaiseHand();\n        this.props.dispatch(toggleReactionsMenuVisibility());\n    }\n\n    /**\n     * Dispatches an action to toggle the local participant's raised hand state.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleRaiseHand() {\n        const { _localParticipantID, _raisedHand } = this.props;\n        const newRaisedStatus = !_raisedHand;\n\n        this.props.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id: _localParticipantID,\n            local: true,\n            raisedHand: newRaisedStatus\n        }));\n\n        APP.API.notifyRaiseHandUpdated(_localParticipantID, newRaisedStatus);\n    }\n\n    /**\n     * Returns the emoji reaction buttons.\n     *\n     * @returns {Array}\n     */\n    _getReactionButtons() {\n        const { t, dispatch } = this.props;\n        let modifierKey = 'Alt';\n\n        if (window.navigator?.platform) {\n            if (window.navigator.platform.indexOf('Mac') !== -1) {\n                modifierKey = '⌥';\n            }\n        }\n\n        return Object.keys(REACTIONS).map(key => {\n            /**\n             * Sends reaction message.\n             *\n             * @returns {void}\n             */\n            function doSendReaction() {\n                dispatch(addReactionToBuffer(key));\n                sendAnalytics(createReactionMenuEvent(key));\n            }\n\n            return (<ReactionButton\n                accessibilityLabel = { t(`toolbar.accessibilityLabel.${key}`) }\n                icon = { REACTIONS[key].emoji }\n                key = { key }\n                onClick = { doSendReaction }\n                toggled = { false }\n                tooltip = { `${t(`toolbar.${key}`)} (${modifierKey} + ${REACTIONS[key].shortcutChar})` } />);\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _participantCount, _raisedHand, t, overflowMenu } = this.props;\n\n        return (\n            <div className = { `reactions-menu ${overflowMenu ? 'overflow' : ''}` }>\n                { _participantCount > 1 && <div className = 'reactions-row'>\n                    { this._getReactionButtons() }\n                </div> }\n                <div className = 'raise-hand-row'>\n                    <ReactionButton\n                        accessibilityLabel = { t('toolbar.accessibilityLabel.raiseHand') }\n                        icon = '✋'\n                        key = 'raisehand'\n                        label = {\n                            `${t(`toolbar.${_raisedHand ? 'lowerYourHand' : 'raiseYourHand'}`)}\n                            ${overflowMenu ? '' : ' (R)'}`\n                        }\n                        onClick = { this._onToolbarToggleRaiseHand }\n                        toggled = { true } />\n                </div>\n            </div>\n        );\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        _localParticipantID: localParticipant.id,\n        _raisedHand: localParticipant.raisedHand,\n        _participantCount: getParticipantCount(state)\n    };\n}\n\n/**\n * Function that maps parts of Redux actions into component props.\n *\n * @param {Object} dispatch - Redux dispatch.\n * @returns {Object}\n */\nfunction mapDispatchToProps(dispatch) {\n    return {\n        dispatch,\n        ...bindActionCreators(\n        {\n            _dockToolbox: dockToolbox\n        }, dispatch)\n    };\n}\n\nexport default translate(connect(\n    mapStateToProps,\n    mapDispatchToProps,\n)(ReactionsMenu));\n","// @flow\n\n/**\n * Returns the visibility state of the reactions menu.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function getReactionsMenuVisibility(state: Object) {\n    return state['features/reactions'].visible;\n}\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { toggleReactionsMenuVisibility } from '../../actions.web';\nimport { getReactionsMenuVisibility } from '../../functions.web';\n\nimport ReactionsMenu from './ReactionsMenu';\n\n\ntype Props = {\n\n    /**\n    * Component's children (the reactions menu button).\n    */\n    children: React$Node\n}\n\n/**\n * Popup with reactions menu.\n *\n * @returns {ReactElement}\n */\nfunction ReactionsMenuPopup({\n    children\n}: Props) {\n    /**\n    * Flag controlling the visibility of the popup.\n    */\n    const isOpen = useSelector(state => getReactionsMenuVisibility(state));\n\n    const dispatch = useDispatch();\n\n    /**\n     * Toggles reactions menu visibility.\n     *\n     * @returns {void}\n     */\n    function onClose() {\n        dispatch(toggleReactionsMenuVisibility());\n    }\n\n    return (\n        <div className = 'reactions-menu-popup'>\n            <InlineDialog\n                content = { <ReactionsMenu /> }\n                isOpen = { isOpen }\n                onClose = { onClose }\n                placement = 'top'>\n                {children}\n            </InlineDialog>\n        </div>\n    );\n}\n\nexport default ReactionsMenuPopup;\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconRaisedHand } from '../../../base/icons';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport ToolbarButton from '../../../toolbox/components/web/ToolbarButton';\nimport { toggleReactionsMenuVisibility } from '../../actions.web';\nimport { type ReactionEmojiProps } from '../../constants';\nimport { getReactionsQueue } from '../../functions.any';\nimport { getReactionsMenuVisibility } from '../../functions.web';\n\nimport ReactionEmoji from './ReactionEmoji';\nimport ReactionsMenuPopup from './ReactionsMenuPopup';\n\ntype Props = {\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n\n    /**\n     * Whether or not the local participant's hand is raised.\n     */\n    raisedHand: boolean,\n\n    /**\n     * Click handler for the reaction button. Toggles the reactions menu.\n     */\n    onReactionsClick: Function,\n\n    /**\n     * Whether or not the reactions menu is open.\n     */\n    isOpen: boolean,\n\n    /**\n     * The array of reactions to be displayed.\n     */\n    reactionsQueue: Array<ReactionEmojiProps>,\n\n    /**\n     * Redux dispatch function.\n     */\n    dispatch: Function\n};\n\n\ndeclare var APP: Object;\n\n/**\n * Button used for the reactions menu.\n *\n * @returns {ReactElement}\n */\nfunction ReactionsMenuButton({\n    t,\n    raisedHand,\n    isOpen,\n    reactionsQueue,\n    dispatch\n}: Props) {\n\n    /**\n     * Toggles the reactions menu visibility.\n     *\n     * @returns {void}\n     */\n    function toggleReactionsMenu() {\n        dispatch(toggleReactionsMenuVisibility());\n    }\n\n    return (\n        <div className = 'reactions-menu-popup-container'>\n            <ReactionsMenuPopup>\n                <ToolbarButton\n                    accessibilityLabel = { t('toolbar.accessibilityLabel.reactionsMenu') }\n                    icon = { IconRaisedHand }\n                    key = 'reactions'\n                    onClick = { toggleReactionsMenu }\n                    toggled = { raisedHand }\n                    tooltip = { t(`toolbar.${isOpen ? 'closeReactionsMenu' : 'openReactionsMenu'}`) } />\n            </ReactionsMenuPopup>\n            {reactionsQueue.map(({ reaction, uid }, index) => (<ReactionEmoji\n                index = { index }\n                key = { uid }\n                reaction = { reaction }\n                uid = { uid } />))}\n        </div>\n    );\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        isOpen: getReactionsMenuVisibility(state),\n        reactionsQueue: getReactionsQueue(state),\n        raisedHand: localParticipant?.raisedHand\n    };\n}\n\nexport default translate(connect(mapStateToProps)(ReactionsMenuButton));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport {\n    getFeatureFlag,\n    LOBBY_MODE_ENABLED,\n    MEETING_PASSWORD_ENABLED,\n    SECURITY_OPTIONS_ENABLED\n} from '../../../base/flags';\nimport { translate } from '../../../base/i18n';\nimport { IconSecurityOff, IconSecurityOn } from '../../../base/icons';\nimport { isLocalParticipantModerator } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { toggleSecurityDialog } from '../../actions';\n\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the shared document is being edited or not.\n     */\n    _locked: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>\n};\n\n\n/**\n * Implements an {@link AbstractButton} to open the security dialog.\n */\nclass SecurityDialogButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.security';\n    icon = IconSecurityOff;\n    label = 'toolbar.security';\n    toggledIcon = IconSecurityOn;\n    tooltip = 'toolbar.security';\n\n    /**\n     * Handles clicking / pressing the button, and opens / closes the appropriate dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent('toggle.security', { enable: !this.props._locked }));\n        this.props.dispatch(toggleSecurityDialog());\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._locked;\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @returns {Props}\n */\nfunction mapStateToProps(state: Object) {\n    const { conference } = state['features/base/conference'];\n    const { hideLobbyButton } = state['features/base/config'];\n    const { locked } = state['features/base/conference'];\n    const { lobbyEnabled } = state['features/lobby'];\n    const lobbySupported = conference && conference.isLobbySupported();\n    const lobby = lobbySupported && isLocalParticipantModerator(state) && !hideLobbyButton;\n    const enabledFlag = getFeatureFlag(state, SECURITY_OPTIONS_ENABLED, true);\n    const enabledLobbyModeFlag = getFeatureFlag(state, LOBBY_MODE_ENABLED, true) && lobby;\n    const enabledMeetingPassFlag = getFeatureFlag(state, MEETING_PASSWORD_ENABLED, true);\n\n    return {\n        _locked: locked || lobbyEnabled,\n        visible: enabledFlag || (enabledLobbyModeFlag || enabledMeetingPassFlag)\n    };\n}\n\nexport default translate(connect(mapStateToProps)(SecurityDialogButton));\n","// @flow\n\nimport { toggleDialog } from '../base/dialog';\n\nimport { SecurityDialog } from './components/security-dialog';\n\n/**\n * Action that triggers toggle of the security options dialog.\n *\n * @returns {Function}\n */\nexport function toggleSecurityDialog() {\n    return function(dispatch: (Object) => Object) {\n        dispatch(toggleDialog(SecurityDialog));\n    };\n}\n","/**\n * Thresholds for displaying toolbox buttons\n */\nexport const THRESHOLDS = [\n    {\n        width: 520,\n        order: [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants', 'tileview' ]\n    },\n    {\n        width: 470,\n        order: [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants' ]\n    },\n    {\n        width: 420,\n        order: [ 'microphone', 'camera', 'desktop', 'chat', 'participants' ]\n    },\n    {\n        width: 370,\n        order: [ 'microphone', 'camera', 'chat', 'participants' ]\n    },\n    {\n        width: 320,\n        order: [ 'microphone', 'camera', 'chat' ]\n    },\n    {\n        width: 270,\n        order: [ 'microphone', 'camera' ]\n    }\n];\n\nexport const NOT_APPLICABLE = 'N/A';\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconDownload } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { openURLInBrowser } from '../../base/util';\nimport { isVpaasMeeting } from '../../jaas/functions';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The URL to the applications page.\n     */\n    _downloadAppsUrl: string\n};\n\n/**\n * Implements an {@link AbstractButton} to open the applications page in a new window.\n */\nclass DownloadButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.download';\n    icon = IconDownload;\n    label = 'toolbar.download';\n    tooltip = 'toolbar.download';\n\n    /**\n     * Handles clicking / pressing the button, and opens a new window with the user documentation.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent('download.pressed'));\n        openURLInBrowser(this.props._downloadAppsUrl);\n    }\n}\n\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object) {\n    const { downloadAppsUrl } = state['features/base/config'].deploymentUrls || {};\n    const visible = typeof downloadAppsUrl === 'string' && !isVpaasMeeting(state);\n\n    return {\n        _downloadAppsUrl: downloadAppsUrl,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DownloadButton));\n","// @flow\n\nimport _ from 'lodash';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { appNavigate } from '../../app/actions';\nimport { disconnect } from '../../base/connection';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { AbstractHangupButton } from '../../base/toolbox/components';\nimport type { AbstractButtonProps } from '../../base/toolbox/components';\n\n/**\n * The type of the React {@code Component} props of {@link HangupButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Component that renders a toolbar button for leaving the current conference.\n *\n * @extends AbstractHangupButton\n */\nclass HangupButton extends AbstractHangupButton<Props, *> {\n    _hangup: Function;\n\n    accessibilityLabel = 'toolbar.accessibilityLabel.hangup';\n    label = 'toolbar.hangup';\n    tooltip = 'toolbar.hangup';\n\n    /**\n     * Initializes a new HangupButton instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._hangup = _.once(() => {\n            sendAnalytics(createToolbarEvent('hangup'));\n\n            // FIXME: these should be unified.\n            if (navigator.product === 'ReactNative') {\n                this.props.dispatch(appNavigate(undefined));\n            } else {\n                this.props.dispatch(disconnect(true));\n            }\n        });\n    }\n\n    /**\n     * Helper function to perform the actual hangup action.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _doHangup() {\n        this._hangup();\n    }\n}\n\nexport default translate(connect()(HangupButton));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { getFeatureFlag, HELP_BUTTON_ENABLED } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport { IconHelp } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { openURLInBrowser } from '../../base/util';\nimport { isVpaasMeeting } from '../../jaas/functions';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The URL to the user documentation.\n     */\n    _userDocumentationURL: string\n};\n\n/**\n * Implements an {@link AbstractButton} to open the user documentation in a new window.\n */\nclass HelpButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.help';\n    icon = IconHelp;\n    label = 'toolbar.help';\n    tooltip = 'toolbar.help';\n\n    /**\n     * Handles clicking / pressing the button, and opens a new window with the user documentation.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        sendAnalytics(createToolbarEvent('help.pressed'));\n        openURLInBrowser(this.props._userDocumentationURL);\n    }\n}\n\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object) {\n    const { userDocumentationURL } = state['features/base/config'].deploymentUrls || {};\n    const enabled = getFeatureFlag(state, HELP_BUTTON_ENABLED, true);\n    const visible = typeof userDocumentationURL === 'string' && enabled && !isVpaasMeeting(state);\n\n    return {\n        _userDocumentationURL: userDocumentationURL,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(HelpButton));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconMuteEveryone } from '../../base/icons';\nimport { getLocalParticipant, isLocalParticipantModerator } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { MuteEveryoneDialog } from '../../video-menu/components';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the local participant.\n     */\n    localParticipantId: string\n};\n\n/**\n * Implements a React {@link Component} which displays a button for audio muting\n * every participant (except the local one)\n */\nclass MuteEveryoneButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryone';\n    icon = IconMuteEveryone;\n    label = 'toolbar.muteEveryone';\n    tooltip = 'toolbar.muteEveryone';\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, localParticipantId } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyone.pressed'));\n        dispatch(openDialog(MuteEveryoneDialog, {\n            exclude: [ localParticipantId ]\n        }));\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @param {Props} ownProps - The component's own props.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props) {\n    const localParticipant = getLocalParticipant(state);\n    const { disableRemoteMute } = state['features/base/config'];\n    const { visible = isLocalParticipantModerator(state) && !disableRemoteMute } = ownProps;\n\n    return {\n        localParticipantId: localParticipant.id,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(MuteEveryoneButton));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconMuteVideoEveryone } from '../../base/icons';\nimport { getLocalParticipant, isLocalParticipantModerator } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { MuteEveryonesVideoDialog } from '../../video-menu/components';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the local participant.\n     */\n    localParticipantId: string\n};\n\n/**\n * Implements a React {@link Component} which displays a button for disabling the camera of\n * every participant (except the local one)\n */\nclass MuteEveryonesVideoButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.muteEveryonesVideo';\n    icon = IconMuteVideoEveryone;\n    label = 'toolbar.muteEveryonesVideo';\n    tooltip = 'toolbar.muteEveryonesVideo';\n\n    /**\n     * Handles clicking / pressing the button, and opens a confirmation dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, localParticipantId } = this.props;\n\n        sendAnalytics(createToolbarEvent('mute.everyone.pressed'));\n        dispatch(openDialog(MuteEveryonesVideoDialog, {\n            exclude: [ localParticipantId ]\n        }));\n    }\n}\n\n/**\n * Maps part of the redux state to the component's props.\n *\n * @param {Object} state - The redux store/state.\n * @param {Props} ownProps - The component's own props.\n * @returns {Object}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props) {\n    const localParticipant = getLocalParticipant(state);\n    const { disableRemoteMute } = state['features/base/config'];\n    const { visible = isLocalParticipantModerator(state) && !disableRemoteMute } = ownProps;\n\n    return {\n        localParticipantId: localParticipant.id,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(MuteEveryonesVideoButton));\n","// @flow\n\nimport { translate } from '../../../base/i18n';\nimport { IconExitFullScreen, IconFullScreen } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\n\ntype Props = AbstractButtonProps & {\n\n  /**\n   * Whether or not the app is currently in full screen.\n   */\n   _fullScreen: boolean,\n\n    /**\n     * External handler for click action.\n     */\n    handleClick: Function\n};\n\n/**\n * Implementation of a button for toggling fullscreen state.\n */\nclass FullscreenButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.fullScreen';\n    label = 'toolbar.enterFullScreen';\n    toggledLabel = 'toolbar.exitFullScreen'\n\n    /**\n     * Retrieves icon dynamically.\n     */\n    get icon() {\n        if (this._isToggled()) {\n            return IconExitFullScreen;\n        }\n\n        return IconFullScreen;\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set icon(value) {\n        return value;\n    }\n\n    /**\n     * Retrieves icon dynamically.\n     */\n    get tooltip() {\n        if (this._isToggled()) {\n            return 'toolbar.exitFullScreen';\n        }\n\n        return 'toolbar.enterFullScreen';\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._fullScreen;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst mapStateToProps = state => {\n    return {\n        _fullScreen: state['features/toolbox'].fullScreen\n    };\n};\n\nexport default translate(connect(mapStateToProps)(FullscreenButton));\n","// @flow\n\nimport React, { useCallback } from 'react';\n\n\ntype Props = {\n\n    /**\n     * The component(s) to be displayed within the drawer menu.\n     */\n    children: React$Node,\n\n    /**\n     * Whether the drawer should be shown or not.\n     */\n    isOpen: boolean,\n\n    /**\n     * Function that hides the drawer.\n     */\n    onClose: Function\n};\n\n/**\n * Component that displays the mobile friendly drawer on web.\n *\n * @returns {ReactElement}\n */\nfunction Drawer({\n    children,\n    isOpen,\n    onClose }: Props) {\n\n    /**\n     * Handles clicks within the menu, preventing the propagation of the click event.\n     *\n     * @param {Object} event - The click event.\n     * @returns {void}\n     */\n    const handleInsideClick = useCallback(event => {\n        event.stopPropagation();\n    }, []);\n\n    /**\n     * Handles clicks outside of the menu, closing it, and also stopping further propagation.\n     *\n     * @param {Object} event - The click event.\n     * @returns {void}\n     */\n    const handleOutsideClick = useCallback(event => {\n        event.stopPropagation();\n        onClose();\n    }, [ onClose ]);\n\n    return (\n        isOpen ? (\n            <div\n                className = 'drawer-menu-container'\n                onClick = { handleOutsideClick }>\n                <div\n                    className = 'drawer-menu'\n                    onClick = { handleInsideClick }>\n                    {children}\n                </div>\n            </div>\n        ) : null\n    );\n}\n\nexport default Drawer;\n","// @flow\n\nimport { useEffect, useState } from 'react';\nimport ReactDOM from 'react-dom';\n\ntype Props = {\n\n    /**\n     * The component(s) to be displayed within the drawer portal.\n     */\n    children: React$Node\n};\n\n/**\n * Component meant to render a drawer at the bottom of the screen,\n * by creating a portal containing the component's children.\n *\n * @returns {ReactElement}\n */\nfunction DrawerPortal({ children }: Props) {\n    const [ portalTarget ] = useState(() => {\n        const portalDiv = document.createElement('div');\n\n        portalDiv.className = 'drawer-portal';\n\n        return portalDiv;\n    });\n\n    useEffect(() => {\n        if (document.body) {\n            document.body.appendChild(portalTarget);\n        }\n\n        return () => {\n            if (document.body) {\n                document.body.removeChild(portalTarget);\n            }\n        };\n    }, []);\n\n    return ReactDOM.createPortal(\n      children,\n      portalTarget\n    );\n}\n\nexport default DrawerPortal;\n","/* @flow */\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { IconHorizontalPoints } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { ReactionEmoji, ReactionsMenu } from '../../../reactions/components';\nimport { type ReactionEmojiProps } from '../../../reactions/constants';\nimport { getReactionsQueue } from '../../../reactions/functions.any';\n\nimport Drawer from './Drawer';\nimport DrawerPortal from './DrawerPortal';\nimport ToolbarButton from './ToolbarButton';\n\n/**\n * The type of the React {@code Component} props of {@link OverflowMenuButton}.\n */\ntype Props = {\n\n    /**\n     * ID of the menu that is controlled by this button.\n     */\n    ariaControls: String,\n\n    /**\n     * A child React Element to display within {@code InlineDialog}.\n     */\n    children: React$Node,\n\n    /**\n     * Whether or not the OverflowMenu popover should display.\n     */\n    isOpen: boolean,\n\n    /**\n     * Callback to change the visibility of the overflow menu.\n     */\n    onVisibilityChange: Function,\n\n    /**\n     * Whether to display the OverflowMenu as a drawer.\n     */\n    overflowDrawer: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The array of reactions to be displayed.\n     */\n    reactionsQueue: Array<ReactionEmojiProps>,\n\n    /**\n     * Whether or not to display the reactions in the mobile menu.\n     */\n    showMobileReactions: boolean\n};\n\n/**\n * A React {@code Component} for opening or closing the {@code OverflowMenu}.\n *\n * @extends Component\n */\nclass OverflowMenuButton extends Component<Props> {\n    /**\n     * Initializes a new {@code OverflowMenuButton} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCloseDialog = this._onCloseDialog.bind(this);\n        this._onToggleDialogVisibility\n            = this._onToggleDialogVisibility.bind(this);\n        this._onEscClick = this._onEscClick.bind(this);\n    }\n\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the more actions entries.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape' && this.props.isOpen) {\n            event.preventDefault();\n            event.stopPropagation();\n            this._onCloseDialog();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { children, isOpen, overflowDrawer, reactionsQueue, showMobileReactions } = this.props;\n\n        return (\n            <div className = 'toolbox-button-wth-dialog'>\n                {\n                    overflowDrawer ? (\n                        <>\n                            {this._renderToolbarButton()}\n                            <DrawerPortal>\n                                <Drawer\n                                    isOpen = { isOpen }\n                                    onClose = { this._onCloseDialog }>\n                                    {children}\n                                    {showMobileReactions && <ReactionsMenu overflowMenu = { true } />}\n                                </Drawer>\n                                {showMobileReactions && <div className = 'reactions-animations-container'>\n                                    {reactionsQueue.map(({ reaction, uid }, index) => (<ReactionEmoji\n                                        index = { index }\n                                        key = { uid }\n                                        reaction = { reaction }\n                                        uid = { uid } />))}\n                                </div>}\n                            </DrawerPortal>\n                        </>\n                    ) : (\n                        <InlineDialog\n                            content = { children }\n                            isOpen = { isOpen }\n                            onClose = { this._onCloseDialog }\n                            placement = 'top-end'>\n                            {this._renderToolbarButton()}\n                        </InlineDialog>\n                    )\n                }\n            </div>\n        );\n    }\n\n    _renderToolbarButton: () => React$Node;\n\n    /**\n     * Renders the actual toolbar overflow menu button.\n     *\n     * @returns {ReactElement}\n     */\n    _renderToolbarButton() {\n        const { ariaControls, isOpen, t } = this.props;\n\n        return (\n            <ToolbarButton\n                accessibilityLabel =\n                    { t('toolbar.accessibilityLabel.moreActions') }\n                aria-controls = { ariaControls }\n                aria-haspopup = 'true'\n                icon = { IconHorizontalPoints }\n                onClick = { this._onToggleDialogVisibility }\n                onKeyDown = { this._onEscClick }\n                toggled = { isOpen }\n                tooltip = { t('toolbar.moreActions') } />\n        );\n    }\n\n    _onCloseDialog: () => void;\n\n    /**\n     * Callback invoked when {@code InlineDialog} signals that it should be\n     * close.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCloseDialog() {\n        this.props.onVisibilityChange(false);\n    }\n\n    _onToggleDialogVisibility: () => void;\n\n    /**\n     * Callback invoked to signal that an event has occurred that should change\n     * the visibility of the {@code InlineDialog} component.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToggleDialogVisibility() {\n        sendAnalytics(createToolbarEvent('overflow'));\n\n        this.props.onVisibilityChange(!this.props.isOpen);\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code OverflowMenuButton} component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const { overflowDrawer } = state['features/toolbox'];\n\n    return {\n        overflowDrawer,\n        reactionsQueue: getReactionsQueue(state)\n    };\n}\n\nexport default translate(connect(mapStateToProps)(OverflowMenuButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { translate } from '../../../base/i18n';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of the React {@code Component} props of\n * {@link ProfileButtonAvatar}.\n */\ntype Props = {\n\n    /**\n     * The redux representation of the local participant.\n     */\n    _localParticipant: Object,\n\n};\n\n/**\n * A React {@code Component} for displaying a profile avatar as an\n * icon.\n *\n * @extends Component\n */\nclass ProfileButtonAvatar extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _localParticipant } = this.props;\n\n        return (\n            <Avatar\n                participantId = { _localParticipant.id }\n                size = { 20 } />\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code ProfileButtonAvatar} component's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _localParticipant: Object,\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _localParticipant: getLocalParticipant(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(ProfileButtonAvatar));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { translate } from '../../../base/i18n';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { openSettingsDialog, SETTINGS_TABS } from '../../../settings';\n\nimport ProfileButtonAvatar from './ProfileButtonAvatar';\n\n/**\n * The type of the React {@code Component} props of {@link ProfileButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux representation of the local participant.\n     */\n     _localParticipant: Object,\n\n     /**\n      * Whether the button support clicking or not.\n      */\n     _unclickable: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Implementation of a button for opening profile dialog.\n */\nclass ProfileButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.profile';\n    icon = ProfileButtonAvatar;\n\n    /**\n     * Retrieves the label.\n     */\n    get label() {\n        const { _localParticipant } = this.props;\n        let displayName;\n\n        if (_localParticipant && _localParticipant.name) {\n            displayName = _localParticipant.name;\n        } else {\n            displayName = interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME;\n        }\n\n        return displayName;\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set label(value) {\n        return value;\n    }\n\n    /**\n     * Retrieves the tooltip.\n     */\n    get tooltip() {\n        return this.label;\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, _unclickable } = this.props;\n\n        if (!_unclickable) {\n            sendAnalytics(createToolbarEvent('profile'));\n            dispatch(openSettingsDialog(SETTINGS_TABS.PROFILE));\n        }\n    }\n\n    /**\n     * Indicates whether the button should be disabled or not.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _isDisabled() {\n        return this.props._unclickable;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst mapStateToProps = state => {\n    return {\n        _localParticipant: getLocalParticipant(state),\n        _unclickable: !interfaceConfig.SETTINGS_SECTIONS.includes('profile'),\n        customClass: 'profile-button-avatar'\n    };\n};\n\nexport default translate(connect(mapStateToProps)(ProfileButton));\n","// @flow\n\nimport { translate } from '../../../base/i18n';\nimport { IconRaisedHand } from '../../../base/icons';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether or not the local participant's hand is raised.\n     */\n    _raisedHand: boolean,\n\n    /**\n     * External handler for click action.\n     */\n    handleClick: Function\n};\n\n/**\n * Implementation of a button for toggling raise hand functionality.\n */\nclass RaiseHandButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.raiseHand';\n    icon = IconRaisedHand\n    label = 'toolbar.raiseYourHand';\n    toggledLabel = 'toolbar.lowerYourHand'\n\n    /**\n     * Retrieves tooltip dynamically.\n     */\n    get tooltip() {\n        return this.props._raisedHand ? 'toolbar.lowerYourHand' : 'toolbar.raiseYourHand';\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._raisedHand;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst mapStateToProps = state => {\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        _raisedHand: localParticipant.raisedHand\n    };\n};\n\nexport default translate(connect(mapStateToProps)(RaiseHandButton));\n","import React from 'react';\n\nexport default () => <hr className = 'overflow-menu-hr' />;\n","// @flow\n\nimport { translate } from '../../../base/i18n';\nimport { IconShareDesktop } from '../../../base/icons';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet/_';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { getLocalVideoTrack } from '../../../base/tracks';\nimport { isScreenAudioShared } from '../../../screen-share';\n\ntype Props = AbstractButtonProps & {\n\n     /**\n     * Whether or not screensharing is initialized.\n     */\n      _desktopSharingEnabled: boolean,\n\n    /**\n     * The tooltip key to use when screensharing is disabled. Or undefined\n     * if non to be shown and the button to be hidden.\n     */\n    _desktopSharingDisabledTooltipKey: string,\n\n    /**\n     * Whether or not the local participant is screensharing.\n     */\n     _screensharing: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n     dispatch: Function,\n\n     /**\n      * External handler for click action.\n      */\n      handleClick: Function\n};\n\n/**\n * Implementation of a button for sharing desktop / windows.\n */\nclass ShareDesktopButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.shareYourScreen';\n    label = 'toolbar.startScreenSharing';\n    icon = IconShareDesktop;\n    toggledLabel = 'toolbar.stopScreenSharing'\n    tooltip = 'toolbar.accessibilityLabel.shareYourScreen';\n\n    /**\n     * Retrieves tooltip dynamically.\n     */\n    get tooltip() {\n        const { _desktopSharingDisabledTooltipKey, _desktopSharingEnabled, _screensharing } = this.props;\n\n        if (_desktopSharingEnabled) {\n            if (_screensharing) {\n                return 'toolbar.stopScreenSharing';\n            }\n\n            return 'toolbar.startScreenSharing';\n        }\n\n        return _desktopSharingDisabledTooltipKey;\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The icon value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._screensharing;\n    }\n\n    /**\n     * Indicates whether this button is in disabled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return !this.props._desktopSharingEnabled;\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n*\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst mapStateToProps = state => {\n    const localVideo = getLocalVideoTrack(state['features/base/tracks']);\n    let desktopSharingEnabled = JitsiMeetJS.isDesktopSharingEnabled();\n    const { enableFeaturesBasedOnToken } = state['features/base/config'];\n\n    let desktopSharingDisabledTooltipKey;\n\n    if (enableFeaturesBasedOnToken) {\n        // we enable desktop sharing if any participant already have this\n        // feature enabled\n        desktopSharingEnabled = state['features/base/participants'].haveParticipantWithScreenSharingFeature;\n        desktopSharingDisabledTooltipKey = 'dialog.shareYourScreenDisabled';\n    }\n\n    return {\n        _desktopSharingDisabledTooltipKey: desktopSharingDisabledTooltipKey,\n        _desktopSharingEnabled: desktopSharingEnabled,\n        _screensharing: (localVideo && localVideo.videoType === 'desktop') || isScreenAudioShared(state)\n    };\n};\n\nexport default translate(connect(mapStateToProps)(ShareDesktopButton));\n","// @flow\n\nimport { translate } from '../../../base/i18n';\nimport { IconCameraRefresh } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { isLocalCameraTrackMuted, isToggleCameraEnabled, toggleCamera } from '../../../base/tracks';\n\n/**\n * The type of the React {@code Component} props of {@link ToggleCameraButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether the current conference is in audio only mode or not.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * Whether video is currently muted or not.\n     */\n    _videoMuted: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function\n};\n\n/**\n * An implementation of a button for toggling the camera facing mode.\n */\nclass ToggleCameraButton extends AbstractButton<Props, any> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.toggleCamera';\n    icon = IconCameraRefresh;\n    label = 'toolbar.toggleCamera';\n\n    /**\n     * Handles clicking/pressing the button.\n     *\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.dispatch(toggleCamera());\n    }\n\n    /**\n     * Whether this button is disabled or not.\n     *\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._audioOnly || this.props._videoMuted;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code ToggleCameraButton} component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction mapStateToProps(state): Object {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const tracks = state['features/base/tracks'];\n\n    return {\n        _audioOnly: Boolean(audioOnly),\n        _videoMuted: isLocalCameraTrackMuted(tracks),\n        visible: isToggleCameraEnabled(state)\n    };\n}\n\nexport default translate(connect(mapStateToProps)(ToggleCameraButton));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport keyboardShortcut from '../../../../../modules/keyboardshortcut/keyboardshortcut';\nimport {\n    ACTION_SHORTCUT_TRIGGERED,\n    createShortcutEvent,\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { getToolbarButtons } from '../../../base/config';\nimport { isToolbarButtonEnabled } from '../../../base/config/functions.web';\nimport { openDialog, toggleDialog } from '../../../base/dialog';\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport JitsiMeetJS from '../../../base/lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    haveParticipantWithScreenSharingFeature,\n    raiseHand\n} from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { getLocalVideoTrack } from '../../../base/tracks';\nimport { toggleChat } from '../../../chat';\nimport { ChatButton } from '../../../chat/components';\nimport { DominantSpeakerName } from '../../../display-name';\nimport { EmbedMeetingButton } from '../../../embed-meeting';\nimport { SharedDocumentButton } from '../../../etherpad';\nimport { FeedbackButton } from '../../../feedback';\nimport { isVpaasMeeting } from '../../../jaas/functions';\nimport { KeyboardShortcutsButton } from '../../../keyboard-shortcuts';\nimport { LocalRecordingButton } from '../../../local-recording';\nimport {\n    close as closeParticipantsPane,\n    open as openParticipantsPane\n} from '../../../participants-pane/actions';\nimport ParticipantsPaneButton from '../../../participants-pane/components/ParticipantsPaneButton';\nimport { getParticipantsPaneOpen } from '../../../participants-pane/functions';\nimport { addReactionToBuffer } from '../../../reactions/actions.any';\nimport { ReactionsMenuButton } from '../../../reactions/components';\nimport { REACTIONS } from '../../../reactions/constants';\nimport {\n    LiveStreamButton,\n    RecordButton\n} from '../../../recording';\nimport {\n    isScreenAudioSupported,\n    isScreenVideoShared,\n    ShareAudioButton,\n    startScreenShareFlow\n} from '../../../screen-share/';\nimport SecurityDialogButton from '../../../security/components/security-dialog/SecurityDialogButton';\nimport { SettingsButton } from '../../../settings';\nimport { SharedVideoButton } from '../../../shared-video/components';\nimport { SpeakerStatsButton } from '../../../speaker-stats';\nimport {\n    ClosedCaptionButton\n} from '../../../subtitles';\nimport {\n    TileViewButton,\n    shouldDisplayTileView,\n    toggleTileView\n} from '../../../video-layout';\nimport { VideoQualityDialog, VideoQualityButton } from '../../../video-quality/components';\nimport { VideoBackgroundButton } from '../../../virtual-background';\nimport { toggleBackgroundEffect } from '../../../virtual-background/actions';\nimport { VIRTUAL_BACKGROUND_TYPE } from '../../../virtual-background/constants';\nimport { checkBlurSupport } from '../../../virtual-background/functions';\nimport {\n    setFullScreen,\n    setOverflowMenuVisible,\n    setToolbarHovered,\n    showToolbox\n} from '../../actions';\nimport { THRESHOLDS, NOT_APPLICABLE } from '../../constants';\nimport { isToolboxVisible } from '../../functions';\nimport DownloadButton from '../DownloadButton';\nimport HangupButton from '../HangupButton';\nimport HelpButton from '../HelpButton';\nimport MuteEveryoneButton from '../MuteEveryoneButton';\nimport MuteEveryonesVideoButton from '../MuteEveryonesVideoButton';\n\nimport AudioSettingsButton from './AudioSettingsButton';\nimport FullscreenButton from './FullscreenButton';\nimport OverflowMenuButton from './OverflowMenuButton';\nimport ProfileButton from './ProfileButton';\nimport RaiseHandButton from './RaiseHandButton';\nimport Separator from './Separator';\nimport ShareDesktopButton from './ShareDesktopButton';\nimport ToggleCameraButton from './ToggleCameraButton';\nimport VideoSettingsButton from './VideoSettingsButton';\n\n/**\n * The type of the React {@code Component} props of {@link Toolbox}.\n */\ntype Props = {\n\n    /**\n     * String showing if the virtual background type is desktop-share.\n     */\n    _backgroundType: String,\n\n    /**\n     * Whether or not the chat feature is currently displayed.\n     */\n    _chatOpen: boolean,\n\n    /**\n     * The width of the client.\n     */\n    _clientWidth: number,\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The tooltip key to use when screensharing is disabled. Or undefined\n     * if non to be shown and the button to be hidden.\n     */\n    _desktopSharingDisabledTooltipKey: boolean,\n\n    /**\n     * Whether or not screensharing is initialized.\n     */\n    _desktopSharingEnabled: boolean,\n\n    /**\n     * Whether or not a dialog is displayed.\n     */\n    _dialog: boolean,\n\n    /**\n     * Whether or not call feedback can be sent.\n     */\n    _feedbackConfigured: boolean,\n\n    /**\n     * Whether or not the app is currently in full screen.\n     */\n    _fullScreen: boolean,\n\n    /**\n     * Whether or not the app is running in mobile browser.\n     */\n    _isMobile: boolean,\n\n    /**\n     * Whether or not the profile is disabled.\n     */\n    _isProfileDisabled: boolean,\n\n    /**\n     * Whether or not the tile view is enabled.\n     */\n    _tileViewEnabled: boolean,\n\n    /**\n     * Whether or not the current meeting belongs to a JaaS user.\n     */\n    _isVpaasMeeting: boolean,\n\n    /**\n     * The ID of the local participant.\n     */\n    _localParticipantID: String,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    _localVideo: Object,\n\n    /**\n     * Whether or not the overflow menu is visible.\n     */\n    _overflowMenuVisible: boolean,\n\n    /**\n     * Whether or not the participants pane is open.\n     */\n    _participantsPaneOpen: boolean,\n\n    /**\n     * Whether or not the local participant's hand is raised.\n     */\n    _raisedHand: boolean,\n\n    /**\n     * Whether or not the local participant is screenSharing.\n     */\n    _screenSharing: boolean,\n\n    /**\n     * Whether or not the local participant is sharing a YouTube video.\n     */\n    _sharingVideo: boolean,\n\n    /**\n     * The enabled buttons.\n     */\n    _toolbarButtons: Array<string>,\n\n    /**\n     * Flag showing whether toolbar is visible.\n     */\n    _visible: boolean,\n\n    /**\n     * Array with the buttons which this Toolbox should display.\n     */\n    _visibleButtons: Array<string>,\n\n    /**\n     * Returns the selected virtual source object.\n     */\n    _virtualSource: Object,\n\n    /**\n     * Whether or not reactions feature is enabled.\n     */\n    _reactionsEnabled: boolean,\n\n    /**\n     * Invoked to active other features of the app.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\ndeclare var APP: Object;\n\n/**\n * Implements the conference toolbox on React/Web.\n *\n * @extends Component\n */\nclass Toolbox extends Component<Props> {\n    /**\n     * Initializes a new {@code Toolbox} instance.\n     *\n     * @param {Props} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onMouseOut = this._onMouseOut.bind(this);\n        this._onMouseOver = this._onMouseOver.bind(this);\n        this._onSetOverflowVisible = this._onSetOverflowVisible.bind(this);\n        this._onTabIn = this._onTabIn.bind(this);\n\n        this._onShortcutToggleChat = this._onShortcutToggleChat.bind(this);\n        this._onShortcutToggleFullScreen = this._onShortcutToggleFullScreen.bind(this);\n        this._onShortcutToggleParticipantsPane = this._onShortcutToggleParticipantsPane.bind(this);\n        this._onShortcutToggleRaiseHand = this._onShortcutToggleRaiseHand.bind(this);\n        this._onShortcutToggleScreenshare = this._onShortcutToggleScreenshare.bind(this);\n        this._onShortcutToggleVideoQuality = this._onShortcutToggleVideoQuality.bind(this);\n        this._onToolbarToggleParticipantsPane = this._onToolbarToggleParticipantsPane.bind(this);\n        this._onToolbarOpenVideoQuality = this._onToolbarOpenVideoQuality.bind(this);\n        this._onToolbarToggleChat = this._onToolbarToggleChat.bind(this);\n        this._onToolbarToggleFullScreen = this._onToolbarToggleFullScreen.bind(this);\n        this._onToolbarToggleRaiseHand = this._onToolbarToggleRaiseHand.bind(this);\n        this._onToolbarToggleScreenshare = this._onToolbarToggleScreenshare.bind(this);\n        this._onShortcutToggleTileView = this._onShortcutToggleTileView.bind(this);\n        this._onEscKey = this._onEscKey.bind(this);\n    }\n\n    /**\n     * Sets keyboard shortcuts for to trigger ToolbarButtons actions.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const { _toolbarButtons, t, dispatch, _reactionsEnabled } = this.props;\n        const KEYBOARD_SHORTCUTS = [\n            isToolbarButtonEnabled('videoquality', _toolbarButtons) && {\n                character: 'A',\n                exec: this._onShortcutToggleVideoQuality,\n                helpDescription: 'toolbar.callQuality'\n            },\n            isToolbarButtonEnabled('chat', _toolbarButtons) && {\n                character: 'C',\n                exec: this._onShortcutToggleChat,\n                helpDescription: 'keyboardShortcuts.toggleChat'\n            },\n            isToolbarButtonEnabled('desktop', _toolbarButtons) && {\n                character: 'D',\n                exec: this._onShortcutToggleScreenshare,\n                helpDescription: 'keyboardShortcuts.toggleScreensharing'\n            },\n            isToolbarButtonEnabled('participants-pane', _toolbarButtons) && {\n                character: 'P',\n                exec: this._onShortcutToggleParticipantsPane,\n                helpDescription: 'keyboardShortcuts.toggleParticipantsPane'\n            },\n            isToolbarButtonEnabled('raisehand', _toolbarButtons) && {\n                character: 'R',\n                exec: this._onShortcutToggleRaiseHand,\n                helpDescription: 'keyboardShortcuts.raiseHand'\n            },\n            isToolbarButtonEnabled('fullscreen', _toolbarButtons) && {\n                character: 'S',\n                exec: this._onShortcutToggleFullScreen,\n                helpDescription: 'keyboardShortcuts.fullScreen'\n            },\n            isToolbarButtonEnabled('tileview', _toolbarButtons) && {\n                character: 'W',\n                exec: this._onShortcutToggleTileView,\n                helpDescription: 'toolbar.tileViewToggle'\n            }\n        ];\n\n        KEYBOARD_SHORTCUTS.forEach(shortcut => {\n            if (typeof shortcut === 'object') {\n                APP.keyboardshortcut.registerShortcut(\n                    shortcut.character,\n                    null,\n                    shortcut.exec,\n                    shortcut.helpDescription);\n            }\n        });\n\n        if (_reactionsEnabled) {\n            const REACTION_SHORTCUTS = Object.keys(REACTIONS).map(key => {\n                const onShortcutSendReaction = () => {\n                    dispatch(addReactionToBuffer(key));\n                    sendAnalytics(createShortcutEvent(\n                        `reaction.${key}`\n                    ));\n                };\n\n                return {\n                    character: REACTIONS[key].shortcutChar,\n                    exec: onShortcutSendReaction,\n                    helpDescription: t(`toolbar.reaction${key.charAt(0).toUpperCase()}${key.slice(1)}`),\n                    altKey: true\n                };\n            });\n\n            REACTION_SHORTCUTS.forEach(shortcut => {\n                APP.keyboardshortcut.registerShortcut(\n                    shortcut.character,\n                    null,\n                    shortcut.exec,\n                    shortcut.helpDescription,\n                    shortcut.altKey);\n            });\n        }\n    }\n\n    /**\n     * Update the visibility of the {@code OverflowMenuButton}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        // Ensure the dialog is closed when the toolbox becomes hidden.\n        if (prevProps._overflowMenuVisible && !this.props._visible) {\n            this._onSetOverflowVisible(false);\n        }\n\n        if (prevProps._overflowMenuVisible\n            && !prevProps._dialog\n            && this.props._dialog) {\n            this._onSetOverflowVisible(false);\n            this.props.dispatch(setToolbarHovered(false));\n        }\n    }\n\n    /**\n     * Removes keyboard shortcuts registered by this component.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        [ 'A', 'C', 'D', 'R', 'S' ].forEach(letter =>\n            APP.keyboardshortcut.unregisterShortcut(letter));\n\n        if (this.props._reactionsEnabled) {\n            Object.keys(REACTIONS).map(key => REACTIONS[key].shortcutChar)\n                .forEach(letter =>\n                    APP.keyboardshortcut.unregisterShortcut(letter, true));\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _chatOpen, _visible, _visibleButtons } = this.props;\n        const rootClassNames = `new-toolbox ${_visible ? 'visible' : ''} ${\n            _visibleButtons.length ? '' : 'no-buttons'} ${_chatOpen ? 'shift-right' : ''}`;\n\n        return (\n            <div\n                className = { rootClassNames }\n                id = 'new-toolbox'>\n                { this._renderToolboxContent() }\n            </div>\n        );\n    }\n\n    _onEscKey: (KeyboardEvent) => void;\n\n    /**\n     * Key handler for overflow menu.\n     *\n     * @param {KeyboardEvent} e - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscKey(e) {\n        if (e.key === 'Escape') {\n            e.stopPropagation();\n            this._closeOverflowMenuIfOpen();\n        }\n    }\n\n    /**\n     * Closes the overflow menu if opened.\n     *\n     * @private\n     * @returns {void}\n     */\n    _closeOverflowMenuIfOpen() {\n        const { dispatch, _overflowMenuVisible } = this.props;\n\n        _overflowMenuVisible && dispatch(setOverflowMenuVisible(false));\n    }\n\n    /**\n     * Dispatches an action to open the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doOpenVideoQuality() {\n        this.props.dispatch(openDialog(VideoQualityDialog));\n    }\n\n    /**\n     * Dispatches an action to toggle the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleChat() {\n        this.props.dispatch(toggleChat());\n    }\n\n    /**\n     * Dispatches an action to toggle screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleFullScreen() {\n        const fullScreen = !this.props._fullScreen;\n\n        this.props.dispatch(setFullScreen(fullScreen));\n    }\n\n    /**\n     * Dispatches an action to toggle the local participant's raised hand state.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleRaiseHand() {\n        const { _localParticipantID, _raisedHand } = this.props;\n        const newRaisedStatus = !_raisedHand;\n\n        this.props.dispatch(raiseHand(newRaisedStatus));\n\n        APP.API.notifyRaiseHandUpdated(_localParticipantID, newRaisedStatus);\n    }\n\n    /**\n     * Dispatches an action to toggle screensharing.\n     *\n     * @private\n     * @param {boolean} enabled - The state to toggle screen sharing to.\n     * @param {boolean} audioOnly - Only share system audio.\n     * @returns {void}\n     */\n    _doToggleScreenshare() {\n        const {\n            _backgroundType,\n            _desktopSharingEnabled,\n            _localVideo,\n            _virtualSource,\n            dispatch\n        } = this.props;\n\n        if (_backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            const noneOptions = {\n                enabled: false,\n                backgroundType: VIRTUAL_BACKGROUND_TYPE.NONE,\n                selectedThumbnail: VIRTUAL_BACKGROUND_TYPE.NONE,\n                backgroundEffectEnabled: false\n            };\n\n            _virtualSource.dispose();\n\n            dispatch(toggleBackgroundEffect(noneOptions, _localVideo));\n\n            return;\n        }\n\n        if (_desktopSharingEnabled) {\n            dispatch(startScreenShareFlow());\n        }\n    }\n\n    /**\n     * Dispatches an action to toggle the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleVideoQuality() {\n        this.props.dispatch(toggleDialog(VideoQualityDialog));\n    }\n\n    /**\n     * Dispaches an action to toggle tile view.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleTileView() {\n        this.props.dispatch(toggleTileView());\n    }\n\n    /**\n     * Returns all buttons that could be rendered.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {Object} The button maps mainMenuButtons and overflowMenuButtons.\n     */\n    _getAllButtons() {\n        const {\n            _feedbackConfigured,\n            _isMobile,\n            _screenSharing,\n            _reactionsEnabled\n        } = this.props;\n\n        const microphone = {\n            key: 'microphone',\n            Content: AudioSettingsButton,\n            group: 0\n        };\n\n        const camera = {\n            key: 'camera',\n            Content: VideoSettingsButton,\n            group: 0\n        };\n\n        const profile = this._isProfileVisible() && {\n            key: 'profile',\n            Content: ProfileButton,\n            group: 1\n        };\n\n        const chat = {\n            key: 'chat',\n            Content: ChatButton,\n            handleClick: this._onToolbarToggleChat,\n            group: 2\n        };\n\n        const desktop = this._showDesktopSharingButton() && {\n            key: 'desktop',\n            Content: ShareDesktopButton,\n            handleClick: this._onToolbarToggleScreenshare,\n            group: 2\n        };\n\n        const raisehand = {\n            key: 'raisehand',\n            Content: _reactionsEnabled ? ReactionsMenuButton : RaiseHandButton,\n            handleClick: _reactionsEnabled ? null : this._onToolbarToggleRaiseHand,\n            group: 2\n        };\n\n        const participants = {\n            key: 'participants-pane',\n            alias: 'invite',\n            Content: ParticipantsPaneButton,\n            handleClick: this._onToolbarToggleParticipantsPane,\n            group: 2\n        };\n\n        const tileview = {\n            key: 'tileview',\n            Content: TileViewButton,\n            group: 2\n        };\n\n        const toggleCamera = {\n            key: 'toggle-camera',\n            Content: ToggleCameraButton,\n            group: 2\n        };\n\n        const videoQuality = {\n            key: 'videoquality',\n            Content: VideoQualityButton,\n            handleClick: this._onToolbarOpenVideoQuality,\n            group: 2\n        };\n\n        const fullscreen = !_isMobile && {\n            key: 'fullscreen',\n            Content: FullscreenButton,\n            handleClick: this._onToolbarToggleFullScreen,\n            group: 2\n        };\n\n        const security = {\n            key: 'security',\n            alias: 'info',\n            Content: SecurityDialogButton,\n            group: 2\n        };\n\n        const cc = {\n            key: 'closedcaptions',\n            Content: ClosedCaptionButton,\n            group: 2\n        };\n\n        const recording = {\n            key: 'recording',\n            Content: RecordButton,\n            group: 2\n        };\n\n        const localRecording = {\n            key: 'localrecording',\n            Content: LocalRecordingButton,\n            group: 2\n        };\n\n        const muteEveryone = {\n            key: 'mute-everyone',\n            Content: MuteEveryoneButton,\n            group: 2\n        };\n\n        const muteVideoEveryone = {\n            key: 'mute-video-everyone',\n            Content: MuteEveryonesVideoButton,\n            group: 2\n        };\n\n        const livestreaming = {\n            key: 'livestreaming',\n            Content: LiveStreamButton,\n            group: 2\n        };\n\n        const shareVideo = {\n            key: 'sharedvideo',\n            Content: SharedVideoButton,\n            group: 3\n        };\n\n        const shareAudio = this._showAudioSharingButton() && {\n            key: 'shareaudio',\n            Content: ShareAudioButton,\n            group: 3\n        };\n\n        const etherpad = {\n            key: 'etherpad',\n            Content: SharedDocumentButton,\n            group: 3\n        };\n\n        const virtualBackground = !_screenSharing && checkBlurSupport() && {\n            key: 'select-background',\n            Content: VideoBackgroundButton,\n            group: 3\n        };\n\n        const speakerStats = {\n            key: 'stats',\n            Content: SpeakerStatsButton,\n            group: 3\n        };\n\n        const settings = {\n            key: 'settings',\n            Content: SettingsButton,\n            group: 4\n        };\n\n        const shortcuts = !_isMobile && keyboardShortcut.getEnabled() && {\n            key: 'shortcuts',\n            Content: KeyboardShortcutsButton,\n            group: 4\n        };\n\n        const embed = this._isEmbedMeetingVisible() && {\n            key: 'embedmeeting',\n            Content: EmbedMeetingButton,\n            group: 4\n        };\n\n        const feedback = _feedbackConfigured && {\n            key: 'feedback',\n            Content: FeedbackButton,\n            group: 4\n        };\n\n        const download = {\n            key: 'download',\n            Content: DownloadButton,\n            group: 4\n        };\n\n        const help = {\n            key: 'help',\n            Content: HelpButton,\n            group: 4\n        };\n\n        return {\n            microphone,\n            camera,\n            profile,\n            desktop,\n            chat,\n            raisehand,\n            participants,\n            tileview,\n            toggleCamera,\n            videoQuality,\n            fullscreen,\n            security,\n            cc,\n            recording,\n            localRecording,\n            muteEveryone,\n            muteVideoEveryone,\n            livestreaming,\n            shareVideo,\n            shareAudio,\n            etherpad,\n            virtualBackground,\n            speakerStats,\n            settings,\n            shortcuts,\n            embed,\n            feedback,\n            download,\n            help\n        };\n    }\n\n    /**\n     * Returns all buttons that need to be rendered.\n     *\n     * @param {Object} state - The redux state.\n     * @returns {Object} The visible buttons arrays .\n     */\n    _getVisibleButtons() {\n        const {\n            _clientWidth,\n            _toolbarButtons\n        } = this.props;\n\n\n        const buttons = this._getAllButtons();\n        const isHangupVisible = isToolbarButtonEnabled('hangup', _toolbarButtons);\n        const { order } = THRESHOLDS.find(({ width }) => _clientWidth > width)\n            || THRESHOLDS[THRESHOLDS.length - 1];\n        let sliceIndex = order.length + 2;\n\n        const keys = Object.keys(buttons);\n\n        const filtered = [\n            ...order.map(key => buttons[key]),\n            ...Object.values(buttons).filter((button, index) => !order.includes(keys[index]))\n        ].filter(Boolean).filter(({ key, alias = NOT_APPLICABLE }) =>\n            isToolbarButtonEnabled(key, _toolbarButtons) || isToolbarButtonEnabled(alias, _toolbarButtons));\n\n        if (isHangupVisible) {\n            sliceIndex -= 1;\n        }\n\n        // This implies that the overflow button will be displayed, so save some space for it.\n        if (sliceIndex < filtered.length) {\n            sliceIndex -= 1;\n        }\n\n        return {\n            mainMenuButtons: filtered.slice(0, sliceIndex),\n            overflowMenuButtons: filtered.slice(sliceIndex)\n        };\n    }\n\n    _onMouseOut: () => void;\n\n    /**\n     * Dispatches an action signaling the toolbar is not being hovered.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOut() {\n        this.props.dispatch(setToolbarHovered(false));\n    }\n\n    _onMouseOver: () => void;\n\n    /**\n     * Dispatches an action signaling the toolbar is being hovered.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onMouseOver() {\n        this.props.dispatch(setToolbarHovered(true));\n    }\n\n\n    _onSetOverflowVisible: (boolean) => void;\n\n    /**\n     * Sets the visibility of the overflow menu.\n     *\n     * @param {boolean} visible - Whether or not the overflow menu should be\n     * displayed.\n     * @private\n     * @returns {void}\n     */\n    _onSetOverflowVisible(visible) {\n        this.props.dispatch(setOverflowMenuVisible(visible));\n    }\n\n    _onShortcutToggleChat: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleChat() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.chat',\n            {\n                enable: !this.props._chatOpen\n            }));\n\n        // Checks if there was any text selected by the user.\n        // Used for when we press simultaneously keys for copying\n        // text messages from the chat board\n        if (window.getSelection().toString() !== '') {\n            return false;\n        }\n\n        this._doToggleChat();\n    }\n\n    _onShortcutToggleParticipantsPane: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling the display of the participants pane.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleParticipantsPane() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.participants-pane',\n            {\n                enable: !this.props._participantsPaneOpen\n            }));\n\n        this._onToolbarToggleParticipantsPane();\n    }\n\n    _onShortcutToggleVideoQuality: () => void;\n\n    /**\n    * Creates an analytics keyboard shortcut event and dispatches an action for\n    * toggling the display of Video Quality.\n    *\n    * @private\n    * @returns {void}\n    */\n    _onShortcutToggleVideoQuality() {\n        sendAnalytics(createShortcutEvent('video.quality'));\n\n        this._doToggleVideoQuality();\n    }\n\n    _onShortcutToggleTileView: () => void;\n\n    /**\n     * Dispatches an action for toggling the tile view.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleTileView() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.tileview',\n            {\n                enable: !this.props._tileViewEnabled\n            }));\n\n        this._doToggleTileView();\n    }\n\n    _onShortcutToggleFullScreen: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling full screen mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleFullScreen() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.fullscreen',\n            {\n                enable: !this.props._fullScreen\n            }));\n\n        this._doToggleFullScreen();\n    }\n\n    _onShortcutToggleRaiseHand: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling raise hand.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleRaiseHand() {\n        sendAnalytics(createShortcutEvent(\n            'toggle.raise.hand',\n            ACTION_SHORTCUT_TRIGGERED,\n            { enable: !this.props._raisedHand }));\n\n        this._doToggleRaiseHand();\n    }\n\n    _onShortcutToggleScreenshare: () => void;\n\n    /**\n     * Creates an analytics keyboard shortcut event and dispatches an action for\n     * toggling screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShortcutToggleScreenshare() {\n        sendAnalytics(createShortcutEvent(\n                'toggle.screen.sharing',\n                ACTION_SHORTCUT_TRIGGERED,\n                {\n                    enable: !this.props._screenSharing\n                }));\n\n        this._doToggleScreenshare();\n    }\n\n    _onTabIn: () => void;\n\n    /**\n     * Toggle the toolbar visibility when tabbing into it.\n     *\n     * @returns {void}\n     */\n    _onTabIn() {\n        if (!this.props._visible) {\n            this.props.dispatch(showToolbox());\n        }\n    }\n    _onToolbarToggleParticipantsPane: () => void;\n\n    /**\n     * Dispatches an action for toggling the participants pane.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleParticipantsPane() {\n        const { dispatch, _participantsPaneOpen } = this.props;\n\n        if (_participantsPaneOpen) {\n            dispatch(closeParticipantsPane());\n        } else {\n            dispatch(openParticipantsPane());\n        }\n    }\n\n    _onToolbarOpenVideoQuality: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * open the video quality dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarOpenVideoQuality() {\n        sendAnalytics(createToolbarEvent('video.quality'));\n\n        this._doOpenVideoQuality();\n    }\n\n    _onToolbarToggleChat: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * the display of chat.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleChat() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.chat',\n            {\n                enable: !this.props._chatOpen\n            }));\n        this._closeOverflowMenuIfOpen();\n        this._doToggleChat();\n    }\n\n    _onToolbarToggleFullScreen: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * full screen mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleFullScreen() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.fullscreen',\n                {\n                    enable: !this.props._fullScreen\n                }));\n        this._closeOverflowMenuIfOpen();\n        this._doToggleFullScreen();\n    }\n\n    _onToolbarToggleRaiseHand: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * raise hand.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleRaiseHand() {\n        sendAnalytics(createToolbarEvent(\n            'raise.hand',\n            { enable: !this.props._raisedHand }));\n\n        this._doToggleRaiseHand();\n    }\n\n    _onToolbarToggleScreenshare: () => void;\n\n    /**\n     * Creates an analytics toolbar event and dispatches an action for toggling\n     * screensharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToolbarToggleScreenshare() {\n        sendAnalytics(createToolbarEvent(\n            'toggle.screen.sharing',\n            ACTION_SHORTCUT_TRIGGERED,\n            { enable: !this.props._screenSharing }));\n\n        this._closeOverflowMenuIfOpen();\n        this._doToggleScreenshare();\n    }\n\n    /**\n     * Returns true if the audio sharing button should be visible and\n     * false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _showAudioSharingButton() {\n        const {\n            _desktopSharingEnabled\n        } = this.props;\n\n        return _desktopSharingEnabled && isScreenAudioSupported();\n    }\n\n    /**\n     * Returns true if the desktop sharing button should be visible and\n     * false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _showDesktopSharingButton() {\n        const {\n            _desktopSharingEnabled,\n            _desktopSharingDisabledTooltipKey\n        } = this.props;\n\n        return _desktopSharingEnabled || _desktopSharingDisabledTooltipKey;\n    }\n\n    /**\n     * Returns true if the embed meeting button is visible and false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _isEmbedMeetingVisible() {\n        return !this.props._isVpaasMeeting\n            && !this.props._isMobile;\n    }\n\n    /**\n     * Returns true if the profile button is visible and false otherwise.\n     *\n     * @returns {boolean}\n     */\n    _isProfileVisible() {\n        return !this.props._isProfileDisabled;\n    }\n\n    /**\n     * Renders the toolbox content.\n     *\n     * @returns {ReactElement}\n     */\n    _renderToolboxContent() {\n        const {\n            _isMobile,\n            _overflowMenuVisible,\n            _toolbarButtons,\n            t,\n            _reactionsEnabled\n        } = this.props;\n\n        const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';\n        const containerClassName = `toolbox-content${_isMobile ? ' toolbox-content-mobile' : ''}`;\n\n        const { mainMenuButtons, overflowMenuButtons } = this._getVisibleButtons();\n\n        return (\n            <div className = { containerClassName }>\n                <div\n                    className = 'toolbox-content-wrapper'\n                    onFocus = { this._onTabIn }\n                    { ...(_isMobile ? {} : {\n                        onMouseOut: this._onMouseOut,\n                        onMouseOver: this._onMouseOver\n                    }) }>\n                    <DominantSpeakerName />\n                    <div className = 'toolbox-content-items'>\n                        {mainMenuButtons.map(({ Content, key, ...rest }) => Content !== Separator && (\n                            <Content\n                                { ...rest }\n                                key = { key } />))}\n\n                        {Boolean(overflowMenuButtons.length) && (\n                            <OverflowMenuButton\n                                ariaControls = 'overflow-menu'\n                                isOpen = { _overflowMenuVisible }\n                                key = 'overflow-menu'\n                                onVisibilityChange = { this._onSetOverflowVisible }\n                                showMobileReactions = {\n                                    _reactionsEnabled && overflowMenuButtons.find(({ key }) => key === 'raisehand')\n                                }>\n                                <ul\n                                    aria-label = { t(toolbarAccLabel) }\n                                    className = 'overflow-menu'\n                                    id = 'overflow-menu'\n                                    onKeyDown = { this._onEscKey }\n                                    role = 'menu'>\n                                    {overflowMenuButtons.map(({ group, key, Content, ...rest }, index, arr) => {\n                                        const showSeparator = index > 0 && arr[index - 1].group !== group;\n\n                                        return (key !== 'raisehand' || !_reactionsEnabled)\n                                            && <>\n                                                {showSeparator && <Separator key = { `hr${group}` } />}\n                                                <Content\n                                                    { ...rest }\n                                                    key = { key }\n                                                    showLabel = { true } />\n                                            </>\n                                        ;\n                                    })}\n                                </ul>\n                            </OverflowMenuButton>\n                        )}\n\n                        <HangupButton\n                            customClass = 'hangup-button'\n                            key = 'hangup-button'\n                            visible = { isToolbarButtonEnabled('hangup', _toolbarButtons) } />\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to {@link Toolbox}'s React {@code Component}\n * props.\n *\n * @param {Object} state - The redux store/state.\n * @private\n * @returns {{}}\n */\nfunction _mapStateToProps(state) {\n    const { conference } = state['features/base/conference'];\n    let desktopSharingEnabled = JitsiMeetJS.isDesktopSharingEnabled();\n    const {\n        callStatsID,\n        enableFeaturesBasedOnToken\n    } = state['features/base/config'];\n    const {\n        fullScreen,\n        overflowMenuVisible\n    } = state['features/toolbox'];\n    const localParticipant = getLocalParticipant(state);\n    const localVideo = getLocalVideoTrack(state['features/base/tracks']);\n    const { clientWidth } = state['features/base/responsive-ui'];\n    const { enableReactions } = state['features/base/config'];\n\n    let desktopSharingDisabledTooltipKey;\n\n    if (enableFeaturesBasedOnToken) {\n        if (desktopSharingEnabled) {\n            // we enable desktop sharing if any participant already have this\n            // feature enabled and if the user supports it.\n            desktopSharingEnabled = haveParticipantWithScreenSharingFeature(state);\n            desktopSharingDisabledTooltipKey = 'dialog.shareYourScreenDisabled';\n        }\n    }\n\n    return {\n        _chatOpen: state['features/chat'].isOpen,\n        _clientWidth: clientWidth,\n        _conference: conference,\n        _desktopSharingEnabled: desktopSharingEnabled,\n        _backgroundType: state['features/virtual-background'].backgroundType,\n        _virtualSource: state['features/virtual-background'].virtualSource,\n        _desktopSharingDisabledTooltipKey: desktopSharingDisabledTooltipKey,\n        _dialog: Boolean(state['features/base/dialog'].component),\n        _feedbackConfigured: Boolean(callStatsID),\n        _isProfileDisabled: Boolean(state['features/base/config'].disableProfile),\n        _isMobile: isMobileBrowser(),\n        _isVpaasMeeting: isVpaasMeeting(state),\n        _fullScreen: fullScreen,\n        _tileViewEnabled: shouldDisplayTileView(state),\n        _localParticipantID: localParticipant?.id,\n        _localVideo: localVideo,\n        _overflowMenuVisible: overflowMenuVisible,\n        _participantsPaneOpen: getParticipantsPaneOpen(state),\n        _raisedHand: localParticipant?.raisedHand,\n        _screenSharing: isScreenVideoShared(state),\n        _toolbarButtons: getToolbarButtons(state),\n        _visible: isToolboxVisible(state),\n        _visibleButtons: getToolbarButtons(state),\n        _reactionsEnabled: enableReactions\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(Toolbox));\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/analytics');\n","/**\n * Abstract implementation of analytics handler\n */\nexport default class AbstractHandler {\n    /**\n     * Creates new instance.\n     *\n     * @param {Object} options - Optional parameters.\n     */\n    constructor(options = {}) {\n        this._enabled = false;\n        this._whiteListedEvents = options.whiteListedEvents;\n\n        // FIXME:\n        // Keeping the list with the very noisy events so that we don't flood with events whoever hasn't configured\n        // white/black lists yet. We need to solve this issue properly by either making these events not so noisy or\n        // by removing them completely from the code.\n        this._blackListedEvents = [\n            ...(options.blackListedEvents || []), // eslint-disable-line no-extra-parens\n            'e2e_rtt', 'rtp.stats', 'rtt.by.region', 'available.device', 'stream.switch.delay', 'ice.state.changed',\n            'ice.duration', 'peer.conn.status.duration'\n        ];\n    }\n\n    /**\n     * Extracts a name for the event from the event properties.\n     *\n     * @param {Object} event - The analytics event.\n     * @returns {string} - The extracted name.\n     */\n    _extractName(event) {\n        // Page events have a single 'name' field.\n        if (event.type === 'page') {\n            return event.name;\n        }\n\n        const {\n            action,\n            actionSubject,\n            source\n        } = event;\n\n        // All events have action, actionSubject, and source fields. All\n        // three fields are required, and often jitsi-meet and\n        // lib-jitsi-meet use the same value when separate values are not\n        // necessary (i.e. event.action == event.actionSubject).\n        // Here we concatenate these three fields, but avoid adding the same\n        // value twice, because it would only make the event's name harder\n        // to read.\n        let name = action;\n\n        if (actionSubject && actionSubject !== action) {\n            name = `${actionSubject}.${action}`;\n        }\n        if (source && source !== action) {\n            name = `${source}.${name}`;\n        }\n\n        return name;\n    }\n\n    /**\n     * Checks if an event should be ignored or not.\n     *\n     * @param {Object} event - The event.\n     * @returns {boolean}\n     */\n    _shouldIgnore(event) {\n        if (!event || !this._enabled) {\n            return true;\n        }\n\n        const name = this._extractName(event);\n\n        if (Array.isArray(this._whiteListedEvents)) {\n            return this._whiteListedEvents.indexOf(name) === -1;\n        }\n\n        if (Array.isArray(this._blackListedEvents)) {\n            return this._blackListedEvents.indexOf(name) !== -1;\n        }\n\n        return false;\n    }\n}\n","import amplitude from 'amplitude-js';\n\nimport logger from '../logger';\n\nimport AbstractHandler from './AbstractHandler';\nimport { fixDeviceID } from './amplitude';\n\n/**\n * Analytics handler for Amplitude.\n */\nexport default class AmplitudeHandler extends AbstractHandler {\n    /**\n     * Creates new instance of the Amplitude analytics handler.\n     *\n     * @param {Object} options -\n     * @param {string} options.amplitudeAPPKey - The Amplitude app key required\n     * by the Amplitude API.\n     */\n    constructor(options) {\n        super(options);\n\n        const { amplitudeAPPKey, host, user } = options;\n\n        this._enabled = true;\n        this._host = host; // Only used on React Native.\n\n        const onError = e => {\n            logger.error('Error initializing Amplitude', e);\n            this._enabled = false;\n        };\n\n        const amplitudeOptions = {\n            domain: navigator.product === 'ReactNative' ? host : undefined,\n            includeReferrer: true,\n            onError\n        };\n\n        this._getInstance().init(amplitudeAPPKey, undefined, amplitudeOptions);\n        fixDeviceID(this._getInstance());\n\n        if (user) {\n            this._getInstance().setUserId(user);\n        }\n    }\n\n    /**\n     * Returns the AmplitudeClient instance.\n     *\n     * @returns {AmplitudeClient}\n     */\n    _getInstance() {\n        const name = navigator.product === 'ReactNative' ? this._host : undefined;\n\n        return amplitude.getInstance(name);\n    }\n\n    /**\n     * Sets the Amplitude user properties.\n     *\n     * @param {Object} userProps - The user portperties.\n     * @returns {void}\n     */\n    setUserProperties(userProps) {\n        if (this._enabled) {\n            this._getInstance().setUserProperties(userProps);\n        }\n    }\n\n    /**\n     * Sends an event to Amplitude. The format of the event is described\n     * in AnalyticsAdapter in lib-jitsi-meet.\n     *\n     * @param {Object} event - The event in the format specified by\n     * lib-jitsi-meet.\n     * @returns {void}\n     */\n    sendEvent(event) {\n        if (this._shouldIgnore(event)) {\n            return;\n        }\n\n        this._getInstance().logEvent(this._extractName(event), event);\n    }\n\n    /**\n     * Return amplitude identity information.\n     *\n     * @returns {Object}\n     */\n    getIdentityProps() {\n        return {\n            sessionId: this._getInstance().getSessionId(),\n            deviceId: this._getInstance().options.deviceId,\n            userId: this._getInstance().options.userId\n        };\n    }\n}\n","/* global _paq */\n\nimport { getJitsiMeetGlobalNS } from '../../base/util';\n\nimport AbstractHandler from './AbstractHandler';\n\n/**\n * Analytics handler for Matomo.\n */\nexport default class MatomoHandler extends AbstractHandler {\n\n    /**\n     * Creates new instance of the Matomo handler.\n     *\n     * @param {Object} options -\n     * @param {string} options.matomoEndpoint - The Matomo endpoint.\n     * @param {string} options.matomoSiteID   - The site ID.\n     */\n    constructor(options) {\n        super(options);\n        this._userProperties = {};\n\n        if (!options.matomoEndpoint) {\n            throw new Error(\n                'Failed to initialize Matomo handler: no endpoint defined.'\n            );\n        }\n        if (!options.matomoSiteID) {\n            throw new Error(\n                'Failed to initialize Matomo handler: no site ID defined.'\n            );\n        }\n\n        this._enabled = true;\n        this._initMatomo(options);\n    }\n\n    /**\n     * Initializes the _paq object.\n     *\n     * @param {Object} options -\n     * @param {string} options.matomoEndpoint - The Matomo endpoint.\n     * @param {string} options.matomoSiteID   - The site ID.\n     * @returns {void}\n     */\n    _initMatomo(options) {\n        const _paq = window._paq || [];\n\n        window._paq = _paq;\n\n        _paq.push([ 'trackPageView' ]);\n        _paq.push([ 'enableLinkTracking' ]);\n\n        (function() {\n            // add trailing slash if needed\n            const u = options.matomoEndpoint.endsWith('/')\n                ? options.matomoEndpoint\n                : `${options.matomoEndpoint}/`;\n\n            // configure the tracker\n            _paq.push([ 'setTrackerUrl', `${u}matomo.php` ]);\n            _paq.push([ 'setSiteId', options.matomoSiteID ]);\n\n            // insert the matomo script\n            const d = document,\n                g = d.createElement('script'),\n                s = d.getElementsByTagName('script')[0];\n\n            g.type = 'text/javascript';\n            g.async = true;\n            g.defer = true;\n            g.src = `${u}matomo.js`;\n            s.parentNode.insertBefore(g, s);\n        })();\n    }\n\n    /**\n     * Extracts the integer to use for a Matomo event's value field\n     * from a lib-jitsi-meet analytics event.\n     *\n     * @param {Object} event - The lib-jitsi-meet analytics event.\n     * @returns {number} - The integer to use for the 'value' of a Matomo\n     * event, or NaN if the lib-jitsi-meet event doesn't contain a\n     * suitable value.\n     * @private\n     */\n    _extractValue(event) {\n        const value = event && event.attributes && event.attributes.value;\n\n        // Try to extract an integer from the 'value' attribute.\n        return Math.round(parseFloat(value));\n    }\n\n    /**\n     * Sets the permanent properties for the current session.\n     *\n     * @param {Object} userProps - The permanent properties.\n     * @returns {void}\n     */\n    setUserProperties(userProps = {}) {\n        if (!this._enabled) {\n            return;\n        }\n\n        const visitScope = [ 'user_agent', 'callstats_name', 'browser_name' ];\n\n        // add variables in the 'page' scope\n        Object.keys(userProps)\n            .filter(key => visitScope.indexOf(key) === -1)\n            .forEach((key, index) => {\n                _paq.push([\n                    'setCustomVariable',\n                    1 + index,\n                    key,\n                    userProps[key],\n                    'page'\n                ]);\n            });\n\n\n        // add variables in the 'visit' scope\n        Object.keys(userProps)\n            .filter(key => visitScope.indexOf(key) !== -1)\n            .forEach((key, index) => {\n                _paq.push([\n                    'setCustomVariable',\n                    1 + index,\n                    key,\n                    userProps[key],\n                    'visit'\n                ]);\n            });\n    }\n\n    /**\n     * This is the entry point of the API. The function sends an event to\n     * the Matomo endpoint. The format of the event is described in\n     * analyticsAdapter in lib-jitsi-meet.\n     *\n     * @param {Object} event - The event in the format specified by\n     * lib-jitsi-meet.\n     * @returns {void}\n     */\n    sendEvent(event) {\n        if (this._shouldIgnore(event)) {\n            return;\n        }\n\n        const value = this._extractValue(event);\n        const matomoEvent = [ 'trackEvent', 'jitsi-meet', this._extractName(event) ];\n\n        if (!isNaN(value)) {\n            matomoEvent.push(value);\n        }\n\n        _paq.push(matomoEvent);\n    }\n}\n\nconst globalNS = getJitsiMeetGlobalNS();\n\nglobalNS.analyticsHandlers = globalNS.analyticsHandlers || [];\nglobalNS.analyticsHandlers.push(MatomoHandler);\n","// @flow\n\nimport { API_ID } from '../../../modules/API/constants';\nimport { getName as getAppName } from '../app/functions';\nimport {\n    checkChromeExtensionsInstalled,\n    isMobileBrowser\n} from '../base/environment/utils';\nimport JitsiMeetJS, {\n    analytics,\n    browser,\n    isAnalyticsEnabled\n} from '../base/lib-jitsi-meet';\nimport { getJitsiMeetGlobalNS, loadScript, parseURIString } from '../base/util';\n\nimport { AmplitudeHandler, MatomoHandler } from './handlers';\nimport logger from './logger';\n\n/**\n * Sends an event through the lib-jitsi-meet AnalyticsAdapter interface.\n *\n * @param {Object} event - The event to send. It should be formatted as\n * described in AnalyticsAdapter.js in lib-jitsi-meet.\n * @returns {void}\n */\nexport function sendAnalytics(event: Object) {\n    try {\n        analytics.sendEvent(event);\n    } catch (e) {\n        logger.warn(`Error sending analytics event: ${e}`);\n    }\n}\n\n/**\n * Return saved amplitude identity info such as session id, device id and user id. We assume these do not change for\n * the duration of the conference.\n *\n * @returns {Object}\n */\nexport function getAmplitudeIdentity() {\n    return analytics.amplitudeIdentityProps;\n}\n\n/**\n * Resets the analytics adapter to its initial state - removes handlers, cache,\n * disabled state, etc.\n *\n * @returns {void}\n */\nexport function resetAnalytics() {\n    analytics.reset();\n}\n\n/**\n * Creates the analytics handlers.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @returns {Promise} Resolves with the handlers that have been successfully loaded.\n */\nexport async function createHandlers({ getState }: { getState: Function }) {\n    getJitsiMeetGlobalNS().analyticsHandlers = [];\n    window.analyticsHandlers = []; // Legacy support.\n\n    if (!isAnalyticsEnabled(getState)) {\n        // Avoid all analytics processing if there are no handlers, since no event would be sent.\n        analytics.dispose();\n\n        return [];\n    }\n\n    const state = getState();\n    const config = state['features/base/config'];\n    const { locationURL } = state['features/base/connection'];\n    const host = locationURL ? locationURL.host : '';\n    const {\n        analytics: analyticsConfig = {},\n        deploymentInfo\n    } = config;\n    const {\n        amplitudeAPPKey,\n        blackListedEvents,\n        scriptURLs,\n        googleAnalyticsTrackingId,\n        matomoEndpoint,\n        matomoSiteID,\n        whiteListedEvents\n    } = analyticsConfig;\n    const { group, user } = state['features/base/jwt'];\n    const handlerConstructorOptions = {\n        amplitudeAPPKey,\n        blackListedEvents,\n        envType: (deploymentInfo && deploymentInfo.envType) || 'dev',\n        googleAnalyticsTrackingId,\n        matomoEndpoint,\n        matomoSiteID,\n        group,\n        host,\n        product: deploymentInfo && deploymentInfo.product,\n        subproduct: deploymentInfo && deploymentInfo.environment,\n        user: user && user.id,\n        version: JitsiMeetJS.version,\n        whiteListedEvents\n    };\n    const handlers = [];\n\n    if (amplitudeAPPKey) {\n        try {\n            const amplitude = new AmplitudeHandler(handlerConstructorOptions);\n\n            analytics.amplitudeIdentityProps = amplitude.getIdentityProps();\n\n            handlers.push(amplitude);\n        } catch (e) {\n            logger.error('Failed to initialize Amplitude handler', e);\n        }\n    }\n\n    if (matomoEndpoint && matomoSiteID) {\n        try {\n            const matomo = new MatomoHandler(handlerConstructorOptions);\n\n            handlers.push(matomo);\n        } catch (e) {\n            logger.error('Failed to initialize Matomo handler', e);\n        }\n    }\n\n    if (Array.isArray(scriptURLs) && scriptURLs.length > 0) {\n        let externalHandlers;\n\n        try {\n            externalHandlers = await _loadHandlers(scriptURLs, handlerConstructorOptions);\n            handlers.push(...externalHandlers);\n        } catch (e) {\n            logger.error('Failed to initialize external analytics handlers', e);\n        }\n    }\n\n    // Avoid all analytics processing if there are no handlers, since no event would be sent.\n    if (handlers.length === 0) {\n        analytics.dispose();\n    }\n\n    logger.info(`Initialized ${handlers.length} analytics handlers`);\n\n    return handlers;\n}\n\n/**\n * Inits JitsiMeetJS.analytics by setting permanent properties and setting the handlers from the loaded scripts.\n * NOTE: Has to be used after JitsiMeetJS.init. Otherwise analytics will be null.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @param {Array<Object>} handlers - The analytics handlers.\n * @returns {void}\n */\nexport function initAnalytics({ getState }: { getState: Function }, handlers: Array<Object>) {\n    if (!isAnalyticsEnabled(getState) || handlers.length === 0) {\n        return;\n    }\n\n    const state = getState();\n    const config = state['features/base/config'];\n    const {\n        deploymentInfo\n    } = config;\n    const { group, server } = state['features/base/jwt'];\n    const roomName = state['features/base/conference'].room;\n    const { locationURL = {} } = state['features/base/connection'];\n    const { tenant } = parseURIString(locationURL.href) || {};\n    const permanentProperties = {};\n\n    if (server) {\n        permanentProperties.server = server;\n    }\n    if (group) {\n        permanentProperties.group = group;\n    }\n\n    // Report the application name\n    permanentProperties.appName = getAppName();\n\n    // Report if user is using websocket\n    permanentProperties.websocket = navigator.product !== 'ReactNative' && typeof config.websocket === 'string';\n\n    // Report if user is using the external API\n    permanentProperties.externalApi = typeof API_ID === 'number';\n\n    // Report if we are loaded in iframe\n    permanentProperties.inIframe = _inIframe();\n\n    // Report the tenant from the URL.\n    permanentProperties.tenant = tenant || '/';\n\n    // Optionally, include local deployment information based on the\n    // contents of window.config.deploymentInfo.\n    if (deploymentInfo) {\n        for (const key in deploymentInfo) {\n            if (deploymentInfo.hasOwnProperty(key)) {\n                permanentProperties[key] = deploymentInfo[key];\n            }\n        }\n    }\n\n    analytics.addPermanentProperties(permanentProperties);\n    analytics.setConferenceName(roomName);\n\n    // Set the handlers last, since this triggers emptying of the cache\n    analytics.setAnalyticsHandlers(handlers);\n\n    if (!isMobileBrowser() && browser.isChrome()) {\n        const bannerCfg = state['features/base/config'].chromeExtensionBanner;\n\n        checkChromeExtensionsInstalled(bannerCfg).then(extensionsInstalled => {\n            if (extensionsInstalled?.length) {\n                analytics.addPermanentProperties({\n                    hasChromeExtension: extensionsInstalled.some(ext => ext)\n                });\n            }\n        });\n    }\n}\n\n/**\n * Checks whether we are loaded in iframe.\n *\n * @returns {boolean} Returns {@code true} if loaded in iframe.\n * @private\n */\nfunction _inIframe() {\n    if (navigator.product === 'ReactNative') {\n        return false;\n    }\n\n    try {\n        return window.self !== window.top;\n    } catch (e) {\n        return true;\n    }\n}\n\n/**\n * Tries to load the scripts for the external analytics handlers and creates them.\n *\n * @param {Array} scriptURLs - The array of script urls to load.\n * @param {Object} handlerConstructorOptions - The default options to pass when creating handlers.\n * @private\n * @returns {Promise} Resolves with the handlers that have been successfully loaded and rejects if there are no handlers\n * loaded or the analytics is disabled.\n */\nfunction _loadHandlers(scriptURLs = [], handlerConstructorOptions) {\n    const promises = [];\n\n    for (const url of scriptURLs) {\n        promises.push(\n            loadScript(url).then(\n                () => {\n                    return { type: 'success' };\n                },\n                error => {\n                    return {\n                        type: 'error',\n                        error,\n                        url\n                    };\n                }));\n    }\n\n    return Promise.all(promises).then(values => {\n        for (const el of values) {\n            if (el.type === 'error') {\n                logger.warn(`Failed to load ${el.url}: ${el.error}`);\n            }\n        }\n\n        // analyticsHandlers is the handlers we want to use\n        // we search for them in the JitsiMeetGlobalNS, but also\n        // check the old location to provide legacy support\n        const analyticsHandlers = [\n            ...getJitsiMeetGlobalNS().analyticsHandlers,\n            ...window.analyticsHandlers\n        ];\n        const handlers = [];\n\n        for (const Handler of analyticsHandlers) {\n            // Catch any error while loading to avoid skipping analytics in case\n            // of multiple scripts.\n            try {\n                handlers.push(new Handler(handlerConstructorOptions));\n            } catch (error) {\n                logger.warn(`Error creating analytics handler: ${error}`);\n            }\n        }\n        logger.debug(`Loaded ${handlers.length} external analytics handlers`);\n\n        return handlers;\n    });\n}\n","// @flow\n\n/**\n * The type of the Redux action which signals that the prompt for media\n * permission is visible or not.\n *\n * {\n *     type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n *     isVisible: {boolean},\n *     browser: {string}\n * }\n * @public\n */\nexport const MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED\n    = 'MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED';\n\n/**\n * The type of the Redux action which signals that the overlay for slow gUM is visible or not.\n *\n * {\n *     type: TOGGLE_SLOW_GUM_OVERLAY,\n *     isVisible: {boolean},\n * }\n * @public\n */\nexport const TOGGLE_SLOW_GUM_OVERLAY = 'TOGGLE_SLOW_GUM_OVERLAY';\n\n/**\n * Adjust the state of the fatal error which shows/hides the reload screen. See\n * action methods's description for more info about each of the fields.\n *\n * {\n *     type: SET_FATAL_ERROR,\n *     fatalError: ?Object\n * }\n * @public\n */\nexport const SET_FATAL_ERROR = 'SET_FATAL_ERROR';\n","/**\n * Action used to set custom user properties.\n */\nexport const SET_DYNAMIC_BRANDING_DATA = 'SET_DYNAMIC_BRANDING_DATA';\n\n/**\n * Action used to signal the customization failed.\n */\nexport const SET_DYNAMIC_BRANDING_FAILED = 'SET_DYNAMIC_BRANDING_FAILED';\n\n/**\n * Action used to signal the branding elements are ready to be displayed\n */\nexport const SET_DYNAMIC_BRANDING_READY = 'SET_DYNAMIC_BRANDING_READY';\n","/* @flow */\n/* eslint-disable no-invalid-this */\nimport Logger from 'jitsi-meet-logger';\nimport throttle from 'lodash/throttle';\nimport { PureComponent } from 'react';\n\nimport { sendAnalytics, createSharedVideoEvent as createEvent } from '../../../analytics';\nimport { getCurrentConference } from '../../../base/conference';\nimport { MEDIA_TYPE } from '../../../base/media';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { isLocalTrackMuted } from '../../../base/tracks';\nimport { showWarningNotification } from '../../../notifications/actions';\nimport { dockToolbox } from '../../../toolbox/actions.web';\nimport { muteLocal } from '../../../video-menu/actions.any';\nimport { setSharedVideoStatus, stopSharedVideo } from '../../actions.any';\nimport { PLAYBACK_STATUSES } from '../../constants';\n\nconst logger = Logger.getLogger(__filename);\n\n/**\n * Return true if the diffenrece between the two timees is larger than 5.\n *\n * @param {number} newTime - The current time.\n * @param {number} previousTime - The previous time.\n * @private\n * @returns {boolean}\n*/\nfunction shouldSeekToPosition(newTime, previousTime) {\n    return Math.abs(newTime - previousTime) > 5;\n}\n\n/**\n * The type of the React {@link PureComponent} props of {@link AbstractVideoManager}.\n */\nexport type Props = {\n\n    /**\n     * The current coference\n     */\n    _conference: Object,\n\n    /**\n     * Warning that indicates an incorect video url\n     */\n    _displayWarning: Function,\n\n    /**\n     * Docks the toolbox\n     */\n    _dockToolbox: Function,\n\n    /**\n     * Action to stop video sharing\n    */\n    _stopSharedVideo: Function,\n\n    /**\n     * Indicates whether the local audio is muted\n    */\n    _isLocalAudioMuted: boolean,\n\n    /**\n     * Is the video shared by the local user.\n     *\n     * @private\n     */\n    _isOwner: boolean,\n\n    /**\n     * Store flag for muted state\n     */\n    _muted: boolean,\n\n    /**\n     * Mutes local audio track\n     */\n    _muteLocal: Function,\n\n    /**\n     * The shared video owner id\n     */\n    _ownerId: string,\n\n    /**\n     * Updates the shared video status\n     */\n    _setSharedVideoStatus: Function,\n\n    /**\n     * The shared video status\n     */\n     _status: string,\n\n    /**\n     * Seek time in seconds.\n     *\n     */\n    _time: number,\n\n    /**\n     * The video url\n     */\n     _videoUrl: string,\n\n     /**\n      * The video id\n      */\n     videoId: string\n}\n\n/**\n * Manager of shared video.\n */\nclass AbstractVideoManager extends PureComponent<Props> {\n    throttledFireUpdateSharedVideoEvent: Function;\n\n    /**\n     * Initializes a new instance of AbstractVideoManager.\n     *\n     * @returns {void}\n     */\n    constructor() {\n        super();\n\n        this.throttledFireUpdateSharedVideoEvent = throttle(this.fireUpdateSharedVideoEvent.bind(this), 5000);\n\n        // selenium tests handler\n        window._sharedVideoPlayer = this;\n    }\n\n    /**\n     * Implements React Component's componentDidMount.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props._dockToolbox(true);\n        this.processUpdatedProps();\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        const { _videoUrl } = this.props;\n\n        if (prevProps._videoUrl !== _videoUrl) {\n            sendAnalytics(createEvent('started'));\n        }\n\n        this.processUpdatedProps();\n    }\n\n    /**\n     * Implements React Component's componentWillUnmount.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        sendAnalytics(createEvent('stopped'));\n\n        if (this.dispose) {\n            this.dispose();\n        }\n\n        this.props._dockToolbox(false);\n    }\n\n    /**\n     * Processes new properties.\n     *\n     * @returns {void}\n     */\n    processUpdatedProps() {\n        const { _status, _time, _isOwner, _muted } = this.props;\n\n        if (_isOwner) {\n            return;\n        }\n\n        const playerTime = this.getTime();\n\n        if (shouldSeekToPosition(_time, playerTime)) {\n            this.seek(_time);\n        }\n\n        if (this.getPlaybackStatus() !== _status) {\n            if (_status === PLAYBACK_STATUSES.PLAYING) {\n                this.play();\n            }\n\n            if (_status === PLAYBACK_STATUSES.PAUSED) {\n                this.pause();\n            }\n        }\n\n        if (this.isMuted() !== _muted) {\n            if (_muted) {\n                this.mute();\n            } else {\n                this.unMute();\n            }\n        }\n    }\n\n    /**\n     * Handle video error.\n     *\n     * @returns {void}\n     */\n    onError() {\n        logger.error('Error in the video player');\n        this.props._stopSharedVideo();\n        this.props._displayWarning();\n    }\n\n    /**\n     * Handle video playing.\n     *\n     * @returns {void}\n     */\n    onPlay() {\n        this.smartAudioMute();\n        sendAnalytics(createEvent('play'));\n        this.fireUpdateSharedVideoEvent();\n    }\n\n    /**\n     * Handle video paused.\n     *\n     * @returns {void}\n     */\n    onPause() {\n        sendAnalytics(createEvent('paused'));\n        this.fireUpdateSharedVideoEvent();\n    }\n\n    /**\n     * Handle volume changed.\n     *\n     * @returns {void}\n     */\n    onVolumeChange() {\n        const volume = this.getVolume();\n        const muted = this.isMuted();\n\n        if (volume > 0 && !muted) {\n            this.smartAudioMute();\n        }\n\n        sendAnalytics(createEvent(\n            'volume.changed',\n            {\n                volume,\n                muted\n            }));\n\n        this.fireUpdatePlayingVideoEvent();\n    }\n\n    /**\n     * Handle changes to the shared playing video.\n     *\n     * @returns {void}\n     */\n    fireUpdatePlayingVideoEvent() {\n        if (this.getPlaybackStatus() === PLAYBACK_STATUSES.PLAYING) {\n            this.fireUpdateSharedVideoEvent();\n        }\n    }\n\n    /**\n     * Dispatches an update action for the shared video.\n     *\n     * @returns {void}\n     */\n    fireUpdateSharedVideoEvent() {\n        const { _isOwner } = this.props;\n\n        if (!_isOwner) {\n            return;\n        }\n\n        const status = this.getPlaybackStatus();\n\n        if (!Object.values(PLAYBACK_STATUSES).includes(status)) {\n            return;\n        }\n\n        const {\n            _ownerId,\n            _setSharedVideoStatus,\n            _videoUrl\n        } = this.props;\n\n        _setSharedVideoStatus({\n            videoUrl: _videoUrl,\n            status,\n            time: this.getTime(),\n            ownerId: _ownerId,\n            muted: this.isMuted()\n        });\n    }\n\n    /**\n     * Indicates if the player volume is currently on. This will return true if\n     * we have an available player, which is currently in a PLAYING state,\n     * which isn't muted and has it's volume greater than 0.\n     *\n     * @returns {boolean} Indicating if the volume of the shared video is\n     * currently on.\n     */\n    isSharedVideoVolumeOn() {\n        return this.getPlaybackStatus() === PLAYBACK_STATUSES.PLAYING\n                && !this.isMuted()\n                && this.getVolume() > 0;\n    }\n\n    /**\n     * Smart mike mute. If the mike isn't currently muted and the shared video\n     * volume is on we mute the mike.\n     *\n     * @returns {void}\n     */\n    smartAudioMute() {\n        const { _isLocalAudioMuted, _muteLocal } = this.props;\n\n        if (!_isLocalAudioMuted\n            && this.isSharedVideoVolumeOn()) {\n            sendAnalytics(createEvent('audio.muted'));\n            _muteLocal(true);\n        }\n    }\n\n    /**\n     * Seeks video to provided time\n     * @param {number} time\n     */\n    seek: (time: number) => void;\n\n    /**\n     * Indicates the playback state of the video\n     */\n    getPlaybackStatus: () => boolean;\n\n    /**\n     * Indicates whether the video is muted\n     */\n    isMuted: () => boolean;\n\n    /**\n     * Retrieves current volume\n     */\n    getVolume: () => number;\n\n    /**\n     * Plays video\n     */\n    play: () => void;\n\n    /**\n     * Pauses video\n     */\n    pause: () => void;\n\n    /**\n     * Mutes video\n     */\n    mute: () => void;\n\n    /**\n     * Unmutes video\n     */\n    unMute: () => void;\n\n    /**\n     * Retrieves current time\n     */\n    getTime: () => number;\n\n    /**\n     * Disposes current video player\n     */\n    dispose: () => void;\n}\n\n\nexport default AbstractVideoManager;\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object): $Shape<Props> {\n    const { ownerId, status, time, videoUrl, muted } = state['features/shared-video'];\n    const localParticipant = getLocalParticipant(state);\n    const _isLocalAudioMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.AUDIO);\n\n    return {\n        _conference: getCurrentConference(state),\n        _isLocalAudioMuted,\n        _isOwner: ownerId === localParticipant.id,\n        _muted: muted,\n        _ownerId: ownerId,\n        _status: status,\n        _time: time,\n        _videoUrl: videoUrl\n    };\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _displayWarning: () => {\n            dispatch(showWarningNotification({\n                titleKey: 'dialog.shareVideoLinkError'\n            }));\n        },\n        _dockToolbox: value => {\n            dispatch(dockToolbox(value));\n        },\n        _stopSharedVideo: () => {\n            dispatch(stopSharedVideo());\n        },\n        _muteLocal: value => {\n            dispatch(muteLocal(value, MEDIA_TYPE.AUDIO));\n        },\n        _setSharedVideoStatus: ({ videoUrl, status, time, ownerId, muted }) => {\n            dispatch(setSharedVideoStatus({\n                videoUrl,\n                status,\n                time,\n                ownerId,\n                muted\n            }));\n        }\n    };\n}\n","export * from './actions';\nexport * from './components';\nexport * from './constants';\n","// @flow\n\nimport _ from 'lodash';\nimport { connect as reduxConnect } from 'react-redux';\n\n/**\n * Sets specific properties of a specific state to specific values and prevents\n * unnecessary state changes.\n *\n * @param {Object} target - The state on which the specified properties are to\n * be set.\n * @param {Object} source - The map of properties to values which are to be set\n * on the specified target.\n * @returns {Object} The specified target if the values of the specified\n * properties equal the specified values; otherwise, a new state constructed\n * from the specified target by setting the specified properties to the\n * specified values.\n */\nexport function assign(target: Object, source: Object) {\n    let t = target;\n\n    for (const property in source) { // eslint-disable-line guard-for-in\n        t = _set(t, property, source[property], t === target);\n    }\n\n    return t;\n}\n\n/**\n * Wrapper function for the react-redux connect function to avoid having to\n * declare function types for flow, but still let flow warn for other errors.\n *\n * @param {Function?} mapStateToProps - Redux mapStateToProps function.\n * @param {Function?} mapDispatchToProps - Redux mapDispatchToProps function.\n * @returns {Connector}\n */\nexport function connect(\n        mapStateToProps?: Function, mapDispatchToProps?: Function) {\n    return reduxConnect<*, *, *, *, *, *>(mapStateToProps, mapDispatchToProps);\n}\n\n/**\n * Determines whether {@code a} equals {@code b} according to deep comparison\n * (which makes sense for Redux and its state definition).\n *\n * @param {*} a - The value to compare to {@code b}.\n * @param {*} b - The value to compare to {@code a}.\n * @returns {boolean} True if {@code a} equals {@code b} (according to deep\n * comparison); false, otherwise.\n */\nexport function equals(a: any, b: any) {\n    return _.isEqual(a, b);\n}\n\n/**\n * Sets a specific property of a specific state to a specific value. Prevents\n * unnecessary state changes (when the specified {@code value} is equal to the\n * value of the specified {@code property} of the specified {@code state}).\n *\n * @param {Object} state - The (Redux) state from which a new state is to be\n * constructed by setting the specified {@code property} to the specified\n * {@code value}.\n * @param {string} property - The property of {@code state} which is to be\n * assigned the specified {@code value} (in the new state).\n * @param {*} value - The value to assign to the specified {@code property}.\n * @returns {Object} The specified {@code state} if the value of the specified\n * {@code property} equals the specified <tt>value/tt>; otherwise, a new state\n * constructed from the specified {@code state} by setting the specified\n * {@code property} to the specified {@code value}.\n */\nexport function set(state: Object, property: string, value: any) {\n    return _set(state, property, value, /* copyOnWrite */ true);\n}\n\n/* eslint-disable max-params */\n\n/**\n * Sets a specific property of a specific state to a specific value. Prevents\n * unnecessary state changes (when the specified {@code value} is equal to the\n * value of the specified {@code property} of the specified {@code state}).\n *\n * @param {Object} state - The (Redux) state from which a state is to be\n * constructed by setting the specified {@code property} to the specified\n * {@code value}.\n * @param {string} property - The property of {@code state} which is to be\n * assigned the specified {@code value}.\n * @param {*} value - The value to assign to the specified {@code property}.\n * @param {boolean} copyOnWrite - If the specified {@code state} is to not be\n * modified, {@code true}; otherwise, {@code false}.\n * @returns {Object} The specified {@code state} if the value of the specified\n * {@code property} equals the specified <tt>value/tt> or {@code copyOnWrite}\n * is truthy; otherwise, a new state constructed from the specified\n * {@code state} by setting the specified {@code property} to the specified\n * {@code value}.\n */\nfunction _set(\n        state: Object,\n        property: string,\n        value: any,\n        copyOnWrite: boolean) {\n    // Delete state properties that are to be set to undefined. (It is a matter\n    // of personal preference, mostly.)\n    if (typeof value === 'undefined'\n            && Object.prototype.hasOwnProperty.call(state, property)) {\n        const newState = copyOnWrite ? { ...state } : state;\n\n        if (delete newState[property]) {\n            return newState;\n        }\n    }\n\n    if (state[property] !== value) {\n        if (copyOnWrite) {\n            return {\n                ...state,\n                [property]: value\n            };\n        }\n\n        state[property] = value;\n    }\n\n    return state;\n}\n\n/* eslint-enable max-params */\n\n/**\n * Returns redux state from the specified {@code stateful} which is presumed to\n * be related to the redux state (e.g. The redux store, the redux\n * {@code getState} function).\n *\n * @param {Function|Object} stateful - The entity such as the redux store or the\n * redux {@code getState} function from which the redux state is to be\n * returned.\n * @returns {Object} The redux state.\n */\nexport function toState(stateful: Function | Object) {\n    if (stateful) {\n        if (typeof stateful === 'function') {\n            return stateful();\n        }\n\n        const { getState } = stateful;\n\n        if (typeof getState === 'function') {\n            return getState();\n        }\n    }\n\n    return stateful;\n}\n","// @flow\n\nimport { toState } from '../base/redux';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Tells whether or not the notifications are enabled and if there are any\n * notifications to be displayed based on the current Redux state.\n *\n * @param {Object|Function} stateful - The redux store state.\n * @returns {boolean}\n */\nexport function areThereNotifications(stateful: Object | Function) {\n    const state = toState(stateful);\n    const { enabled, notifications } = state['features/notifications'];\n\n    return enabled && notifications.length > 0;\n}\n\n/**\n * Tells whether join/leave notifications are enabled in interface_config.\n *\n * @returns {boolean}\n */\nexport function joinLeaveNotificationsDisabled() {\n    return Boolean(typeof interfaceConfig !== 'undefined' && interfaceConfig?.DISABLE_JOIN_LEAVE_NOTIFICATIONS);\n}\n","/* @flow */\n\nimport {\n    LOCAL_RECORDING_ENGAGED,\n    LOCAL_RECORDING_UNENGAGED,\n    LOCAL_RECORDING_STATS_UPDATE\n} from './actionTypes';\n\n// The following two actions signal state changes in local recording engagement.\n// In other words, the events of the local WebWorker / MediaRecorder starting to\n// record and finishing recording.\n// Note that this is not the event fired when the users tries to start the\n// recording in the UI.\n\n/**\n * Signals that local recording has been engaged.\n *\n * @param {Date} startTime - Time when the recording is engaged.\n * @returns {{\n *     type: LOCAL_RECORDING_ENGAGED,\n *     recordingEngagedAt: Date\n * }}\n */\nexport function localRecordingEngaged(startTime: Date) {\n    return {\n        type: LOCAL_RECORDING_ENGAGED,\n        recordingEngagedAt: startTime\n    };\n}\n\n/**\n * Signals that local recording has finished.\n *\n * @returns {{\n *     type: LOCAL_RECORDING_UNENGAGED\n * }}\n */\nexport function localRecordingUnengaged() {\n    return {\n        type: LOCAL_RECORDING_UNENGAGED\n    };\n}\n\n/**\n * Updates the the local recording stats from each client,\n * to be displayed on {@code LocalRecordingInfoDialog}.\n *\n * @param {*} stats - The stats object.\n * @returns {{\n *     type: LOCAL_RECORDING_STATS_UPDATE,\n *     stats: Object\n * }}\n */\nexport function statsUpdate(stats: Object) {\n    return {\n        type: LOCAL_RECORDING_STATS_UPDATE,\n        stats\n    };\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport {\n    getParticipantDisplayName,\n    getParticipantById\n} from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { updateSettings } from '../../../base/settings';\nimport { appendSuffix } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of {@link DisplayName}.\n */\ntype Props = {\n\n    /**\n     * The participant's current display name which should be shown when in\n     * edit mode. Can be different from what is shown when not editing.\n     */\n    _configuredDisplayName: string,\n\n    /**\n     * The participant's current display name which should be shown.\n     */\n    _nameToDisplay: string,\n\n    /**\n     * Whether or not the display name should be editable on click.\n     */\n    allowEditing: boolean,\n\n    /**\n     * Invoked to update the participant's display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * A string to append to the displayName, if provided.\n     */\n    displayNameSuffix: string,\n\n    /**\n     * The ID attribute to add to the component. Useful for global querying for\n     * the component by legacy components and torture tests.\n     */\n    elementID: string,\n\n    /**\n     * The ID of the participant whose name is being displayed.\n     */\n    participantID: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DisplayName}.\n */\ntype State = {\n\n    /**\n     * The current value of the display name in the edit field.\n     */\n    editDisplayNameValue: string,\n\n    /**\n     * Whether or not the component should be displaying an editable input.\n     */\n    isEditing: boolean\n};\n\n/**\n * React {@code Component} for displaying and editing a participant's name.\n *\n * @extends Component\n */\nclass DisplayName extends Component<Props, State> {\n    _nameInput: ?HTMLInputElement;\n\n    static defaultProps = {\n        _configuredDisplayName: ''\n    };\n\n    /**\n     * Initializes a new {@code DisplayName} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            editDisplayNameValue: '',\n            isEditing: false\n        };\n\n        /**\n         * The internal reference to the HTML element backing the React\n         * {@code Component} input with id {@code editDisplayName}. It is\n         * necessary for automatically selecting the display name input field\n         * when starting to edit the display name.\n         *\n         * @private\n         * @type {HTMLInputElement}\n         */\n        this._nameInput = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n        this._onStartEditing = this._onStartEditing.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._setNameInputRef = this._setNameInputRef.bind(this);\n    }\n\n    /**\n     * Automatically selects the input field's value after starting to edit the\n     * display name.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(previousProps, previousState) {\n        if (!previousState.isEditing\n            && this.state.isEditing\n            && this._nameInput) {\n            this._nameInput.select();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _nameToDisplay,\n            allowEditing,\n            displayNameSuffix,\n            elementID,\n            t\n        } = this.props;\n\n        if (allowEditing && this.state.isEditing) {\n            return (\n                <input\n                    autoFocus = { true }\n                    className = 'editdisplayname'\n                    id = 'editDisplayName'\n                    onBlur = { this._onSubmit }\n                    onChange = { this._onChange }\n                    onKeyDown = { this._onKeyDown }\n                    placeholder = { t('defaultNickname') }\n                    ref = { this._setNameInputRef }\n                    spellCheck = { 'false' }\n                    type = 'text'\n                    value = { this.state.editDisplayNameValue } />\n            );\n        }\n\n        return (\n            <span\n                className = 'displayname'\n                id = { elementID }\n                onClick = { this._onStartEditing }>\n                { appendSuffix(_nameToDisplay, displayNameSuffix) }\n            </span>\n        );\n    }\n\n    _onChange: () => void;\n\n    /**\n     * Updates the internal state of the display name entered into the edit\n     * field.\n     *\n     * @param {Object} event - DOM Event for value change.\n     * @private\n     * @returns {void}\n     */\n    _onChange(event) {\n        this.setState({\n            editDisplayNameValue: event.target.value\n        });\n    }\n\n    _onKeyDown: () => void;\n\n    /**\n     * Submits the edited display name update if the enter key is pressed.\n     *\n     * @param {Event} event - Key down event object.\n     * @private\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        if (event.key === 'Enter') {\n            this._onSubmit();\n        }\n    }\n\n    _onStartEditing: () => void;\n\n    /**\n     * Updates the component to display an editable input field and sets the\n     * initial value to the current display name.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStartEditing() {\n        if (this.props.allowEditing) {\n            this.setState({\n                isEditing: true,\n                editDisplayNameValue: this.props._configuredDisplayName\n            });\n        }\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Dispatches an action to update the display name if any change has\n     * occurred after editing. Clears any temporary state used to keep track\n     * of pending display name changes and exits editing mode.\n     *\n     * @param {Event} event - Key down event object.\n     * @private\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { editDisplayNameValue } = this.state;\n        const { dispatch } = this.props;\n\n        // Store display name in settings\n        dispatch(updateSettings({\n            displayName: editDisplayNameValue\n        }));\n\n        this.setState({\n            isEditing: false,\n            editDisplayNameValue: ''\n        });\n\n        this._nameInput = null;\n    }\n\n    _setNameInputRef: (HTMLInputElement | null) => void;\n\n    /**\n     * Sets the internal reference to the HTML element backing the React\n     * {@code Component} input with id {@code editDisplayName}.\n     *\n     * @param {HTMLInputElement} element - The DOM/HTML element for this\n     * {@code Component}'s input.\n     * @private\n     * @returns {void}\n     */\n    _setNameInputRef(element) {\n        this._nameInput = element;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the props of this component.\n *\n * @param {Object} state - The redux store/state.\n * @param {Props} ownProps - The own props of the component.\n * @private\n * @returns {{\n *     _configuredDisplayName: string,\n *     _nameToDisplay: string\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { participantID } = ownProps;\n    const participant = getParticipantById(state, participantID);\n\n    return {\n        _configuredDisplayName: participant && participant.name,\n        _nameToDisplay: getParticipantDisplayName(state, participantID)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DisplayName));\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { updateSettings } from '../../base/settings';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractDisplayNamePrompt}.\n */\nexport type Props = {\n\n    /**\n     * Invoked to update the local participant's display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Function to be invoked after a successful display name change.\n     */\n    onPostSubmit: ?Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements an abstract class for {@code DisplayNamePrompt}.\n */\nexport default class AbstractDisplayNamePrompt<S: *>\n    extends Component<Props, S> {\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSetDisplayName = this._onSetDisplayName.bind(this);\n    }\n\n    _onSetDisplayName: string => boolean;\n\n    /**\n     * Dispatches an action to update the local participant's display name. A\n     * name must be entered for the action to dispatch.\n     *\n     * It returns a boolean to comply the Dialog behaviour:\n     *     {@code true} - the dialog should be closed.\n     *     {@code false} - the dialog should be left open.\n     *\n     * @param {string} displayName - The display name to save.\n     * @returns {boolean}\n     */\n    _onSetDisplayName(displayName) {\n        if (!displayName || !displayName.trim()) {\n            return false;\n        }\n\n        const { dispatch, onPostSubmit } = this.props;\n\n        // Store display name in settings\n        dispatch(updateSettings({\n            displayName\n        }));\n\n        onPostSubmit && onPostSubmit();\n\n        return true;\n    }\n}\n","/* @flow */\n\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractDisplayNamePrompt, {\n    type Props\n} from '../AbstractDisplayNamePrompt';\n\n/**\n * The type of the React {@code Component} props of {@link DisplayNamePrompt}.\n */\ntype State = {\n\n    /**\n     * The name to show in the display name text field.\n     */\n    displayName: string\n};\n\n/**\n * Implements a React {@code Component} for displaying a dialog with an field\n * for setting the local participant's display name.\n *\n * @extends Component\n */\nclass DisplayNamePrompt extends AbstractDisplayNamePrompt<State> {\n    /**\n     * Initializes a new {@code DisplayNamePrompt} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            displayName: ''\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDisplayNameChange = this._onDisplayNameChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                isModal = { false }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.displayNameRequired'\n                width = 'small'>\n                <TextField\n                    autoFocus = { true }\n                    compact = { true }\n                    label = { this.props.t('dialog.enterDisplayName') }\n                    name = 'displayName'\n                    onChange = { this._onDisplayNameChange }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.state.displayName } />\n            </Dialog>);\n    }\n\n    _onDisplayNameChange: (Object) => void;\n\n    /**\n     * Updates the entered display name.\n     *\n     * @param {Object} event - The DOM event triggered from the entered display\n     * name value having changed.\n     * @private\n     * @returns {void}\n     */\n    _onDisplayNameChange(event) {\n        this.setState({\n            displayName: event.target.value\n        });\n    }\n\n    _onSetDisplayName: string => boolean;\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Dispatches an action to update the local participant's display name. A\n     * name must be entered for the action to dispatch.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        return this._onSetDisplayName(this.state.displayName);\n    }\n}\n\nexport default translate(connect()(DisplayNamePrompt));\n","// @flow\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\n\ntype Props = {\n\n    /**\n     * The name to be displayed within the badge.\n     */\n    name: string\n}\n\nconst useStyles = makeStyles(theme => {\n    return {\n        badge: {\n            background: 'rgba(0, 0, 0, 0.6)',\n            borderRadius: '3px',\n            color: theme.palette.text01,\n            maxWidth: '50%',\n            overflow: 'hidden',\n            padding: '2px 16px',\n            textOverflow: 'ellipsis',\n            whiteSpace: 'nowrap'\n        }\n    };\n});\n\n/**\n * Component that displays a name badge.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nconst DisplayNameBadge = ({ name }: Props) => {\n    const classes = useStyles();\n\n    return (\n        <div className = { classes.badge }>\n            {name}\n        </div>\n    );\n};\n\nexport default DisplayNameBadge;\n","// @flow\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { getLocalParticipant } from '../../../base/participants';\nimport { withPixelLineHeight } from '../../../base/styles/functions.web';\nimport { getLargeVideoParticipant } from '../../../large-video/functions';\nimport { isToolboxVisible } from '../../../toolbox/functions.web';\nimport { isLayoutTileView } from '../../../video-layout';\n\nimport DisplayNameBadge from './DisplayNameBadge';\n\nconst useStyles = makeStyles(theme => {\n    return {\n        badgeContainer: {\n            ...withPixelLineHeight(theme.typography.bodyShortRegularLarge),\n            alignItems: 'center',\n            display: 'flex',\n            justifyContent: 'center',\n            marginBottom: theme.spacing(2),\n            transition: 'margin-bottom 0.3s'\n        },\n        containerElevated: {\n            marginBottom: theme.spacing(7)\n        }\n    };\n});\n\n/**\n * Component that renders the dominant speaker's name as a badge above the toolbar in stage view.\n *\n * @returns {ReactElement|null}\n */\nconst DominantSpeakerName = () => {\n    const classes = useStyles();\n    const largeVideoParticipant = useSelector(getLargeVideoParticipant);\n    const nameToDisplay = largeVideoParticipant?.name;\n    const selectedId = largeVideoParticipant?.id;\n\n    const localParticipant = useSelector(getLocalParticipant);\n    const localId = localParticipant?.id;\n\n    const isTileView = useSelector(isLayoutTileView);\n    const toolboxVisible = useSelector(isToolboxVisible);\n\n    if (nameToDisplay && selectedId !== localId && !isTileView) {\n        return (\n            <div\n                className = { `${classes.badgeContainer}${toolboxVisible ? '' : ` ${classes.containerElevated}`}` }>\n                <DisplayNameBadge name = { nameToDisplay } />\n            </div>\n        );\n    }\n\n    return null;\n};\n\nexport default DominantSpeakerName;\n","/* @flow */\nimport Platform from '../react/Platform';\n\nimport { ColorPalette } from './components';\n\ndeclare type StyleSheet = Object;\nexport type StyleType = StyleSheet | Array<StyleSheet>;\n\n/**\n * RegExp pattern for long HEX color format.\n */\nconst HEX_LONG_COLOR_FORMAT\n    = /^#([0-9A-F]{2,2})([0-9A-F]{2,2})([0-9A-F]{2,2})$/i;\n\n/**\n * RegExp pattern for short HEX color format.\n */\nconst HEX_SHORT_COLOR_FORMAT\n    = /^#([0-9A-F]{1,1})([0-9A-F]{1,1})([0-9A-F]{1,1})$/i;\n\n/**\n * RegExp pattern for RGB color format.\n */\nconst RGB_COLOR_FORMAT = /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/i;\n\n/**\n * RegExp pattern for RGBA color format.\n */\nconst RGBA_COLOR_FORMAT\n    = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*([0-9.]+)\\)$/i;\n\n/**\n * The list of the well-known style properties which may not be numbers on Web\n * but must be numbers on React Native.\n *\n * @private\n */\nconst _WELL_KNOWN_NUMBER_PROPERTIES = [ 'height', 'width' ];\n\n/**\n * Function to convert complex StyleType styles into a single flat object,\n * so then they can be deconstructed for further processing.\n *\n * @param {Styletype} st - The complex style type.\n * @returns {Object}\n */\nexport function styleTypeToObject(st: StyleType): Object {\n    if (!st) {\n        return {};\n    }\n\n    if (Array.isArray(st)) {\n        const flatStyle = {};\n\n        for (const styleElement of st) {\n            Object.assign(flatStyle, styleTypeToObject(styleElement));\n        }\n\n        return flatStyle;\n    }\n\n    return st;\n}\n\n/**\n * Combines the given 2 styles into a single one.\n *\n * @param {StyleType} a - An object or array of styles.\n * @param {StyleType} b - An object or array of styles.\n * @private\n * @returns {StyleType} - The merged styles.\n */\nexport function combineStyles(a: StyleType, b: StyleType): StyleType {\n    const result: Array<StyleSheet> = [];\n\n    if (a) {\n        if (Array.isArray(a)) {\n            result.push(...a);\n        } else {\n            result.push(a);\n        }\n    }\n\n    if (b) {\n        if (Array.isArray(b)) {\n            result.push(...b);\n        } else {\n            result.push(b);\n        }\n    }\n\n    return result;\n}\n\n/**\n * Create a style sheet using the provided style definitions.\n *\n * @param {StyleSheet} styles - A dictionary of named style definitions.\n * @param {StyleSheet} [overrides={}] - Optional set of additional (often\n * platform-dependent/specific) style definitions that will override the base\n * (often platform-independent) styles.\n * @returns {StyleSheet}\n */\nexport function createStyleSheet(\n        styles: StyleSheet, overrides: StyleSheet = {}): StyleSheet {\n    const combinedStyles = {};\n\n    for (const k of Object.keys(styles)) {\n        combinedStyles[k]\n            = _shimStyles({\n                ...styles[k],\n                ...overrides[k]\n            });\n    }\n\n    return combinedStyles;\n}\n\n/**\n * Works around a bug in react-native or react-native-webrtc on Android which\n * causes Views overlaying RTCView to be clipped. Even though we (may) display\n * multiple RTCViews, it is enough to apply the fix only to a View with a\n * bounding rectangle containing all RTCviews and their overlaying Views.\n *\n * @param {StyleSheet} styles - An object which represents a stylesheet.\n * @public\n * @returns {StyleSheet}\n */\nexport function fixAndroidViewClipping<T: StyleSheet>(styles: T): T {\n    if (Platform.OS === 'android') {\n        styles.borderColor = ColorPalette.appBackground;\n        styles.borderWidth = 1;\n    }\n\n    return styles;\n}\n\n/**\n * Returns an rgba format of the provided color if it's in hex or rgb format.\n *\n * NOTE: The function will return the same color if it's not in one of those\n * two formats (e.g. 'white').\n *\n * @param {string} color - The string representation of the color in rgb or hex\n * format.\n * @param {number} alpha - The alpha value to apply.\n * @returns {string}\n */\nexport function getRGBAFormat(color: string, alpha: number): string {\n    let match = color.match(HEX_LONG_COLOR_FORMAT);\n\n    if (match) {\n        return `#${match[1]}${match[2]}${match[3]}${_getAlphaInHex(alpha)}`;\n    }\n\n    match = color.match(HEX_SHORT_COLOR_FORMAT);\n    if (match) {\n        return `#${match[1]}${match[1]}${match[2]}${match[2]}${match[3]}${\n            match[3]}${_getAlphaInHex(alpha)}`;\n    }\n\n    match = color.match(RGB_COLOR_FORMAT);\n    if (match) {\n        return `rgba(${match[1]}, ${match[2]}, ${match[3]}, ${alpha})`;\n    }\n\n    return color;\n}\n\n/**\n * Decides if a color is light or dark based on the ITU-R BT.709 and W3C\n * recommendations.\n *\n * NOTE: Please see https://www.w3.org/TR/WCAG20/#relativeluminancedef.\n *\n * @param {string} color - The color in rgb, rgba or hex format.\n * @returns {boolean}\n */\nexport function isDarkColor(color: string): boolean {\n    const rgb = _getRGBObjectFormat(color);\n\n    return ((_getColorLuminance(rgb.r) * 0.2126)\n    + (_getColorLuminance(rgb.g) * 0.7152)\n    + (_getColorLuminance(rgb.b) * 0.0722)) <= 0.179;\n}\n\n/**\n * Converts an [0..1] alpha value into HEX.\n *\n * @param {number} alpha - The alpha value to convert.\n * @returns {string}\n */\nfunction _getAlphaInHex(alpha: number): string {\n    return Number(Math.round(255 * alpha)).toString(16)\n        .padStart(2, '0');\n}\n\n/**\n * Calculated the color luminance component for an individual color channel.\n *\n * NOTE: Please see https://www.w3.org/TR/WCAG20/#relativeluminancedef.\n *\n * @param {number} c - The color which we need the individual luminance\n * for.\n * @returns {number}\n */\nfunction _getColorLuminance(c: number): number {\n    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n}\n\n/**\n * Parses a color string into an object containing the RGB values as numbers.\n *\n * NOTE: Object properties are not alpha-sorted for sanity.\n *\n * @param {string} color - The color to convert.\n * @returns {{\n *     r: number,\n *     g: number,\n *     b: number\n * }}\n */\nfunction _getRGBObjectFormat(color: string): {r: number, g: number, b: number} {\n    let match = color.match(HEX_LONG_COLOR_FORMAT);\n\n    if (match) {\n        return {\n            r: parseInt(match[1], 16) / 255.0,\n            g: parseInt(match[2], 16) / 255.0,\n            b: parseInt(match[3], 16) / 255.0\n        };\n    }\n\n    match = color.match(HEX_SHORT_COLOR_FORMAT);\n    if (match) {\n        return {\n            r: parseInt(`${match[1]}${match[1]}`, 16) / 255.0,\n            g: parseInt(`${match[2]}${match[2]}`, 16) / 255.0,\n            b: parseInt(`${match[3]}${match[3]}`, 16) / 255.0\n        };\n    }\n\n    match = color.match(RGB_COLOR_FORMAT) || color.match(RGBA_COLOR_FORMAT);\n    if (match) {\n        return {\n            r: parseInt(match[1], 10) / 255.0,\n            g: parseInt(match[2], 10) / 255.0,\n            b: parseInt(match[3], 10) / 255.0\n        };\n    }\n\n    return {\n        r: 0,\n        g: 0,\n        b: 0\n    };\n}\n\n/**\n * Shims style properties to work correctly on native. Allows us to minimize the\n * number of style declarations that need to be set or overridden for specific\n * platforms.\n *\n * @param {StyleSheet} styles - An object which represents a stylesheet.\n * @private\n * @returns {StyleSheet}\n */\nfunction _shimStyles<T: StyleSheet>(styles: T): T {\n    // Certain style properties may not be numbers on Web but must be numbers on\n    // React Native. For example, height and width may be expressed in percent\n    // on Web but React Native will not understand them and we will get errors\n    // (at least during development). Convert such well-known properties to\n    // numbers if possible; otherwise, remove them to avoid runtime errors.\n    for (const k of _WELL_KNOWN_NUMBER_PROPERTIES) {\n        const v = styles[k];\n        const typeofV = typeof v;\n\n        if (typeofV !== 'undefined' && typeofV !== 'number') {\n            const numberV = Number(v);\n\n            if (Number.isNaN(numberV)) {\n                delete styles[k];\n            } else {\n                styles[k] = numberV;\n            }\n        }\n    }\n\n    return styles;\n}\n","// @flow\n\nimport { type StyleType } from './functions.any';\n\nexport * from './functions.any';\n\n/**\n * Fixes the style prop that is passed to a platform generic component based on platform specific\n * format requirements.\n *\n * @param {StyleType} style - The passed style prop to the component.\n * @returns {StyleType}\n */\nexport function getFixedPlatformStyle(style: StyleType): StyleType {\n    if (Array.isArray(style)) {\n        const _style = {};\n\n        for (const component of style) {\n            Object.assign(_style, component);\n        }\n\n        return _style;\n    }\n\n    return style;\n}\n\n/**\n * Sets the line height of a CSS Object group in pixels.\n * By default lineHeight is unitless in CSS, but not in RN.\n *\n * @param {Object} base - The base object containing the `lineHeight` property.\n * @returns {Object}\n */\nexport function withPixelLineHeight(base: Object): Object {\n    return {\n        ...base,\n        lineHeight: `${base.lineHeight}px`\n    };\n}\n","// @flow\n\nimport { FieldTextStateless as TextField } from '@atlaskit/field-text';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { setPassword } from '../../base/conference';\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { _cancelPasswordRequiredPrompt } from '../actions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link PasswordRequiredPrompt}.\n */\ntype Props = {\n\n    /**\n     * The JitsiConference which requires a password.\n     */\n    conference: Object,\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link PasswordRequiredPrompt}.\n */\ntype State = {\n\n    /**\n     * The password entered by the local participant.\n     */\n    password: string\n}\n\n/**\n * Implements a React Component which prompts the user when a password is\n * required to join a conference.\n */\nclass PasswordRequiredPrompt extends Component<Props, State> {\n    state = {\n        password: ''\n    };\n\n    /**\n     * Initializes a new PasswordRequiredPrompt instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onPasswordChanged = this._onPasswordChanged.bind(this);\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                disableBlanketClickDismiss = { true }\n                isModal = { false }\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.passwordRequired'\n                width = 'small'>\n                { this._renderBody() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Display component in dialog body.\n     *\n     * @returns {ReactElement}\n     * @protected\n     */\n    _renderBody() {\n        return (\n            <div>\n                <TextField\n                    autoFocus = { true }\n                    compact = { true }\n                    label = { this.props.t('dialog.passwordLabel') }\n                    name = 'lockKey'\n                    onChange = { this._onPasswordChanged }\n                    shouldFitContainer = { true }\n                    type = 'password'\n                    value = { this.state.password } />\n            </div>\n        );\n    }\n\n    _onPasswordChanged: ({ target: { value: * }}) => void;\n\n    /**\n     * Notifies this dialog that password has changed.\n     *\n     * @param {Object} event - The details of the notification/event.\n     * @private\n     * @returns {void}\n     */\n    _onPasswordChanged({ target: { value } }) {\n        this.setState({\n            password: value\n        });\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Dispatches action to cancel and dismiss this dialog.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onCancel() {\n\n        this.props.dispatch(\n            _cancelPasswordRequiredPrompt(this.props.conference));\n\n        return true;\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Dispatches action to submit value from this dialog.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onSubmit() {\n        const { conference } = this.props;\n\n        // We received that password is required, but user is trying anyway to\n        // login without a password. Mark the room as not locked in case she\n        // succeeds (maybe someone removed the password meanwhile). If it is\n        // still locked, another password required will be received and the room\n        // again will be marked as locked.\n        this.props.dispatch(\n            setPassword(conference, conference.join, this.state.password));\n\n        // We have used the password so let's clean it.\n        this.setState({\n            password: undefined\n        });\n\n        return true;\n    }\n}\n\nexport default translate(connect()(PasswordRequiredPrompt));\n","export default 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\n  return obj;\n}","/**\n * An enumeration of the different display layouts supported by the application.\n *\n * @type {Object}\n */\nexport const LAYOUTS = {\n    HORIZONTAL_FILMSTRIP_VIEW: 'horizontal-filmstrip-view',\n    TILE_VIEW: 'tile-view',\n    VERTICAL_FILMSTRIP_VIEW: 'vertical-filmstrip-view'\n};\n","import { TaskQueue } from './TaskQueue';\n\n/**\n * Create deferred object.\n *\n * @returns {{promise, resolve, reject}}\n */\nexport function createDeferred() {\n    const deferred = {};\n\n    deferred.promise = new Promise((resolve, reject) => {\n        deferred.resolve = resolve;\n        deferred.reject = reject;\n    });\n\n    return deferred;\n}\n\n/**\n * Returns an instance of {@link TaskQueue}.\n *\n * @returns {Object}\n */\nexport function createTaskQueue() {\n    return new TaskQueue();\n}\n","/**\n * The type of (redux) action which signals that sip GW service change its\n * availability status.\n *\n * {\n *     type: SIP_GW_AVAILABILITY_CHANGED,\n *     status: string\n * }\n */\nexport const SIP_GW_AVAILABILITY_CHANGED\n    = 'SIP_GW_AVAILABILITY_CHANGED';\n\n/**\n * The type of the action which signals to invite room participants to the\n * conference through the SIP Jibri service.\n *\n * {\n *     type: SIP_GW_INVITE_ROOMS,\n *     conference: JitsiConference,\n *     rooms: {Immutable.List}\n * }\n */\nexport const SIP_GW_INVITE_ROOMS = 'SIP_GW_INVITE_ROOMS';\n","/* global APP */\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport Logger from 'jitsi-meet-logger';\n\nimport {\n    ACTION_SHORTCUT_PRESSED as PRESSED,\n    ACTION_SHORTCUT_RELEASED as RELEASED,\n    createShortcutEvent,\n    sendAnalytics\n} from '../../react/features/analytics';\nimport { toggleDialog } from '../../react/features/base/dialog';\nimport { clickOnVideo } from '../../react/features/filmstrip/actions';\nimport { KeyboardShortcutsDialog }\n    from '../../react/features/keyboard-shortcuts';\nimport { SpeakerStats } from '../../react/features/speaker-stats';\n\nconst logger = Logger.getLogger(__filename);\n\n/**\n * Map of shortcuts. When a shortcut is registered it enters the mapping.\n * @type {Map}\n */\nconst _shortcuts = new Map();\n\n/**\n * Map of registered keyboard keys and translation keys describing the\n * action performed by the key.\n * @type {Map}\n */\nconst _shortcutsHelp = new Map();\n\n/**\n * The key used to save in local storage if keyboard shortcuts are enabled.\n */\nconst _enableShortcutsKey = 'enableShortcuts';\n\n/**\n * Prefer keyboard handling of these elements over global shortcuts.\n * If a button is triggered using the Spacebar it should not trigger PTT.\n * If an input element is focused and M is pressed it should not mute audio.\n */\nconst _elementsBlacklist = [\n    'input',\n    'textarea',\n    'button',\n    '[role=button]',\n    '[role=menuitem]',\n    '[role=radio]',\n    '[role=tab]',\n    '[role=option]',\n    '[role=switch]',\n    '[role=range]',\n    '[role=log]'\n];\n\n/**\n * An element selector for elements that have their own keyboard handling.\n */\nconst _focusedElementsSelector = `:focus:is(${_elementsBlacklist.join(',')})`;\n\n/**\n * Maps keycode to character, id of popover for given function and function.\n */\nconst KeyboardShortcut = {\n\n    init() {\n        this._initGlobalShortcuts();\n\n        window.onkeyup = e => {\n            if (!this.getEnabled()) {\n                return;\n            }\n            const key = this._getKeyboardKey(e).toUpperCase();\n            const num = parseInt(key, 10);\n\n            if (!document.querySelector(_focusedElementsSelector)) {\n                if (_shortcuts.has(key)) {\n                    _shortcuts.get(key).function(e);\n                } else if (!isNaN(num) && num >= 0 && num <= 9) {\n                    APP.store.dispatch(clickOnVideo(num));\n                }\n            }\n        };\n\n        window.onkeydown = e => {\n            if (!this.getEnabled()) {\n                return;\n            }\n            const focusedElement = document.querySelector(_focusedElementsSelector);\n\n            if (!focusedElement) {\n                if (this._getKeyboardKey(e).toUpperCase() === ' ') {\n                    if (APP.conference.isLocalAudioMuted()) {\n                        sendAnalytics(createShortcutEvent(\n                            'push.to.talk',\n                            PRESSED));\n                        logger.log('Talk shortcut pressed');\n                        APP.conference.muteAudio(false);\n                    }\n                }\n            } else if (this._getKeyboardKey(e).toUpperCase() === 'ESCAPE') {\n                // Allow to remove focus from selected elements using ESC key.\n                if (focusedElement && focusedElement.blur) {\n                    focusedElement.blur();\n                }\n            }\n        };\n    },\n\n    /**\n     * Enables/Disables the keyboard shortcuts.\n     * @param {boolean} value - the new value.\n     */\n    enable(value) {\n        jitsiLocalStorage.setItem(_enableShortcutsKey, value);\n    },\n\n    getEnabled() {\n        // Should be enabled if not explicitly set to false\n        // eslint-disable-next-line no-unneeded-ternary\n        return jitsiLocalStorage.getItem(_enableShortcutsKey) === 'false' ? false : true;\n    },\n\n    /**\n     * Opens the {@KeyboardShortcutsDialog} dialog.\n     *\n     * @returns {void}\n     */\n    openDialog() {\n        APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {\n            shortcutDescriptions: _shortcutsHelp\n        }));\n    },\n\n    /**\n     * Registers a new shortcut.\n     *\n     * @param shortcutChar the shortcut character triggering the action\n     * @param shortcutAttr the \"shortcut\" html element attribute mapping an\n     * element to this shortcut and used to show the shortcut character on the\n     * element tooltip\n     * @param exec the function to be executed when the shortcut is pressed\n     * @param helpDescription the description of the shortcut that would appear\n     * in the help menu\n     * @param altKey whether or not the alt key must be pressed.\n     */\n    registerShortcut(// eslint-disable-line max-params\n            shortcutChar,\n            shortcutAttr,\n            exec,\n            helpDescription,\n            altKey = false) {\n        _shortcuts.set(altKey ? `:${shortcutChar}` : shortcutChar, {\n            character: shortcutChar,\n            function: exec,\n            shortcutAttr,\n            altKey\n        });\n\n        if (helpDescription) {\n            this._addShortcutToHelp(altKey ? `:${shortcutChar}` : shortcutChar, helpDescription);\n        }\n    },\n\n    /**\n     * Unregisters a shortcut.\n     *\n     * @param shortcutChar unregisters the given shortcut, which means it will\n     * no longer be usable\n     * @param altKey whether or not shortcut is combo with alt key\n     */\n    unregisterShortcut(shortcutChar, altKey = false) {\n        _shortcuts.delete(altKey ? `:${shortcutChar}` : shortcutChar);\n        _shortcutsHelp.delete(shortcutChar);\n    },\n\n    /**\n     * @param e a KeyboardEvent\n     * @returns {string} e.key or something close if not supported\n     */\n    _getKeyboardKey(e) {\n        // If alt is pressed a different char can be returned so this takes\n        // the char from the code. It also prefixes with a colon to differentiate\n        // alt combo from simple keypress.\n        if (e.altKey) {\n            const key = e.code.replace('Key', '');\n\n            return `:${key}`;\n        }\n\n        // If e.key is a string, then it is assumed it already plainly states\n        // the key pressed. This may not be true in all cases, such as with Edge\n        // and \"?\", when the browser cannot properly map a key press event to a\n        // keyboard key. To be safe, when a key is \"Unidentified\" it must be\n        // further analyzed by jitsi to a key using e.which.\n        if (typeof e.key === 'string' && e.key !== 'Unidentified') {\n            return e.key;\n        }\n        if (e.type === 'keypress'\n                && ((e.which >= 32 && e.which <= 126)\n                    || (e.which >= 160 && e.which <= 255))) {\n            return String.fromCharCode(e.which);\n        }\n\n        // try to fallback (0-9A-Za-z and QWERTY keyboard)\n        switch (e.which) {\n        case 27:\n            return 'Escape';\n        case 191:\n            return e.shiftKey ? '?' : '/';\n        }\n        if (e.shiftKey || e.type === 'keypress') {\n            return String.fromCharCode(e.which);\n        }\n\n        return String.fromCharCode(e.which).toLowerCase();\n\n    },\n\n    /**\n     * Adds the given shortcut to the help dialog.\n     *\n     * @param shortcutChar the shortcut character\n     * @param shortcutDescriptionKey the description of the shortcut\n     * @private\n     */\n    _addShortcutToHelp(shortcutChar, shortcutDescriptionKey) {\n        _shortcutsHelp.set(shortcutChar, shortcutDescriptionKey);\n    },\n\n    /**\n     * Initialise global shortcuts.\n     * Global shortcuts are shortcuts for features that don't have a button or\n     * link associated with the action. In other words they represent actions\n     * triggered _only_ with a shortcut.\n     */\n    _initGlobalShortcuts() {\n        this.registerShortcut('?', null, () => {\n            sendAnalytics(createShortcutEvent('help'));\n            this.openDialog();\n        }, 'keyboardShortcuts.toggleShortcuts');\n\n        // register SPACE shortcut in two steps to insure visibility of help\n        // message\n        this.registerShortcut(' ', null, () => {\n            sendAnalytics(createShortcutEvent('push.to.talk', RELEASED));\n            logger.log('Talk shortcut released');\n            APP.conference.muteAudio(true);\n        });\n        this._addShortcutToHelp('SPACE', 'keyboardShortcuts.pushToTalk');\n\n        this.registerShortcut('T', null, () => {\n            sendAnalytics(createShortcutEvent('speaker.stats'));\n            APP.store.dispatch(toggleDialog(SpeakerStats, {\n                conference: APP.conference\n            }));\n        }, 'keyboardShortcuts.showSpeakerStats');\n\n        /**\n         * FIXME: Currently focus keys are directly implemented below in\n         * onkeyup. They should be moved to the SmallVideo instead.\n         */\n        this._addShortcutToHelp('0', 'keyboardShortcuts.focusLocal');\n        this._addShortcutToHelp('1-9', 'keyboardShortcuts.focusRemote');\n    }\n};\n\nexport default KeyboardShortcut;\n","// @flow\n\nimport _ from 'lodash';\n\nimport {\n    JitsiConnectionQualityEvents,\n    JitsiE2ePingEvents\n} from '../base/lib-jitsi-meet';\n\n/**\n * Contains all the callbacks to be notified when stats are updated.\n *\n * {\n *     userId: Function[]\n * }\n */\nconst subscribers = {};\n\n/**\n * A singleton that acts as a pub/sub service for connection stat updates.\n */\nconst statsEmitter = {\n    /**\n     * Have {@code statsEmitter} subscribe to stat updates from a given\n     * conference.\n     *\n     * @param {JitsiConference} conference - The conference for which\n     * {@code statsEmitter} should subscribe for stat updates.\n     * @returns {void}\n     */\n    startListeningForStats(conference: Object) {\n        conference.on(JitsiConnectionQualityEvents.LOCAL_STATS_UPDATED,\n            stats => this._onStatsUpdated(conference.myUserId(), stats));\n\n        conference.on(JitsiConnectionQualityEvents.REMOTE_STATS_UPDATED,\n            (id, stats) => this._emitStatsUpdate(id, stats));\n\n        conference.on(\n            JitsiE2ePingEvents.E2E_RTT_CHANGED,\n            (participant, e2eRtt) => {\n                const stats = {\n                    e2eRtt,\n                    region: participant.getProperty('region')\n                };\n\n                this._emitStatsUpdate(participant.getId(), stats);\n            });\n    },\n\n    /**\n     * Add a subscriber to be notified when stats are updated for a specified\n     * user id.\n     *\n     * @param {string} id - The user id whose stats updates are of interest.\n     * @param {Function} callback - The function to invoke when stats for the\n     * user have been updated.\n     * @returns {void}\n     */\n    subscribeToClientStats(id: ?string, callback: Function) {\n        if (!id) {\n            return;\n        }\n\n        if (!subscribers[id]) {\n            subscribers[id] = [];\n        }\n\n        subscribers[id].push(callback);\n    },\n\n    /**\n     * Remove a subscriber that is listening for stats updates for a specified\n     * user id.\n     *\n     * @param {string} id - The user id whose stats updates are no longer of\n     * interest.\n     * @param {Function} callback - The function that is currently subscribed to\n     * stat updates for the specified user id.\n     * @returns {void}\n     */\n    unsubscribeToClientStats(id: string, callback: Function) {\n        if (!subscribers[id]) {\n            return;\n        }\n\n        const filteredSubscribers = subscribers[id].filter(\n            subscriber => subscriber !== callback);\n\n        if (filteredSubscribers.length) {\n            subscribers[id] = filteredSubscribers;\n        } else {\n            delete subscribers[id];\n        }\n    },\n\n    /**\n     * Emit a stat update to all those listening for a specific user's\n     * connection stats.\n     *\n     * @param {string} id - The user id the stats are associated with.\n     * @param {Object} stats - New connection stats for the user.\n     * @returns {void}\n     */\n    _emitStatsUpdate(id: string, stats: Object = {}) {\n        const callbacks = subscribers[id] || [];\n\n        callbacks.forEach(callback => {\n            callback(stats);\n        });\n    },\n\n    /**\n     * Emit a stat update to all those listening for local stat updates. Will\n     * also update listeners of remote user stats of changes related to their\n     * stats.\n     *\n     * @param {string} localUserId - The user id for the local user.\n     * @param {Object} stats - Connection stats for the local user as provided\n     * by the library.\n     * @returns {void}\n     */\n    _onStatsUpdated(localUserId: string, stats: Object) {\n        const allUserFramerates = stats.framerate || {};\n        const allUserResolutions = stats.resolution || {};\n        const allUserCodecs = stats.codec || {};\n\n        // FIXME resolution and framerate are maps keyed off of user ids with\n        // stat values. Receivers of stats expect resolution and framerate to\n        // be primitives, not maps, so here we override the 'lib-jitsi-meet'\n        // stats objects.\n        const modifiedLocalStats = Object.assign({}, stats, {\n            framerate: allUserFramerates[localUserId],\n            resolution: allUserResolutions[localUserId],\n            codec: allUserCodecs[localUserId]\n        });\n\n        this._emitStatsUpdate(localUserId, modifiedLocalStats);\n\n        // Get all the unique user ids from the framerate and resolution stats\n        // and update remote user stats as needed.\n        const framerateUserIds = Object.keys(allUserFramerates);\n        const resolutionUserIds = Object.keys(allUserResolutions);\n        const codecUserIds = Object.keys(allUserCodecs);\n\n        _.union(framerateUserIds, resolutionUserIds, codecUserIds)\n            .filter(id => id !== localUserId)\n            .forEach(id => {\n                const remoteUserStats = {};\n\n                const framerate = allUserFramerates[id];\n\n                if (framerate) {\n                    remoteUserStats.framerate = framerate;\n                }\n\n                const resolution = allUserResolutions[id];\n\n                if (resolution) {\n                    remoteUserStats.resolution = resolution;\n                }\n\n                const codec = allUserCodecs[id];\n\n                if (codec) {\n                    remoteUserStats.codec = codec;\n                }\n\n                this._emitStatsUpdate(id, remoteUserStats);\n            });\n    }\n};\n\nexport default statsEmitter;\n","export * from './components';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Watermarks } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { setColorAlpha } from '../../base/util';\nimport { fetchCustomBrandingData } from '../../dynamic-branding';\nimport { SharedVideo } from '../../shared-video/components/web';\nimport { Captions } from '../../subtitles/';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * The alpha(opacity) of the background\n     */\n    _backgroundAlpha: number,\n\n    /**\n     * The user selected background color.\n     */\n     _customBackgroundColor: string,\n\n    /**\n     * The user selected background image url.\n     */\n     _customBackgroundImageUrl: string,\n\n    /**\n     * Fetches the branding data.\n     */\n    _fetchCustomBrandingData: Function,\n\n    /**\n     * Prop that indicates whether the chat is open.\n     */\n    _isChatOpen: boolean,\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    _noAutoPlayVideo: boolean\n}\n\n/**\n * Implements a React {@link Component} which represents the large video (a.k.a.\n * the conference participant who is on the local stage) on Web/React.\n *\n * @extends Component\n */\nclass LargeVideo extends Component<Props> {\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props._fetchCustomBrandingData();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Element}\n     */\n    render() {\n        const {\n            _isChatOpen,\n            _noAutoPlayVideo\n        } = this.props;\n        const style = this._getCustomSyles();\n        const className = `videocontainer${_isChatOpen ? ' shift-right' : ''}`;\n\n        return (\n            <div\n                className = { className }\n                id = 'largeVideoContainer'\n                style = { style }>\n                <SharedVideo />\n                <div id = 'etherpad' />\n\n                <Watermarks />\n\n                <div id = 'dominantSpeaker'>\n                    <div className = 'dynamic-shadow' />\n                    <div id = 'dominantSpeakerAvatarContainer' />\n                </div>\n                <div id = 'remotePresenceMessage' />\n                <span id = 'remoteConnectionMessage' />\n                <div id = 'largeVideoElementsContainer'>\n                    <div id = 'largeVideoBackgroundContainer' />\n\n                    {/*\n                      * FIXME: the architecture of elements related to the large\n                      * video and the naming. The background is not part of\n                      * largeVideoWrapper because we are controlling the size of\n                      * the video through largeVideoWrapper. That's why we need\n                      * another container for the background and the\n                      * largeVideoWrapper in order to hide/show them.\n                      */}\n                    <div\n                        id = 'largeVideoWrapper'\n                        role = 'figure' >\n                        <video\n                            autoPlay = { !_noAutoPlayVideo }\n                            id = 'largeVideo'\n                            muted = { true }\n                            playsInline = { true } /* for Safari on iOS to work */ />\n                    </div>\n                </div>\n                { interfaceConfig.DISABLE_TRANSCRIPTION_SUBTITLES\n                    || <Captions /> }\n            </div>\n        );\n    }\n\n    /**\n     * Creates the custom styles object.\n     *\n     * @private\n     * @returns {Object}\n     */\n    _getCustomSyles() {\n        const styles = {};\n        const { _customBackgroundColor, _customBackgroundImageUrl } = this.props;\n\n        styles.backgroundColor = _customBackgroundColor || interfaceConfig.DEFAULT_BACKGROUND;\n\n        if (this.props._backgroundAlpha !== undefined) {\n            const alphaColor = setColorAlpha(styles.backgroundColor, this.props._backgroundAlpha);\n\n            styles.backgroundColor = alphaColor;\n        }\n\n        if (_customBackgroundImageUrl) {\n            styles.backgroundImage = `url(${_customBackgroundImageUrl})`;\n            styles.backgroundSize = 'cover';\n        }\n\n        return styles;\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated LargeVideo props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const testingConfig = state['features/base/config'].testing;\n    const { backgroundColor, backgroundImageUrl } = state['features/dynamic-branding'];\n    const { isOpen: isChatOpen } = state['features/chat'];\n\n    return {\n        _backgroundAlpha: state['features/base/config'].backgroundAlpha,\n        _customBackgroundColor: backgroundColor,\n        _customBackgroundImageUrl: backgroundImageUrl,\n        _isChatOpen: isChatOpen,\n        _noAutoPlayVideo: testingConfig?.noAutoPlayVideo\n    };\n}\n\nconst _mapDispatchToProps = {\n    _fetchCustomBrandingData: fetchCustomBrandingData\n};\n\nexport default connect(_mapStateToProps, _mapDispatchToProps)(LargeVideo);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../base/redux';\nimport { shouldDisplayTileView } from '../../video-layout';\n\n/**\n * Constants to describe the dimensions of the video. Landscape videos\n * are wider than they are taller and portrait videos are taller than they\n * are wider. The dimensions will determine how {@code LargeVideoBackground}\n * will stretch to fill its container.\n *\n * @type {Object}\n */\nexport const ORIENTATION = {\n    LANDSCAPE: 'landscape',\n    PORTRAIT: 'portrait'\n};\n\n/**\n * The type of the React {@code Component} props of\n * {@link LargeVideoBackgroundCanvas}.\n */\ntype Props = {\n\n   /**\n     * Whether or not the layout should change to support tile view mode.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _shouldDisplayTileView: boolean,\n\n    /**\n     * Additional CSS class names to add to the root of the component.\n     */\n    className: String,\n\n    /**\n     * Whether or not the background should have its visibility hidden.\n     */\n    hidden: boolean,\n\n    /**\n     * Whether or not the video should display flipped horizontally, so left\n     * becomes right and right becomes left.\n     */\n    mirror: boolean,\n\n    /**\n     * Whether the component should ensure full width of the video is displayed\n     * (landscape) or full height (portrait).\n     */\n    orientationFit: string,\n\n    /**\n     * The video stream to display.\n     */\n    videoElement: Object\n};\n\n\n/**\n * Implements a React Component which shows a video element intended to be used\n * as a background to fill the empty space of container with another video.\n *\n * @extends Component\n */\nexport class LargeVideoBackground extends Component<Props> {\n    _canvasEl: Object;\n\n    _updateCanvasInterval: *;\n\n    /**\n     * Initializes new {@code LargeVideoBackground} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._setCanvasEl = this._setCanvasEl.bind(this);\n        this._updateCanvas = this._updateCanvas.bind(this);\n    }\n\n    /**\n     * If the canvas is not hidden, sets the initial interval to update the\n     * image displayed in the canvas.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const { _shouldDisplayTileView, hidden, videoElement } = this.props;\n\n        if (videoElement && !hidden && !_shouldDisplayTileView) {\n            this._updateCanvas();\n            this._setUpdateCanvasInterval();\n        }\n    }\n\n    /**\n     * Starts or stops the interval to update the image displayed in the canvas.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        const wasCanvasUpdating = !prevProps.hidden && !prevProps._shouldDisplayTileView && prevProps.videoElement;\n        const shouldCanvasUpdating\n            = !this.props.hidden && !this.props._shouldDisplayTileView && this.props.videoElement;\n\n        if (wasCanvasUpdating !== shouldCanvasUpdating) {\n            if (shouldCanvasUpdating) {\n                this._clearCanvas();\n                this._setUpdateCanvasInterval();\n            } else {\n                this._clearCanvas();\n                this._clearUpdateCanvasInterval();\n            }\n        }\n    }\n\n    /**\n     * Clears the interval for updating the image displayed in the canvas.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._clearUpdateCanvasInterval();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            hidden,\n            mirror\n        } = this.props;\n        const classNames = `large-video-background ${mirror ? 'flip-x' : ''} ${hidden ? 'invisible' : ''}`;\n\n        return (\n            <div className = { classNames }>\n                <canvas\n                    id = 'largeVideoBackground'\n                    ref = { this._setCanvasEl } />\n            </div>\n        );\n    }\n\n    /**\n     * Removes any image displayed on the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearCanvas() {\n        const cavnasContext = this._canvasEl.getContext('2d');\n\n        cavnasContext.clearRect(\n            0, 0, this._canvasEl.width, this._canvasEl.height);\n    }\n\n    /**\n     * Clears the interval for updating the image displayed in the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearUpdateCanvasInterval() {\n        clearInterval(this._updateCanvasInterval);\n    }\n\n    _setCanvasEl: () => void;\n\n    /**\n     * Sets the instance variable for the component's canvas element so it can\n     * be accessed directly for drawing on.\n     *\n     * @param {Object} element - The DOM element for the component's canvas.\n     * @private\n     * @returns {void}\n     */\n    _setCanvasEl(element) {\n        this._canvasEl = element;\n    }\n\n    /**\n     * Starts the interval for updating the image displayed in the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _setUpdateCanvasInterval() {\n        this._clearUpdateCanvasInterval();\n        this._updateCanvasInterval = setInterval(this._updateCanvas, 200);\n    }\n\n    _updateCanvas: () => void;\n\n    /**\n     * Draws the current frame of the passed in video element onto the canvas.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateCanvas() {\n        // On Electron 7 there is a memory leak if we try to draw into a hidden canvas that is part of the DOM tree.\n        // See: https://github.com/electron/electron/issues/22417\n        // Trying to detect all the cases when the page will be hidden because of something not in our control\n        // (for example when the page is loaded in an iframe which is hidden due to the host page styles) to solve\n        // the memory leak. Currently we are not handling the use case when the page is hidden with visibility:hidden\n        // because we don't have a good way to do it.\n        // All other cases when the canvas is not visible are handled through the component props\n        // (hidden, _shouldDisplayTileView).\n        if (!this._canvasEl || this._canvasEl.offsetParent === null\n                || window.innerHeight === 0 || window.innerWidth === 0) {\n            return;\n        }\n\n        const { videoElement } = this.props;\n        const { videoWidth, videoHeight } = videoElement;\n        const {\n            height: canvasHeight,\n            width: canvasWidth\n        } = this._canvasEl;\n        const cavnasContext = this._canvasEl.getContext('2d');\n\n        if (this.props.orientationFit === ORIENTATION.LANDSCAPE) {\n            const heightScaledToFit = (canvasWidth / videoWidth) * videoHeight;\n\n            cavnasContext.drawImage(\n                videoElement, 0, 0, canvasWidth, heightScaledToFit);\n        } else {\n            const widthScaledToFit = (canvasHeight / videoHeight) * videoWidth;\n\n            cavnasContext.drawImage(\n                videoElement, 0, 0, widthScaledToFit, canvasHeight);\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated LargeVideoBackground props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _shouldDisplayTileView: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _shouldDisplayTileView: shouldDisplayTileView(state)\n    };\n}\n\n\nexport default connect(_mapStateToProps)(LargeVideoBackground);\n\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n","// @flow\n\nimport clipboardCopy from 'clipboard-copy';\n\n/**\n * A helper function that behaves similar to Object.assign, but only reassigns a\n * property in target if it's defined in source.\n *\n * @param {Object} target - The target object to assign the values into.\n * @param {Object} source - The source object.\n * @returns {Object}\n */\nexport function assignIfDefined(target: Object, source: Object) {\n    const to = Object(target);\n\n    for (const nextKey in source) {\n        if (source.hasOwnProperty(nextKey)) {\n            const value = source[nextKey];\n\n            if (typeof value !== 'undefined') {\n                to[nextKey] = value;\n            }\n        }\n    }\n\n    return to;\n}\n\n/**\n * Tries to copy a given text to the clipboard.\n * Returns true if the action succeeds.\n *\n * @param {string} textToCopy - Text to be copied.\n * @returns {Promise<boolean>}\n */\nexport async function copyText(textToCopy: string) {\n    try {\n        await clipboardCopy(textToCopy);\n\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n/**\n * Creates a deferred object.\n *\n * @returns {{promise, resolve, reject}}\n */\nexport function createDeferred(): Object {\n    const deferred = {};\n\n    deferred.promise = new Promise((resolve, reject) => {\n        deferred.resolve = resolve;\n        deferred.reject = reject;\n    });\n\n    return deferred;\n}\n\nconst MATCH_OPERATOR_REGEXP = /[|\\\\{}()[\\]^$+*?.-]/g;\n\n/**\n * Escape RegExp special characters.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp.\n *\n * @param {string} s - The regexp string to escape.\n * @returns {string}\n */\nexport function escapeRegexp(s: string) {\n    if (typeof s !== 'string') {\n        throw new TypeError('Expected a string');\n    }\n\n    return s.replace(MATCH_OPERATOR_REGEXP, '\\\\$&');\n}\n\n/**\n * Returns the base URL of the app.\n *\n * @param {Object} w - Window object to use instead of the built in one.\n * @returns {string}\n */\nexport function getBaseUrl(w: Object = window) {\n    const doc = w.document;\n    const base = doc.querySelector('base');\n\n    if (base && base.href) {\n        return base.href;\n    }\n\n    const { protocol, host } = w.location;\n\n    return `${protocol}//${host}`;\n}\n\n/**\n * Returns the namespace for all global variables, functions, etc that we need.\n *\n * @returns {Object} The namespace.\n *\n * NOTE: After React-ifying everything this should be the only global.\n */\nexport function getJitsiMeetGlobalNS() {\n    if (!window.JitsiMeetJS) {\n        window.JitsiMeetJS = {};\n    }\n\n    if (!window.JitsiMeetJS.app) {\n        window.JitsiMeetJS.app = {};\n    }\n\n    return window.JitsiMeetJS.app;\n}\n\n/**\n * Prints the error and reports it to the global error handler.\n *\n * @param {Error} e - The error object.\n * @param {string} msg - A custom message to print in addition to the error.\n * @returns {void}\n */\nexport function reportError(e: Object, msg: string = '') {\n    console.error(msg, e);\n    window.onerror && window.onerror(msg, null, null, null, e);\n}\n\n/**\n * Adds alpha to a color css string.\n *\n * @param {string} color - The color string either in rgb... Or #... Format.\n * @param {number} opacity -The opacity(alpha) to apply to the color. Can take a value between 0 and 1, including.\n * @returns {string} - The color with applied alpha.\n */\nexport function setColorAlpha(color: string, opacity: number) {\n    if (!color) {\n        return `rgba(0, 0, 0, ${opacity})`;\n    }\n\n    let b, g, r;\n\n    try {\n        if (color.startsWith('rgb')) {\n            [ r, g, b ] = color.split('(')[1].split(')')[0].split(',').map(c => c.trim());\n        } else if (color.startsWith('#')) {\n            if (color.length === 4) {\n                [ r, g, b ] = parseShorthandColor(color);\n            } else {\n                r = parseInt(color.substring(1, 3), 16);\n                g = parseInt(color.substring(3, 5), 16);\n                b = parseInt(color.substring(5, 7), 16);\n            }\n        } else {\n            return color;\n        }\n\n        return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n    } catch {\n        return color;\n    }\n}\n\n/**\n * Gets the hexa rgb values for a shorthand css color.\n *\n * @param {string} color -\n * @returns {Array<number>} - Array containing parsed r, g, b values of the color.\n */\nfunction parseShorthandColor(color) {\n    let b, g, r;\n\n    r = color.substring(1, 2);\n    r += r;\n    r = parseInt(r, 16);\n\n    g = color.substring(2, 3);\n    g += g;\n    g = parseInt(g, 16);\n\n    b = color.substring(3, 4);\n    b += b;\n    b = parseInt(b, 16);\n\n    return [ r, g, b ];\n}\n","// @flow\n\n/**\n * The type of (redux) action to add known domains to the list of domains known\n * to the feature base/known-domains.\n *\n * {\n *     type: ADD_KNOWN_DOMAINS,\n *     knownDomains: Array<string>\n * }\n */\nexport const ADD_KNOWN_DOMAINS = 'ADD_KNOWN_DOMAINS';\n","/**\n * The type of Redux action which updates the feature flags.\n *\n * {\n *     type: UPDATE_FLAGS,\n *     flags: Object\n * }\n *\n */\nexport const UPDATE_FLAGS = 'UPDATE_FLAGS';\n","/* @flow */\n\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link Video}.\n */\ntype Props = {\n\n    /**\n     * CSS classes to add to the video element.\n     */\n    className: string,\n\n    /**\n     * The value of the id attribute of the video. Used by the torture tests to\n     * locate video elements.\n     */\n    id: string,\n\n    /**\n     * Optional callback to invoke once the video starts playing.\n     */\n    onVideoPlaying?: Function,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    videoTrack: ?Object,\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    autoPlay: boolean,\n\n    /**\n     * Used to determine the value of the autoplay attribute of the underlying\n     * video element.\n     */\n    playsinline: boolean,\n\n    /**\n     * A map of the event handlers for the video HTML element.\n     */\n    eventHandlers?: {|\n\n        /**\n         * onAbort event handler.\n         */\n        onAbort?: ?Function,\n\n        /**\n         * onCanPlay event handler.\n         */\n        onCanPlay?: ?Function,\n\n        /**\n         * onCanPlayThrough event handler.\n         */\n        onCanPlayThrough?: ?Function,\n\n        /**\n         * onEmptied event handler.\n         */\n        onEmptied?: ?Function,\n\n        /**\n         * onEnded event handler.\n         */\n        onEnded?: ?Function,\n\n        /**\n         * onError event handler.\n         */\n        onError?: ?Function,\n\n        /**\n         * onLoadedData event handler.\n         */\n        onLoadedData?: ?Function,\n\n        /**\n         * onLoadedMetadata event handler.\n         */\n        onLoadedMetadata?: ?Function,\n\n        /**\n         * onLoadStart event handler.\n         */\n        onLoadStart?: ?Function,\n\n        /**\n         * onPause event handler.\n         */\n        onPause?: ?Function,\n\n        /**\n         * onPlay event handler.\n         */\n        onPlay?: ?Function,\n\n        /**\n         * onPlaying event handler.\n         */\n        onPlaying?: ?Function,\n\n        /**\n         * onRateChange event handler.\n         */\n        onRateChange?: ?Function,\n\n        /**\n         * onStalled event handler.\n         */\n        onStalled?: ?Function,\n\n        /**\n         * onSuspend event handler.\n         */\n        onSuspend?: ?Function,\n\n        /**\n         * onWaiting event handler.\n         */\n        onWaiting?: ?Function\n    |},\n\n    /**\n     * A styles that will be applied on the video element.\n     */\n    style?: Object,\n\n    /**\n     * The value of the muted attribute for the underlying video element.\n     */\n    muted?: boolean\n};\n\n/**\n * Component that renders a video element for a passed in video track.\n *\n * @extends Component\n */\nclass Video extends Component<Props> {\n    _videoElement: ?Object;\n    _mounted: boolean;\n\n    /**\n     * Default values for {@code Video} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        autoPlay: true,\n        id: '',\n        playsinline: true\n    };\n\n    /**\n     * Initializes a new {@code Video} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        /**\n         * The internal reference to the DOM/HTML element intended for\n         * displaying a video.\n         *\n         * @private\n         * @type {HTMLVideoElement}\n         */\n        this._videoElement = null;\n\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onVideoPlaying = this._onVideoPlaying.bind(this);\n        this._setVideoElement = this._setVideoElement.bind(this);\n    }\n\n    /**\n     * Invokes the library for rendering the video on initial display. Sets the\n     * volume level to zero to ensure no sound plays.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._mounted = true;\n\n        if (this._videoElement) {\n            this._videoElement.volume = 0;\n            this._videoElement.onplaying = this._onVideoPlaying;\n        }\n\n        this._attachTrack(this.props.videoTrack);\n\n        if (this._videoElement && this.props.autoPlay) {\n            // Ensure the video gets play() called on it. This may be necessary in the\n            // case where the local video container was moved and re-attached, in which\n            // case video does not autoplay.\n            this._videoElement.play()\n                .catch(error => {\n                    // Prevent uncaught \"DOMException: The play() request was interrupted by a new load request\"\n                    // when video playback takes long to start and it starts after the component was unmounted.\n                    if (this._mounted) {\n                        throw error;\n                    }\n                });\n        }\n    }\n\n    /**\n     * Remove any existing associations between the current video track and the\n     * component's video element.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._mounted = false;\n        this._detachTrack(this.props.videoTrack);\n    }\n\n    /**\n     * Updates the video display only if a new track is added. This component's\n     * updating is blackboxed from React to prevent re-rendering of video\n     * element, as the lib uses {@code track.attach(videoElement)} instead.\n     *\n     * @inheritdoc\n     * @returns {boolean} - False is always returned to blackbox this component\n     * from React.\n     */\n    shouldComponentUpdate(nextProps: Props) {\n        const currentJitsiTrack = this.props.videoTrack\n            && this.props.videoTrack.jitsiTrack;\n        const nextJitsiTrack = nextProps.videoTrack\n            && nextProps.videoTrack.jitsiTrack;\n\n        if (currentJitsiTrack !== nextJitsiTrack) {\n            this._detachTrack(this.props.videoTrack);\n            this._attachTrack(nextProps.videoTrack);\n        }\n\n        if (this.props.style !== nextProps.style || this.props.className !== nextProps.className) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Renders the video element.\n     *\n     * @override\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            autoPlay,\n            className,\n            id,\n            muted,\n            playsinline,\n            style,\n            eventHandlers\n        } = this.props;\n\n        return (\n            <video\n                autoPlay = { autoPlay }\n                className = { className }\n                id = { id }\n                muted = { muted }\n                playsInline = { playsinline }\n                ref = { this._setVideoElement }\n                style = { style }\n                { ...eventHandlers } />\n        );\n    }\n\n    /**\n     * Calls into the passed in track to associate the track with the\n     * component's video element and render video.\n     *\n     * @param {Object} videoTrack - The redux representation of the\n     * {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _attachTrack(videoTrack) {\n        if (!videoTrack || !videoTrack.jitsiTrack) {\n            return;\n        }\n\n        videoTrack.jitsiTrack.attach(this._videoElement);\n    }\n\n    /**\n     * Removes the association to the component's video element from the passed\n     * in redux representation of jitsi video track to stop the track from\n     * rendering.\n     *\n     * @param {Object} videoTrack -  The redux representation of the\n     * {@code JitsiLocalTrack}.\n     * @private\n     * @returns {void}\n     */\n    _detachTrack(videoTrack) {\n        if (this._videoElement && videoTrack && videoTrack.jitsiTrack) {\n            videoTrack.jitsiTrack.detach(this._videoElement);\n        }\n    }\n\n    _onVideoPlaying: () => void;\n\n    /**\n     * Invokes the onvideoplaying callback if defined.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoPlaying() {\n        if (this.props.onVideoPlaying) {\n            this.props.onVideoPlaying();\n        }\n    }\n\n    _setVideoElement: () => void;\n\n    /**\n     * Sets an instance variable for the component's video element so it can be\n     * referenced later for attaching and detaching a JitsiLocalTrack.\n     *\n     * @param {Object} element - DOM element for the component's video display.\n     * @private\n     * @returns {void}\n     */\n    _setVideoElement(element) {\n        this._videoElement = element;\n    }\n}\n\nexport default Video;\n","// @flow\n\n/**\n * Redux action to signal a color scheme change in the app/sdk.\n *\n * {\n *     type: SET_COLOR_SCHEME\n *     colorScheme: Object\n * }\n */\nexport const SET_COLOR_SCHEME = 'SET_COLOR_SCHEME';\n","/* @flow */\n\nimport jwtDecode from 'jwt-decode';\n\nimport { parseURLParams } from '../util';\n\nimport { MEET_FEATURES } from './constants';\n\n/**\n * Retrieves the JSON Web Token (JWT), if any, defined by a specific\n * {@link URL}.\n *\n * @param {URL} url - The {@code URL} to parse and retrieve the JSON Web Token\n * (JWT), if any, from.\n * @returns {string} The JSON Web Token (JWT), if any, defined by the specified\n * {@code url}; otherwise, {@code undefined}.\n */\nexport function parseJWTFromURLParams(url: URL = window.location) {\n    return parseURLParams(url, true, 'search').jwt;\n}\n\n/**\n * Returns the user name after decoding the jwt.\n *\n * @param {Object} state - The app state.\n * @returns {string}\n */\nexport function getJwtName(state: Object) {\n    const { user } = state['features/base/jwt'];\n\n    return user?.name;\n}\n\n/**\n * Checks whether a given timestamp is a valid UNIX timestamp in seconds.\n * We convert to miliseconds during the check since `Date` works with miliseconds for UNIX timestamp values.\n *\n * @param {any} timestamp - A UNIX timestamp in seconds as stored in the jwt.\n * @returns {boolean} - Whether the timestamp is indeed a valid UNIX timestamp or not.\n */\nfunction isValidUnixTimestamp(timestamp: any) {\n    return typeof timestamp === 'number' && timestamp * 1000 === new Date(timestamp * 1000).getTime();\n}\n\n/**\n * Returns a list with all validation errors for the given jwt.\n *\n * @param {string} jwt - The jwt.\n * @returns {Array<string>} - An array containing all jwt validation errors.\n */\nexport function validateJwt(jwt: string) {\n    const errors = [];\n\n    if (!jwt) {\n        return errors;\n    }\n\n    const currentTimestamp = new Date().getTime();\n\n    try {\n        const header = jwtDecode(jwt, { header: true });\n        const payload = jwtDecode(jwt);\n\n        if (!header || !payload) {\n            errors.push('- Missing header or payload');\n\n            return errors;\n        }\n\n        const {\n            aud,\n            context,\n            exp,\n            iss,\n            nbf,\n            sub\n        } = payload;\n\n        // JaaS only\n        if (sub && sub.startsWith('vpaas-magic-cookie')) {\n            const { kid } = header;\n\n            // if Key ID is missing, we return the error immediately without further validations.\n            if (!kid) {\n                errors.push('- Key ID(kid) missing');\n\n                return errors;\n            }\n\n            if (kid.substring(0, kid.indexOf('/')) !== sub) {\n                errors.push('- Key ID(kid) does not match sub');\n            }\n\n            if (aud !== 'jitsi') {\n                errors.push('- invalid `aud` value. It should be `jitsi`');\n            }\n\n            if (iss !== 'chat') {\n                errors.push('- invalid `iss` value. It should be `chat`');\n            }\n\n            if (!context?.features) {\n                errors.push('- `features` object is missing from the payload');\n            }\n        }\n\n        if (!isValidUnixTimestamp(nbf)) {\n            errors.push('- invalid `nbf` value');\n        } else if (currentTimestamp < nbf * 1000) {\n            errors.push('- `nbf` value is in the future');\n        }\n\n        if (!isValidUnixTimestamp(exp)) {\n            errors.push('- invalid `exp` value');\n        } else if (currentTimestamp > exp * 1000) {\n            errors.push('- token is expired');\n        }\n\n        if (!context) {\n            errors.push('- `context` object is missing from the payload');\n        } else if (context.features) {\n            const { features } = context;\n\n            Object.keys(features).forEach(feature => {\n                if (MEET_FEATURES.includes(feature)) {\n                    const featureValue = features[feature];\n\n                    // cannot use truthy or falsy because we need the exact value and type check.\n                    if (\n                        featureValue !== true\n                        && featureValue !== false\n                        && featureValue !== 'true'\n                        && featureValue !== 'false'\n                    ) {\n                        errors.push(`- Invalid value for feature: ${feature}`);\n                    }\n                } else {\n                    errors.push(`- Invalid feature: ${feature}`);\n                }\n            });\n        }\n    } catch (e) {\n        errors.push(e ? e.message : '- unspecified jwt error');\n    }\n\n    return errors;\n}\n","// @flow\n\nimport React from 'react';\nimport { connect } from 'react-redux';\n\nimport CopyButton from '../../base/buttons/CopyButton';\nimport { getInviteURL } from '../../base/connection';\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The URL of the conference.\n     */\n    url: string\n};\n\n/**\n * Allow users to embed a jitsi meeting in an iframe.\n *\n * @returns {React$Element<any>}\n */\nfunction EmbedMeeting({ t, url }: Props) {\n    /**\n     * Get the embed code for a jitsi meeting.\n     *\n     * @returns {string} The iframe embed code.\n     */\n    const getEmbedCode = () =>\n        `<iframe allow=\"camera; microphone; fullscreen; display-capture; autoplay\" src=\"${url}\"`\n        + ' style=\"height: 100%; width: 100%; border: 0px;\"></iframe>';\n\n    return (\n        <Dialog\n            hideCancelButton = { true }\n            submitDisabled = { true }\n            titleKey = { 'embedMeeting.title' }\n            width = 'small'>\n            <div className = 'embed-meeting-dialog'>\n                <textarea\n                    aria-label = { t('dialog.embedMeeting') }\n                    className = 'embed-meeting-code'\n                    readOnly = { true }\n                    value = { getEmbedCode() } />\n                <CopyButton\n                    aria-label = { t('addPeople.copyLink') }\n                    className = 'embed-meeting-copy'\n                    displayedText = { t('dialog.copy') }\n                    textOnCopySuccess = { t('dialog.copied') }\n                    textOnHover = { t('dialog.copy') }\n                    textToCopy = { getEmbedCode() } />\n            </div>\n        </Dialog>\n    );\n}\n\nconst mapStateToProps = state => {\n    return {\n        url: getInviteURL(state)\n    };\n};\n\nexport default translate(connect(mapStateToProps)(EmbedMeeting));\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    addPendingDeviceRequest,\n    areDeviceLabelsInitialized,\n    getAudioOutputDeviceId,\n    getAvailableDevices,\n    getDeviceIdByLabel,\n    groupDevicesByKind,\n    setAudioInputDeviceAndUpdateSettings,\n    setAudioOutputDevice,\n    setVideoInputDeviceAndUpdateSettings\n} from '../base/devices';\nimport { isIosMobileBrowser } from '../base/environment/utils';\nimport JitsiMeetJS from '../base/lib-jitsi-meet';\nimport { toState } from '../base/redux';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId,\n    getUserSelectedOutputDeviceId\n} from '../base/settings';\n\n/**\n * Returns the properties for the device selection dialog from Redux state.\n *\n * @param {(Function|Object)} stateful -The (whole) redux state, or redux's\n * {@code getState} function to be used to retrieve the state.\n * @returns {Object} - The properties for the device selection dialog.\n */\nexport function getDeviceSelectionDialogProps(stateful: Object | Function) {\n    const state = toState(stateful);\n    const settings = state['features/base/settings'];\n    const { conference } = state['features/base/conference'];\n    const { permissions } = state['features/base/devices'];\n    const isMobileSafari = isIosMobileBrowser();\n    let disableAudioInputChange = !JitsiMeetJS.mediaDevices.isMultipleAudioInputSupported();\n    let selectedAudioInputId = settings.micDeviceId;\n    let selectedAudioOutputId = getAudioOutputDeviceId();\n    let selectedVideoInputId = settings.cameraDeviceId;\n\n    // audio input change will be a problem only when we are in a\n    // conference and this is not supported, when we open device selection on\n    // welcome page changing input devices will not be a problem\n    // on welcome page we also show only what we have saved as user selected devices\n    if (!conference) {\n        disableAudioInputChange = false;\n        selectedAudioInputId = getUserSelectedMicDeviceId(state);\n        selectedAudioOutputId = getUserSelectedOutputDeviceId(state);\n        selectedVideoInputId = getUserSelectedCameraDeviceId(state);\n    }\n\n    // we fill the device selection dialog with the devices that are currently\n    // used or if none are currently used with what we have in settings(user selected)\n    return {\n        availableDevices: state['features/base/devices'].availableDevices,\n        disableAudioInputChange,\n        disableDeviceChange:\n            !JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(),\n        hasAudioPermission: permissions.audio,\n        hasVideoPermission: permissions.video,\n        hideAudioInputPreview:\n            !JitsiMeetJS.isCollectingLocalStats(),\n        hideAudioOutputSelect: !JitsiMeetJS.mediaDevices\n                            .isDeviceChangeAvailable('output'),\n        hideVideoInputPreview: isMobileSafari,\n        hideVideoOutputSelect: isMobileSafari,\n        selectedAudioInputId,\n        selectedAudioOutputId,\n        selectedVideoInputId\n    };\n}\n\n/**\n * Processes device requests from external applications.\n *\n * @param {Dispatch} dispatch - The redux {@code dispatch} function.\n * @param {Function} getState - The redux function that gets/retrieves the redux\n * state.\n * @param {Object} request - The request to be processed.\n * @param {Function} responseCallback - The callback that will send the\n * response.\n * @returns {boolean} - True if the request has been processed and false otherwise.\n */\nexport function processExternalDeviceRequest( // eslint-disable-line max-params\n        dispatch: Dispatch<any>,\n        getState: Function,\n        request: Object,\n        responseCallback: Function) {\n    if (request.type !== 'devices') {\n        return false;\n    }\n    const state = getState();\n    const settings = state['features/base/settings'];\n    let result = true;\n\n    switch (request.name) {\n    case 'isDeviceListAvailable':\n        responseCallback(JitsiMeetJS.mediaDevices.isDeviceListAvailable());\n        break;\n    case 'isDeviceChangeAvailable':\n        responseCallback(\n            JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(\n                request.deviceType));\n        break;\n    case 'isMultipleAudioInputSupported':\n        responseCallback(JitsiMeetJS.isMultipleAudioInputSupported());\n        break;\n    case 'getCurrentDevices':\n        dispatch(getAvailableDevices()).then(devices => {\n            if (areDeviceLabelsInitialized(state)) {\n                const deviceDescriptions = {\n                    audioInput: undefined,\n                    audioOutput: undefined,\n                    videoInput: undefined\n                };\n                const currentlyUsedDeviceIds = new Set([\n                    getAudioOutputDeviceId(),\n                    settings.micDeviceId,\n                    settings.cameraDeviceId\n                ]);\n\n                devices.forEach(device => {\n                    const { deviceId, kind } = device;\n\n                    if (currentlyUsedDeviceIds.has(deviceId)) {\n                        switch (kind) {\n                        case 'audioinput':\n                            deviceDescriptions.audioInput = device;\n                            break;\n                        case 'audiooutput':\n                            deviceDescriptions.audioOutput = device;\n                            break;\n                        case 'videoinput':\n                            deviceDescriptions.videoInput = device;\n                            break;\n                        }\n                    }\n                });\n\n                responseCallback(deviceDescriptions);\n            } else {\n                // The labels are not available if the A/V permissions are\n                // not yet granted.\n                dispatch(addPendingDeviceRequest({\n                    type: 'devices',\n                    name: 'getCurrentDevices',\n                    responseCallback\n                }));\n            }\n        });\n\n        break;\n    case 'getAvailableDevices':\n        dispatch(getAvailableDevices()).then(devices => {\n            if (areDeviceLabelsInitialized(state)) {\n                responseCallback(groupDevicesByKind(devices));\n            } else {\n                // The labels are not available if the A/V permissions are\n                // not yet granted.\n                dispatch(addPendingDeviceRequest({\n                    type: 'devices',\n                    name: 'getAvailableDevices',\n                    responseCallback\n                }));\n            }\n        });\n\n        break;\n    case 'setDevice': {\n        const { device } = request;\n\n        if (!areDeviceLabelsInitialized(state)) {\n            dispatch(addPendingDeviceRequest({\n                type: 'devices',\n                name: 'setDevice',\n                device,\n                responseCallback\n            }));\n\n            return true;\n        }\n\n        const { label, id } = device;\n        const deviceId = label\n            ? getDeviceIdByLabel(state, device.label, device.kind)\n            : id;\n\n        if (deviceId) {\n            switch (device.kind) {\n            case 'audioinput':\n                dispatch(setAudioInputDeviceAndUpdateSettings(deviceId));\n                break;\n            case 'audiooutput':\n                dispatch(setAudioOutputDevice(deviceId));\n                break;\n            case 'videoinput':\n                dispatch(setVideoInputDeviceAndUpdateSettings(deviceId));\n                break;\n            default:\n                result = false;\n            }\n        } else {\n            result = false;\n        }\n\n        responseCallback(result);\n        break;\n    }\n    default:\n        return false;\n    }\n\n    return true;\n}\n\n","// @flow\n\nimport { CHAT_ENABLED, getFeatureFlag } from '../../base/flags';\nimport { translate } from '../../base/i18n';\nimport { IconMessage, IconReply } from '../../base/icons';\nimport { getParticipantById } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { openChat } from '../actions';\n\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * The ID of the participant that the message is to be sent.\n     */\n    participantID: string,\n\n    /**\n     * True if the button is rendered as a reply button.\n     */\n    reply: boolean,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The participant object retrieved from Redux.\n     */\n    _participant: Object,\n};\n\n/**\n * Class to render a button that initiates the sending of a private message through chet.\n */\nclass PrivateMessageButton extends AbstractButton<Props, any> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.privateMessage';\n    icon = IconMessage;\n    label = 'toolbar.privateMessage';\n    toggledIcon = IconReply;\n\n    /**\n     * Handles clicking / pressing the button, and kicks the participant.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch, _participant } = this.props;\n\n        dispatch(openChat(_participant));\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * {@code boolean} value indicating if this button is toggled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props.reply;\n    }\n\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    const enabled = getFeatureFlag(state, CHAT_ENABLED, true);\n    const { visible = enabled } = ownProps;\n\n    return {\n        _participant: getParticipantById(state, ownProps.participantID),\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(PrivateMessageButton));\n","// @flow\n\nimport {\n    ADD_MESSAGE,\n    CLEAR_MESSAGES,\n    CLOSE_CHAT,\n    SEND_MESSAGE,\n    SET_PRIVATE_MESSAGE_RECIPIENT\n} from './actionTypes';\n\n/**\n * Adds a chat message to the collection of messages.\n *\n * @param {Object} messageDetails - The chat message to save.\n * @param {string} messageDetails.displayName - The displayName of the\n * participant that authored the message.\n * @param {boolean} messageDetails.hasRead - Whether or not to immediately mark\n * the message as read.\n * @param {string} messageDetails.message - The received message to display.\n * @param {string} messageDetails.messageType - The kind of message, such as\n * \"error\" or \"local\" or \"remote\".\n * @param {string} messageDetails.timestamp - A timestamp to display for when\n * the message was received.\n * @returns {{\n *     type: ADD_MESSAGE,\n *     displayName: string,\n *     hasRead: boolean,\n *     message: string,\n *     messageType: string,\n *     timestamp: string,\n * }}\n */\nexport function addMessage(messageDetails: Object) {\n    return {\n        type: ADD_MESSAGE,\n        ...messageDetails\n    };\n}\n\n/**\n * Clears the chat messages in Redux.\n *\n * @returns {{\n *     type: CLEAR_MESSAGES\n * }}\n */\nexport function clearMessages() {\n    return {\n        type: CLEAR_MESSAGES\n    };\n}\n\n/**\n * Action to signal the closing of the chat dialog.\n *\n * @returns {{\n *     type: CLOSE_CHAT\n * }}\n */\nexport function closeChat() {\n    return {\n        type: CLOSE_CHAT\n    };\n}\n\n/**\n * Sends a chat message to everyone in the conference.\n *\n * @param {string} message - The chat message to send out.\n * @param {boolean} ignorePrivacy - True if the privacy notification should be ignored.\n * @returns {{\n *     type: SEND_MESSAGE,\n *     ignorePrivacy: boolean,\n *     message: string\n * }}\n */\nexport function sendMessage(message: string, ignorePrivacy: boolean = false) {\n    return {\n        type: SEND_MESSAGE,\n        ignorePrivacy,\n        message\n    };\n}\n\n/**\n * Initiates the sending of a private message to the supplied participant.\n *\n * @param {Participant} participant - The participant to set the recipient to.\n * @returns {{\n *     participant: Participant,\n *     type: SET_PRIVATE_MESSAGE_RECIPIENT\n * }}\n */\nexport function setPrivateMessageRecipient(participant: Object) {\n    return {\n        participant,\n        type: SET_PRIVATE_MESSAGE_RECIPIENT\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport {\n    appNavigate,\n    maybeRedirectToWelcomePage\n} from '../app/actions';\nimport {\n    conferenceLeft,\n    JITSI_CONFERENCE_URL_KEY,\n    setPassword\n} from '../base/conference';\nimport { hideDialog, openDialog } from '../base/dialog';\nimport { SecurityDialog } from '../security/components/security-dialog';\n\nimport { PasswordRequiredPrompt } from './components';\n\ndeclare var APP: Object;\n\n/**\n * Cancels a prompt for a password to join a specific conference/room.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference} requesting\n * the password to join.\n * @protected\n * @returns {Function}\n */\nexport function _cancelPasswordRequiredPrompt(conference: Object) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n\n        if (typeof APP !== 'undefined') {\n            // when we are redirecting the library should handle any\n            // unload and clean of the connection.\n            APP.API.notifyReadyToClose();\n            dispatch(maybeRedirectToWelcomePage());\n\n            return;\n        }\n\n        // Canceling PasswordRequiredPrompt is to navigate the app/user to\n        // WelcomePage. In other words, the canceling invalidates the\n        // locationURL. Make sure that the canceling indeed has the intent to\n        // invalidate the locationURL.\n        const state = getState();\n\n        if (conference === state['features/base/conference'].passwordRequired\n                && conference[JITSI_CONFERENCE_URL_KEY]\n                    === state['features/base/connection'].locationURL) {\n            // XXX The error associated with CONFERENCE_FAILED was marked as\n            // recoverable by the feature room-lock and, consequently,\n            // recoverable-aware features such as mobile's external-api did not\n            // deliver the CONFERENCE_FAILED to the SDK clients/consumers. Since\n            // the app/user is going to nativate to WelcomePage, the SDK\n            // clients/consumers need an event.\n            dispatch(conferenceLeft(conference));\n\n            dispatch(appNavigate(undefined));\n        }\n    };\n}\n\n/**\n * Ends a (user) request to lock a specific conference/room.\n *\n * @param {JitsiConference} conference - The JitsiConference to lock.\n * @param {string|undefined} password - The password with which the specified\n * conference is to be locked or undefined to cancel the (user) request to lock\n * the specified conference.\n * @returns {Function}\n */\nexport function endRoomLockRequest(\n        conference: { lock: Function },\n        password: ?string) {\n    return (dispatch: Function) => {\n        const setPassword_\n            = password\n                ? dispatch(setPassword(conference, conference.lock, password))\n                : Promise.resolve();\n        const endRoomLockRequest_ = () => dispatch(hideDialog(SecurityDialog));\n\n        setPassword_.then(endRoomLockRequest_, endRoomLockRequest_);\n    };\n}\n\n/**\n * Begins a prompt for a password to join a specific conference/room.\n *\n * @param {JitsiConference} conference - The {@code JitsiConference}\n * requesting the password to join.\n * @protected\n * @returns {{\n *     type: OPEN_DIALOG,\n *     component: Component,\n *     props: PropTypes\n * }}\n */\nexport function _openPasswordRequiredPrompt(conference: Object) {\n    return openDialog(PasswordRequiredPrompt, { conference });\n}\n\n/**\n * Unlocks the current jitsi conference.\n *\n * @returns {Function}\n */\nexport function unlockRoom() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { conference } = getState()['features/base/conference'];\n\n        return dispatch(setPassword(\n            conference,\n            conference.lock,\n            ''\n        ));\n    };\n}\n\n\n","// @flow\n\n/**\n * The type of (redux) action which sets the last-n for the conference.\n *\n * {\n *     type: SET_LAST_N,\n *     lastN: number\n * }\n */\nexport const SET_LAST_N = 'SET_LAST_N';\n","import { VIDEO_QUALITY_LEVELS } from '../../video-quality/constants';\n\n/**\n * Determines the lastN value to be used for the conference based on the video quality selected.\n *\n * @param {string} qualityLevel - Quality level (height) selected.\n * @param {number} channelLastN - LastN value set for the whole conference.\n * @returns {number} LastN value applicable to the quality level specified.\n */\nexport function getLastNForQualityLevel(qualityLevel, channelLastN) {\n    let lastN = channelLastN;\n\n    const videoQualityLevels = Object.values(VIDEO_QUALITY_LEVELS);\n\n    for (const lvl in videoQualityLevels) {\n        if (videoQualityLevels.hasOwnProperty(lvl)\n            && qualityLevel === videoQualityLevels[lvl]\n            && lvl > 1) {\n            lastN = Math.floor(channelLastN / Math.pow(2, lvl - 1));\n        }\n    }\n\n    return lastN;\n}\n\n/**\n * Checks if the given Object is a correct last N limit mapping, coverts both keys and values to numbers and sorts\n * the keys in ascending order.\n *\n * @param {Object} lastNLimits - The Object to be verified.\n * @returns {undefined|Map<number, number>}\n */\nexport function validateLastNLimits(lastNLimits) {\n    // Checks if only numbers are used\n    if (typeof lastNLimits !== 'object'\n        || !Object.keys(lastNLimits).length\n        || Object.keys(lastNLimits)\n            .find(limit => limit === null || isNaN(Number(limit))\n                || lastNLimits[limit] === null || isNaN(Number(lastNLimits[limit])))) {\n        return undefined;\n    }\n\n    // Converts to numbers and sorts the keys\n    const sortedMapping = new Map();\n    const orderedLimits = Object.keys(lastNLimits)\n        .map(n => Number(n))\n        .sort((n1, n2) => n1 - n2);\n\n    for (const limit of orderedLimits) {\n        sortedMapping.set(limit, Number(lastNLimits[limit]));\n    }\n\n    return sortedMapping;\n}\n\n/**\n * Returns \"last N\" value which corresponds to a level defined in the {@code lastNLimits} mapping. See\n * {@code config.js} for more detailed explanation on how the mapping is defined.\n *\n * @param {number} participantsCount - The current number of participants in the conference.\n * @param {Map<number, number>} [lastNLimits] - The mapping of number of participants to \"last N\" values. NOTE that\n * this function expects a Map that has been preprocessed by {@link validateLastNLimits}, because the keys must be\n * sorted in ascending order and both keys and values should be numbers.\n * @returns {number|undefined} - A \"last N\" number if there was a corresponding \"last N\" value matched with the number\n * of participants or {@code undefined} otherwise.\n */\nexport function limitLastN(participantsCount, lastNLimits) {\n    if (!lastNLimits || !lastNLimits.keys) {\n        return undefined;\n    }\n\n    let selectedLimit;\n\n    for (const participantsN of lastNLimits.keys()) {\n        if (participantsCount >= participantsN) {\n            selectedLimit = participantsN;\n        }\n    }\n\n    return selectedLimit ? lastNLimits.get(selectedLimit) : undefined;\n}\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { getLocalParticipant } from '../../base/participants';\nimport { sendMessage } from '../actions';\nimport { SMALL_WIDTH_THRESHOLD } from '../constants';\n\n/**\n * The type of the React {@code Component} props of {@code AbstractChat}.\n */\nexport type Props = {\n\n    /**\n     * Whether the chat is opened in a modal or not (computed based on window width).\n     */\n    _isModal: boolean,\n\n    /**\n     * True if the chat window should be rendered.\n     */\n    _isOpen: boolean,\n\n    /**\n     * All the chat messages in the conference.\n     */\n    _messages: Array<Object>,\n\n    /**\n     * Function to send a text message.\n     *\n     * @protected\n     */\n    _onSendMessage: Function,\n\n    /**\n     * Function to toggle the chat window.\n     */\n    _onToggleChat: Function,\n\n    /**\n     * Whether or not to block chat access with a nickname input form.\n     */\n    _showNamePrompt: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Implements an abstract chat panel.\n */\nexport default class AbstractChat<P: Props> extends Component<P> {\n\n    /**\n     * Initializes a new {@code AbstractChat} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code AbstractChat} instance with.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onSendMessage = this._onSendMessage.bind(this);\n    }\n\n    _onSendMessage: (string) => void;\n\n    /**\n    * Sends a text message.\n    *\n    * @private\n    * @param {string} text - The text message to be sent.\n    * @returns {void}\n    * @type {Function}\n    */\n    _onSendMessage(text: string) {\n        this.props.dispatch(sendMessage(text));\n    }\n}\n\n/**\n * Maps (parts of) the redux state to {@link Chat} React {@code Component}\n * props.\n *\n * @param {Object} state - The redux store/state.\n * @private\n * @returns {{\n *     _isOpen: boolean,\n *     _messages: Array<Object>,\n *     _showNamePrompt: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    const { isOpen, messages } = state['features/chat'];\n    const _localParticipant = getLocalParticipant(state);\n\n    return {\n        _isModal: window.innerWidth <= SMALL_WIDTH_THRESHOLD,\n        _isOpen: isOpen,\n        _messages: messages,\n        _showNamePrompt: !_localParticipant?.name\n    };\n}\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconClose } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { toggleChat } from '../../actions.web';\n\ntype Props = {\n\n    /**\n     * Function to be called when pressing the close button.\n     */\n    onCancel: Function,\n\n    /**\n     * An optional class name.\n     */\n    className: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Custom header of the {@code ChatDialog}.\n *\n * @returns {React$Element<any>}\n */\nfunction Header({ onCancel, className, t }: Props) {\n\n    const onKeyPressHandler = useCallback(e => {\n        if (onCancel && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            onCancel();\n        }\n    }, [ onCancel ]);\n\n    return (\n        <div\n            className = { className || 'chat-dialog-header' }\n            role = 'heading'>\n            { t('chat.title') }\n            <Icon\n                ariaLabel = { t('toolbar.closeChat') }\n                onClick = { onCancel }\n                onKeyPress = { onKeyPressHandler }\n                role = 'button'\n                src = { IconClose }\n                tabIndex = { 0 } />\n        </div>\n    );\n}\n\nconst mapDispatchToProps = { onCancel: toggleChat };\n\nexport default translate(connect(null, mapDispatchToProps)(Header));\n","// @flow\n\nimport React from \"react\";\n\nimport { Dialog } from \"../../../base/dialog\";\n\nimport Header from \"./ChatDialogHeader\";\n\ntype Props = {\n    /**\n     * Children of the component.\n     */\n    children: React$Node,\n};\n\n/**\n * Component that renders the content of the chat in a modal.\n *\n * @returns {React$Element<any>}\n */\nfunction ChatDialog({ children }: Props) {\n    return (\n        <Dialog\n            customHeader={Header}\n            disableEnter={true}\n            disableFooter={false}\n            hideCancelButton={true}\n            submitDisabled={true}\n            titleKey=\"chat.title\"\n        >\n            <div className=\"chat-dialog\">{children}</div>\n        </Dialog>\n    );\n}\n\nexport default ChatDialog;\n","export default function _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}","import { useLayoutEffect } from 'react';\n\nvar index =  useLayoutEffect ;\n\nexport default index;\n","import { useRef } from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar useLatest = function useLatest(value) {\n  var ref = useRef(value);\n  useIsomorphicLayoutEffect(function () {\n    ref.current = value;\n  });\n  return ref;\n};\n\nexport default useLatest;\n","import { useRef, useCallback } from 'react';\n\nvar updateRef = function updateRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n    return;\n  }\n  ref.current = value;\n};\n\nvar useComposedRef = function useComposedRef(libRef, userRef) {\n  var prevUserRef = useRef();\n  return useCallback(function (instance) {\n    libRef.current = instance;\n\n    if (prevUserRef.current) {\n      updateRef(prevUserRef.current, null);\n    }\n\n    prevUserRef.current = userRef;\n\n    if (!userRef) {\n      return;\n    }\n\n    updateRef(userRef, instance);\n  }, [userRef]);\n};\n\nexport default useComposedRef;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport { useEffect, forwardRef, useRef, useLayoutEffect, createElement } from 'react';\nimport useLatest from 'use-latest';\nimport useComposedRef from 'use-composed-ref';\n\nvar HIDDEN_TEXTAREA_STYLE = {\n  'min-height': '0',\n  'max-height': 'none',\n  height: '0',\n  visibility: 'hidden',\n  overflow: 'hidden',\n  position: 'absolute',\n  'z-index': '-1000',\n  top: '0',\n  right: '0'\n};\n\nvar forceHiddenStyles = function forceHiddenStyles(node) {\n  Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function (key) {\n    node.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n  });\n};\n\n//   export type CalculatedNodeHeights = [height: number, rowHeight: number];\n// https://github.com/microsoft/TypeScript/issues/28259\n\nvar hiddenTextarea = null;\n\nvar getHeight = function getHeight(node, sizingData) {\n  var height = node.scrollHeight;\n\n  if (sizingData.sizingStyle.boxSizing === 'border-box') {\n    // border-box: add border, since height = content + padding + border\n    return height + sizingData.borderSize;\n  } // remove padding, since height = content\n\n\n  return height - sizingData.paddingSize;\n};\n\nfunction calculateNodeHeight(sizingData, value, minRows, maxRows) {\n  if (minRows === void 0) {\n    minRows = 1;\n  }\n\n  if (maxRows === void 0) {\n    maxRows = Infinity;\n  }\n\n  if (!hiddenTextarea) {\n    hiddenTextarea = document.createElement('textarea');\n    hiddenTextarea.setAttribute('tab-index', '-1');\n    hiddenTextarea.setAttribute('aria-hidden', 'true');\n    forceHiddenStyles(hiddenTextarea);\n  }\n\n  if (hiddenTextarea.parentNode === null) {\n    document.body.appendChild(hiddenTextarea);\n  }\n\n  var paddingSize = sizingData.paddingSize,\n      borderSize = sizingData.borderSize,\n      sizingStyle = sizingData.sizingStyle;\n  var boxSizing = sizingStyle.boxSizing;\n  Object.keys(sizingStyle).forEach(function (_key) {\n    var key = _key;\n    hiddenTextarea.style[key] = sizingStyle[key];\n  });\n  forceHiddenStyles(hiddenTextarea);\n  hiddenTextarea.value = value;\n  var height = getHeight(hiddenTextarea, sizingData); // measure height of a textarea with a single row\n\n  hiddenTextarea.value = 'x';\n  var rowHeight = hiddenTextarea.scrollHeight - paddingSize;\n  var minHeight = rowHeight * minRows;\n\n  if (boxSizing === 'border-box') {\n    minHeight = minHeight + paddingSize + borderSize;\n  }\n\n  height = Math.max(minHeight, height);\n  var maxHeight = rowHeight * maxRows;\n\n  if (boxSizing === 'border-box') {\n    maxHeight = maxHeight + paddingSize + borderSize;\n  }\n\n  height = Math.min(maxHeight, height);\n  return [height, rowHeight];\n}\n\nvar noop = function noop() {};\nvar pick = function pick(props, obj) {\n  return props.reduce(function (acc, prop) {\n    acc[prop] = obj[prop];\n    return acc;\n  }, {});\n};\n\nvar SIZING_STYLE = ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'boxSizing', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'letterSpacing', 'lineHeight', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', // non-standard\n'tabSize', 'textIndent', // non-standard\n'textRendering', 'textTransform', 'width'];\nvar isIE =  !!document.documentElement.currentStyle ;\n\nvar getSizingData = function getSizingData(node) {\n  var style = window.getComputedStyle(node);\n\n  if (style === null) {\n    return null;\n  }\n\n  var sizingStyle = pick(SIZING_STYLE, style);\n  var boxSizing = sizingStyle.boxSizing; // probably node is detached from DOM, can't read computed dimensions\n\n  if (boxSizing === '') {\n    return null;\n  } // IE (Edge has already correct behaviour) returns content width as computed width\n  // so we need to add manually padding and border widths\n\n\n  if (isIE && boxSizing === 'border-box') {\n    sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(sizingStyle.borderRightWidth) + parseFloat(sizingStyle.borderLeftWidth) + parseFloat(sizingStyle.paddingRight) + parseFloat(sizingStyle.paddingLeft) + 'px';\n  }\n\n  var paddingSize = parseFloat(sizingStyle.paddingBottom) + parseFloat(sizingStyle.paddingTop);\n  var borderSize = parseFloat(sizingStyle.borderBottomWidth) + parseFloat(sizingStyle.borderTopWidth);\n  return {\n    sizingStyle: sizingStyle,\n    paddingSize: paddingSize,\n    borderSize: borderSize\n  };\n};\n\nvar useWindowResizeListener = function useWindowResizeListener(listener) {\n  var latestListener = useLatest(listener);\n  useEffect(function () {\n    var handler = function handler(event) {\n      latestListener.current(event);\n    };\n\n    window.addEventListener('resize', handler);\n    return function () {\n      window.removeEventListener('resize', handler);\n    };\n  }, []);\n};\n\nvar TextareaAutosize = function TextareaAutosize(_ref, userRef) {\n  var cacheMeasurements = _ref.cacheMeasurements,\n      maxRows = _ref.maxRows,\n      minRows = _ref.minRows,\n      _ref$onChange = _ref.onChange,\n      onChange = _ref$onChange === void 0 ? noop : _ref$onChange,\n      _ref$onHeightChange = _ref.onHeightChange,\n      onHeightChange = _ref$onHeightChange === void 0 ? noop : _ref$onHeightChange,\n      props = _objectWithoutPropertiesLoose(_ref, [\"cacheMeasurements\", \"maxRows\", \"minRows\", \"onChange\", \"onHeightChange\"]);\n\n  if (process.env.NODE_ENV !== 'production' && props.style) {\n    if ('maxHeight' in props.style) {\n      throw new Error('Using `style.maxHeight` for <TextareaAutosize/> is not supported. Please use `maxRows`.');\n    }\n\n    if ('minHeight' in props.style) {\n      throw new Error('Using `style.minHeight` for <TextareaAutosize/> is not supported. Please use `minRows`.');\n    }\n  }\n\n  var isControlled = props.value !== undefined;\n  var libRef = useRef(null);\n  var ref = useComposedRef(libRef, userRef);\n  var heightRef = useRef(0);\n  var measurementsCacheRef = useRef();\n\n  var resizeTextarea = function resizeTextarea() {\n    var node = libRef.current;\n    var nodeSizingData = cacheMeasurements && measurementsCacheRef.current ? measurementsCacheRef.current : getSizingData(node);\n\n    if (!nodeSizingData) {\n      return;\n    }\n\n    measurementsCacheRef.current = nodeSizingData;\n\n    var _calculateNodeHeight = calculateNodeHeight(nodeSizingData, node.value || node.placeholder || 'x', minRows, maxRows),\n        height = _calculateNodeHeight[0],\n        rowHeight = _calculateNodeHeight[1];\n\n    if (heightRef.current !== height) {\n      heightRef.current = height;\n      node.style.setProperty('height', height + \"px\", 'important');\n      onHeightChange(height, {\n        rowHeight: rowHeight\n      });\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      resizeTextarea();\n    }\n\n    onChange(event);\n  };\n\n  {\n    useLayoutEffect(resizeTextarea);\n  }\n\n  useWindowResizeListener(resizeTextarea);\n  return (/*#__PURE__*/createElement(\"textarea\", _extends({}, props, {\n      onChange: handleChange,\n      ref: ref\n    }))\n  );\n};\n\nvar index = /* #__PURE__ */forwardRef(TextareaAutosize);\n\nexport default index;\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\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\n  return target;\n}","export const smileys = {\n    smiley1: ':)',\n    smiley2: ':(',\n    smiley3: ':D',\n    smiley4: ':+1:',\n    smiley5: ':P',\n    smiley6: ':wave:',\n    smiley7: ':blush:',\n    smiley8: ':slightly_smiling_face:',\n    smiley9: ':scream:',\n    smiley10: ':*',\n    smiley11: ':-1:',\n    smiley12: ':mag:',\n    smiley13: ':heart:',\n    smiley14: ':innocent:',\n    smiley15: ':angry:',\n    smiley16: ':angel:',\n    smiley17: ';(',\n    smiley18: ':clap:',\n    smiley19: ';)',\n    smiley20: ':beer:'\n};\n","// @flow\n\nimport React, { PureComponent } from 'react';\nimport Emoji from 'react-emoji-render';\n\nimport { smileys } from '../../smileys';\n\n/**\n * The type of the React {@code Component} props of {@link SmileysPanel}.\n */\ntype Props = {\n\n    /**\n     * Callback to invoke when a smiley is selected. The smiley will be passed\n     * back.\n     */\n    onSmileySelect: Function\n};\n\n/**\n * Implements a React Component showing smileys that can be be shown in chat.\n *\n * @extends Component\n */\nclass SmileysPanel extends PureComponent<Props> {\n    /**\n     * Initializes a new {@code SmileysPanel} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._onEscKey = this._onEscKey.bind(this);\n    }\n\n    _onEscKey: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onEscKey(e) {\n        // Escape handling does not work in onKeyPress\n        if (e.key === 'Escape') {\n            e.preventDefault();\n            e.stopPropagation();\n            this.props.onSmileySelect();\n        }\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ') {\n            e.preventDefault();\n            this.props.onSmileySelect(e.target.id && smileys[e.target.id]);\n        }\n    }\n\n    _onClick: (Object) => void;\n\n    /**\n     * Click handler for to select emoji.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onClick(e) {\n        e.preventDefault();\n        this.props.onSmileySelect(e.currentTarget.id && smileys[e.currentTarget.id]);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const smileyItems = Object.keys(smileys).map(smileyKey => (\n            <div\n                className = 'smileyContainer'\n                id = { smileyKey }\n                key = { smileyKey }\n                onClick = { this._onClick }\n                onKeyDown = { this._onEscKey }\n                onKeyPress = { this._onKeyPress }\n                role = 'option'\n                tabIndex = { 0 }>\n                <Emoji\n                    onlyEmojiClassName = 'smiley'\n                    text = { smileys[smileyKey] } />\n            </div>\n        ));\n\n        return (\n            <div\n                aria-orientation = 'horizontal'\n                id = 'smileysContainer'\n                onKeyDown = { this._onEscKey }\n                role = 'listbox'\n                tabIndex = { -1 }>\n                { smileyItems }\n            </div>\n        );\n    }\n}\n\nexport default SmileysPanel;\n","// @flow\n\nimport React, { Component } from 'react';\nimport TextareaAutosize from 'react-textarea-autosize';\nimport type { Dispatch } from 'redux';\n\nimport { isMobileBrowser } from '../../../base/environment/utils';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconPlane, IconSmile } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\n\nimport SmileysPanel from './SmileysPanel';\n\n/**\n * The type of the React {@code Component} props of {@link ChatInput}.\n */\ntype Props = {\n\n    /**\n     * Invoked to send chat messages.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Optional callback to invoke when the chat textarea has auto-resized to\n     * fit overflowing text.\n     */\n    onResize: ?Function,\n\n    /**\n     * Callback to invoke on message send.\n     */\n    onSend: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ChatInput}.\n */\ntype State = {\n\n    /**\n     * User provided nickname when the input text is provided in the view.\n     */\n    message: string,\n\n    /**\n     * Whether or not the smiley selector is visible.\n     */\n    showSmileysPanel: boolean\n};\n\n/**\n * Implements a React Component for drafting and submitting a chat message.\n *\n * @extends Component\n */\nclass ChatInput extends Component<Props, State> {\n    _textArea: ?HTMLTextAreaElement;\n\n    state = {\n        message: '',\n        showSmileysPanel: false\n    };\n\n    /**\n     * Initializes a new {@code ChatInput} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._textArea = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDetectSubmit = this._onDetectSubmit.bind(this);\n        this._onMessageChange = this._onMessageChange.bind(this);\n        this._onSmileySelect = this._onSmileySelect.bind(this);\n        this._onSubmitMessage = this._onSubmitMessage.bind(this);\n        this._onToggleSmileysPanel = this._onToggleSmileysPanel.bind(this);\n        this._onEscHandler = this._onEscHandler.bind(this);\n        this._onToggleSmileysPanelKeyPress = this._onToggleSmileysPanelKeyPress.bind(this);\n        this._onSubmitMessageKeyPress = this._onSubmitMessageKeyPress.bind(this);\n        this._setTextAreaRef = this._setTextAreaRef.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        if (isMobileBrowser()) {\n            // Ensure textarea is not focused when opening chat on mobile browser.\n            this._textArea && this._textArea.blur();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const smileysPanelClassName = `${this.state.showSmileysPanel\n            ? 'show-smileys' : 'hide-smileys'} smileys-panel`;\n\n        return (\n            <div className = { `chat-input-container${this.state.message.trim().length ? ' populated' : ''}` }>\n                <div id = 'chat-input' >\n                    <div className = 'smiley-input'>\n                        <div id = 'smileysarea'>\n                            <div id = 'smileys'>\n                                <div\n                                    aria-expanded = { this.state.showSmileysPanel }\n                                    aria-haspopup = 'smileysContainer'\n                                    aria-label = { this.props.t('chat.smileysPanel') }\n                                    className = 'smiley-button'\n                                    onClick = { this._onToggleSmileysPanel }\n                                    onKeyDown = { this._onEscHandler }\n                                    onKeyPress = { this._onToggleSmileysPanelKeyPress }\n                                    role = 'button'\n                                    tabIndex = { 0 }>\n                                    <Icon src = { IconSmile } />\n                                </div>\n                            </div>\n                        </div>\n                        <div className = { smileysPanelClassName }>\n                            <SmileysPanel\n                                onSmileySelect = { this._onSmileySelect } />\n                        </div>\n                    </div>\n                    <div className = 'usrmsg-form'>\n                        <TextareaAutosize\n                            autoComplete = 'off'\n                            autoFocus = { true }\n                            id = 'usermsg'\n                            maxRows = { 5 }\n                            onChange = { this._onMessageChange }\n                            onHeightChange = { this.props.onResize }\n                            onKeyDown = { this._onDetectSubmit }\n                            placeholder = { this.props.t('chat.messagebox') }\n                            ref = { this._setTextAreaRef }\n                            tabIndex = { 0 }\n                            value = { this.state.message } />\n                    </div>\n                    <div className = 'send-button-container'>\n                        <div\n                            aria-label = { this.props.t('chat.sendButton') }\n                            className = 'send-button'\n                            onClick = { this._onSubmitMessage }\n                            onKeyPress = { this._onSubmitMessageKeyPress }\n                            role = 'button'\n                            tabIndex = { this.state.message.trim() ? 0 : -1 } >\n                            <Icon src = { IconPlane } />\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Place cursor focus on this component's text area.\n     *\n     * @private\n     * @returns {void}\n     */\n    _focus() {\n        this._textArea && this._textArea.focus();\n    }\n\n\n    _onSubmitMessage: () => void;\n\n    /**\n     * Submits the message to the chat window.\n     *\n     * @returns {void}\n     */\n    _onSubmitMessage() {\n        const trimmed = this.state.message.trim();\n\n        if (trimmed) {\n            this.props.onSend(trimmed);\n\n            this.setState({ message: '' });\n\n            // Keep the textarea in focus when sending messages via submit button.\n            this._focus();\n        }\n\n    }\n    _onDetectSubmit: (Object) => void;\n\n    /**\n     * Detects if enter has been pressed. If so, submit the message in the chat\n     * window.\n     *\n     * @param {string} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onDetectSubmit(event) {\n        if (event.key === 'Enter'\n            && event.shiftKey === false\n            && event.ctrlKey === false) {\n            event.preventDefault();\n            event.stopPropagation();\n\n            this._onSubmitMessage();\n        }\n    }\n\n    _onSubmitMessageKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onSubmitMessageKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onSubmitMessage();\n        }\n    }\n\n    _onMessageChange: (Object) => void;\n\n    /**\n     * Updates the known message the user is drafting.\n     *\n     * @param {string} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onMessageChange(event) {\n        this.setState({ message: event.target.value });\n    }\n\n    _onSmileySelect: (string) => void;\n\n    /**\n     * Appends a selected smileys to the chat message draft.\n     *\n     * @param {string} smileyText - The value of the smiley to append to the\n     * chat message.\n     * @private\n     * @returns {void}\n     */\n    _onSmileySelect(smileyText) {\n        if (smileyText) {\n            this.setState({\n                message: `${this.state.message} ${smileyText}`,\n                showSmileysPanel: false\n            });\n        } else {\n            this.setState({\n                showSmileysPanel: false\n            });\n        }\n\n        this._focus();\n    }\n\n    _onToggleSmileysPanel: () => void;\n\n    /**\n     * Callback invoked to hide or show the smileys selector.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToggleSmileysPanel() {\n        if (this.state.showSmileysPanel) {\n            this._focus();\n        }\n        this.setState({ showSmileysPanel: !this.state.showSmileysPanel });\n    }\n\n    _onEscHandler: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onEscHandler(e) {\n        // Escape handling does not work in onKeyPress\n        if (this.state.showSmileysPanel && e.key === 'Escape') {\n            e.preventDefault();\n            e.stopPropagation();\n            this._onToggleSmileysPanel();\n        }\n    }\n\n    _onToggleSmileysPanelKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onToggleSmileysPanelKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onToggleSmileysPanel();\n        }\n    }\n\n    _setTextAreaRef: (?HTMLTextAreaElement) => void;\n\n    /**\n     * Sets the reference to the HTML TextArea.\n     *\n     * @param {HTMLAudioElement} textAreaElement - The HTML text area element.\n     * @private\n     * @returns {void}\n     */\n    _setTextAreaRef(textAreaElement: ?HTMLTextAreaElement) {\n        this._textArea = textAreaElement;\n    }\n}\n\nexport default translate(connect()(ChatInput));\n","// @flow\n\nimport React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { isIosMobileBrowser } from '../../../base/environment/utils';\n\nconst Avoider = styled.div`\n    height: ${props => props.elementHeight}px;\n`;\n\n/**\n * Component that renders an element to lift the chat input above the Safari keyboard,\n * computing the appropriate height comparisons based on the {@code visualViewport}.\n *\n * @returns {ReactElement}\n */\nfunction KeyboardAvoider() {\n    if (!isIosMobileBrowser()) {\n        return null;\n    }\n\n    const [ elementHeight, setElementHeight ] = useState(0);\n    const [ storedHeight, setStoredHeight ] = useState(window.innerHeight);\n\n    /**\n     * Handles the resizing of the visual viewport in order to compute\n     * the {@code KeyboardAvoider}'s height.\n     *\n     * @returns {void}\n     */\n    function handleViewportResize() {\n        const { innerWidth, visualViewport: { width, height } } = window;\n\n        // Compare the widths to make sure the {@code visualViewport} didn't resize due to zooming.\n        if (width === innerWidth) {\n            if (height < storedHeight) {\n                setElementHeight(storedHeight - height);\n            } else {\n                setElementHeight(0);\n            }\n            setStoredHeight(height);\n        }\n    }\n\n    useEffect(() => {\n        // Call the handler in case the keyboard is open when the {@code KeyboardAvoider} is mounted.\n        handleViewportResize();\n\n        window.visualViewport.addEventListener('resize', handleViewportResize);\n\n        return () => {\n            window.visualViewport.removeEventListener('resize', handleViewportResize);\n        };\n    }, []);\n\n    return <Avoider elementHeight = { elementHeight } />;\n}\n\nexport default KeyboardAvoider;\n","// @flow\n\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { updateSettings } from '../../../base/settings';\n\nimport KeyboardAvoider from './KeyboardAvoider';\n\n/**\n * The type of the React {@code Component} props of {@DisplayNameForm}.\n */\ntype Props = {\n\n    /**\n     * Invoked to set the local participant display name.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@DisplayNameForm}.\n */\ntype State = {\n\n    /**\n     * User provided display name when the input text is provided in the view.\n     */\n    displayName: string\n};\n\n/**\n * React Component for requesting the local participant to set a display name.\n *\n * @extends Component\n */\nclass DisplayNameForm extends Component<Props, State> {\n    state = {\n        displayName: ''\n    };\n\n    /**\n     * Initializes a new {@code DisplayNameForm} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDisplayNameChange = this._onDisplayNameChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div id = 'nickname'>\n                <form onSubmit = { this._onSubmit }>\n                    <FieldTextStateless\n                        aria-describedby = 'nickname-title'\n                        autoComplete = 'name'\n                        autoFocus = { true }\n                        compact = { true }\n                        id = 'nickinput'\n                        label = { t('chat.nickname.title') }\n                        onChange = { this._onDisplayNameChange }\n                        placeholder = { t('chat.nickname.popover') }\n                        shouldFitContainer = { true }\n                        type = 'text'\n                        value = { this.state.displayName } />\n                </form>\n                <div\n                    className = { `enter-chat${this.state.displayName.trim() ? '' : ' disabled'}` }\n                    onClick = { this._onSubmit }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    { t('chat.enter') }\n                </div>\n                <KeyboardAvoider />\n            </div>\n        );\n    }\n\n    _onDisplayNameChange: (Object) => void;\n\n    /**\n     * Dispatches an action update the entered display name.\n     *\n     * @param {event} event - Keyboard event.\n     * @private\n     * @returns {void}\n     */\n    _onDisplayNameChange(event: Object) {\n        this.setState({ displayName: event.target.value });\n    }\n\n    _onSubmit: (Object) => void;\n\n    /**\n     * Dispatches an action to hit enter to change your display name.\n     *\n     * @param {event} event - Keyboard event\n     * that will check if user has pushed the enter key.\n     * @private\n     * @returns {void}\n     */\n    _onSubmit(event: Object) {\n        event.preventDefault();\n\n        // Store display name in settings\n        this.props.dispatch(updateSettings({\n            displayName: this.state.displayName\n        }));\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            this._onSubmit(e);\n        }\n    }\n}\n\nexport default translate(connect()(DisplayNameForm));\n","// @flow\n\nimport { PureComponent } from 'react';\n\nexport type Props = {\n\n    /**\n     * The messages array to render.\n     */\n    messages: Array<Object>\n}\n\n/**\n * Abstract component to display a list of chat messages, grouped by sender.\n *\n * @extends PureComponent\n */\nexport default class AbstractMessageContainer<P: Props> extends PureComponent<P> {\n    static defaultProps = {\n        messages: []\n    };\n\n    /**\n     * Iterates over all the messages and creates nested arrays which hold\n     * consecutive messages sent by the same participant.\n     *\n     * @private\n     * @returns {Array<Array<Object>>}\n     */\n    _getMessagesGroupedBySender() {\n        const messagesCount = this.props.messages.length;\n        const groups = [];\n        let currentGrouping = [];\n        let currentGroupParticipantId;\n\n        for (let i = 0; i < messagesCount; i++) {\n            const message = this.props.messages[i];\n\n            if (message.id === currentGroupParticipantId) {\n                currentGrouping.push(message);\n            } else {\n                currentGrouping.length && groups.push(currentGrouping);\n\n                currentGrouping = [ message ];\n                currentGroupParticipantId = message.id;\n            }\n        }\n\n        currentGrouping.length && groups.push(currentGrouping);\n\n        return groups;\n    }\n}\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { getLocalizedDateFormatter } from '../../base/i18n';\nimport { MESSAGE_TYPE_ERROR, MESSAGE_TYPE_LOCAL } from '../constants';\n\n/**\n * Formatter string to display the message timestamp.\n */\nconst TIMESTAMP_FORMAT = 'H:mm';\n\n/**\n * The type of the React {@code Component} props of {@code AbstractChatMessage}.\n */\nexport type Props = {\n\n    /**\n     * The representation of a chat message.\n     */\n    message: Object,\n\n    /**\n     * Whether or not the avatar image of the participant which sent the message\n     * should be displayed.\n     */\n    showAvatar: boolean,\n\n    /**\n     * Whether or not the name of the participant which sent the message should\n     * be displayed.\n     */\n    showDisplayName: boolean,\n\n    /**\n     * Whether or not the time at which the message was sent should be\n     * displayed.\n     */\n    showTimestamp: boolean,\n\n    /**\n     * Invoked to receive translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract component to display a chat message.\n */\nexport default class AbstractChatMessage<P: Props> extends PureComponent<P> {\n    /**\n     * Returns the timestamp to display for the message.\n     *\n     * @returns {string}\n     */\n    _getFormattedTimestamp() {\n        return getLocalizedDateFormatter(new Date(this.props.message.timestamp))\n            .format(TIMESTAMP_FORMAT);\n    }\n\n    /**\n     * Generates the message text to be rendered in the component.\n     *\n     * @returns {string}\n     */\n    _getMessageText() {\n        const { message } = this.props;\n\n        return message.messageType === MESSAGE_TYPE_ERROR\n            ? this.props.t('chat.error', {\n                error: message.message\n            })\n            : message.message;\n    }\n\n    /**\n     * Returns the message that is displayed as a notice for private messages.\n     *\n     * @returns {string}\n     */\n    _getPrivateNoticeMessage() {\n        const { message, t } = this.props;\n\n        return t('chat.privateNotice', {\n            recipient: message.messageType === MESSAGE_TYPE_LOCAL ? message.recipient : t('chat.you')\n        });\n    }\n}\n","// @flow\n\nimport React from 'react';\nimport { toArray } from 'react-emoji-render';\n\n\nimport { translate } from '../../../base/i18n';\nimport { Linkify } from '../../../base/react';\nimport { MESSAGE_TYPE_LOCAL } from '../../constants';\nimport AbstractChatMessage, {\n    type Props\n} from '../AbstractChatMessage';\nimport PrivateMessageButton from '../PrivateMessageButton';\n\n/**\n * Renders a single chat message.\n */\nclass ChatMessage extends AbstractChatMessage<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { message, t } = this.props;\n        const processedMessage = [];\n\n        // content is an array of text and emoji components\n        const content = toArray(this._getMessageText(), { className: 'smiley' });\n\n        content.forEach(i => {\n            if (typeof i === 'string') {\n                processedMessage.push(<Linkify key = { i }>{ i }</Linkify>);\n            } else {\n                processedMessage.push(i);\n            }\n        });\n\n        return (\n            <div\n                className = 'chatmessage-wrapper'\n                tabIndex = { -1 }>\n                <div className = { `chatmessage ${message.privateMessage ? 'privatemessage' : ''}` }>\n                    <div className = 'replywrapper'>\n                        <div className = 'messagecontent'>\n                            { this.props.showDisplayName && this._renderDisplayName() }\n                            <div className = 'usermessage'>\n                                <span className = 'sr-only'>\n                                    { this.props.message.displayName === this.props.message.recipient\n                                        ? t('chat.messageAccessibleTitleMe')\n                                        : t('chat.messageAccessibleTitle',\n                                        { user: this.props.message.displayName }) }\n                                </span>\n                                { processedMessage }\n                            </div>\n                            { message.privateMessage && this._renderPrivateNotice() }\n                        </div>\n                        { message.privateMessage && message.messageType !== MESSAGE_TYPE_LOCAL\n                            && (\n                                <div className = 'messageactions'>\n                                    <PrivateMessageButton\n                                        participantID = { message.id }\n                                        reply = { true }\n                                        showLabel = { false } />\n                                </div>\n                            ) }\n                    </div>\n                </div>\n                { this.props.showTimestamp && this._renderTimestamp() }\n            </div>\n        );\n    }\n\n    _getFormattedTimestamp: () => string;\n\n    _getMessageText: () => string;\n\n    _getPrivateNoticeMessage: () => string;\n\n    /**\n     * Renders the display name of the sender.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderDisplayName() {\n        return (\n            <div\n                aria-hidden = { true }\n                className = 'display-name'>\n                { this.props.message.displayName }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the message privacy notice.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderPrivateNotice() {\n        return (\n            <div className = 'privatemessagenotice'>\n                { this._getPrivateNoticeMessage() }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the time at which the message was sent.\n     *\n     * @returns {React$Element<*>}\n     */\n    _renderTimestamp() {\n        return (\n            <div className = 'timestamp'>\n                { this._getFormattedTimestamp() }\n            </div>\n        );\n    }\n}\n\nexport default translate(ChatMessage);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport ChatMessage from './ChatMessage';\n\ntype Props = {\n\n    /**\n     * Additional CSS classes to apply to the root element.\n     */\n    className: string,\n\n    /**\n     * The messages to display as a group.\n     */\n    messages: Array<Object>,\n};\n\n/**\n * Displays a list of chat messages. Will show only the display name for the\n * first chat message and the timestamp for the last chat message.\n *\n * @extends React.Component\n */\nclass ChatMessageGroup extends Component<Props> {\n    static defaultProps = {\n        className: ''\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { className, messages } = this.props;\n\n        const messagesLength = messages.length;\n\n        if (!messagesLength) {\n            return null;\n        }\n\n        return (\n            <div className = { `chat-message-group ${className}` }>\n                {\n                    messages.map((message, i) => (\n                        <ChatMessage\n                            key = { i }\n                            message = { message }\n                            showDisplayName = { i === 0 }\n                            showTimestamp = { i === messages.length - 1 } />\n                    ))\n                }\n            </div>\n        );\n    }\n}\n\nexport default ChatMessageGroup;\n","// @flow\n\nimport React from 'react';\n\nimport { MESSAGE_TYPE_REMOTE } from '../../constants';\nimport AbstractMessageContainer, { type Props }\n    from '../AbstractMessageContainer';\n\nimport ChatMessageGroup from './ChatMessageGroup';\n\n/**\n * Displays all received chat messages, grouped by sender.\n *\n * @extends AbstractMessageContainer\n */\nexport default class MessageContainer extends AbstractMessageContainer<Props> {\n    /**\n     * Whether or not chat has been scrolled to the bottom of the screen. Used\n     * to determine if chat should be scrolled automatically to the bottom when\n     * the {@code ChatInput} resizes.\n     */\n    _isScrolledToBottom: boolean;\n\n    /**\n     * Reference to the HTML element at the end of the list of displayed chat\n     * messages. Used for scrolling to the end of the chat messages.\n     */\n    _messagesListEndRef: Object;\n\n    /**\n     * A React ref to the HTML element containing all {@code ChatMessageGroup}\n     * instances.\n     */\n    _messageListRef: Object;\n\n    /**\n     * Initializes a new {@code MessageContainer} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code MessageContainer} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._isScrolledToBottom = true;\n\n        this._messageListRef = React.createRef();\n        this._messagesListEndRef = React.createRef();\n\n        this._onChatScroll = this._onChatScroll.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const groupedMessages = this._getMessagesGroupedBySender();\n        const messages = groupedMessages.map((group, index) => {\n            const messageType = group[0] && group[0].messageType;\n\n            return (\n                <ChatMessageGroup\n                    className = { messageType || MESSAGE_TYPE_REMOTE }\n                    key = { index }\n                    messages = { group } />\n            );\n        });\n\n        return (\n            <div\n                aria-labelledby = 'chat-header'\n                id = 'chatconversation'\n                onScroll = { this._onChatScroll }\n                ref = { this._messageListRef }\n                role = 'log'\n                tabIndex = { 0 }>\n                { messages }\n                <div ref = { this._messagesListEndRef } />\n            </div>\n        );\n    }\n\n    /**\n     * Scrolls to the bottom again if the instance had previously been scrolled\n     * to the bottom. This method is used when a resize has occurred below the\n     * instance and bottom scroll needs to be maintained.\n     *\n     * @returns {void}\n     */\n    maybeUpdateBottomScroll() {\n        if (this._isScrolledToBottom) {\n            this.scrollToBottom(false);\n        }\n    }\n\n    /**\n     * Automatically scrolls the displayed chat messages down to the latest.\n     *\n     * @param {boolean} withAnimation - Whether or not to show a scrolling\n     * animation.\n     * @returns {void}\n     */\n    scrollToBottom(withAnimation: boolean) {\n        this._messagesListEndRef.current.scrollIntoView({\n            behavior: withAnimation ? 'smooth' : 'auto',\n            block: 'nearest'\n        });\n    }\n\n    _getMessagesGroupedBySender: () => Array<Array<Object>>;\n\n    _onChatScroll: () => void;\n\n    /**\n     * Callback invoked to listen to the current scroll location.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onChatScroll() {\n        const element = this._messageListRef.current;\n\n        this._isScrolledToBottom\n            = element.scrollHeight - element.scrollTop === element.clientHeight;\n    }\n}\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { getParticipantDisplayName } from '../../base/participants';\nimport { setPrivateMessageRecipient } from '../actions';\n\nexport type Props = {\n\n    /**\n     * Function used to translate i18n labels.\n     */\n    t: Function,\n\n    /**\n     * Function to remove the recipent setting of the chat window.\n     */\n    _onRemovePrivateMessageRecipient: Function,\n\n    /**\n     * The name of the message recipient, if any.\n     */\n    _privateMessageRecipient: ?string\n};\n\n/**\n * Abstract class for the {@code MessageRecipient} component.\n */\nexport default class AbstractMessageRecipient<P: Props> extends PureComponent<P> {\n\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _onRemovePrivateMessageRecipient: () => {\n            dispatch(setPrivateMessageRecipient());\n        }\n    };\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object): $Shape<Props> {\n    const { privateMessageRecipient } = state['features/chat'];\n\n    return {\n        _privateMessageRecipient:\n            privateMessageRecipient ? getParticipantDisplayName(state, privateMessageRecipient.id) : undefined\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconCancelSelection } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport AbstractMessageRecipient, {\n    _mapDispatchToProps,\n    _mapStateToProps,\n    type Props\n} from '../AbstractMessageRecipient';\n\n/**\n * Class to implement the displaying of the recipient of the next message.\n */\nclass MessageRecipient extends AbstractMessageRecipient<Props> {\n    /**\n     * Initializes a new {@code MessageRecipient} instance.\n     *\n     * @param {*} props - The read-only properties with which the new instance\n     * is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (this.props._onRemovePrivateMessageRecipient && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            this.props._onRemovePrivateMessageRecipient();\n        }\n    }\n\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _privateMessageRecipient } = this.props;\n\n        if (!_privateMessageRecipient) {\n            return null;\n        }\n\n        const { t } = this.props;\n\n        return (\n            <div\n                id = 'chat-recipient'\n                role = 'alert'>\n                <span>\n                    { t('chat.messageTo', {\n                        recipient: _privateMessageRecipient\n                    }) }\n                </span>\n                <div\n                    aria-label = { t('dialog.close') }\n                    onClick = { this.props._onRemovePrivateMessageRecipient }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    <Icon\n                        src = { IconCancelSelection } />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(MessageRecipient));\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { toggleChat } from '../../actions.web';\nimport AbstractChat, {\n    _mapStateToProps,\n    type Props\n} from '../AbstractChat';\n\nimport ChatDialog from './ChatDialog';\nimport Header from './ChatDialogHeader';\nimport ChatInput from './ChatInput';\nimport DisplayNameForm from './DisplayNameForm';\nimport KeyboardAvoider from './KeyboardAvoider';\nimport MessageContainer from './MessageContainer';\nimport MessageRecipient from './MessageRecipient';\nimport TouchmoveHack from './TouchmoveHack';\n\n/**\n * React Component for holding the chat feature in a side panel that slides in\n * and out of view.\n */\nclass Chat extends AbstractChat<Props> {\n\n    /**\n     * Whether or not the {@code Chat} component is off-screen, having finished\n     * its hiding animation.\n     */\n    _isExited: boolean;\n\n    /**\n     * Reference to the React Component for displaying chat messages. Used for\n     * scrolling to the end of the chat messages.\n     */\n    _messageContainerRef: Object;\n\n    /**\n     * Initializes a new {@code Chat} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._isExited = true;\n        this._messageContainerRef = React.createRef();\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._renderPanelContent = this._renderPanelContent.bind(this);\n        this._onChatInputResize = this._onChatInputResize.bind(this);\n        this._onEscClick = this._onEscClick.bind(this);\n        this._onToggleChat = this._onToggleChat.bind(this);\n    }\n\n    /**\n     * Implements {@code Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._scrollMessageContainerToBottom(true);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props._messages !== prevProps._messages) {\n            this._scrollMessageContainerToBottom(true);\n        } else if (this.props._isOpen && !prevProps._isOpen) {\n            this._scrollMessageContainerToBottom(false);\n        }\n    }\n    _onEscClick: (KeyboardEvent) => void;\n\n    /**\n     * Click handler for the chat sidenav.\n     *\n     * @param {KeyboardEvent} event - Esc key click to close the popup.\n     * @returns {void}\n     */\n    _onEscClick(event) {\n        if (event.key === 'Escape' && this.props._isOpen) {\n            event.preventDefault();\n            event.stopPropagation();\n            this._onToggleChat();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <>\n                { this._renderPanelContent() }\n            </>\n        );\n    }\n\n    _onChatInputResize: () => void;\n\n    /**\n     * Callback invoked when {@code ChatInput} changes height. Preserves\n     * displaying the latest message if it is scrolled to.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onChatInputResize() {\n        this._messageContainerRef.current.maybeUpdateBottomScroll();\n    }\n\n    /**\n     * Returns a React Element for showing chat messages and a form to send new\n     * chat messages.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderChat() {\n        return (\n            <>\n                <TouchmoveHack isModal = { this.props._isModal }>\n                    <MessageContainer\n                        messages = { this.props._messages }\n                        ref = { this._messageContainerRef } />\n                </TouchmoveHack>\n                <MessageRecipient />\n                <ChatInput\n                    onResize = { this._onChatInputResize }\n                    onSend = { this._onSendMessage } />\n                <KeyboardAvoider />\n            </>\n        );\n    }\n\n    /**\n     * Instantiates a React Element to display at the top of {@code Chat} to\n     * close {@code Chat}.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderChatHeader() {\n        return (\n            <Header\n                className = 'chat-header'\n                id = 'chat-header'\n                onCancel = { this._onToggleChat } />\n        );\n    }\n\n    _renderPanelContent: () => React$Node | null;\n\n    /**\n     * Renders the contents of the chat panel.\n     *\n     * @private\n     * @returns {ReactElement | null}\n     */\n    _renderPanelContent() {\n        const { _isModal, _isOpen, _showNamePrompt } = this.props;\n        let ComponentToRender = null;\n\n        if (_isOpen) {\n            if (_isModal) {\n                ComponentToRender = (\n                    <ChatDialog>\n                        { _showNamePrompt ? <DisplayNameForm /> : this._renderChat() }\n                    </ChatDialog>\n                );\n            } else {\n                ComponentToRender = (\n                    <>\n                        { this._renderChatHeader() }\n                        { _showNamePrompt ? <DisplayNameForm /> : this._renderChat() }\n                    </>\n                );\n            }\n        }\n        let className = '';\n\n        if (_isOpen) {\n            className = 'slideInExt';\n        } else if (this._isExited) {\n            className = 'invisible';\n        }\n\n        return (\n            <div\n                aria-haspopup = 'true'\n                className = { `sideToolbarContainer ${className}` }\n                id = 'sideToolbarContainer'\n                onKeyDown = { this._onEscClick } >\n                { ComponentToRender }\n            </div>\n        );\n    }\n\n    /**\n     * Scrolls the chat messages so the latest message is visible.\n     *\n     * @param {boolean} withAnimation - Whether or not to show a scrolling\n     * animation.\n     * @private\n     * @returns {void}\n     */\n    _scrollMessageContainerToBottom(withAnimation) {\n        if (this._messageContainerRef.current) {\n            this._messageContainerRef.current.scrollToBottom(withAnimation);\n        }\n    }\n\n    _onSendMessage: (string) => void;\n\n    _onToggleChat: () => void;\n\n    /**\n    * Toggles the chat window.\n    *\n    * @returns {Function}\n    */\n    _onToggleChat() {\n        this.props.dispatch(toggleChat());\n    }\n\n}\n\nexport default translate(connect(_mapStateToProps)(Chat));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../../base/redux';\nimport { getUnreadCount } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of {@link ChatCounter}.\n */\ntype Props = {\n\n    /**\n     * The value of to display as a count.\n     */\n    _count: number,\n\n    /**\n     * True if the chat window should be rendered.\n     */\n    _isOpen: boolean\n};\n\n/**\n * Implements a React {@link Component} which displays a count of the number of\n * unread chat messages.\n *\n * @extends Component\n */\nclass ChatCounter extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <span className = 'badge-round'>\n\n                <span>\n                    {\n                        !this.props._isOpen\n                        && (this.props._count || null)\n                    }\n                </span>\n            </span>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code ChatCounter}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _count: number\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { isOpen } = state['features/chat'];\n\n    return {\n        _count: getUnreadCount(state),\n        _isOpen: isOpen\n    };\n}\n\nexport default connect(_mapStateToProps)(ChatCounter);\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconChat } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\n\nimport ChatCounter from './ChatCounter';\n\n/**\n * The type of the React {@code Component} props of {@link ChatButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether or not the chat feature is currently displayed.\n     */\n     _chatOpen: boolean,\n\n    /**\n     * External handler for click action.\n     */\n    handleClick: Function\n};\n\n/**\n * Implementation of a button for accessing chat pane.\n */\nclass ChatButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.chat';\n    icon = IconChat;\n    label = 'toolbar.openChat';\n    toggledLabel = 'toolbar.closeChat';\n\n    /**\n     * Retrieves tooltip dynamically.\n     */\n    get tooltip() {\n        if (this._isToggled()) {\n            return 'toolbar.closeChat';\n        }\n\n        return 'toolbar.openChat';\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._chatOpen;\n    }\n\n    /**\n     * Overrides AbstractButton's {@link Component#render()}.\n     *\n     * @override\n     * @protected\n     * @returns {boReact$Nodeolean}\n     */\n    render(): React$Node {\n        return (\n            <div\n                className = 'toolbar-button-with-badge'\n                key = 'chatcontainer'>\n                {super.render()}\n                <ChatCounter />\n            </div>\n        );\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst mapStateToProps = state => {\n    return {\n        _chatOpen: state['features/chat'].isOpen\n    };\n};\n\nexport default translate(connect(mapStateToProps)(ChatButton));\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { getParticipantById } from '../../base/participants';\nimport { sendMessage, setPrivateMessageRecipient } from '../actions';\n\ntype Props = {\n\n    /**\n     * The message that is about to be sent.\n     */\n    message: Object,\n\n    /**\n     * The ID of the participant that we think the message may be intended to.\n     */\n    participantID: string,\n\n    /**\n     * Function to be used to translate i18n keys.\n     */\n    t: Function,\n\n    /**\n     * Prop to be invoked on sending the message.\n     */\n    _onSendMessage: Function,\n\n    /**\n     * Prop to be invoked when the user wants to set a private recipient.\n     */\n    _onSetMessageRecipient: Function,\n\n    /**\n     * The participant retrieved from Redux by the participanrID prop.\n     */\n    _participant: Object\n};\n\n/**\n * Abstract class for the dialog displayed to avoid mis-sending private messages.\n */\nexport class AbstractChatPrivacyDialog extends PureComponent<Props> {\n    /**\n     * Instantiates a new instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSendGroupMessage = this._onSendGroupMessage.bind(this);\n        this._onSendPrivateMessage = this._onSendPrivateMessage.bind(this);\n    }\n\n    _onSendGroupMessage: () => boolean;\n\n    /**\n     * Callback to be invoked for cancel action (user wants to send a group message).\n     *\n     * @returns {boolean}\n     */\n    _onSendGroupMessage() {\n        this.props._onSendMessage(this.props.message);\n\n        return true;\n    }\n\n    _onSendPrivateMessage: () => boolean;\n\n    /**\n     * Callback to be invoked for submit action (user wants to send a private message).\n     *\n     * @returns {void}\n     */\n    _onSendPrivateMessage() {\n        const { message, _onSendMessage, _onSetMessageRecipient, _participant } = this.props;\n\n        _onSetMessageRecipient(_participant);\n        _onSendMessage(message);\n\n        return true;\n    }\n}\n\n/**\n * Maps part of the props of this component to Redux actions.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Props}\n */\nexport function _mapDispatchToProps(dispatch: Function): $Shape<Props> {\n    return {\n        _onSendMessage: (message: Object) => {\n            dispatch(sendMessage(message, true));\n        },\n\n        _onSetMessageRecipient: participant => {\n            dispatch(setPrivateMessageRecipient(participant));\n        }\n    };\n}\n\n/**\n * Maps part of the Redux store to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): $Shape<Props> {\n    return {\n        _participant: getParticipantById(state, ownProps.participantID)\n    };\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport { AbstractChatPrivacyDialog, _mapDispatchToProps, _mapStateToProps } from '../AbstractChatPrivacyDialog';\n\n/**\n * Implements a component for the dialog displayed to avoid mis-sending private messages.\n */\nclass ChatPrivacyDialog extends AbstractChatPrivacyDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                cancelKey = 'dialog.sendPrivateMessageCancel'\n                okKey = 'dialog.sendPrivateMessageOk'\n                onCancel = { this._onSendGroupMessage }\n                onSubmit = { this._onSendPrivateMessage }\n                titleKey = 'dialog.sendPrivateMessageTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.sendPrivateMessage') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSendGroupMessage: () => boolean;\n\n    _onSendPrivateMessage: () => boolean;\n}\n\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(ChatPrivacyDialog));\n","/**\n * The name for Redux store key used by the 'base/net-info' feature.\n *\n * @type {string}\n */\nexport const STORE_NAME = 'features/base/net-info';\n","/* global APP, JitsiMeetJS, config */\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport Logger from 'jitsi-meet-logger';\n\nimport { redirectToTokenAuthService } from './modules/UI/authentication/AuthHandler';\nimport { LoginDialog } from './react/features/authentication/components';\nimport { isTokenAuthEnabled } from './react/features/authentication/functions';\nimport {\n    connectionEstablished,\n    connectionFailed\n} from './react/features/base/connection/actions';\nimport { openDialog } from './react/features/base/dialog/actions';\nimport { setJWT } from './react/features/base/jwt';\nimport {\n    isFatalJitsiConnectionError,\n    JitsiConnectionErrors,\n    JitsiConnectionEvents\n} from './react/features/base/lib-jitsi-meet';\nimport { isVpaasMeeting, getJaasJWT } from './react/features/jaas/functions';\nimport { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';\nconst logger = Logger.getLogger(__filename);\n\n/**\n * The feature announced so we can distinguish jibri participants.\n *\n * @type {string}\n */\nexport const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';\n\n/**\n * Checks if we have data to use attach instead of connect. If we have the data\n * executes attach otherwise check if we have to wait for the data. If we have\n * to wait for the attach data we are setting handler to APP.connect.handler\n * which is going to be called when the attach data is received otherwise\n * executes connect.\n *\n * @param {string} [id] user id\n * @param {string} [password] password\n * @param {string} [roomName] the name of the conference.\n */\nfunction checkForAttachParametersAndConnect(id, password, connection) {\n    if (window.XMPPAttachInfo) {\n        APP.connect.status = 'connecting';\n\n        // When connection optimization is not deployed or enabled the default\n        // value will be window.XMPPAttachInfo.status = \"error\"\n        // If the connection optimization is deployed and enabled and there is\n        // a failure the value will be window.XMPPAttachInfo.status = \"error\"\n        if (window.XMPPAttachInfo.status === 'error') {\n            connection.connect({\n                id,\n                password\n            });\n\n            return;\n        }\n\n        const attachOptions = window.XMPPAttachInfo.data;\n\n        if (attachOptions) {\n            connection.attach(attachOptions);\n            delete window.XMPPAttachInfo.data;\n        } else {\n            connection.connect({\n                id,\n                password\n            });\n        }\n    } else {\n        APP.connect.status = 'ready';\n        APP.connect.handler\n            = checkForAttachParametersAndConnect.bind(\n                null,\n                id, password, connection);\n    }\n}\n\n/**\n * Try to open connection using provided credentials.\n * @param {string} [id]\n * @param {string} [password]\n * @param {string} [roomName]\n * @returns {Promise<JitsiConnection>} connection if\n * everything is ok, else error.\n */\nexport async function connect(id, password, roomName) {\n    const connectionConfig = Object.assign({}, config);\n    const state = APP.store.getState();\n    let { jwt } = state['features/base/jwt'];\n    const { iAmRecorder, iAmSipGateway } = state['features/base/config'];\n\n    if (!iAmRecorder && !iAmSipGateway && !jwt && isVpaasMeeting(state)) {\n        jwt = await getJaasJWT(state);\n        APP.store.dispatch(setJWT(jwt));\n    }\n\n    // Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption\n    // that this code executes only on web browsers/electron. This needs to be changed when mobile and web are unified.\n    let serviceUrl = connectionConfig.websocket || connectionConfig.bosh;\n\n    serviceUrl += `?room=${roomName}`;\n\n    // FIXME Remove deprecated 'bosh' option assignment at some point(LJM will be accepting only 'serviceUrl' option\n    //  in future). It's included for the time being for Jitsi Meet and lib-jitsi-meet versions interoperability.\n    connectionConfig.serviceUrl = connectionConfig.bosh = serviceUrl;\n\n    if (connectionConfig.websocketKeepAliveUrl) {\n        connectionConfig.websocketKeepAliveUrl += `?room=${roomName}`;\n    }\n\n    const connection = new JitsiMeetJS.JitsiConnection(null, jwt, connectionConfig);\n\n    if (config.iAmRecorder) {\n        connection.addFeature(DISCO_JIBRI_FEATURE);\n    }\n\n    return new Promise((resolve, reject) => {\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n            handleConnectionEstablished);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            handleConnectionFailed);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            connectionFailedHandler);\n        connection.addEventListener(\n            JitsiConnectionEvents.DISPLAY_NAME_REQUIRED,\n            displayNameRequiredHandler\n        );\n\n        /* eslint-disable max-params */\n        /**\n         *\n         */\n        function connectionFailedHandler(error, message, credentials, details) {\n        /* eslint-enable max-params */\n            APP.store.dispatch(\n                connectionFailed(\n                    connection, {\n                        credentials,\n                        details,\n                        message,\n                        name: error\n                    }));\n\n            if (isFatalJitsiConnectionError(error)) {\n                connection.removeEventListener(\n                    JitsiConnectionEvents.CONNECTION_FAILED,\n                    connectionFailedHandler);\n            }\n        }\n\n        /**\n         *\n         */\n        function unsubscribe() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n                handleConnectionEstablished);\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_FAILED,\n                handleConnectionFailed);\n        }\n\n        /**\n         *\n         */\n        function handleConnectionEstablished() {\n            APP.store.dispatch(connectionEstablished(connection, Date.now()));\n            unsubscribe();\n            resolve(connection);\n        }\n\n        /**\n         *\n         */\n        function handleConnectionFailed(err) {\n            unsubscribe();\n            logger.error('CONNECTION FAILED:', err);\n            reject(err);\n        }\n\n        /**\n         * Marks the display name for the prejoin screen as required.\n         * This can happen if a user tries to join a room with lobby enabled.\n         */\n        function displayNameRequiredHandler() {\n            APP.store.dispatch(setPrejoinDisplayNameRequired());\n        }\n\n        checkForAttachParametersAndConnect(id, password, connection);\n    });\n}\n\n/**\n * Open JitsiConnection using provided credentials.\n * If retry option is true it will show auth dialog on PASSWORD_REQUIRED error.\n *\n * @param {object} options\n * @param {string} [options.id]\n * @param {string} [options.password]\n * @param {string} [options.roomName]\n * @param {boolean} [retry] if we should show auth dialog\n * on PASSWORD_REQUIRED error.\n *\n * @returns {Promise<JitsiConnection>}\n */\nexport function openConnection({ id, password, retry, roomName }) {\n    const usernameOverride\n        = jitsiLocalStorage.getItem('xmpp_username_override');\n    const passwordOverride\n        = jitsiLocalStorage.getItem('xmpp_password_override');\n\n    if (usernameOverride && usernameOverride.length > 0) {\n        id = usernameOverride; // eslint-disable-line no-param-reassign\n    }\n    if (passwordOverride && passwordOverride.length > 0) {\n        password = passwordOverride; // eslint-disable-line no-param-reassign\n    }\n\n    return connect(id, password, roomName).catch(err => {\n        if (retry) {\n            const { jwt } = APP.store.getState()['features/base/jwt'];\n\n            if (err === JitsiConnectionErrors.PASSWORD_REQUIRED && !jwt) {\n                return requestAuth(roomName);\n            }\n        }\n\n        throw err;\n    });\n}\n\n/**\n * Show Authentication Dialog and try to connect with new credentials.\n * If failed to connect because of PASSWORD_REQUIRED error\n * then ask for password again.\n * @param {string} [roomName] name of the conference room\n *\n * @returns {Promise<JitsiConnection>}\n */\nfunction requestAuth(roomName) {\n    const config = APP.store.getState()['features/base/config'];\n\n    if (isTokenAuthEnabled(config)) {\n        // This Promise never resolves as user gets redirected to another URL\n        return new Promise(() => redirectToTokenAuthService(roomName));\n    }\n\n    return new Promise(resolve => {\n        const onSuccess = connection => {\n            resolve(connection);\n        };\n\n        APP.store.dispatch(\n            openDialog(LoginDialog, { onSuccess,\n                roomName })\n        );\n    });\n}\n","/**\n * Think of this as the motion equivalent of the @atlaskit/theme `grid()`.\n */\nexport var durationStep = 25;\nexport var smallDurationMs = durationStep * 4;\nexport var mediumDurationMs = durationStep * 14;\nexport var largeDurationMs = durationStep * 28;","/**\n * Action used to store jaas customer details\n */\nexport const SET_DETAILS = 'SET_DETAILS';\n","// @flow\n\nimport { Transport } from '../../../modules/transport';\n\nimport {\n    SET_TRANSPORT,\n    SUSPEND_DETECTED\n} from './actionTypes';\n\n/**\n * Signals that suspend was detected.\n *\n * @public\n * @returns {{\n *     type: SUSPEND_DETECTED\n * }}\n */\nexport function suspendDetected() {\n    return {\n        type: SUSPEND_DETECTED\n    };\n}\n\n/**\n * Signals setting of a transport.\n *\n * @param {Transport} transport - The transport to save in the state.\n * @returns {{\n *      transport: Transport,\n *      type: string\n *  }}\n */\nexport function setTransport(transport: ?Transport) {\n    return {\n        type: SET_TRANSPORT,\n        transport\n    };\n}\n","// @flow\n\nimport Video from './web/Video';\n\nexport default Video;\n","export * from './functions';\n","// @flow\n\nimport { CFG_LVL_TO_APP_QUALITY_LVL, VIDEO_QUALITY_LEVELS } from './constants';\n\nconst { LOW, STANDARD, HIGH, ULTRA } = VIDEO_QUALITY_LEVELS;\nconst videoQualityLevels = [ LOW, STANDARD, HIGH, ULTRA ];\n\n/**\n * Finds the nearest video quality level to the passed video quality.\n *\n * @param {number} videoQuality - The video quality.\n * @returns {number|undefined} - The found quality level.\n */\nexport function findNearestQualityLevel(videoQuality: number) {\n    for (let i = 0; i < videoQualityLevels.length; i++) {\n        const level = videoQualityLevels[i];\n\n        if (level >= videoQuality) {\n            return level;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Selects {@code VIDEO_QUALITY_LEVELS} for the given {@link availableHeight} and threshold to quality mapping.\n *\n * @param {number} availableHeight - The height to which a matching video quality level should be found.\n * @param {Map<number, number>} heightToLevel - The threshold to quality level mapping. The keys are sorted in the\n * ascending order.\n * @returns {number} The matching value from {@code VIDEO_QUALITY_LEVELS}.\n */\nexport function getReceiverVideoQualityLevel(availableHeight: number, heightToLevel: Map<number, number>): number {\n    let selectedLevel = VIDEO_QUALITY_LEVELS.LOW;\n\n    for (const [ levelThreshold, level ] of heightToLevel.entries()) {\n        if (availableHeight >= levelThreshold) {\n            selectedLevel = level;\n        }\n    }\n\n    return selectedLevel;\n}\n\n/**\n * Converts {@code Object} passed in the config which represents height thresholds to vide quality level mapping to\n * a {@code Map}.\n *\n * @param {Object} minHeightForQualityLvl - The 'config.videoQuality.minHeightForQualityLvl' Object from\n * the configuration. See config.js for more details.\n * @returns {Map<number, number>|undefined} - A mapping of minimal thumbnail height required for given quality level or\n * {@code undefined} if the map contains invalid values.\n */\nexport function validateMinHeightForQualityLvl(minHeightForQualityLvl: Object): ?Map<number, number> {\n    if (typeof minHeightForQualityLvl !== 'object'\n        || Object.keys(minHeightForQualityLvl).map(lvl => Number(lvl))\n            .find(lvl => lvl === null || isNaN(lvl) || lvl < 0)) {\n        return undefined;\n    }\n\n    const levelsSorted\n        = Object.keys(minHeightForQualityLvl)\n            .map(k => Number(k))\n            .sort((a, b) => a - b);\n    const map = new Map();\n\n    for (const level of levelsSorted) {\n        const configQuality = minHeightForQualityLvl[level];\n        const appQuality = CFG_LVL_TO_APP_QUALITY_LVL[configQuality];\n\n        if (!appQuality) {\n            return undefined;\n        }\n\n        map.set(level, appQuality);\n    }\n\n    return map;\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link TimeElapsed}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function,\n\n    /**\n     * The milliseconds to be converted into a human-readable format.\n     */\n    time: number\n};\n\n/**\n * React component for displaying total time elapsed. Converts a total count of\n * milliseconds into a more humanized form: \"# hours, # minutes, # seconds\".\n * With a time of 0, \"0s\" will be displayed.\n *\n * @extends Component\n */\nclass TimeElapsed extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { time } = this.props;\n        const hours = _getHoursCount(time);\n        const minutes = _getMinutesCount(time);\n        const seconds = _getSecondsCount(time);\n        const timeElapsed = [];\n\n        if (hours) {\n            const hourPassed\n                = this._createTimeDisplay(hours, 'speakerStats.hours', 'hours');\n\n            timeElapsed.push(hourPassed);\n        }\n\n        if (hours || minutes) {\n            const minutesPassed\n                = this._createTimeDisplay(\n                    minutes,\n                    'speakerStats.minutes',\n                    'minutes');\n\n            timeElapsed.push(minutesPassed);\n        }\n\n        const secondsPassed\n            = this._createTimeDisplay(\n                seconds,\n                'speakerStats.seconds',\n                'seconds');\n\n        timeElapsed.push(secondsPassed);\n\n        return (\n            <div>\n                { timeElapsed }\n            </div>\n        );\n    }\n\n    /**\n     * Returns a ReactElement to display the passed in count and a count noun.\n     *\n     * @private\n     * @param {number} count - The number used for display and to check for\n     * count noun plurality.\n     * @param {string} countNounKey - Translation key for the time's count noun.\n     * @param {string} countType - What is being counted. Used as the element's\n     * key for react to iterate upon.\n     * @returns {ReactElement}\n     */\n    _createTimeDisplay(count, countNounKey, countType) {\n        const { t } = this.props;\n\n        return (\n            <span key = { countType } >\n                { t(countNounKey, { count }) }\n            </span>\n        );\n    }\n}\n\nexport default translate(TimeElapsed);\n\n/**\n * Counts how many whole hours are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get hours from.\n * @private\n * @returns {number}\n */\nfunction _getHoursCount(milliseconds) {\n    return Math.floor(milliseconds / (60 * 60 * 1000));\n}\n\n/**\n * Counts how many whole minutes are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get minutes from.\n * @private\n * @returns {number}\n */\nfunction _getMinutesCount(milliseconds) {\n    return Math.floor(milliseconds / (60 * 1000) % 60);\n}\n\n/**\n * Counts how many whole seconds are included in the given time total.\n *\n * @param {number} milliseconds - The millisecond total to get seconds from.\n * @private\n * @returns {number}\n */\nfunction _getSecondsCount(milliseconds) {\n    return Math.floor(milliseconds / 1000 % 60);\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\nimport TimeElapsed from './TimeElapsed';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStatsItem}.\n */\ntype Props = {\n\n    /**\n     * The name of the participant.\n     */\n    displayName: string,\n\n    /**\n     * The total milliseconds the participant has been dominant speaker.\n     */\n    dominantSpeakerTime: number,\n\n    /**\n     * True if the participant is no longer in the meeting.\n     */\n    hasLeft: boolean,\n\n    /**\n     * True if the participant is currently the dominant speaker.\n     */\n    isDominantSpeaker: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React component for display an individual user's speaker stats.\n *\n * @extends Component\n */\nclass SpeakerStatsItem extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const hasLeftClass = this.props.hasLeft ? 'status-user-left' : '';\n        const rowDisplayClass = `speaker-stats-item ${hasLeftClass}`;\n\n        const dotClass = this.props.isDominantSpeaker\n            ? 'status-active' : 'status-inactive';\n        const speakerStatusClass = `speaker-stats-item__status-dot ${dotClass}`;\n\n        return (\n            <div className = { rowDisplayClass }>\n                <div className = 'speaker-stats-item__status'>\n                    <span className = { speakerStatusClass } />\n                </div>\n                <div\n                    aria-label = { this.props.t('speakerStats.speakerStats') }\n                    className = 'speaker-stats-item__name'>\n                    { this.props.displayName }\n                </div>\n                <div\n                    aria-label = { this.props.t('speakerStats.speakerTime') }\n                    className = 'speaker-stats-item__time'>\n                    <TimeElapsed\n                        time = { this.props.dominantSpeakerTime } />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(SpeakerStatsItem);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStatsLabels}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component for labeling speaker stats column items.\n *\n * @extends Component\n */\nclass SpeakerStatsLabels extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'speaker-stats-item__labels'>\n                <div className = 'speaker-stats-item__status' />\n                <div className = 'speaker-stats-item__name'>\n                    { t('speakerStats.name') }\n                </div>\n                <div className = 'speaker-stats-item__time'>\n                    { t('speakerStats.speakerTime') }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(SpeakerStatsLabels);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { getLocalParticipant } from '../../base/participants';\nimport { connect } from '../../base/redux';\n\nimport SpeakerStatsItem from './SpeakerStatsItem';\nimport SpeakerStatsLabels from './SpeakerStatsLabels';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStats}.\n */\ntype Props = {\n\n    /**\n     * The display name for the local participant obtained from the redux store.\n     */\n    _localDisplayName: string,\n\n    /**\n     * The JitsiConference from which stats will be pulled.\n     */\n    conference: Object,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link SpeakerStats}.\n */\ntype State = {\n\n    /**\n     * The stats summary provided by the JitsiConference.\n     */\n    stats: Object\n};\n\n/**\n * React component for displaying a list of speaker stats.\n *\n * @extends Component\n */\nclass SpeakerStats extends Component<Props, State> {\n    _updateInterval: IntervalID;\n\n    /**\n     * Initializes a new SpeakerStats instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            stats: this.props.conference.getSpeakerStats()\n        };\n\n        // Bind event handlers so they are only bound once per instance.\n        this._updateStats = this._updateStats.bind(this);\n    }\n\n    /**\n     * Begin polling for speaker stats updates.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._updateInterval = setInterval(this._updateStats, 1000);\n    }\n\n    /**\n     * Stop polling for speaker stats updates.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        clearInterval(this._updateInterval);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const userIds = Object.keys(this.state.stats);\n        const items = userIds.map(userId => this._createStatsItem(userId));\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'speakerStats.speakerStats'>\n                <div className = 'speaker-stats'>\n                    <SpeakerStatsLabels />\n                    { items }\n                </div>\n            </Dialog>\n        );\n    }\n\n    /**\n     * Create a SpeakerStatsItem instance for the passed in user id.\n     *\n     * @param {string} userId -  User id used to look up the associated\n     * speaker stats from the jitsi library.\n     * @returns {SpeakerStatsItem|null}\n     * @private\n     */\n    _createStatsItem(userId) {\n        const statsModel = this.state.stats[userId];\n\n        if (!statsModel) {\n            return null;\n        }\n\n        const isDominantSpeaker = statsModel.isDominantSpeaker();\n        const dominantSpeakerTime = statsModel.getTotalDominantSpeakerTime();\n        const hasLeft = statsModel.hasLeft();\n\n        let displayName;\n\n        if (statsModel.isLocalStats()) {\n            const { t } = this.props;\n            const meString = t('me');\n\n            displayName = this.props._localDisplayName;\n            displayName\n                = displayName ? `${displayName} (${meString})` : meString;\n        } else {\n            displayName\n                = this.state.stats[userId].getDisplayName()\n                    || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;\n        }\n\n        return (\n            <SpeakerStatsItem\n                displayName = { displayName }\n                dominantSpeakerTime = { dominantSpeakerTime }\n                hasLeft = { hasLeft }\n                isDominantSpeaker = { isDominantSpeaker }\n                key = { userId } />\n        );\n    }\n\n    _updateStats: () => void;\n\n    /**\n     * Update the internal state with the latest speaker stats.\n     *\n     * @returns {void}\n     * @private\n     */\n    _updateStats() {\n        const stats = this.props.conference.getSpeakerStats();\n\n        this.setState({ stats });\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated SpeakerStats's props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _localDisplayName: ?string\n * }}\n */\nfunction _mapStateToProps(state) {\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        /**\n         * The local display name.\n         *\n         * @private\n         * @type {string|undefined}\n         */\n        _localDisplayName: localParticipant && localParticipant.name\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(SpeakerStats));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconPresentation } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport SpeakerStats from './SpeakerStats';\n\n/**\n * The type of the React {@code Component} props of {@link SpeakerStatsButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n     _conference: Object,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Implementation of a button for opening speaker stats dialog.\n */\nclass SpeakerStatsButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.speakerStats';\n    icon = IconPresentation;\n    label = 'toolbar.speakerStats';\n    tooltip = 'toolbar.speakerStats';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { _conference, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('speaker.stats'));\n        dispatch(openDialog(SpeakerStats, {\n            conference: _conference\n        }));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code SpeakerStatsButton} component's props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Object}\n */\nfunction mapStateToProps(state) {\n    return {\n        _conference: state['features/base/conference'].conference\n    };\n}\n\nexport default translate(connect(mapStateToProps)(SpeakerStatsButton));\n","// @flow\n\nimport { translate } from '../../base/i18n';\nimport {\n    IconVideoQualityAudioOnly,\n    IconVideoQualityHD,\n    IconVideoQualityLD,\n    IconVideoQualitySD\n} from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { VIDEO_QUALITY_LEVELS } from '../constants';\nimport { findNearestQualityLevel } from '../functions';\n\n/**\n * A map of of selectable receive resolutions to corresponding icons.\n *\n * @private\n * @type {Object}\n */\nconst VIDEO_QUALITY_TO_ICON = {\n    [VIDEO_QUALITY_LEVELS.ULTRA]: IconVideoQualityHD,\n    [VIDEO_QUALITY_LEVELS.HIGH]: IconVideoQualityHD,\n    [VIDEO_QUALITY_LEVELS.STANDARD]: IconVideoQualitySD,\n    [VIDEO_QUALITY_LEVELS.LOW]: IconVideoQualityLD\n};\n\n/**\n * The type of the React {@code Component} props of\n * {@link VideoQualityButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * Whether or not audio only mode is currently enabled.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * The currently configured maximum quality resolution to be received from\n     * and sent to remote participants.\n     */\n    _videoQuality: number,\n\n    /**\n     * Callback to invoke when {@link VideoQualityButton} is clicked.\n     */\n     handleClick: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a button in the overflow\n * menu of the toolbar, including an icon showing the currently selected\n * max receive quality.\n *\n * @extends Component\n */\nclass VideoQualityButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.callQuality';\n    label = 'toolbar.callQuality';\n    tooltip = 'toolbar.callQuality';\n\n    /**\n     * Dynamically retrieves the icon.\n     */\n    get icon() {\n        const { _audioOnly, _videoQuality } = this.props;\n\n        const videoQualityLevel = findNearestQualityLevel(_videoQuality);\n\n        const icon = _audioOnly || !videoQualityLevel\n            ? IconVideoQualityAudioOnly\n            : VIDEO_QUALITY_TO_ICON[videoQualityLevel];\n\n        return icon;\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The icon value.\n     */\n    set icon(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code VideoQualityButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean,\n *     _videoQuality: number\n * }}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _audioOnly: state['features/base/audio-only'].enabled,\n        _videoQuality: state['features/video-quality'].preferredVideoQuality\n    };\n}\n\nexport default translate(\n    connect(_mapStateToProps)(VideoQualityButton));\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { setAudioOnly } from '../../base/audio-only';\nimport { translate } from '../../base/i18n';\nimport { setLastN, getLastNForQualityLevel } from '../../base/lastn';\nimport { connect } from '../../base/redux';\nimport { setPreferredVideoQuality } from '../actions';\nimport { DEFAULT_LAST_N, VIDEO_QUALITY_LEVELS } from '../constants';\nimport logger from '../logger';\n\nconst {\n    ULTRA,\n    HIGH,\n    STANDARD,\n    LOW\n} = VIDEO_QUALITY_LEVELS;\n\n/**\n * Creates an analytics event for a press of one of the buttons in the video\n * quality dialog.\n *\n * @param {string} quality - The quality which was selected.\n * @returns {Object} The event in a format suitable for sending via\n *      sendAnalytics.\n */\nconst createEvent = function(quality) {\n    return createToolbarEvent(\n        'video.quality',\n        {\n            quality\n        });\n};\n\n/**\n * The type of the React {@code Component} props of {@link VideoQualitySlider}.\n */\ntype Props = {\n\n    /**\n     * Whether or not the conference is in audio only mode.\n     */\n    _audioOnly: Boolean,\n\n    /**\n     * The channelLastN value configured for the conference.\n     */\n    _channelLastN: Number,\n\n    /**\n     * Whether or not the conference is in peer to peer mode.\n     */\n    _p2p: Boolean,\n\n    /**\n     * The currently configured maximum quality resolution to be sent and\n     * received from the remote participants.\n     */\n    _sendrecvVideoQuality: Number,\n\n    /**\n     * Invoked to request toggling of audio only mode.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a slider for selecting a\n * new receive video quality.\n *\n * @extends Component\n */\nclass VideoQualitySlider extends Component<Props> {\n    _sliderOptions: Array<Object>;\n\n    /**\n     * Initializes a new {@code VideoQualitySlider} instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._enableAudioOnly = this._enableAudioOnly.bind(this);\n        this._enableHighDefinition = this._enableHighDefinition.bind(this);\n        this._enableLowDefinition = this._enableLowDefinition.bind(this);\n        this._enableStandardDefinition\n            = this._enableStandardDefinition.bind(this);\n        this._enableUltraHighDefinition = this._enableUltraHighDefinition.bind(this);\n        this._onSliderChange = this._onSliderChange.bind(this);\n\n        /**\n         * An array of configuration options for displaying a choice in the\n         * input. The onSelect callback will be invoked when the option is\n         * selected and videoQuality helps determine which choice matches with\n         * the currently active quality level.\n         *\n         * @private\n         * @type {Object[]}\n         */\n        this._sliderOptions = [\n            {\n                audioOnly: true,\n                onSelect: this._enableAudioOnly,\n                textKey: 'audioOnly.audioOnly'\n            },\n            {\n                onSelect: this._enableLowDefinition,\n                textKey: 'videoStatus.lowDefinition',\n                videoQuality: LOW\n            },\n            {\n                onSelect: this._enableStandardDefinition,\n                textKey: 'videoStatus.standardDefinition',\n                videoQuality: STANDARD\n            },\n            {\n                onSelect: this._enableUltraHighDefinition,\n                textKey: 'videoStatus.highDefinition',\n                videoQuality: ULTRA\n            }\n        ];\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n        const activeSliderOption = this._mapCurrentQualityToSliderValue();\n\n        return (\n            <div className = { 'video-quality-dialog' }>\n                <h3 className = 'video-quality-dialog-title'>\n                    { t('videoStatus.callQuality') }\n                </h3>\n                <div className = 'video-quality-dialog-contents'>\n                    <div className = 'video-quality-dialog-slider-container'>\n                        { /* FIXME: onChange and onMouseUp are both used for\n                           * compatibility with IE11. This workaround can be\n                           * removed after upgrading to React 16.\n                           */ }\n                        <input\n                            aria-label = { t('videoStatus.callQuality') }\n                            className = 'video-quality-dialog-slider'\n                            max = { this._sliderOptions.length - 1 }\n                            min = '0'\n                            onChange = { this._onSliderChange }\n                            onMouseUp = { this._onSliderChange }\n                            step = '1'\n                            type = 'range'\n                            value\n                                = { activeSliderOption } />\n\n                    </div>\n                    <div className = 'video-quality-dialog-labels'>\n                        { this._createLabels(activeSliderOption) }\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Creates React Elements to display mock tick marks with associated labels.\n     *\n     * @param {number} activeLabelIndex - Which of the sliderOptions should\n     * display as currently active.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _createLabels(activeLabelIndex) {\n        const labelsCount = this._sliderOptions.length;\n        const maxWidthOfLabel = `${100 / labelsCount}%`;\n\n        return this._sliderOptions.map((sliderOption, index) => {\n            const style = {\n                maxWidth: maxWidthOfLabel,\n                left: `${(index * 100) / (labelsCount - 1)}%`\n            };\n\n            const isActiveClass = activeLabelIndex === index ? 'active' : '';\n            const className\n                = `video-quality-dialog-label-container ${isActiveClass}`;\n\n            return (\n                <div\n                    className = { className }\n                    key = { index }\n                    style = { style }>\n                    <div className = 'video-quality-dialog-label'>\n                        { this.props.t(sliderOption.textKey) }\n                    </div>\n                </div>\n            );\n        });\n    }\n\n    _enableAudioOnly: () => void;\n\n    /**\n     * Dispatches an action to enable audio only mode.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableAudioOnly() {\n        sendAnalytics(createEvent('audio.only'));\n        logger.log('Video quality: audio only enabled');\n        this.props.dispatch(setAudioOnly(true));\n    }\n\n    _enableHighDefinition: () => void;\n\n    /**\n     * Handles the action of the high definition video being selected.\n     * Dispatches an action to receive high quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableHighDefinition() {\n        sendAnalytics(createEvent('high'));\n        logger.log('Video quality: high enabled');\n        this._setPreferredVideoQuality(HIGH);\n    }\n\n    _enableLowDefinition: () => void;\n\n    /**\n     * Dispatches an action to receive low quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableLowDefinition() {\n        sendAnalytics(createEvent('low'));\n        logger.log('Video quality: low enabled');\n        this._setPreferredVideoQuality(LOW);\n    }\n\n    _enableStandardDefinition: () => void;\n\n    /**\n     * Dispatches an action to receive standard quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableStandardDefinition() {\n        sendAnalytics(createEvent('standard'));\n        logger.log('Video quality: standard enabled');\n        this._setPreferredVideoQuality(STANDARD);\n    }\n\n    _enableUltraHighDefinition: () => void;\n\n    /**\n     * Dispatches an action to receive ultra HD quality video from remote\n     * participants.\n     *\n     * @private\n     * @returns {void}\n     */\n    _enableUltraHighDefinition() {\n        sendAnalytics(createEvent('ultra high'));\n        logger.log('Video quality: ultra high enabled');\n        this._setPreferredVideoQuality(ULTRA);\n    }\n\n    /**\n     * Matches the current video quality state with corresponding index of the\n     * component's slider options.\n     *\n     * @private\n     * @returns {void}\n     */\n    _mapCurrentQualityToSliderValue() {\n        const { _audioOnly, _sendrecvVideoQuality } = this.props;\n        const { _sliderOptions } = this;\n\n        if (_audioOnly) {\n            const audioOnlyOption = _sliderOptions.find(\n                ({ audioOnly }) => audioOnly);\n\n            return _sliderOptions.indexOf(audioOnlyOption);\n        }\n\n        for (let i = 0; i < _sliderOptions.length; i++) {\n            if (_sliderOptions[i].videoQuality >= _sendrecvVideoQuality) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    _onSliderChange: () => void;\n\n    /**\n     * Invokes a callback when the selected video quality changes.\n     *\n     * @param {Object} event - The slider's change event.\n     * @private\n     * @returns {void}\n     */\n    _onSliderChange(event) {\n        const { _audioOnly, _sendrecvVideoQuality } = this.props;\n        const {\n            audioOnly,\n            onSelect,\n            videoQuality\n        } = this._sliderOptions[event.target.value];\n\n        // Take no action if the newly chosen option does not change audio only\n        // or video quality state.\n        if ((_audioOnly && audioOnly)\n            || (!_audioOnly && videoQuality === _sendrecvVideoQuality)) {\n            return;\n        }\n\n        onSelect();\n    }\n\n    /**\n     * Helper for changing the preferred maximum video quality to receive and\n     * disable audio only.\n     *\n     * @param {number} qualityLevel - The new maximum video quality. Should be\n     * a value enumerated in {@code VIDEO_QUALITY_LEVELS}.\n     * @private\n     * @returns {void}\n     */\n    _setPreferredVideoQuality(qualityLevel) {\n        this.props.dispatch(setPreferredVideoQuality(qualityLevel));\n        if (this.props._audioOnly) {\n            this.props.dispatch(setAudioOnly(false));\n        }\n\n        // Determine the lastN value based on the quality setting.\n        let { _channelLastN = DEFAULT_LAST_N } = this.props;\n\n        _channelLastN = _channelLastN === -1 ? DEFAULT_LAST_N : _channelLastN;\n        const lastN = getLastNForQualityLevel(qualityLevel, _channelLastN);\n\n        // Set the lastN for the conference.\n        this.props.dispatch(setLastN(lastN));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code VideoQualitySlider} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { p2p } = state['features/base/conference'];\n    const { preferredVideoQuality } = state['features/video-quality'];\n    const { channelLastN } = state['features/base/config'];\n\n    return {\n        _audioOnly: audioOnly,\n        _channelLastN: channelLastN,\n        _p2p: p2p,\n        _sendrecvVideoQuality: preferredVideoQuality\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoQualitySlider));\n","import React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\n\nimport VideoQualitySlider from './VideoQualitySlider';\n\n/**\n * Implements a React {@link Component} which displays the component\n * {@code VideoQualitySlider} in a dialog.\n *\n * @extends Component\n */\nexport default class VideoQualityDialog extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                hideCancelButton = { true }\n                okKey = 'dialog.done'\n                titleKey = 'videoStatus.callQuality'\n                width = 'small'>\n                <VideoQualitySlider />\n            </Dialog>\n        );\n    }\n}\n","// @flow\n\nimport { Component } from 'react';\n\nexport type Props = {\n\n    /**\n     * Whether or not the conference is in audio only mode.\n     */\n    _audioOnly: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract class for the {@code VideoQualityLabel} component.\n */\nexport default class AbstractVideoQualityLabel<P: Props> extends Component<P> {\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AbstractVideoQualityLabel}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _audioOnly: boolean\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n\n    return {\n        _audioOnly: audioOnly\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Label } from '../../base/label';\nimport { MEDIA_TYPE } from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { Tooltip } from '../../base/tooltip';\nimport { getTrackByMediaTypeAndParticipant } from '../../base/tracks';\nimport { shouldDisplayTileView } from '../../video-layout';\n\nimport AbstractVideoQualityLabel, {\n    _abstractMapStateToProps,\n    type Props as AbstractProps\n} from './AbstractVideoQualityLabel';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * The message to show within the label.\n     */\n    _labelKey: string,\n\n    /**\n     * Whether to show video quality label or not.\n     */\n     _showVideoQualityLabel: boolean,\n\n    /**\n     * The message to show within the label's tooltip.\n     */\n    _tooltipKey: string,\n\n    /**\n     * The redux representation of the JitsiTrack displayed on large video.\n     */\n    _videoTrack: Object,\n\n    /**\n     * Flag controlling visibility of the component.\n     */\n    _visible: boolean,\n};\n\n/**\n * A map of video resolution (number) to translation key.\n *\n * @type {Object}\n */\nconst RESOLUTION_TO_TRANSLATION_KEY = {\n    '720': 'videoStatus.hd',\n    '360': 'videoStatus.sd',\n    '180': 'videoStatus.ld'\n};\n\n/**\n * Expected video resolutions placed into an array, sorted from lowest to\n * highest resolution.\n *\n * @type {number[]}\n */\nconst RESOLUTIONS\n    = Object.keys(RESOLUTION_TO_TRANSLATION_KEY)\n        .map(resolution => parseInt(resolution, 10))\n        .sort((a, b) => a - b);\n\n/**\n * React {@code Component} responsible for displaying a label that indicates\n * the displayed video state of the current conference. {@code AudioOnlyLabel}\n * will display when the conference is in audio only mode. {@code HDVideoLabel}\n * will display if not in audio only mode and a high-definition large video is\n * being displayed.\n */\nexport class VideoQualityLabel extends AbstractVideoQualityLabel<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _audioOnly,\n            _labelKey,\n            _tooltipKey,\n            _videoTrack,\n            _visible,\n            t\n        } = this.props;\n\n\n        if (!_visible) {\n            return null;\n        }\n\n        let className, labelContent, tooltipKey;\n\n        if (_audioOnly) {\n            className = 'audio-only';\n            labelContent = t('videoStatus.audioOnly');\n            tooltipKey = 'videoStatus.labelTooltipAudioOnly';\n        } else if (!_videoTrack || _videoTrack.muted) {\n            className = 'no-video';\n            labelContent = t('videoStatus.audioOnly');\n            tooltipKey = 'videoStatus.labelTooiltipNoVideo';\n        } else {\n            className = 'current-video-quality';\n            labelContent = t(_labelKey);\n            tooltipKey = _tooltipKey;\n        }\n\n\n        return (\n            <Tooltip\n                content = { t(tooltipKey) }\n                position = { 'bottom' }>\n                <Label\n                    className = { className }\n                    id = 'videoResolutionLabel'\n                    text = { labelContent } />\n            </Tooltip>\n        );\n    }\n}\n\n/**\n * Matches the passed in resolution with a translation keys for describing\n * the resolution. The passed in resolution will be matched with a known\n * resolution that it is at least greater than or equal to.\n *\n * @param {number} resolution - The video height to match with a\n * translation.\n * @private\n * @returns {Object}\n */\nfunction _mapResolutionToTranslationsKeys(resolution) {\n    // Set the default matching resolution of the lowest just in case a match is\n    // not found.\n    let highestMatchingResolution = RESOLUTIONS[0];\n\n    for (let i = 0; i < RESOLUTIONS.length; i++) {\n        const knownResolution = RESOLUTIONS[i];\n\n        if (resolution >= knownResolution) {\n            highestMatchingResolution = knownResolution;\n        } else {\n            break;\n        }\n    }\n\n    const labelKey\n        = RESOLUTION_TO_TRANSLATION_KEY[highestMatchingResolution];\n\n    return {\n        labelKey,\n        tooltipKey: `${labelKey}Tooltip`\n    };\n}\n\n/**\n * Maps (parts of) the Redux state to the associated {@code VideoQualityLabel}'s\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _labelKey: string,\n *     _tooltipKey: string,\n *     _videoTrack: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { resolution, participantId } = state['features/large-video'];\n    const videoTrackOnLargeVideo = getTrackByMediaTypeAndParticipant(\n        state['features/base/tracks'],\n        MEDIA_TYPE.VIDEO,\n        participantId\n    );\n\n    const translationKeys\n        = audioOnly ? {} : _mapResolutionToTranslationsKeys(resolution);\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _labelKey: translationKeys.labelKey,\n        _tooltipKey: translationKeys.tooltipKey,\n        _videoTrack: videoTrackOnLargeVideo,\n        _visible: !(shouldDisplayTileView(state) || interfaceConfig.VIDEO_QUALITY_LABEL_DISABLED)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoQualityLabel));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { isMobileBrowser } from '../../../features/base/environment/utils';\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of\n * {@link ConnectionStatsTable}.\n */\ntype Props = {\n\n    /**\n     * The audio SSRC of this client.\n     */\n    audioSsrc: number,\n\n    /**\n     * Statistics related to bandwidth.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    bandwidth: Object,\n\n    /**\n     * Statistics related to bitrate.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    bitrate: Object,\n\n    /**\n     * The number of bridges (aka media servers) currently used in the\n     * conference.\n     */\n    bridgeCount: number,\n\n    /**\n     * Audio/video codecs in use for the connection.\n     */\n    codec: Object,\n\n    /**\n     * A message describing the connection quality.\n     */\n    connectionSummary: string,\n\n    /**\n     * The end-to-end round-trip-time.\n     */\n    e2eRtt: number,\n\n    /**\n     * Whether or not should display the \"Save Logs\" link.\n     */\n    enableSaveLogs: boolean,\n\n    /**\n     * Whether or not should display the \"Show More\" link.\n     */\n    disableShowMoreStats: boolean,\n\n    /**\n     * The endpoint id of this client.\n     */\n    participantId: string,\n\n    /**\n     * Statistics related to frame rates for each ssrc.\n     * {{\n     *     [ ssrc ]: Number\n     * }}\n     */\n    framerate: Object,\n\n    /**\n     * Whether or not the statistics are for local video.\n     */\n    isLocalVideo: boolean,\n\n    /**\n     * The send-side max enabled resolution (aka the highest layer that is not\n     * suspended on the send-side).\n     */\n    maxEnabledResolution: number,\n\n    /**\n     * Callback to invoke when the user clicks on the download logs link.\n     */\n    onSaveLogs: Function,\n\n    /**\n     * Callback to invoke when the show additional stats link is clicked.\n     */\n    onShowMore: Function,\n\n    /**\n     * Statistics related to packet loss.\n     * {{\n     *     download: Number,\n     *     upload: Number\n     * }}\n     */\n    packetLoss: Object,\n\n    /**\n     * The region that we think the client is in.\n     */\n    region: string,\n\n    /**\n     * Statistics related to display resolutions for each ssrc.\n     * {{\n     *     [ ssrc ]: {\n     *         height: Number,\n     *         width: Number\n     *     }\n     * }}\n     */\n    resolution: Object,\n\n    /**\n     * The region of the media server that we are connected to.\n     */\n    serverRegion: string,\n\n    /**\n     * Whether or not additional stats about bandwidth and transport should be\n     * displayed. Will not display even if true for remote participants.\n     */\n    shouldShowMore: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The video SSRC of this client.\n     */\n    videoSsrc: number,\n\n    /**\n     * Statistics related to transports.\n     */\n    transport: Array<Object>\n};\n\n/**\n * Click handler.\n *\n * @param {SyntheticEvent} event - The click event.\n * @returns {void}\n */\nfunction onClick(event) {\n    // If the event is propagated to the thumbnail container the participant will be pinned. That's why the propagation\n    // needs to be stopped.\n    event.stopPropagation();\n}\n\n/**\n * React {@code Component} for displaying connection statistics.\n *\n * @extends Component\n */\nclass ConnectionStatsTable extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isLocalVideo, enableSaveLogs, disableShowMoreStats } = this.props;\n        const className = isMobileBrowser() ? 'connection-info connection-info__mobile' : 'connection-info';\n\n        return (\n            <div\n                className = { className }\n                onClick = { onClick }>\n                { this._renderStatistics() }\n                <div className = 'connection-actions'>\n                    { isLocalVideo && enableSaveLogs ? this._renderSaveLogs() : null}\n                    { !disableShowMoreStats && this._renderShowMoreLink() }\n                </div>\n                { this.props.shouldShowMore ? this._renderAdditionalStats() : null }\n            </div>\n        );\n    }\n\n    /**\n     * Creates a table as ReactElement that will display additional statistics\n     * related to bandwidth and transport for the local user.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderAdditionalStats() {\n        const { isLocalVideo } = this.props;\n\n        return (\n            <table className = 'connection-info__container'>\n                <tbody>\n                    { isLocalVideo ? this._renderBandwidth() : null }\n                    { isLocalVideo ? this._renderTransport() : null }\n                    { isLocalVideo ? this._renderRegion() : null }\n                    { this._renderAudioSsrc() }\n                    { this._renderVideoSsrc() }\n                    { this._renderParticipantId() }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying bandwidth related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderBandwidth() {\n        const { download, upload } = this.props.bandwidth || {};\n\n        return (\n            <tr>\n                <td>\n                    { this.props.t('connectionindicator.bandwidth') }\n                </td>\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download ? `${download} Kbps` : 'N/A' }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload ? `${upload} Kbps` : 'N/A' }\n                </td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a a table row as a ReactElement for displaying bitrate related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderBitrate() {\n        const { download, upload } = this.props.bitrate || {};\n\n        return (\n            <tr>\n                <td>\n                    <span>\n                        { this.props.t('connectionindicator.bitrate') }\n                    </span>\n                </td>\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download ? `${download} Kbps` : 'N/A' }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload ? `${upload} Kbps` : 'N/A' }\n                </td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the audio ssrc.\n     * This will typically be something like \"Audio SSRC: 12345\".\n     *\n     * @returns {JSX.Element}\n     * @private\n     */\n    _renderAudioSsrc() {\n        const { audioSsrc, t } = this.props;\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.audio_ssrc') }</span>\n                </td>\n                <td>{ audioSsrc || 'N/A' }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the video ssrc.\n     * This will typically be something like \"Video SSRC: 12345\".\n     *\n     * @returns {JSX.Element}\n     * @private\n     */\n    _renderVideoSsrc() {\n        const { videoSsrc, t } = this.props;\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.video_ssrc') }</span>\n                </td>\n                <td>{ videoSsrc || 'N/A' }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the endpoint id.\n     * This will typically be something like \"Endpoint id: 1e8fbg\".\n     *\n     * @returns {JSX.Element}\n     * @private\n     */\n    _renderParticipantId() {\n        const { participantId, t } = this.props;\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.participant_id') }</span>\n                </td>\n                <td>{ participantId || 'N/A' }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a a table row as a ReactElement for displaying codec, if present.\n     * This will typically be something like \"Codecs (A/V): Opus, vp8\".\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderCodecs() {\n        const { codec, t } = this.props;\n\n        if (!codec) {\n            return;\n        }\n\n        let codecString;\n\n        // Only report one codec, in case there are multiple for a user.\n        Object.keys(codec || {})\n            .forEach(ssrc => {\n                const { audio, video } = codec[ssrc];\n\n                codecString = `${audio}, ${video}`;\n            });\n\n        if (!codecString) {\n            codecString = 'N/A';\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.codecs') }</span>\n                </td>\n                <td>{ codecString }</td>\n            </tr>\n        );\n    }\n\n\n    /**\n     * Creates a table row as a ReactElement for displaying a summary message\n     * about the current connection status.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderConnectionSummary() {\n        return (\n            <tr className = 'connection-info__status'>\n                <td>\n                    <span>{ this.props.t('connectionindicator.status') }</span>\n                </td>\n                <td>{ this.props.connectionSummary }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying end-to-end RTT and\n     * the region.\n     *\n     * @returns {ReactElement}\n     * @private\n     */\n    _renderE2eRtt() {\n        const { e2eRtt, t } = this.props;\n        const str = e2eRtt ? `${e2eRtt.toFixed(0)}ms` : 'N/A';\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.e2e_rtt') }</span>\n                </td>\n                <td>{ str }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the \"connected to\"\n     * information.\n     *\n     * @returns {ReactElement}\n     * @private\n     */\n    _renderRegion() {\n        const { region, serverRegion, t } = this.props;\n        let str = serverRegion;\n\n        if (!serverRegion) {\n            return;\n        }\n\n\n        if (region && serverRegion && region !== serverRegion) {\n            str += ` from ${region}`;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.connectedTo') }</span>\n                </td>\n                <td>{ str }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying the \"bridge count\"\n     * information.\n     *\n     * @returns {*}\n     * @private\n     */\n    _renderBridgeCount() {\n        const { bridgeCount, t } = this.props;\n\n        // 0 is valid, but undefined/null/NaN aren't.\n        if (!bridgeCount && bridgeCount !== 0) {\n            return;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.bridgeCount') }</span>\n                </td>\n                <td>{ bridgeCount }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying frame rate related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFrameRate() {\n        const { framerate, t } = this.props;\n        const frameRateString = Object.keys(framerate || {})\n            .map(ssrc => framerate[ssrc])\n            .join(', ') || 'N/A';\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.framerate') }</span>\n                </td>\n                <td>{ frameRateString }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a tables row as a ReactElement for displaying packet loss related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderPacketLoss() {\n        const { packetLoss, t } = this.props;\n        let packetLossTableData;\n\n        if (packetLoss) {\n            const { download, upload } = packetLoss;\n\n            packetLossTableData = (\n                <td>\n                    <span className = 'connection-info__download'>\n                        &darr;\n                    </span>\n                    { download === null ? 'N/A' : `${download}%` }\n                    <span className = 'connection-info__upload'>\n                        &uarr;\n                    </span>\n                    { upload === null ? 'N/A' : `${upload}%` }\n                </td>\n            );\n        } else {\n            packetLossTableData = <td>N/A</td>;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>\n                        { t('connectionindicator.packetloss') }\n                    </span>\n                </td>\n                { packetLossTableData }\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying resolution related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderResolution() {\n        const { resolution, maxEnabledResolution, t } = this.props;\n        let resolutionString = Object.keys(resolution || {})\n            .map(ssrc => {\n                const { width, height } = resolution[ssrc];\n\n                return `${width}x${height}`;\n            })\n            .join(', ') || 'N/A';\n\n        if (maxEnabledResolution && maxEnabledResolution < 720) {\n            const maxEnabledResolutionTitle = t('connectionindicator.maxEnabledResolution');\n\n            resolutionString += ` (${maxEnabledResolutionTitle} ${maxEnabledResolution}p)`;\n        }\n\n        return (\n            <tr>\n                <td>\n                    <span>{ t('connectionindicator.resolution') }</span>\n                </td>\n                <td>{ resolutionString }</td>\n            </tr>\n        );\n    }\n\n    /**\n     * Creates a ReactElement for display a link to save the logs.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderSaveLogs() {\n        return (\n            <span>\n                <a\n                    className = 'savelogs link'\n                    onClick = { this.props.onSaveLogs }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    { this.props.t('connectionindicator.savelogs') }\n                </a>\n                <span> | </span>\n            </span>\n        );\n    }\n\n\n    /**\n     * Creates a ReactElement for display a link to toggle showing additional\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderShowMoreLink() {\n        const translationKey\n            = this.props.shouldShowMore\n                ? 'connectionindicator.less'\n                : 'connectionindicator.more';\n\n        return (\n            <a\n                className = 'showmore link'\n                onClick = { this.props.onShowMore }\n                role = 'button'\n                tabIndex = { 0 }>\n                { this.props.t(translationKey) }\n            </a>\n        );\n    }\n\n    /**\n     * Creates a table as a ReactElement for displaying connection statistics.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderStatistics() {\n        const isRemoteVideo = !this.props.isLocalVideo;\n\n        return (\n            <table className = 'connection-info__container'>\n                <tbody>\n                    { this._renderConnectionSummary() }\n                    { this._renderBitrate() }\n                    { this._renderPacketLoss() }\n                    { isRemoteVideo ? this._renderE2eRtt() : null }\n                    { isRemoteVideo ? this._renderRegion() : null }\n                    { this._renderResolution() }\n                    { this._renderFrameRate() }\n                    { this._renderCodecs() }\n                    { isRemoteVideo ? null : this._renderBridgeCount() }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Creates table rows as ReactElements for displaying transport related\n     * statistics.\n     *\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderTransport() {\n        const { t, transport } = this.props;\n\n        if (!transport || transport.length === 0) {\n            const NA = (\n                <tr key = 'address'>\n                    <td>\n                        <span>{ t('connectionindicator.address') }</span>\n                    </td>\n                    <td>\n                        N/A\n                    </td>\n                </tr>\n            );\n\n            return [ NA ];\n        }\n\n        const data = {\n            localIP: [],\n            localPort: [],\n            remoteIP: [],\n            remotePort: [],\n            transportType: []\n        };\n\n        for (let i = 0; i < transport.length; i++) {\n            const ip = getIP(transport[i].ip);\n            const localIP = getIP(transport[i].localip);\n            const localPort = getPort(transport[i].localip);\n            const port = getPort(transport[i].ip);\n\n            if (!data.remoteIP.includes(ip)) {\n                data.remoteIP.push(ip);\n            }\n\n            if (!data.localIP.includes(localIP)) {\n                data.localIP.push(localIP);\n            }\n\n            if (!data.localPort.includes(localPort)) {\n                data.localPort.push(localPort);\n            }\n\n            if (!data.remotePort.includes(port)) {\n                data.remotePort.push(port);\n            }\n\n            if (!data.transportType.includes(transport[i].type)) {\n                data.transportType.push(transport[i].type);\n            }\n        }\n\n        // All of the transports should be either P2P or JVB\n        let isP2P = false, isTURN = false;\n\n        if (transport.length) {\n            isP2P = transport[0].p2p;\n            isTURN = transport[0].localCandidateType === 'relay'\n                || transport[0].remoteCandidateType === 'relay';\n        }\n\n        const additionalData = [];\n\n        if (isP2P) {\n            additionalData.push(\n                <span> (p2p)</span>);\n        }\n        if (isTURN) {\n            additionalData.push(<span> (turn)</span>);\n        }\n\n        // First show remote statistics, then local, and then transport type.\n        const tableRowConfigurations = [\n            {\n                additionalData,\n                data: data.remoteIP,\n                key: 'remoteaddress',\n                label: t('connectionindicator.remoteaddress',\n                    { count: data.remoteIP.length })\n            },\n            {\n                data: data.remotePort,\n                key: 'remoteport',\n                label: t('connectionindicator.remoteport',\n                        { count: transport.length })\n            },\n            {\n                data: data.localIP,\n                key: 'localaddress',\n                label: t('connectionindicator.localaddress',\n                    { count: data.localIP.length })\n            },\n            {\n                data: data.localPort,\n                key: 'localport',\n                label: t('connectionindicator.localport',\n                    { count: transport.length })\n            },\n            {\n                data: data.transportType,\n                key: 'transport',\n                label: t('connectionindicator.transport',\n                    { count: data.transportType.length })\n            }\n        ];\n\n        return tableRowConfigurations.map(this._renderTransportTableRow);\n    }\n\n    /**\n     * Creates a table row as a ReactElement for displaying a transport related\n     * statistic.\n     *\n     * @param {Object} config - Describes the contents of the row.\n     * @param {ReactElement} config.additionalData - Extra data to display next\n     * to the passed in config.data.\n     * @param {Array} config.data - The transport statistics to display.\n     * @param {string} config.key - The ReactElement's key. Must be unique for\n     * iterating over multiple child rows.\n     * @param {string} config.label - The text to display describing the data.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTransportTableRow(config: Object) {\n        const { additionalData, data, key, label } = config;\n\n        return (\n            <tr key = { key }>\n                <td>\n                    <span>\n                        { label }\n                    </span>\n                </td>\n                <td>\n                    { getStringFromArray(data) }\n                    { additionalData || null }\n                </td>\n            </tr>\n        );\n    }\n}\n\n/**\n * Utility for getting the IP from a transport statistics object's\n * representation of an IP.\n *\n * @param {string} value - The transport's IP to parse.\n * @private\n * @returns {string}\n */\nfunction getIP(value) {\n    if (!value) {\n        return '';\n    }\n\n    return value.substring(0, value.lastIndexOf(':'));\n}\n\n/**\n * Utility for getting the port from a transport statistics object's\n * representation of an IP.\n *\n * @param {string} value - The transport's IP to parse.\n * @private\n * @returns {string}\n */\nfunction getPort(value) {\n    if (!value) {\n        return '';\n    }\n\n    return value.substring(value.lastIndexOf(':') + 1, value.length);\n}\n\n/**\n * Utility for concatenating values in an array into a comma separated string.\n *\n * @param {Array} array - Transport statistics to concatenate.\n * @private\n * @returns {string}\n */\nfunction getStringFromArray(array) {\n    let res = '';\n\n    for (let i = 0; i < array.length; i++) {\n        res += (i === 0 ? '' : ', ') + array[i];\n    }\n\n    return res;\n}\n\nexport default translate(ConnectionStatsTable);\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { JitsiParticipantConnectionStatus } from '../../../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../../../base/media';\nimport { getLocalParticipant, getParticipantById } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { getTrackByMediaTypeAndParticipant } from '../../../base/tracks';\nimport { ConnectionStatsTable } from '../../../connection-stats';\nimport { saveLogs } from '../../actions';\nimport AbstractConnectionIndicator, {\n    INDICATOR_DISPLAY_THRESHOLD,\n    type Props as AbstractProps,\n    type State as AbstractState\n} from '../AbstractConnectionIndicator';\n\n/**\n * An array of display configurations for the connection indicator and its bars.\n * The ordering is done specifically for faster iteration to find a matching\n * configuration to the current connection strength percentage.\n *\n * @type {Object[]}\n */\nconst QUALITY_TO_WIDTH: Array<Object> = [\n\n    // Full (3 bars)\n    {\n        colorClass: 'status-high',\n        percent: INDICATOR_DISPLAY_THRESHOLD,\n        tip: 'connectionindicator.quality.good',\n        width: '100%'\n    },\n\n    // 2 bars\n    {\n        colorClass: 'status-med',\n        percent: 10,\n        tip: 'connectionindicator.quality.nonoptimal',\n        width: '66%'\n    },\n\n    // 1 bar\n    {\n        colorClass: 'status-low',\n        percent: 0,\n        tip: 'connectionindicator.quality.poor',\n        width: '33%'\n    }\n\n    // Note: we never show 0 bars as long as there is a connection.\n];\n\n/**\n * The type of the React {@code Component} props of {@link ConnectionIndicator}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The audio SSRC of this client.\n     */\n     _audioSsrc: number,\n\n    /**\n     * The current condition of the user's connection, matching one of the\n     * enumerated values in the library.\n     */\n    _connectionStatus: string,\n\n    /**\n     * Whether or not should display the \"Show More\" link in the local video\n     * stats table.\n     */\n    _disableShowMoreStats: boolean,\n\n    /**\n     * Whether or not should display the \"Save Logs\" link in the local video\n     * stats table.\n     */\n    _enableSaveLogs: boolean,\n\n    /**\n     * Whether or not the displays stats are for local video.\n     */\n    _isLocalVideo: boolean,\n\n    /**\n     * Invoked to save the conference logs.\n     */\n    _onSaveLogs: Function,\n\n    /**\n     * The video SSRC of this client.\n     */\n    _videoSsrc: number,\n\n    /**\n     * Css class to apply on container\n     */\n    className: string,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Optional param for passing existing connection stats on component instantiation\n     */\n    inheritedStats: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConnectionIndicator}.\n */\ntype State = AbstractState & {\n\n    /**\n     * Whether or not the popover content should display additional statistics.\n     */\n    showMoreStats: boolean\n};\n\n/**\n * Implements a React {@link Component} which displays the current connection\n * quality percentage and has a popover to show more detailed connection stats.\n *\n * @extends {Component}\n */\nclass ConnectionIndicatorContent extends AbstractConnectionIndicator<Props, State> {\n    /**\n     * Initializes a new {@code ConnectionIndicator} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            autoHideTimeout: undefined,\n            showIndicator: false,\n            showMoreStats: false,\n            stats: props.inheritedStats || {}\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onToggleShowMore = this._onToggleShowMore.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            bandwidth,\n            bitrate,\n            bridgeCount,\n            codec,\n            e2eRtt,\n            framerate,\n            maxEnabledResolution,\n            packetLoss,\n            region,\n            resolution,\n            serverRegion,\n            transport\n        } = this.state.stats;\n\n        return (\n            <ConnectionStatsTable\n                audioSsrc = { this.props._audioSsrc }\n                bandwidth = { bandwidth }\n                bitrate = { bitrate }\n                bridgeCount = { bridgeCount }\n                codec = { codec }\n                connectionSummary = { this._getConnectionStatusTip() }\n                disableShowMoreStats = { this.props._disableShowMoreStats }\n                e2eRtt = { e2eRtt }\n                enableSaveLogs = { this.props._enableSaveLogs }\n                framerate = { framerate }\n                isLocalVideo = { this.props._isLocalVideo }\n                maxEnabledResolution = { maxEnabledResolution }\n                onSaveLogs = { this.props._onSaveLogs }\n                onShowMore = { this._onToggleShowMore }\n                packetLoss = { packetLoss }\n                participantId = { this.props.participantId }\n                region = { region }\n                resolution = { resolution }\n                serverRegion = { serverRegion }\n                shouldShowMore = { this.state.showMoreStats }\n                transport = { transport }\n                videoSsrc = { this.props._videoSsrc } />\n        );\n    }\n\n    /**\n     * Returns a string that describes the current connection status.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getConnectionStatusTip() {\n        let tipKey;\n\n        switch (this.props._connectionStatus) {\n        case JitsiParticipantConnectionStatus.INTERRUPTED:\n            tipKey = 'connectionindicator.quality.lost';\n            break;\n\n        case JitsiParticipantConnectionStatus.INACTIVE:\n            tipKey = 'connectionindicator.quality.inactive';\n            break;\n\n        default: {\n            const { percent } = this.state.stats;\n\n            if (typeof percent === 'undefined') {\n                // If percentage is undefined then there are no stats available\n                // yet, likely because only a local connection has been\n                // established so far. Assume a strong connection to start.\n                tipKey = 'connectionindicator.quality.good';\n            } else {\n                const config = this._getDisplayConfiguration(percent);\n\n                tipKey = config.tip;\n            }\n        }\n        }\n\n        return this.props.t(tipKey);\n    }\n\n    /**\n     * Get the icon configuration from QUALITY_TO_WIDTH which has a percentage\n     * that matches or exceeds the passed in percentage. The implementation\n     * assumes QUALITY_TO_WIDTH is already sorted by highest to lowest\n     * percentage.\n     *\n     * @param {number} percent - The connection percentage, out of 100, to find\n     * the closest matching configuration for.\n     * @private\n     * @returns {Object}\n     */\n    _getDisplayConfiguration(percent: number): Object {\n        return QUALITY_TO_WIDTH.find(x => percent >= x.percent) || {};\n    }\n\n\n    _onToggleShowMore: () => void;\n\n    /**\n     * Callback to invoke when the show more link in the popover content is\n     * clicked. Sets the state which will determine if the popover should show\n     * additional statistics about the connection.\n     *\n     * @returns {void}\n     */\n    _onToggleShowMore() {\n        this.setState({ showMoreStats: !this.state.showMoreStats });\n    }\n}\n\n/**\n * Maps redux actions to the props of the component.\n *\n * @param {Function} dispatch - The redux action {@code dispatch} function.\n * @returns {{\n *     _onSaveLogs: Function,\n * }}\n * @private\n */\nexport function _mapDispatchToProps(dispatch: Dispatch<any>) {\n    return {\n        /**\n         * Saves the conference logs.\n         *\n         * @returns {Function}\n         */\n        _onSaveLogs() {\n            dispatch(saveLogs());\n        }\n    };\n}\n\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the component.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { participantId } = ownProps;\n    const conference = state['features/base/conference'].conference;\n    const participant\n        = participantId ? getParticipantById(state, participantId) : getLocalParticipant(state);\n    const props = {\n        _connectionStatus: participant?.connectionStatus,\n        _enableSaveLogs: state['features/base/config'].enableSaveLogs,\n        _disableShowMoreStats: state['features/base/config'].disableShowMoreStats,\n        _isLocalVideo: participant?.local\n    };\n\n    if (conference) {\n        const firstVideoTrack = getTrackByMediaTypeAndParticipant(\n            state['features/base/tracks'], MEDIA_TYPE.VIDEO, participantId);\n        const firstAudioTrack = getTrackByMediaTypeAndParticipant(\n            state['features/base/tracks'], MEDIA_TYPE.AUDIO, participantId);\n\n        return {\n            ...props,\n            _audioSsrc: firstAudioTrack ? conference.getSsrcByTrack(firstAudioTrack.jitsiTrack) : undefined,\n            _videoSsrc: firstVideoTrack ? conference.getSsrcByTrack(firstVideoTrack.jitsiTrack) : undefined\n        };\n    }\n\n    return props;\n}\nexport default translate(connect(_mapStateToProps, _mapDispatchToProps)(ConnectionIndicatorContent));\n","import getRoomName from '../base/config/getRoomName';\nimport { downloadJSON } from '../base/util/downloadJSON';\n\n\n/**\n * Create an action for saving the conference logs.\n *\n * @returns {Function}\n */\nexport function saveLogs() {\n    return (dispatch, getState) => {\n\n        const logs = getState()['features/base/connection'].connection.getLogs();\n        const roomName = getRoomName() || '';\n\n        downloadJSON(logs, `meetlog-${roomName}.json`);\n    };\n}\n","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _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}","/* @flow */\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\n\nimport { Drawer, DrawerPortal } from '../../../toolbox/components/web';\nimport { isMobileBrowser } from '../../environment/utils';\n\n/**\n * A map of dialog positions, relative to trigger, to css classes used to\n * manipulate elements for handling mouse events.\n *\n * @private\n * @type {object}\n */\nconst DIALOG_TO_PADDING_POSITION = {\n    'left': 'popover-mousemove-padding-right',\n    'right': 'popover-mousemove-padding-left',\n    'top': 'popover-mousemove-padding-bottom'\n};\n\n/**\n * Takes the position expected by {@code InlineDialog} and maps it to a CSS\n * class that can be used styling the elements used for preventing mouseleave\n * events when moving from the trigger to the dialog.\n *\n * @param {string} position - From which position the dialog will display.\n * @private\n * @returns {string}\n */\nfunction _mapPositionToPaddingClass(position = 'left') {\n    return DIALOG_TO_PADDING_POSITION[position.split('-')[0]];\n}\n\n/**\n * The type of the React {@code Component} props of {@link Popover}.\n */\ntype Props = {\n\n    /**\n     * A child React Element to use as the trigger for showing the dialog.\n     */\n    children: React$Node,\n\n    /**\n     * Additional CSS classnames to apply to the root of the {@code Popover}\n     * component.\n     */\n    className: string,\n\n    /**\n     * The ReactElement to display within the dialog.\n     */\n    content: Object,\n\n    /**\n     * Whether displaying of the popover should be prevented.\n     */\n    disablePopover: boolean,\n\n    /**\n     * An id attribute to apply to the root of the {@code Popover}\n     * component.\n     */\n    id: string,\n\n    /**\n    * Callback to invoke when the popover has closed.\n    */\n    onPopoverClose: Function,\n\n    /**\n     * Callback to invoke when the popover has opened.\n     */\n    onPopoverOpen: Function,\n\n    /**\n     * Whether to display the Popover as a drawer.\n     */\n    overflowDrawer: boolean,\n\n    /**\n     * From which side of the dialog trigger the dialog should display. The\n     * value will be passed to {@code InlineDialog}.\n     */\n    position: string\n};\n\n/**\n * The type of the React {@code Component} state of {@link Popover}.\n */\ntype State = {\n\n    /**\n     * Whether or not the {@code InlineDialog} should be displayed.\n     */\n    showDialog: boolean\n};\n\n/**\n * Implements a React {@code Component} for showing an {@code InlineDialog} on\n * mouseenter of the trigger and contents, and hiding the dialog on mouseleave.\n *\n * @extends Component\n */\nclass Popover extends Component<Props, State> {\n    /**\n     * Default values for {@code Popover} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        id: ''\n    };\n\n    /**\n     * Reference to the Popover that is meant to open as a drawer.\n     */\n    _drawerContainerRef: Object;\n\n    /**\n     * Initializes a new {@code Popover} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            showDialog: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onHideDialog = this._onHideDialog.bind(this);\n        this._onShowDialog = this._onShowDialog.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._drawerContainerRef = React.createRef();\n        this._onEscKey = this._onEscKey.bind(this);\n    }\n\n    /**\n     * Public method for triggering showing the context menu dialog.\n     *\n     * @returns {void}\n     * @public\n     */\n    showDialog() {\n        this.setState({ showDialog: true });\n    }\n\n    /**\n     * Sets up an event listener to open a drawer when clicking, rather than entering the\n     * overflow area.\n     *\n     * TODO: This should be done by setting an {@code onClick} handler on the div, but for some\n     * reason that doesn't seem to work whatsoever.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (this._drawerContainerRef && this._drawerContainerRef.current && !isMobileBrowser()) {\n            this._drawerContainerRef.current.addEventListener('click', this._onShowDialog);\n        }\n    }\n\n    /**\n     * Removes the listener set up in the {@code componentDidMount} method.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this._drawerContainerRef && this._drawerContainerRef.current) {\n            this._drawerContainerRef.current.removeEventListener('click', this._onShowDialog);\n        }\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.overflowDrawer !== this.props.overflowDrawer) {\n            // Make sure the listeners are set up when resizing the screen past the drawer threshold.\n            if (this.props.overflowDrawer) {\n                this.componentDidMount();\n            } else {\n                this.componentWillUnmount();\n            }\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { children, className, content, id, overflowDrawer, position } = this.props;\n\n        if (overflowDrawer) {\n            return (\n                <div\n                    className = { className }\n                    id = { id }\n                    ref = { this._drawerContainerRef }>\n                    { children }\n                    <DrawerPortal>\n                        <Drawer\n                            isOpen = { this.state.showDialog }\n                            onClose = { this._onHideDialog }>\n                            { content }\n                        </Drawer>\n                    </DrawerPortal>\n                </div>\n            );\n        }\n\n        return (\n            <div\n                className = { className }\n                id = { id }\n                onKeyPress = { this._onKeyPress }\n                onMouseEnter = { this._onShowDialog }\n                onMouseLeave = { this._onHideDialog }>\n                <InlineDialog\n                    content = { this._renderContent() }\n                    isOpen = { this.state.showDialog }\n                    placement = { position }>\n                    { children }\n                </InlineDialog>\n            </div>\n        );\n    }\n\n    _onHideDialog: () => void;\n\n    /**\n     * Stops displaying the {@code InlineDialog}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onHideDialog() {\n        this.setState({ showDialog: false });\n\n        if (this.props.onPopoverClose) {\n            this.props.onPopoverClose();\n        }\n    }\n\n    _onShowDialog: (Object) => void;\n\n    /**\n     * Displays the {@code InlineDialog} and calls any registered onPopoverOpen\n     * callbacks.\n     *\n     * @param {Object} event - The mouse event or the keypress event to intercept.\n     * @private\n     * @returns {void}\n     */\n    _onShowDialog(event) {\n        event.stopPropagation();\n        if (!this.props.disablePopover) {\n            this.setState({ showDialog: true });\n\n            if (this.props.onPopoverOpen) {\n                this.props.onPopoverOpen();\n            }\n        }\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            if (this.state.showDialog) {\n                this._onHideDialog();\n            } else {\n                this._onShowDialog(e);\n            }\n        }\n    }\n\n    _onEscKey: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onEscKey(e) {\n        if (e.key === 'Escape') {\n            e.preventDefault();\n            e.stopPropagation();\n            if (this.state.showDialog) {\n                this._onHideDialog();\n            }\n        }\n    }\n\n    /**\n     * Renders the React Element to be displayed in the {@code InlineDialog}.\n     * Also adds padding to support moving the mouse from the trigger to the\n     * dialog to prevent mouseleave events.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderContent() {\n        const { content, position } = this.props;\n\n        return (\n            <div\n                className = 'popover'\n                onKeyDown = { this._onEscKey }>\n                { content }\n                <div className = 'popover-mouse-padding-top' />\n                <div className = { _mapPositionToPaddingClass(position) } />\n            </div>\n        );\n    }\n}\n\nexport default Popover;\n","import { STORE_NAME } from './constants';\n\n/**\n * A selector for the internet online status.\n *\n * @param {Object} state - The redux state.\n * @returns {boolean}\n */\nexport function isOnline(state) {\n    return state[STORE_NAME].isOnline;\n}\n","/* @flow */\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport type { Dispatch } from 'redux';\n\nimport { isOnline } from '../net-info/selectors';\n\nimport JitsiMeetJS from './_';\nimport {\n    LIB_DID_DISPOSE,\n    LIB_DID_INIT,\n    LIB_INIT_ERROR,\n    LIB_WILL_DISPOSE,\n    LIB_WILL_INIT\n} from './actionTypes';\nimport { isAnalyticsEnabled } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Disposes (of) lib-jitsi-meet.\n *\n * @returns {Function}\n */\nexport function disposeLib() {\n    return (dispatch: Dispatch<any>) => {\n        dispatch({ type: LIB_WILL_DISPOSE });\n\n        // TODO Currently, lib-jitsi-meet doesn't have the functionality to\n        // dispose itself.\n        dispatch({ type: LIB_DID_DISPOSE });\n    };\n}\n\n/**\n * Initializes lib-jitsi-meet (i.e. {@link invokes JitsiMeetJS.init()}) with the\n * current config(uration).\n *\n * @returns {Function}\n */\nexport function initLib() {\n    return (dispatch: Dispatch<any>, getState: Function): void => {\n        const state = getState();\n        const config = state['features/base/config'];\n\n        if (!config) {\n            throw new Error('Cannot init lib-jitsi-meet without config');\n        }\n\n        dispatch({ type: LIB_WILL_INIT });\n\n        try {\n            JitsiMeetJS.init({\n                enableAnalyticsLogging: isAnalyticsEnabled(getState),\n                ...config,\n                externalStorage: jitsiLocalStorage.isLocalStorageDisabled() ? jitsiLocalStorage : undefined\n            });\n            JitsiMeetJS.setNetworkInfo({\n                isOnline: isOnline(state)\n            });\n            dispatch({ type: LIB_DID_INIT });\n        } catch (error) {\n            dispatch(libInitError(error));\n        }\n    };\n}\n\n/**\n * Notifies about a specific error raised by {@link JitsiMeetJS.init()}.\n *\n * @param {Error} error - The Error raised by JitsiMeetJS.init().\n * @returns {{\n *     type: LIB_INIT_ERROR,\n *     error: Error\n * }}\n */\nexport function libInitError(error: Error) {\n    return {\n        type: LIB_INIT_ERROR,\n        error\n    };\n}\n","// @flow\nimport { CONFIG_WHITELIST } from '../config';\nimport { toState } from '../redux';\nimport { parseURLParams } from '../util';\n\nimport { DEFAULT_SERVER_URL } from './constants';\n\n/**\n * Returns the effective value of a configuration/preference/setting by applying\n * a precedence among the values specified by JWT, URL, settings,\n * and config.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @param {string} propertyName - The name of the\n * configuration/preference/setting (property) to retrieve.\n * @param {{\n *     config: boolean,\n *     jwt: boolean,\n *     settings: boolean,\n *     urlParams: boolean\n * }} [sources] - A set/structure of {@code boolean} flags indicating the\n * configuration/preference/setting sources to consider/retrieve values from.\n * @returns {any}\n */\nexport function getPropertyValue(\n        stateful: Object | Function,\n        propertyName: string,\n        sources?: Object\n) {\n    // Default values don't play nicely with partial objects and we want to make\n    // the function easy to use without exhaustively defining all flags:\n    sources = { // eslint-disable-line no-param-reassign\n        // Defaults:\n        config: true,\n        jwt: true,\n        settings: true,\n        urlParams: true,\n\n        ...sources\n    };\n\n    // Precedence: jwt -> urlParams -> settings -> config.\n\n    const state = toState(stateful);\n\n    // jwt\n    if (sources.jwt) {\n        const value = state['features/base/jwt'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value[propertyName];\n        }\n    }\n\n    // urlParams\n    if (sources.urlParams) {\n        if (CONFIG_WHITELIST.indexOf(propertyName) !== -1) {\n            const urlParams\n                = parseURLParams(state['features/base/connection'].locationURL);\n            const value = urlParams[`config.${propertyName}`];\n\n            if (typeof value !== 'undefined') {\n                return value;\n            }\n        }\n    }\n\n    // settings\n    if (sources.settings) {\n        const value = state['features/base/settings'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    // config\n    if (sources.config) {\n        const value = state['features/base/config'][propertyName];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Gets the currently configured server URL.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string} - The currently configured server URL.\n */\nexport function getServerURL(stateful: Object | Function) {\n    const state = toState(stateful);\n\n    return state['features/base/settings'].serverURL || DEFAULT_SERVER_URL;\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred cameraDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedCameraDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedCameraDeviceId,\n        userSelectedCameraDeviceLabel\n    } = state['features/base/settings'];\n    const { videoInput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: videoInput,\n\n        // Operating systems may append \" #{number}\" somewhere in the label so\n        // find and strip that bit.\n        matchRegex: /\\s#\\d*(?!.*\\s#\\d*)/,\n        userSelectedDeviceId: userSelectedCameraDeviceId,\n        userSelectedDeviceLabel: userSelectedCameraDeviceLabel,\n        replacement: ''\n    });\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred micDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedMicDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedMicDeviceId,\n        userSelectedMicDeviceLabel\n    } = state['features/base/settings'];\n    const { audioInput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: audioInput,\n\n        // Operating systems may append \" ({number}-\" somewhere in the label so\n        // find and strip that bit.\n        matchRegex: /\\s\\(\\d*-\\s(?!.*\\s\\(\\d*-\\s)/,\n        userSelectedDeviceId: userSelectedMicDeviceId,\n        userSelectedDeviceLabel: userSelectedMicDeviceLabel,\n        replacement: ' ('\n    });\n}\n\n/**\n * Searches known devices for a matching deviceId and fall back to matching on\n * label. Returns the stored preferred audioOutputDeviceId if a match is not found.\n *\n * @param {Object|Function} stateful - The redux state object or\n * {@code getState} function.\n * @returns {string}\n */\nexport function getUserSelectedOutputDeviceId(stateful: Object | Function) {\n    const state = toState(stateful);\n    const {\n        userSelectedAudioOutputDeviceId,\n        userSelectedAudioOutputDeviceLabel\n    } = state['features/base/settings'];\n    const { audioOutput } = state['features/base/devices'].availableDevices;\n\n    return _getUserSelectedDeviceId({\n        availableDevices: audioOutput,\n        matchRegex: undefined,\n        userSelectedDeviceId: userSelectedAudioOutputDeviceId,\n        userSelectedDeviceLabel: userSelectedAudioOutputDeviceLabel,\n        replacement: undefined\n    });\n}\n\n/**\n * A helper function to abstract the logic for choosing which device ID to\n * use. Falls back to fuzzy matching on label if a device ID match is not found.\n *\n * @param {Object} options - The arguments used to match find the preferred\n * device ID from available devices.\n * @param {Array<string>} options.availableDevices - The array of currently\n * available devices to match against.\n * @param {Object} options.matchRegex - The regex to use to find strings\n * appended to the label by the operating system. The matches will be replaced\n * with options.replacement, with the intent of matching the same device that\n * might have a modified label.\n * @param {string} options.userSelectedDeviceId - The device ID the participant\n * prefers to use.\n * @param {string} options.userSelectedDeviceLabel - The label associated with the\n * device ID the participant prefers to use.\n * @param {string} options.replacement - The string to use with\n * options.matchRegex to remove identifies added to the label by the operating\n * system.\n * @private\n * @returns {string} The preferred device ID to use for media.\n */\nfunction _getUserSelectedDeviceId(options) {\n    const {\n        availableDevices,\n        matchRegex,\n        userSelectedDeviceId,\n        userSelectedDeviceLabel,\n        replacement\n    } = options;\n\n    // If there is no label at all, there is no need to fall back to checking\n    // the label for a fuzzy match.\n    if (!userSelectedDeviceLabel || !userSelectedDeviceId) {\n        return userSelectedDeviceId;\n    }\n\n    const foundMatchingBasedonDeviceId = availableDevices.find(\n        candidate => candidate.deviceId === userSelectedDeviceId);\n\n    // Prioritize matching the deviceId\n    if (foundMatchingBasedonDeviceId) {\n        return userSelectedDeviceId;\n    }\n\n    const strippedDeviceLabel\n        = matchRegex ? userSelectedDeviceLabel.replace(matchRegex, replacement)\n            : userSelectedDeviceLabel;\n    const foundMatchBasedOnLabel = availableDevices.find(candidate => {\n        const { label } = candidate;\n\n        if (!label) {\n            return false;\n        } else if (strippedDeviceLabel === label) {\n            return true;\n        }\n\n        const strippedCandidateLabel\n            = label.replace(matchRegex, replacement);\n\n        return strippedDeviceLabel === strippedCandidateLabel;\n    });\n\n    return foundMatchBasedOnLabel\n        ? foundMatchBasedOnLabel.deviceId : userSelectedDeviceId;\n}\n\n/**\n * Should we hide the helper dialog when a user tries to do audio only screen sharing.\n *\n * @param {Object} state - The state of the application.\n * @returns {boolean}\n */\nexport function shouldHideShareAudioHelper(state: Object): boolean {\n\n    return state['features/base/settings'].hideShareAudioHelper;\n}\n","// @flow\n\nexport * from './functions.any';\n\n/**\n * Returns the deviceId for the currently used camera.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentCameraDeviceId(state: Object) {\n    return getDeviceIdByType(state, 'isVideoTrack');\n}\n\n/**\n * Returns the deviceId for the currently used microphone.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentMicDeviceId(state: Object) {\n    return getDeviceIdByType(state, 'isAudioTrack');\n}\n\n/**\n * Returns the deviceId for the currently used speaker.\n *\n * @param {Object} state - The state of the application.\n * @returns {void}\n */\nexport function getCurrentOutputDeviceId(state: Object) {\n    return state['features/base/settings'].audioOutputDeviceId;\n}\n\n/**\n * Returns the deviceId for the corresponding local track type.\n *\n * @param {Object} state - The state of the application.\n * @param {string} isType - Can be 'isVideoTrack' | 'isAudioTrack'.\n * @returns {string}\n */\nfunction getDeviceIdByType(state: Object, isType: string) {\n    const [ deviceId ] = state['features/base/tracks']\n          .map(t => t.jitsiTrack)\n          .filter(t => t && t.isLocal() && t[isType]())\n          .map(t => t.getDeviceId());\n\n    return deviceId || '';\n}\n\n/**\n * Returns the saved display name.\n *\n * @param {Object} state - The state of the application.\n * @returns {string}\n */\nexport function getDisplayName(state: Object): string {\n    return state['features/base/settings'].displayName || '';\n}\n\n\n/**\n * Handles changes to the `disableCallIntegration` setting.\n * Noop on web.\n *\n * @param {boolean} disabled - Whether call integration is disabled or not.\n * @returns {void}\n */\nexport function handleCallIntegrationChange(disabled: boolean) { // eslint-disable-line no-unused-vars\n}\n\n/**\n * Handles changes to the `disableCrashReporting` setting.\n * Noop on web.\n *\n * @param {boolean} disabled - Whether crash reporting is disabled or not.\n * @returns {void}\n */\nexport function handleCrashReportingChange(disabled: boolean) { // eslint-disable-line no-unused-vars\n}\n","import { createContext } from 'react';\nvar AnalyticsNextContext = createContext({\n    getAtlaskitAnalyticsContext: function () { return []; },\n    getAtlaskitAnalyticsEventHandlers: function () { return []; },\n});\nexport default AnalyticsNextContext;\n//# sourceMappingURL=context.js.map","import AnalyticsNextContext from './context';\nexport default AnalyticsNextContext;\n//# sourceMappingURL=index.js.map","// @flow\n\nimport Logger from 'jitsi-meet-logger';\n\nimport { openConnection } from '../../../connection';\nimport {\n    openAuthDialog,\n    openLoginDialog } from '../../../react/features/authentication/actions.web';\nimport { WaitForOwnerDialog } from '../../../react/features/authentication/components';\nimport {\n    isTokenAuthEnabled,\n    getTokenAuthUrl\n} from '../../../react/features/authentication/functions';\nimport { getReplaceParticipant } from '../../../react/features/base/config/functions';\nimport { isDialogOpen } from '../../../react/features/base/dialog';\nimport { setJWT } from '../../../react/features/base/jwt';\nimport UIUtil from '../util/UIUtil';\n\nimport LoginDialog from './LoginDialog';\n\n\nlet externalAuthWindow;\ndeclare var APP: Object;\n\nconst logger = Logger.getLogger(__filename);\n\n\n/**\n * Authenticate using external service or just focus\n * external auth window if there is one already.\n *\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction doExternalAuth(room, lockPassword) {\n    const config = APP.store.getState()['features/base/config'];\n\n    if (externalAuthWindow) {\n        externalAuthWindow.focus();\n\n        return;\n    }\n\n    if (room.isJoined()) {\n        let getUrl;\n\n        if (isTokenAuthEnabled(config)) {\n            getUrl = Promise.resolve(getTokenAuthUrl(config)(room.getName(), true));\n            initJWTTokenListener(room);\n        } else {\n            getUrl = room.getExternalAuthUrl(true);\n        }\n        getUrl.then(url => {\n            externalAuthWindow = LoginDialog.showExternalAuthDialog(\n                url,\n                () => {\n                    externalAuthWindow = null;\n                    if (!isTokenAuthEnabled(config)) {\n                        room.join(lockPassword);\n                    }\n                }\n            );\n        });\n    } else if (isTokenAuthEnabled(config)) {\n        redirectToTokenAuthService(room.getName());\n    } else {\n        room.getExternalAuthUrl().then(UIUtil.redirect);\n    }\n}\n\n/**\n * Redirect the user to the token authentication service for the login to be\n * performed. Once complete it is expected that the service will bring the user\n * back with \"?jwt={the JWT token}\" query parameter added.\n * @param {string} [roomName] the name of the conference room.\n */\nexport function redirectToTokenAuthService(roomName: string) {\n    const config = APP.store.getState()['features/base/config'];\n\n    // FIXME: This method will not preserve the other URL params that were\n    // originally passed.\n    UIUtil.redirect(getTokenAuthUrl(config)(roomName, false));\n}\n\n/**\n * Initializes 'message' listener that will wait for a JWT token to be received\n * from the token authentication service opened in a popup window.\n * @param room the name of the conference room.\n */\nfunction initJWTTokenListener(room) {\n    /**\n     *\n     */\n    function listener({ data, source }) {\n        if (externalAuthWindow !== source) {\n            logger.warn('Ignored message not coming '\n                + 'from external authnetication window');\n\n            return;\n        }\n\n        let jwt;\n\n        if (data && (jwt = data.jwtToken)) {\n            logger.info('Received JSON Web Token (JWT):', jwt);\n\n            APP.store.dispatch(setJWT(jwt));\n\n            const roomName = room.getName();\n\n            openConnection({\n                retry: false,\n                roomName\n            }).then(connection => {\n                // Start new connection\n                const newRoom = connection.initJitsiConference(\n                    roomName, APP.conference._getConferenceOptions());\n\n                // Authenticate from the new connection to get\n                // the session-ID from the focus, which will then be used\n                // to upgrade current connection's user role\n\n                newRoom.room.moderator.authenticate()\n                .then(() => {\n                    connection.disconnect();\n\n                    // At this point we'll have session-ID stored in\n                    // the settings. It will be used in the call below\n                    // to upgrade user's role\n                    room.room.moderator.authenticate()\n                        .then(() => {\n                            logger.info('User role upgrade done !');\n                            // eslint-disable-line no-use-before-define\n                            unregister();\n                        })\n                        .catch((err, errCode) => {\n                            logger.error('Authentication failed: ',\n                                err, errCode);\n                            unregister();\n                        });\n                })\n                .catch((error, code) => {\n                    unregister();\n                    connection.disconnect();\n                    logger.error(\n                        'Authentication failed on the new connection',\n                        error, code);\n                });\n            }, err => {\n                unregister();\n                logger.error('Failed to open new connection', err);\n            });\n        }\n    }\n\n    /**\n     *\n     */\n    function unregister() {\n        window.removeEventListener('message', listener);\n    }\n\n    if (window.addEventListener) {\n        window.addEventListener('message', listener, false);\n    }\n}\n\n/**\n * Authenticate for the conference.\n * Uses external service for auth if conference supports that.\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction authenticate(room: Object, lockPassword: string) {\n    const config = APP.store.getState()['features/base/config'];\n\n    if (isTokenAuthEnabled(config) || room.isExternalAuthEnabled()) {\n        doExternalAuth(room, lockPassword);\n    } else {\n        APP.store.dispatch(openLoginDialog());\n    }\n}\n\n/**\n * Notify user that authentication is required to create the conference.\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n */\nfunction requireAuth(room: Object, lockPassword: string) {\n    if (!isDialogOpen(APP.store, WaitForOwnerDialog)) {\n        return;\n    }\n\n    APP.store.dispatch(\n        openAuthDialog(\n        room.getName(), authenticate.bind(null, room, lockPassword))\n    );\n}\n\n/**\n * De-authenticate local user.\n *\n * @param {JitsiConference} room\n * @param {string} [lockPassword] password to use if the conference is locked\n * @returns {Promise}\n */\nfunction logout(room: Object) {\n    return new Promise(resolve => {\n        room.room.moderator.logout(resolve);\n    }).then(url => {\n        // de-authenticate conference on the fly\n        if (room.isJoined()) {\n            const replaceParticipant = getReplaceParticipant(APP.store.getState());\n\n            room.join(null, replaceParticipant);\n        }\n\n        return url;\n    });\n}\n\nexport default {\n    authenticate,\n    logout,\n    requireAuth\n};\n","import { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = visuallyHidden;\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","// @flow\n\nimport { Component } from 'react';\n\nimport statsEmitter from '../statsEmitter';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The connection quality percentage that must be reached to be considered of\n * good quality and can result in the connection indicator being hidden.\n *\n * @type {number}\n */\nexport const INDICATOR_DISPLAY_THRESHOLD = 30;\n\n/**\n * The type of the React {@code Component} props of {@link ConnectionIndicator}.\n */\nexport type Props = {\n\n    /**\n     * The ID of the participant associated with the displayed connection indication and\n     * stats.\n     */\n    participantId: string\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConnectionIndicator}.\n */\nexport type State = {\n\n    /**\n     * Whether or not a CSS class should be applied to the root for hiding the\n     * connection indicator. By default the indicator should start out hidden\n     * because the current connection status is not known at mount.\n     */\n    showIndicator: boolean,\n\n    /**\n     * Cache of the stats received from subscribing to stats emitting. The keys\n     * should be the name of the stat. With each stat update, updates stats are\n     * mixed in with cached stats and a new stats object is set in state.\n     */\n    stats: Object\n};\n\n/**\n * Implements a React {@link Component} which displays the current connection\n * quality.\n *\n * @extends {Component}\n */\nexport default class AbstractConnectionIndicator<P: Props, S: State> extends Component<P, S> {\n    /**\n     * The timeout for automatically hiding the indicator.\n     */\n    autoHideTimeout: ?TimeoutID\n\n    /**\n     * Initializes a new {@code ConnectionIndicator} instance.\n     *\n     * @param {P} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onStatsUpdated = this._onStatsUpdated.bind(this);\n    }\n\n    /**\n     * Starts listening for stat updates.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidMount() {\n        statsEmitter.subscribeToClientStats(\n            this.props.participantId, this._onStatsUpdated);\n    }\n\n    /**\n     * Updates which user's stats are being listened to.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.participantId !== this.props.participantId) {\n            statsEmitter.unsubscribeToClientStats(\n                prevProps.participantId, this._onStatsUpdated);\n            statsEmitter.subscribeToClientStats(\n                this.props.participantId, this._onStatsUpdated);\n        }\n    }\n\n    /**\n     * Cleans up any queued processes, which includes listening for new stats\n     * and clearing any timeout to hide the indicator.\n     *\n     * @private\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        statsEmitter.unsubscribeToClientStats(\n            this.props.participantId, this._onStatsUpdated);\n\n        clearTimeout(this.autoHideTimeout);\n    }\n\n    _onStatsUpdated: (Object) => void;\n\n    /**\n     * Callback invoked when new connection stats associated with the passed in\n     * user ID are available. Will update the component's display of current\n     * statistics.\n     *\n     * @param {Object} stats - Connection stats from the library.\n     * @private\n     * @returns {void}\n     */\n    _onStatsUpdated(stats = {}) {\n        // Rely on React to batch setState actions.\n        const { connectionQuality } = stats;\n        const newPercentageState = typeof connectionQuality === 'undefined'\n            ? {} : { percent: connectionQuality };\n        const newStats = Object.assign(\n            {},\n            this.state.stats,\n            stats,\n            newPercentageState);\n\n        this.setState({\n            stats: newStats\n        });\n\n        this._updateIndicatorAutoHide(newStats.percent);\n    }\n\n    /**\n     * Updates the internal state for automatically hiding the indicator.\n     *\n     * @param {number} percent - The current connection quality percentage\n     * between the values 0 and 100.\n     * @private\n     * @returns {void}\n     */\n    _updateIndicatorAutoHide(percent) {\n        if (percent < INDICATOR_DISPLAY_THRESHOLD) {\n            clearTimeout(this.autoHideTimeout);\n            this.autoHideTimeout = undefined;\n\n            this.setState({\n                showIndicator: true\n            });\n        } else if (this.autoHideTimeout) {\n            // This clause is intentionally left blank because no further action\n            // is needed if the percent is below the threshold and there is an\n            // autoHideTimeout set.\n        } else {\n            this.autoHideTimeout = setTimeout(() => {\n                this.setState({\n                    showIndicator: false\n                });\n            }, typeof interfaceConfig === 'undefined'\n                ? 5000\n                : interfaceConfig.CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT);\n        }\n    }\n}\n","export * from './actions';\nexport * from './components';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/device-selection');\n","import { createDeviceChangedEvent, sendAnalytics } from '../analytics';\nimport {\n    getDeviceLabelById,\n    setAudioInputDevice,\n    setAudioOutputDeviceId,\n    setVideoInputDevice\n} from '../base/devices';\nimport { updateSettings } from '../base/settings';\n\nimport { getDeviceSelectionDialogProps } from './functions';\nimport logger from './logger';\n\n/**\n * Submits the settings related to device selection.\n *\n * @param {Object} newState - The new settings.\n * @returns {Function}\n */\nexport function submitDeviceSelectionTab(newState) {\n    return (dispatch, getState) => {\n        const currentState = getDeviceSelectionDialogProps(getState());\n\n        if (newState.selectedVideoInputId\n            && newState.selectedVideoInputId\n                !== currentState.selectedVideoInputId) {\n            dispatch(updateSettings({\n                userSelectedCameraDeviceId: newState.selectedVideoInputId,\n                userSelectedCameraDeviceLabel:\n                    getDeviceLabelById(getState(), newState.selectedVideoInputId, 'videoInput')\n            }));\n\n            dispatch(\n                setVideoInputDevice(newState.selectedVideoInputId));\n        }\n\n        if (newState.selectedAudioInputId\n                && newState.selectedAudioInputId\n                  !== currentState.selectedAudioInputId) {\n            dispatch(updateSettings({\n                userSelectedMicDeviceId: newState.selectedAudioInputId,\n                userSelectedMicDeviceLabel:\n                    getDeviceLabelById(getState(), newState.selectedAudioInputId, 'audioInput')\n            }));\n\n            dispatch(\n                setAudioInputDevice(newState.selectedAudioInputId));\n        }\n\n        if (newState.selectedAudioOutputId\n                && newState.selectedAudioOutputId\n                    !== currentState.selectedAudioOutputId) {\n            sendAnalytics(createDeviceChangedEvent('audio', 'output'));\n\n            setAudioOutputDeviceId(\n                newState.selectedAudioOutputId,\n                dispatch,\n                true,\n                getDeviceLabelById(getState(), newState.selectedAudioOutputId, 'audioOutput'))\n                .then(() => logger.log('changed audio output device'))\n                .catch(err => {\n                    logger.warn(\n                        'Failed to change audio output device.',\n                        'Default or previously set audio output device will',\n                        ' be used instead.',\n                        err);\n                });\n        }\n    };\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport JitsiMeetJS from '../../base/lib-jitsi-meet/_';\n\nconst JitsiTrackEvents = JitsiMeetJS.events.track;\n\n/**\n * The type of the React {@code Component} props of {@link AudioInputPreview}.\n */\ntype Props = {\n\n    /**\n     * The JitsiLocalTrack to show an audio level meter for.\n     */\n    track: Object\n};\n\n/**\n * The type of the React {@code Component} props of {@link AudioInputPreview}.\n */\ntype State = {\n\n    /**\n     * The current audio input level being received, from 0 to 1.\n     */\n    audioLevel: number\n};\n\n/**\n * React component for displaying a audio level meter for a JitsiLocalTrack.\n */\nclass AudioInputPreview extends Component<Props, State> {\n    /**\n     * Initializes a new AudioInputPreview instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            audioLevel: 0\n        };\n\n        this._updateAudioLevel = this._updateAudioLevel.bind(this);\n    }\n\n    /**\n     * Starts listening for audio level updates after the initial render.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._listenForAudioUpdates(this.props.track);\n    }\n\n    /**\n     * Stops listening for audio level updates on the old track and starts\n     * listening instead on the new track.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.track !== this.props.track) {\n            this._listenForAudioUpdates(this.props.track);\n            this._updateAudioLevel(0);\n        }\n    }\n\n    /**\n     * Unsubscribe from audio level updates.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        this._stopListeningForAudioUpdates();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const audioMeterFill = {\n            width: `${Math.floor(this.state.audioLevel * 100)}%`\n        };\n\n        return (\n            <div className = 'audio-input-preview' >\n                <div\n                    className = 'audio-input-preview-level'\n                    style = { audioMeterFill } />\n            </div>\n        );\n    }\n\n    /**\n     * Starts listening for audio level updates from the library.\n     *\n     * @param {JitstiLocalTrack} track - The track to listen to for audio level\n     * updates.\n     * @private\n     * @returns {void}\n     */\n    _listenForAudioUpdates(track) {\n        this._stopListeningForAudioUpdates();\n\n        track && track.on(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateAudioLevel);\n    }\n\n    /**\n     * Stops listening to further updates from the current track.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopListeningForAudioUpdates() {\n        this.props.track && this.props.track.off(\n            JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,\n            this._updateAudioLevel);\n    }\n\n    _updateAudioLevel: (number) => void;\n\n    /**\n     * Updates the internal state of the last know audio level. The level should\n     * be between 0 and 1, as the level will be used as a percentage out of 1.\n     *\n     * @param {number} audioLevel - The new audio level for the track.\n     * @private\n     * @returns {void}\n     */\n    _updateAudioLevel(audioLevel) {\n        this.setState({\n            audioLevel\n        });\n    }\n}\n\nexport default AudioInputPreview;\n","// @flow\n\nimport Audio from './web/Audio';\n\nexport default Audio;\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/functions';\nimport Audio from '../../base/media/components/Audio';\n\nconst TEST_SOUND_PATH = 'sounds/ring.wav';\n\n/**\n * The type of the React {@code Component} props of {@link AudioOutputPreview}.\n */\ntype Props = {\n\n    /**\n     * The device id of the audio output device to use.\n     */\n    deviceId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React component for playing a test sound through a specified audio device.\n *\n * @extends Component\n */\nclass AudioOutputPreview extends Component<Props> {\n    _audioElement: ?Object;\n\n    /**\n     * Initializes a new AudioOutputPreview instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._audioElement = null;\n\n        this._audioElementReady = this._audioElementReady.bind(this);\n        this._onClick = this._onClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    /**\n     * Updates the audio element when the target output device changes and the\n     * audio element has re-rendered.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate() {\n        this._setAudioSink();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = 'audio-output-preview'>\n                <a\n                    aria-label = { this.props.t('deviceSelection.testAudio') }\n                    onClick = { this._onClick }\n                    onKeyPress = { this._onKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    { this.props.t('deviceSelection.testAudio') }\n                </a>\n                <Audio\n                    setRef = { this._audioElementReady }\n                    src = { TEST_SOUND_PATH } />\n            </div>\n        );\n    }\n\n    _audioElementReady: (Object) => void;\n\n    /**\n     * Sets the instance variable for the component's audio element so it can be\n     * accessed directly.\n     *\n     * @param {Object} element - The DOM element for the component's audio.\n     * @private\n     * @returns {void}\n     */\n    _audioElementReady(element: Object) {\n        this._audioElement = element;\n\n        this._setAudioSink();\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Plays a test sound.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        this._audioElement\n            && this._audioElement.play();\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClick();\n        }\n    }\n\n    /**\n     * Updates the target output device for playing the test sound.\n     *\n     * @private\n     * @returns {void}\n     */\n    _setAudioSink() {\n        this._audioElement\n            && this.props.deviceId\n            && this._audioElement.setSinkId(this.props.deviceId);\n    }\n}\n\nexport default translate(AudioOutputPreview);\n","/* @flow */\n\nimport DropdownMenu, {\n    DropdownItem,\n    DropdownItemGroup\n} from '@atlaskit/dropdown-menu';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/functions';\n\n/**\n * The type of the React {@code Component} props of {@link DeviceSelector}.\n */\ntype Props = {\n\n    /**\n     * MediaDeviceInfos used for display in the select element.\n     */\n    devices: Array<Object>,\n\n    /**\n     * If false, will return a selector with no selection options.\n     */\n    hasPermission: boolean,\n\n    /**\n     * CSS class for the icon to the left of the dropdown trigger.\n     */\n    icon: string,\n\n    /**\n     * If true, will render the selector disabled with a default selection.\n     */\n    isDisabled: boolean,\n\n    /**\n     * The translation key to display as a menu label.\n     */\n    label: string,\n\n    /**\n     * The callback to invoke when a selection is made.\n     */\n    onSelect: Function,\n\n    /**\n     * The default device to display as selected.\n     */\n    selectedDeviceId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The id of the dropdown element\n     */\n    id: string\n};\n\n/**\n * React component for selecting a device from a select element. Wraps\n * AKDropdownMenu with device selection specific logic.\n *\n * @extends Component\n */\nclass DeviceSelector extends Component<Props> {\n    /**\n     * Initializes a new DeviceSelector instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this._onSelect = this._onSelect.bind(this);\n        this._createDropdownItem = this._createDropdownItem.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this.props.hasPermission === undefined) {\n            return null;\n        }\n\n        if (!this.props.hasPermission) {\n            return this._renderNoPermission();\n        }\n\n        if (!this.props.devices || !this.props.devices.length) {\n            return this._renderNoDevices();\n        }\n\n        const items = this.props.devices.map(this._createDropdownItem);\n        const defaultSelected = this.props.devices.find(item =>\n            item.deviceId === this.props.selectedDeviceId\n        );\n\n        return this._createDropdown({\n            defaultSelected,\n            isDisabled: this.props.isDisabled,\n            items,\n            placeholder: this.props.t('deviceSelection.selectADevice')\n        });\n    }\n\n    /**\n     * Creates a React Element for displaying the passed in text surrounded by\n     * two icons. The left icon is the icon class passed in through props and\n     * the right icon is AtlasKit ExpandIcon.\n     *\n     * @param {string} triggerText - The text to display within the element.\n     * @private\n     * @returns {ReactElement}\n     */\n    _createDropdownTrigger(triggerText) {\n        return (\n            <div className = 'device-selector-trigger'>\n                <span className = 'device-selector-trigger-text'>\n                    { triggerText }\n                </span>\n            </div>\n        );\n    }\n\n    _createDropdownItem: (Object) => void;\n\n    /**\n     * Creates an object in the format expected by AKDropdownMenu for an option.\n     *\n     * @param {MediaDeviceInfo} device - An object with a label and a deviceId.\n     * @private\n     * @returns {Object} The passed in media device description converted to a\n     * format recognized as a valid AKDropdownMenu item.\n     */\n    _createDropdownItem(device) {\n        return (\n            <DropdownItem\n                data-deviceid = { device.deviceId }\n                isSelected = { device.deviceId === this.props.selectedDeviceId }\n                key = { device.deviceId }\n                onClick = { this._onSelect }>\n                { device.label || device.deviceId }\n            </DropdownItem>\n        );\n    }\n\n    /**\n     * Creates a AKDropdownMenu Component using passed in props and options. If\n     * the dropdown needs to be disabled, then only the AKDropdownMenu trigger\n     * element is returned to simulate a disabled state.\n     *\n     * @param {Object} options - Additional configuration for display.\n     * @param {Object} options.defaultSelected - The option that should be set\n     * as currently chosen.\n     * @param {boolean} options.isDisabled - If true, only the AKDropdownMenu\n     * trigger component will be returned to simulate a disabled dropdown.\n     * @param {Array} options.items - All the selectable options to display.\n     * @param {string} options.placeholder - The translation key to display when\n     * no selection has been made.\n     * @private\n     * @returns {ReactElement}\n     */\n    _createDropdown(options) {\n        const triggerText\n            = (options.defaultSelected && (options.defaultSelected.label || options.defaultSelected.deviceId))\n                || options.placeholder;\n        const trigger = this._createDropdownTrigger(triggerText);\n\n        if (options.isDisabled || !options.items.length) {\n            return (\n                <div className = 'device-selector-trigger-disabled'>\n                    { trigger }\n                </div>\n            );\n        }\n\n        return (\n            <div className = 'dropdown-menu'>\n                <DropdownMenu\n                    shouldFitContainer = { true }\n                    trigger = { triggerText }\n                    triggerButtonProps = {{\n                        shouldFitContainer: true,\n                        id: this.props.id\n                    }}\n                    triggerType = 'button'>\n                    <DropdownItemGroup>\n                        { options.items }\n                    </DropdownItemGroup>\n                </DropdownMenu>\n            </div>\n        );\n    }\n\n    _onSelect: (Object) => void;\n\n    /**\n     * Invokes the passed in callback to notify of selection changes.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSelect(e) {\n        const deviceId = e.currentTarget.getAttribute('data-deviceid');\n\n        if (this.props.selectedDeviceId !== deviceId) {\n            this.props.onSelect(deviceId);\n        }\n    }\n\n    /**\n     * Creates a Select Component that is disabled and has a placeholder\n     * indicating there are no devices to select.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNoDevices() {\n        return this._createDropdown({\n            isDisabled: true,\n            placeholder: this.props.t('settings.noDevice')\n        });\n    }\n\n    /**\n     * Creates a AKDropdownMenu Component that is disabled and has a placeholder\n     * stating there is no permission to display the devices.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNoPermission() {\n        return this._createDropdown({\n            isDisabled: true,\n            placeholder: this.props.t('deviceSelection.noPermission')\n        });\n    }\n}\n\nexport default translate(DeviceSelector);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport Video from '../../base/media/components/Video';\n\nconst VIDEO_ERROR_CLASS = 'video-preview-has-error';\n\n/**\n * The type of the React {@code Component} props of {@link VideoInputPreview}.\n */\ntype Props = {\n\n    /**\n     * An error message to display instead of a preview. Displaying an error\n     * will take priority over displaying a video preview.\n     */\n    error: ?string,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    track: Object\n};\n\n/**\n * React component for displaying video. This component defers to lib-jitsi-meet\n * logic for rendering the video.\n *\n * @extends Component\n */\nclass VideoInputPreview extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { error } = this.props;\n        const errorClass = error ? VIDEO_ERROR_CLASS : '';\n        const className = `video-input-preview ${errorClass}`;\n\n        return (\n            <div className = { className }>\n                <Video\n                    className = 'video-input-preview-display flipVideoX'\n                    playsinline = { true }\n                    videoTrack = {{ jitsiTrack: this.props.track }} />\n                <div className = 'video-input-preview-error'>\n                    { error || '' }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default VideoInputPreview;\n","// @flow\n\nimport React from 'react';\n\nimport AbstractDialogTab, {\n    type Props as AbstractDialogTabProps\n} from '../../base/dialog/components/web/AbstractDialogTab';\nimport { translate } from '../../base/i18n/functions';\nimport { createLocalTrack } from '../../base/lib-jitsi-meet/functions';\nimport logger from '../logger';\n\nimport AudioInputPreview from './AudioInputPreview';\nimport AudioOutputPreview from './AudioOutputPreview';\nimport DeviceSelector from './DeviceSelector';\nimport VideoInputPreview from './VideoInputPreview';\n\n/**\n * The type of the React {@code Component} props of {@link DeviceSelection}.\n */\nexport type Props = {\n    ...$Exact<AbstractDialogTabProps>,\n\n    /**\n     * All known audio and video devices split by type. This prop comes from\n     * the app state.\n     */\n    availableDevices: Object,\n\n    /**\n     * Whether or not the audio selector can be interacted with. If true,\n     * the audio input selector will be rendered as disabled. This is\n     * specifically used to prevent audio device changing in Firefox, which\n     * currently does not work due to a browser-side regression.\n     */\n    disableAudioInputChange: boolean,\n\n    /**\n     * True if device changing is configured to be disallowed. Selectors\n     * will display as disabled.\n     */\n    disableDeviceChange: boolean,\n\n    /**\n     * Whether or not the audio permission was granted.\n     */\n    hasAudioPermission: boolean,\n\n    /**\n     * Whether or not the audio permission was granted.\n     */\n    hasVideoPermission: boolean,\n\n    /**\n     * If true, the audio meter will not display. Necessary for browsers or\n     * configurations that do not support local stats to prevent a\n     * non-responsive mic preview from displaying.\n     */\n    hideAudioInputPreview: boolean,\n\n    /**\n     * Whether or not the audio output source selector should display. If\n     * true, the audio output selector and test audio link will not be\n     * rendered.\n     */\n    hideAudioOutputSelect: boolean,\n\n    /**\n     * Whether video input preview should be displayed or not.\n     * (In the case of iOS Safari)\n     */\n    hideVideoInputPreview: boolean,\n\n    /**\n     * Whether video output dropdown should be displayed or not.\n     * (In the case of iOS Safari)\n     */\n    hideVideoOutputSelect: boolean,\n\n    /**\n     * An optional callback to invoke after the component has completed its\n     * mount logic.\n     */\n    mountCallback?: Function,\n\n    /**\n     * The id of the audio input device to preview.\n     */\n    selectedAudioInputId: string,\n\n    /**\n     * The id of the audio output device to preview.\n     */\n    selectedAudioOutputId: string,\n\n    /**\n     * The id of the video input device to preview.\n     */\n    selectedVideoInputId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DeviceSelection}.\n */\ntype State = {\n\n    /**\n     * The JitsiTrack to use for previewing audio input.\n     */\n    previewAudioTrack: ?Object,\n\n    /**\n     * The JitsiTrack to use for previewing video input.\n     */\n    previewVideoTrack: ?Object,\n\n    /**\n     * The error message from trying to use a video input device.\n     */\n    previewVideoTrackError: ?string\n};\n\n/**\n * React {@code Component} for previewing audio and video input/output devices.\n *\n * @extends Component\n */\nclass DeviceSelection extends AbstractDialogTab<Props, State> {\n\n    /**\n     * Whether current component is mounted or not.\n     *\n     * In component did mount we start a Promise to create tracks and\n     * set the tracks in the state, if we unmount the component in the meanwhile\n     * tracks will be created and will never been disposed (dispose tracks is\n     * in componentWillUnmount). When tracks are created and component is\n     * unmounted we dispose the tracks.\n     */\n    _unMounted: boolean;\n\n    /**\n     * Initializes a new DeviceSelection instance.\n     *\n     * @param {Object} props - The read-only React Component props with which\n     * the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            previewAudioTrack: null,\n            previewVideoTrack: null,\n            previewVideoTrackError: null\n        };\n        this._unMounted = true;\n    }\n\n    /**\n     * Generate the initial previews for audio input and video input.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._unMounted = false;\n        Promise.all([\n            this._createAudioInputTrack(this.props.selectedAudioInputId),\n            this._createVideoInputTrack(this.props.selectedVideoInputId)\n        ])\n        .catch(err => logger.warn('Failed to initialize preview tracks', err))\n        .then(() => this.props.mountCallback && this.props.mountCallback());\n    }\n\n    /**\n     * Checks if audio / video permissions were granted. Updates audio input and\n     * video input previews.\n     *\n     * @param {Object} prevProps - Previous props this component received.\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps) {\n        if (prevProps.selectedAudioInputId\n            !== this.props.selectedAudioInputId) {\n            this._createAudioInputTrack(this.props.selectedAudioInputId);\n        }\n\n        if (prevProps.selectedVideoInputId\n            !== this.props.selectedVideoInputId) {\n            this._createVideoInputTrack(this.props.selectedVideoInputId);\n        }\n    }\n\n    /**\n     * Ensure preview tracks are destroyed to prevent continued use.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._unMounted = true;\n        this._disposeAudioInputPreview();\n        this._disposeVideoInputPreview();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            hideAudioInputPreview,\n            hideAudioOutputSelect,\n            hideVideoInputPreview,\n            selectedAudioOutputId\n        } = this.props;\n\n        return (\n            <div className = { `device-selection${hideVideoInputPreview ? ' video-hidden' : ''}` }>\n                <div className = 'device-selection-column column-video'>\n                    { !hideVideoInputPreview\n                        && <div className = 'device-selection-video-container'>\n                            <VideoInputPreview\n                                error = { this.state.previewVideoTrackError }\n                                track = { this.state.previewVideoTrack } />\n                        </div>\n                    }\n                    { !hideAudioInputPreview\n                        && <AudioInputPreview\n                            track = { this.state.previewAudioTrack } /> }\n                </div>\n                <div className = 'device-selection-column column-selectors'>\n                    <div\n                        aria-live = 'polite all'\n                        className = 'device-selectors'>\n                        { this._renderSelectors() }\n                    </div>\n                    { !hideAudioOutputSelect\n                        && <AudioOutputPreview\n                            deviceId = { selectedAudioOutputId } /> }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Creates the JitiTrack for the audio input preview.\n     *\n     * @param {string} deviceId - The id of audio input device to preview.\n     * @private\n     * @returns {void}\n     */\n    _createAudioInputTrack(deviceId) {\n        return this._disposeAudioInputPreview()\n            .then(() => createLocalTrack('audio', deviceId, 5000))\n            .then(jitsiLocalTrack => {\n                if (this._unMounted) {\n                    jitsiLocalTrack.dispose();\n\n                    return;\n                }\n\n                this.setState({\n                    previewAudioTrack: jitsiLocalTrack\n                });\n            })\n            .catch(() => {\n                this.setState({\n                    previewAudioTrack: null\n                });\n            });\n    }\n\n    /**\n     * Creates the JitiTrack for the video input preview.\n     *\n     * @param {string} deviceId - The id of video device to preview.\n     * @private\n     * @returns {void}\n     */\n    _createVideoInputTrack(deviceId) {\n        const { hideVideoInputPreview } = this.props;\n\n        if (hideVideoInputPreview) {\n            return;\n        }\n\n        return this._disposeVideoInputPreview()\n            .then(() => createLocalTrack('video', deviceId, 5000))\n            .then(jitsiLocalTrack => {\n                if (!jitsiLocalTrack) {\n                    return Promise.reject();\n                }\n\n                if (this._unMounted) {\n                    jitsiLocalTrack.dispose();\n\n                    return;\n                }\n\n                this.setState({\n                    previewVideoTrack: jitsiLocalTrack,\n                    previewVideoTrackError: null\n                });\n            })\n            .catch(() => {\n                this.setState({\n                    previewVideoTrack: null,\n                    previewVideoTrackError:\n                        this.props.t('deviceSelection.previewUnavailable')\n                });\n            });\n    }\n\n    /**\n     * Utility function for disposing the current audio input preview.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _disposeAudioInputPreview(): Promise<*> {\n        return this.state.previewAudioTrack\n            ? this.state.previewAudioTrack.dispose() : Promise.resolve();\n    }\n\n    /**\n     * Utility function for disposing the current video input preview.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _disposeVideoInputPreview(): Promise<*> {\n        return this.state.previewVideoTrack\n            ? this.state.previewVideoTrack.dispose() : Promise.resolve();\n    }\n\n    /**\n     * Creates a DeviceSelector instance based on the passed in configuration.\n     *\n     * @private\n     * @param {Object} deviceSelectorProps - The props for the DeviceSelector.\n     * @returns {ReactElement}\n     */\n    _renderSelector(deviceSelectorProps) {\n        return (\n            <div key = { deviceSelectorProps.label }>\n                <label\n                    className = 'device-selector-label'\n                    htmlFor = { deviceSelectorProps.id }>\n                    { this.props.t(deviceSelectorProps.label) }\n                </label>\n                <DeviceSelector { ...deviceSelectorProps } />\n            </div>\n        );\n    }\n\n    /**\n     * Creates DeviceSelector instances for video output, audio input, and audio\n     * output.\n     *\n     * @private\n     * @returns {Array<ReactElement>} DeviceSelector instances.\n     */\n    _renderSelectors() {\n        const { availableDevices, hasAudioPermission, hasVideoPermission } = this.props;\n\n        const configurations = [\n            {\n                devices: availableDevices.audioInput,\n                hasPermission: hasAudioPermission,\n                icon: 'icon-microphone',\n                isDisabled: this.props.disableAudioInputChange\n                    || this.props.disableDeviceChange,\n                key: 'audioInput',\n                id: 'audioInput',\n                label: 'settings.selectMic',\n                onSelect: selectedAudioInputId =>\n                    super._onChange({ selectedAudioInputId }),\n                selectedDeviceId: this.state.previewAudioTrack\n                    ? this.state.previewAudioTrack.getDeviceId() : null\n            }\n        ];\n\n        if (!this.props.hideVideoOutputSelect) {\n            configurations.unshift({\n                devices: availableDevices.videoInput,\n                hasPermission: hasVideoPermission,\n                icon: 'icon-camera',\n                isDisabled: this.props.disableDeviceChange,\n                key: 'videoInput',\n                id: 'videoInput',\n                label: 'settings.selectCamera',\n                onSelect: selectedVideoInputId =>\n                    super._onChange({ selectedVideoInputId }),\n                selectedDeviceId: this.state.previewVideoTrack\n                    ? this.state.previewVideoTrack.getDeviceId() : null\n            });\n        }\n\n        if (!this.props.hideAudioOutputSelect) {\n            configurations.push({\n                devices: availableDevices.audioOutput,\n                hasPermission: hasAudioPermission || hasVideoPermission,\n                icon: 'icon-speaker',\n                isDisabled: this.props.disableDeviceChange,\n                key: 'audioOutput',\n                id: 'audioOutput',\n                label: 'settings.selectAudioOutput',\n                onSelect: selectedAudioOutputId =>\n                    super._onChange({ selectedAudioOutputId }),\n                selectedDeviceId: this.props.selectedAudioOutputId\n            });\n        }\n\n        return configurations.map(config => this._renderSelector(config));\n    }\n}\n\nexport default translate(DeviceSelection);\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * The constant for the event type 'track'.\n * TODO: keep these constants in a single place. Can we import them from\n * lib-jitsi-meet's AnalyticsEvents somehow?\n * @type {string}\n */\nconst TYPE_TRACK = 'track';\n\n/**\n * The constant for the event type 'UI' (User Interaction).\n * TODO: keep these constants in a single place. Can we import them from\n * lib-jitsi-meet's AnalyticsEvents somehow?\n * @type {string}\n */\nconst TYPE_UI = 'ui';\n\n/**\n * The identifier for the \"pinned\" action. The local participant has pinned a\n * participant to remain on large video.\n *\n * @type {String}\n */\nexport const ACTION_PINNED = 'pinned';\n\n/**\n * The identifier for the \"unpinned\" action. The local participant has unpinned\n * a participant so the participant doesn't remain permanently on local large\n * video.\n *\n * @type {String}\n */\nexport const ACTION_UNPINNED = 'unpinned';\n\n/**\n * The identifier for the \"pressed\" action for shortcut events. This action\n * means that a button was pressed (and not yet released).\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_PRESSED = 'pressed';\n\n/**\n * The identifier for the \"released\" action for shortcut events. This action\n * means that a button which was previously pressed was released.\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_RELEASED = 'released';\n\n/**\n * The identifier for the \"triggered\" action for shortcut events. This action\n * means that a button was pressed, and we don't care about whether it was\n * released or will be released in the future.\n *\n * @type {String}\n */\nexport const ACTION_SHORTCUT_TRIGGERED = 'triggered';\n\n/**\n * The name of the keyboard shortcut or toolbar button for muting audio.\n */\nexport const AUDIO_MUTE = 'audio.mute';\n\n/**\n * The name of the keyboard shortcut or toolbar button for muting video.\n */\nexport const VIDEO_MUTE = 'video.mute';\n\n/**\n * Creates an event which indicates that a certain action was requested through\n * the jitsi-meet API.\n *\n * @param {Object} action - The action which was requested through the\n * jitsi-meet API.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createApiEvent(action, attributes = {}) {\n    return {\n        action,\n        attributes,\n        source: 'jitsi-meet-api'\n    };\n}\n\n/**\n * Creates an event which indicates that the audio-only mode has been changed.\n *\n * @param {boolean} enabled - True if audio-only is enabled, false otherwise.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createAudioOnlyChangedEvent(enabled) {\n    return {\n        action: `audio.only.${enabled ? 'enabled' : 'disabled'}`\n    };\n}\n\n/**\n * Creates an event for about the JitsiConnection.\n *\n * @param {string} action - The action that the event represents.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createConnectionEvent(action, attributes = {}) {\n    return {\n        action,\n        actionSubject: 'connection',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates an action occurred in the calendar\n * integration UI.\n *\n * @param {string} eventName - The name of the calendar UI event.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarClickedEvent(eventName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: eventName,\n        attributes,\n        source: 'calendar',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that the calendar container is shown and\n * selected.\n *\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarSelectedEvent(attributes = {}) {\n    return {\n        action: 'selected',\n        actionSubject: 'calendar.selected',\n        attributes,\n        source: 'calendar',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event indicating that a calendar has been connected.\n *\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createCalendarConnectedEvent(attributes = {}) {\n    return {\n        action: 'calendar.connected',\n        actionSubject: 'calendar.connected',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates an action occurred in the recent list\n * integration UI.\n *\n * @param {string} eventName - The name of the recent list UI event.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecentClickedEvent(eventName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: eventName,\n        attributes,\n        source: 'recent.list',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicate an action occurred in the chrome extension banner.\n *\n * @param {boolean} installPressed - Whether the user pressed install or `x` - cancel.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createChromeExtensionBannerEvent(installPressed, attributes = {}) {\n    return {\n        action: installPressed ? 'install' : 'cancel',\n        attributes,\n        source: 'chrome.extension.banner',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that the recent list container is shown and\n * selected.\n *\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecentSelectedEvent(attributes = {}) {\n    return {\n        action: 'selected',\n        actionSubject: 'recent.list.selected',\n        attributes,\n        source: 'recent.list',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event for an action on the deep linking page.\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createDeepLinkingPageEvent(\n        action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        source: 'deepLinkingPage',\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates that a device was changed.\n *\n * @param {string} mediaType - The media type of the device ('audio' or\n * 'video').\n * @param {string} deviceType - The type of the device ('input' or 'output').\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createDeviceChangedEvent(mediaType, deviceType) {\n    return {\n        action: 'device.changed',\n        attributes: {\n            'device_type': deviceType,\n            'media_type': mediaType\n        }\n    };\n}\n\n/**\n * Creates an event indicating that an action related to E2EE occurred.\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createE2EEEvent(action) {\n    return {\n        action,\n        actionSubject: 'e2ee'\n    };\n}\n\n/**\n * Creates an event which specifies that the feedback dialog has been opened.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createFeedbackOpenEvent() {\n    return {\n        action: 'feedback.opened'\n    };\n}\n\n/**\n * Creates an event for an action regarding the AddPeopleDialog (invites).\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createInviteDialogEvent(\n        action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        attributes,\n        source: 'inviteDialog'\n    };\n}\n\n/**\n * Creates an event which reports about the current network information reported by the operating system.\n *\n * @param {boolean} isOnline - Tells whether or not the internet is reachable.\n * @param {string} [networkType] - Network type, see {@code NetworkInfo} type defined by the 'base/net-info' feature.\n * @param {Object} [details] - Extra info, see {@code NetworkInfo} type defined by the 'base/net-info' feature.\n * @returns {Object}\n */\nexport function createNetworkInfoEvent({ isOnline, networkType, details }) {\n    const attributes = { isOnline };\n\n    // Do no include optional stuff or Amplitude handler will log warnings.\n    networkType && (attributes.networkType = networkType);\n    details && (attributes.details = details);\n\n    return {\n        action: 'network.info',\n        attributes\n    };\n}\n\n/**\n * Creates an \"offer/answer failure\" event.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createOfferAnswerFailedEvent() {\n    return {\n        action: 'offer.answer.failure'\n    };\n}\n\n/**\n * Creates a \"page reload\" event.\n *\n * @param {string} reason - The reason for the reload.\n * @param {number} timeout - The timeout in seconds after which the page is\n * scheduled to reload.\n * @param {Object} details - The details for the error.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createPageReloadScheduledEvent(reason, timeout, details) {\n    return {\n        action: 'page.reload.scheduled',\n        attributes: {\n            reason,\n            timeout,\n            ...details\n        }\n    };\n}\n\n/**\n * Creates a \"pinned\" or \"unpinned\" event.\n *\n * @param {string} action - The action (\"pinned\" or \"unpinned\").\n * @param {string} participantId - The ID of the participant which was pinned.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createPinnedEvent(action, participantId, attributes) {\n    return {\n        type: TYPE_TRACK,\n        action,\n        actionSubject: 'participant',\n        objectType: 'participant',\n        objectId: participantId,\n        attributes\n    };\n}\n\n/**\n * Creates an event which indicates that a button in the profile panel was\n * clicked.\n *\n * @param {string} buttonName - The name of the button.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createProfilePanelButtonEvent(buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'profile.panel',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a specific button on one of the\n * recording-related dialogs was clicked.\n *\n * @param {string} dialogName - The name of the dialog (e.g. 'start' or 'stop').\n * @param {string} buttonName - The name of the button (e.g. 'confirm' or\n * 'cancel').\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecordingDialogEvent(\n        dialogName, buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: `${dialogName}.recording.dialog`,\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a specific button on one of the\n * liveStreaming-related dialogs was clicked.\n *\n * @param {string} dialogName - The name of the dialog (e.g. 'start' or 'stop').\n * @param {string} buttonName - The name of the button (e.g. 'confirm' or\n * 'cancel').\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createLiveStreamingDialogEvent(dialogName, buttonName) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        source: `${dialogName}.liveStreaming.dialog`,\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event with the local tracks duration.\n *\n * @param {Object} duration - The object with the duration of the local tracks.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createLocalTracksDurationEvent(duration) {\n    const { audio, video, conference } = duration;\n    const { camera, desktop } = video;\n\n    return {\n        action: 'local.tracks.durations',\n        attributes: {\n            audio: audio.value,\n            camera: camera.value,\n            conference: conference.value,\n            desktop: desktop.value\n        }\n    };\n}\n\n/**\n * Creates an event which indicates that an action related to recording has\n * occurred.\n *\n * @param {string} action - The action (e.g. 'start' or 'stop').\n * @param {string} type - The recording type (e.g. 'file' or 'live').\n * @param {number} value - The duration of the recording in seconds (for stop\n * action).\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRecordingEvent(action, type, value) {\n    return {\n        action,\n        actionSubject: `recording.${type}`,\n        attributes: {\n            value\n        }\n    };\n}\n\n/**\n * Creates an event which indicates that the same conference has been rejoined.\n *\n * @param {string} url - The full conference URL.\n * @param {number} lastConferenceDuration - How many seconds user stayed in the previous conference.\n * @param {number} timeSinceLeft - How many seconds since the last conference was left.\n * @returns {Object} The event in a format suitable for sending via sendAnalytics.\n */\nexport function createRejoinedEvent({ url, lastConferenceDuration, timeSinceLeft }) {\n    return {\n        action: 'rejoined',\n        attributes: {\n            lastConferenceDuration,\n            timeSinceLeft,\n            url\n        }\n    };\n}\n\n/**\n * Creates an event which specifies that the \"confirm\" button on the remote\n * mute dialog has been clicked.\n *\n * @param {string} participantId - The ID of the participant that was remotely\n * muted.\n * @param {string} mediaType - The media type of the channel to mute.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRemoteMuteConfirmedEvent(participantId, mediaType) {\n    return {\n        action: 'clicked',\n        actionSubject: 'remote.mute.dialog.confirm.button',\n        attributes: {\n            'participant_id': participantId,\n            'media_type': mediaType\n        },\n        source: 'remote.mute.dialog',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that one of the buttons in the \"remote\n * video menu\" was clicked.\n *\n * @param {string} buttonName - The name of the button.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRemoteVideoMenuButtonEvent(buttonName, attributes) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'remote.video.menu',\n        type: TYPE_UI\n    };\n}\n\n/**\n * The rtcstats websocket onclose event. We send this to amplitude in order\n * to detect trace ws prematurely closing.\n *\n * @param {Object} closeEvent - The event with which the websocket closed.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createRTCStatsTraceCloseEvent(closeEvent) {\n    const event = {\n        action: 'trace.onclose',\n        source: 'rtcstats'\n    };\n\n    event.code = closeEvent.code;\n    event.reason = closeEvent.reason;\n\n    return event;\n}\n\n/**\n * Creates an event indicating that an action related to video blur\n * occurred (e.g. It was started or stopped).\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createVideoBlurEvent(action) {\n    return {\n        action,\n        actionSubject: 'video.blur'\n    };\n}\n\n/**\n * Creates an event indicating that an action related to screen sharing\n * occurred (e.g. It was started or stopped).\n *\n * @param {string} action - The action which occurred.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createScreenSharingEvent(action) {\n    return {\n        action,\n        actionSubject: 'screen.sharing'\n    };\n}\n\n/**\n * Creates an event which indicates the screen sharing video is not displayed when it needs to be displayed.\n *\n * @param {Object} attributes - Additional information that describes the issue.\n * @returns {Object} The event in a format suitable for sending via sendAnalytics.\n */\nexport function createScreenSharingIssueEvent(attributes) {\n    return {\n        action: 'screen.sharing.issue',\n        attributes\n    };\n}\n\n/**\n * The local participant failed to send a \"selected endpoint\" message to the\n * bridge.\n *\n * @param {Error} error - The error which caused the failure.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSelectParticipantFailedEvent(error) {\n    const event = {\n        action: 'select.participant.failed'\n    };\n\n    if (error) {\n        event.error = error.toString();\n    }\n\n    return event;\n}\n\n/**\n * Creates an event associated with the \"shared video\" feature.\n *\n * @param {string} action - The action that the event represents.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSharedVideoEvent(action, attributes = {}) {\n    return {\n        action,\n        attributes,\n        actionSubject: 'shared.video'\n    };\n}\n\n/**\n * Creates an event associated with a shortcut being pressed, released or\n * triggered. By convention, where appropriate an attribute named 'enable'\n * should be used to indicate the action which resulted by the shortcut being\n * pressed (e.g. Whether screen sharing was enabled or disabled).\n *\n * @param {string} shortcut - The identifier of the shortcut which produced\n * an action.\n * @param {string} action - The action that the event represents (one\n * of ACTION_SHORTCUT_PRESSED, ACTION_SHORTCUT_RELEASED\n * or ACTION_SHORTCUT_TRIGGERED).\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createShortcutEvent(\n        shortcut,\n        action = ACTION_SHORTCUT_TRIGGERED,\n        attributes = {}) {\n    return {\n        action,\n        actionSubject: 'keyboard.shortcut',\n        actionSubjectId: shortcut,\n        attributes,\n        source: 'keyboard.shortcut',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates the \"start audio only\" configuration.\n *\n * @param {boolean} audioOnly - Whether \"start audio only\" is enabled or not.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartAudioOnlyEvent(audioOnly) {\n    return {\n        action: 'start.audio.only',\n        attributes: {\n            enabled: audioOnly\n        }\n    };\n}\n\n/**\n * Creates an event which indicates the \"start silent\" configuration.\n *\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartSilentEvent() {\n    return {\n        action: 'start.silent'\n    };\n}\n\n/**\n * Creates an event which indicates that HTMLAudioElement.play has failed.\n *\n * @param {sting} elementID - The ID of the HTMLAudioElement.\n * @returns {Object} The event in a format suitable for sending via sendAnalytics.\n */\nexport function createAudioPlayErrorEvent(elementID) {\n    return {\n        action: 'audio.play.error',\n        attributes: {\n            elementID\n        }\n    };\n}\n\n/**\n * Creates an event which indicates that HTMLAudioElement.play has succeded after a prior failure.\n *\n * @param {sting} elementID - The ID of the HTMLAudioElement.\n * @returns {Object} The event in a format suitable for sending via sendAnalytics.\n */\nexport function createAudioPlaySuccessEvent(elementID) {\n    return {\n        action: 'audio.play.success',\n        attributes: {\n            elementID\n        }\n    };\n}\n\n/**\n * Creates an event which indicates the \"start muted\" configuration.\n *\n * @param {string} source - The source of the configuration, 'local' or\n * 'remote' depending on whether it comes from the static configuration (i.e.\n * {@code config.js}) or comes dynamically from Jicofo.\n * @param {boolean} audioMute - Whether the configuration requests that audio\n * is muted.\n * @param {boolean} videoMute - Whether the configuration requests that video\n * is muted.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createStartMutedConfigurationEvent(\n        source,\n        audioMute,\n        videoMute) {\n    return {\n        action: 'start.muted.configuration',\n        attributes: {\n            source,\n            'audio_mute': audioMute,\n            'video_mute': videoMute\n        }\n    };\n}\n\n/**\n * Automatically changing the mute state of a media track in order to match\n * the current stored state in redux.\n *\n * @param {string} mediaType - The track's media type ('audio' or 'video').\n * @param {boolean} muted - Whether the track is being muted or unmuted as\n * as result of the sync operation.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createSyncTrackStateEvent(mediaType, muted) {\n    return {\n        action: 'sync.track.state',\n        attributes: {\n            'media_type': mediaType,\n            muted\n        }\n    };\n}\n\n/**\n * Creates an event associated with a toolbar button being clicked/pressed. By\n * convention, where appropriate an attribute named 'enable' should be used to\n * indicate the action which resulted by the shortcut being pressed (e.g.\n * Whether screen sharing was enabled or disabled).\n *\n * @param {string} buttonName - The identifier of the toolbar button which was\n * clicked/pressed.\n * @param {Object} attributes - Attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createToolbarEvent(buttonName, attributes = {}) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        attributes,\n        source: 'toolbar.button',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event associated with a reaction button being clicked/pressed.\n *\n * @param {string} buttonName - The identifier of the reaction button which was\n * clicked/pressed.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createReactionMenuEvent(buttonName) {\n    return {\n        action: 'clicked',\n        actionSubject: buttonName,\n        source: 'reaction.button',\n        type: TYPE_UI\n    };\n}\n\n/**\n * Creates an event which indicates that a local track was muted.\n *\n * @param {string} mediaType - The track's media type ('audio' or 'video').\n * @param {string} reason - The reason the track was muted (e.g. It was\n * triggered by the \"initial mute\" option, or a previously muted track was\n * replaced (e.g. When a new device was used)).\n * @param {boolean} muted - Whether the track was muted or unmuted.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createTrackMutedEvent(mediaType, reason, muted = true) {\n    return {\n        action: 'track.muted',\n        attributes: {\n            'media_type': mediaType,\n            muted,\n            reason\n        }\n    };\n}\n\n/**\n * Creates an event for joining a vpaas conference.\n *\n * @param {string} tenant - The conference tenant.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createVpaasConferenceJoinedEvent(tenant) {\n    return {\n        action: 'vpaas.conference.joined',\n        attributes: {\n            tenant\n        }\n    };\n}\n\n/**\n * Creates an event for an action on the welcome page.\n *\n * @param {string} action - The action that the event represents.\n * @param {string} actionSubject - The subject that was acted upon.\n * @param {boolean} attributes - Additional attributes to attach to the event.\n * @returns {Object} The event in a format suitable for sending via\n * sendAnalytics.\n */\nexport function createWelcomePageEvent(action, actionSubject, attributes = {}) {\n    return {\n        action,\n        actionSubject,\n        attributes,\n        source: 'welcomePage'\n    };\n}\n","import { SETTINGS_UPDATED } from './actionTypes';\n\n/**\n * Create an action for when the settings are updated.\n *\n * @param {Object} settings - The new (partial) settings properties.\n * @returns {{\n *     type: SETTINGS_UPDATED,\n *     settings: {\n *         audioOutputDeviceId: string,\n *         avatarURL: string,\n *         cameraDeviceId: string,\n *         displayName: string,\n *         email: string,\n *         localFlipX: boolean,\n *         micDeviceId: string,\n *         serverURL: string,\n *         startAudioOnly: boolean,\n *         startWithAudioMuted: boolean,\n *         startWithVideoMuted: boolean\n *     }\n * }}\n */\nexport function updateSettings(settings) {\n    return {\n        type: SETTINGS_UPDATED,\n        settings\n    };\n}\n","// @flow\n\nimport { ADD_KNOWN_DOMAINS } from './actionTypes';\n\n/**\n * Creates a (redux) action to add known domains to the list of domains known to\n * the feature base/known-domains.\n *\n * @param {string | Array<string>} knownDomains - The known domain(s) to add to\n * the list of domains known to the feature base/known-domains.\n * @returns {{\n *     type: ADD_KNOWN_DOMAINS,\n *     knownDomains: Array<string>\n * }}\n */\nexport function addKnownDomains(knownDomains: string | Array<string>) {\n    return {\n        type: ADD_KNOWN_DOMAINS,\n        knownDomains:\n            typeof knownDomains === 'string' ? [ knownDomains ] : knownDomains\n    };\n}\n","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","import { createTheme } from '../utils/createTheme';\n// Create default global light theme\nexport default createTheme(function () {\n  return {\n    mode: 'light'\n  };\n});","/* @flow */\n\nimport { toState } from '../redux';\nimport { toURLString } from '../util';\n\n/**\n * Figures out what's the current conference URL which is supposed to indicate what conference is currently active.\n * When not currently in any conference and not trying to join any then 'undefined' is returned.\n *\n * @param {Object|Function} stateful - Either the whole Redux state object or the Redux store's {@code getState} method.\n * @returns {string|undefined}\n * @private\n */\nexport function getCurrentConferenceUrl(stateful: Function | Object) {\n    const state = toState(stateful);\n    let currentUrl;\n\n    if (isInviteURLReady(state)) {\n        currentUrl = toURLString(getInviteURL(state));\n    }\n\n    // Check if the URL doesn't end with a slash\n    if (currentUrl && currentUrl.substr(-1) === '/') {\n        currentUrl = undefined;\n    }\n\n    return currentUrl ? currentUrl : undefined;\n}\n\n/**\n * Retrieves a simplified version of the conference/location URL stripped of URL params (i.e. Query/search and hash)\n * which should be used for sending invites.\n * NOTE that the method will throw an error if called too early. That is before the conference is joined or before\n * the process of joining one has started. This limitation does not apply to the case when called with the URL object\n * instance. Use {@link isInviteURLReady} to check if it's safe to call the method already.\n *\n * @param {Function|Object} stateOrGetState - The redux state or redux's {@code getState} function or the URL object\n * to be stripped.\n * @returns {string}\n */\nexport function getInviteURL(stateOrGetState: Function | Object): string {\n    const state = toState(stateOrGetState);\n    let locationURL\n        = state instanceof URL\n            ? state\n            : state['features/base/connection'].locationURL;\n\n    // If there's no locationURL on the base/connection feature try the base/config where it's set earlier.\n    if (!locationURL) {\n        locationURL = state['features/base/config'].locationURL;\n    }\n\n    if (!locationURL) {\n        throw new Error('Can not get invite URL - the app is not ready');\n    }\n\n    const { inviteDomain } = state['features/dynamic-branding'];\n    const urlWithoutParams = getURLWithoutParams(locationURL);\n\n    if (inviteDomain) {\n        const meetingId\n            = state['features/base/config'].brandingRoomAlias || urlWithoutParams.pathname.replace(/\\//, '');\n\n        return `${inviteDomain}/${meetingId}`;\n    }\n\n    return urlWithoutParams.href;\n}\n\n/**\n * Checks whether or not is safe to call the {@link getInviteURL} method already.\n *\n * @param {Function|Object} stateOrGetState - The redux state or redux's {@code getState} function.\n * @returns {boolean}\n */\nexport function isInviteURLReady(stateOrGetState: Function | Object): boolean {\n    const state = toState(stateOrGetState);\n\n    return Boolean(state['features/base/connection'].locationURL || state['features/base/config'].locationURL);\n}\n\n/**\n * Gets a {@link URL} without hash and query/search params from a specific\n * {@code URL}.\n *\n * @param {URL} url - The {@code URL} which may have hash and query/search\n * params.\n * @returns {URL}\n */\nexport function getURLWithoutParams(url: URL): URL {\n    const { hash, search } = url;\n\n    if ((hash && hash.length > 1) || (search && search.length > 1)) {\n        url = new URL(url.href); // eslint-disable-line no-param-reassign\n        url.hash = '';\n        url.search = '';\n\n        // XXX The implementation of URL at least on React Native appends ? and\n        // # at the end of the href which is not desired.\n        let { href } = url;\n\n        if (href) {\n            href.endsWith('#') && (href = href.substring(0, href.length - 1));\n            href.endsWith('?') && (href = href.substring(0, href.length - 1));\n\n            // eslint-disable-next-line no-param-reassign\n            url.href === href || (url = new URL(href));\n        }\n    }\n\n    return url;\n}\n\n/**\n * Gets a URL string without hash and query/search params from a specific\n * {@code URL}.\n *\n * @param {URL} url - The {@code URL} which may have hash and query/search\n * params.\n * @returns {string}\n */\nexport function getURLWithoutParamsNormalized(url: URL): string {\n    const urlWithoutParams = getURLWithoutParams(url).href;\n\n    if (urlWithoutParams) {\n        return urlWithoutParams.toLowerCase();\n    }\n\n    return '';\n}\n\n/**\n * Converts a specific id to jid if it's not jid yet.\n *\n * @param {string} id - User id or jid.\n * @param {Object} configHosts - The {@code hosts} part of the {@code config}\n * object.\n * @returns {string} A string in the form of a JID (i.e.\n * {@code user@server.com}).\n */\nexport function toJid(id: string, { authdomain, domain }: Object): string {\n    return id.indexOf('@') >= 0 ? id : `${id}@${authdomain || domain}`;\n}\n","/**\n * Modal view ID of the SharedDocument view.\n */\nexport const SHARE_DOCUMENT_VIEW_ID = 'SHARE_DOCUMENT_VIEW_ID';\n","/**\n * The conference/room lock state which identifies that the password was set by\n * the current/local participant/user.\n *\n * @type {string}\n */\nexport const LOCKED_LOCALLY = 'LOCKED_LOCALLY';\n\n/**\n * The conference/room lock state which identifies that the password was set by\n * a remote participant/user.\n *\n * @type {string}\n */\nexport const LOCKED_REMOTELY = 'LOCKED_REMOTELY';\n","// @flow\n\nimport React from 'react';\nimport { connect } from 'react-redux';\n\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\nimport EmbedMeetingDialog from './EmbedMeetingDialog';\n\ntype Props = {\n\n    /**\n     * Open the embed meeting dialog\n     */\n    openEmbedDialog: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * Component meant to trigger showing the EmbedMeetingDialog.\n *\n * @returns {React$Element<any>}\n */\nfunction EmbedMeetingTrigger({ t, openEmbedDialog }: Props) {\n    /**\n     * Handles opening the embed dialog.\n     *\n     * @returns {void}\n     */\n    function onClick() {\n        openEmbedDialog(EmbedMeetingDialog);\n    }\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {React.KeyboardEventHandler<HTMLDivElement>} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    function onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            onClick();\n        }\n    }\n\n    return (\n        <div\n            aria-label = { t('embedMeeting.title') }\n            className = 'embed-meeting-trigger'\n            onClick = { onClick }\n            onKeyPress = { onKeyPress }\n            role = 'button'\n            tabIndex = { 0 }>\n            {t('embedMeeting.title')}\n        </div>\n    );\n}\n\nconst mapDispatchToProps = { openEmbedDialog: openDialog };\n\nexport default translate(connect(null, mapDispatchToProps)(EmbedMeetingTrigger));\n","// @flow\n\n/**\n * Utility class with no dependencies. Used in components that are stripped in separate bundles\n * and requires as less dependencies as possible.\n */\n\n/**\n * Formats the conference pin in readable way for UI to display it.\n * Formats the pin in 3 groups of digits:\n * XXXX XXXX XX or XXXXX XXXXX XXX.\n * The length of first and second group is Math.ceil(pin.length / 3).\n *\n * @param {Object} conferenceID - The conference id to format, string or number.\n * @returns {string} - The formatted conference pin.\n * @private\n */\nexport function _formatConferenceIDPin(conferenceID: Object) {\n    const conferenceIDStr = conferenceID.toString();\n\n    // let's split the conferenceID in 3 parts, to be easier to read\n    const partLen = Math.ceil(conferenceIDStr.length / 3);\n\n    return `${\n        conferenceIDStr.substring(0, partLen)} ${\n        conferenceIDStr.substring(partLen, 2 * partLen)} ${\n        conferenceIDStr.substring(2 * partLen, conferenceIDStr.length)}`;\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { Icon, IconCopy } from '../../../../base/icons';\nimport { copyText } from '../../../../base/util';\nimport { _formatConferenceIDPin } from '../../../_utils';\n\n/**\n * The type of the React {@code Component} props of {@link DialInNumber}.\n */\ntype Props = {\n\n    /**\n     * The numeric identifier for the current conference, used after dialing a\n     * the number to join the conference.\n     */\n    conferenceID: number,\n\n    /**\n     * The phone number to dial to begin the process of dialing into a\n     * conference.\n     */\n    phoneNumber: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a telephone number and\n * conference ID for dialing into a conference.\n *\n * @extends Component\n */\nclass DialInNumber extends Component<Props> {\n\n    /**\n     * Initializes a new DialInNumber instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onCopyText = this._onCopyText.bind(this);\n        this._onCopyTextKeyPress = this._onCopyTextKeyPress.bind(this);\n    }\n\n    _onCopyText: () => void;\n\n    /**\n     * Copies the dial-in information to the clipboard.\n     *\n     * @returns {void}\n     */\n    _onCopyText() {\n        const { conferenceID, phoneNumber, t } = this.props;\n        const dialInLabel = t('info.dialInNumber');\n        const passcode = t('info.dialInConferenceID');\n        const conferenceIDPin = `${_formatConferenceIDPin(conferenceID)}#`;\n        const textToCopy = `${dialInLabel} ${phoneNumber} ${passcode} ${conferenceIDPin}`;\n\n        copyText(textToCopy);\n    }\n\n    _onCopyTextKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onCopyTextKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onCopyText();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { conferenceID, phoneNumber, t } = this.props;\n\n        return (\n            <div className = 'dial-in-number'>\n                <div>\n                    <span className = 'phone-number'>\n                        <span className = 'info-label'>\n                            { t('info.dialInNumber') }\n                        </span>\n                        <span className = 'spacer'>&nbsp;</span>\n                        <span className = 'info-value'>\n                            { phoneNumber }\n                        </span>\n                    </span>\n                    <span className = 'spacer'>&nbsp;</span>\n                    <span className = 'conference-id'>\n                        <span className = 'info-label'>\n                            { t('info.dialInConferenceID') }\n                        </span>\n                        <span className = 'spacer'>&nbsp;</span>\n                        <span className = 'info-value'>\n                            { `${_formatConferenceIDPin(conferenceID)}#` }\n                        </span>\n                    </span>\n                </div>\n                <a\n                    aria-label = { t('info.copyNumber') }\n                    className = 'dial-in-copy'\n                    onClick = { this._onCopyText }\n                    onKeyPress = { this._onCopyTextKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    <Icon src = { IconCopy } />\n                </a>\n            </div>\n        );\n    }\n}\n\nexport default translate(DialInNumber);\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport { getDialInfoPageURL, hasMultipleNumbers } from '../../../functions';\n\nimport DialInNumber from './DialInNumber';\n\ntype Props = {\n\n    /**\n     * The numeric identifier for the current conference, used after dialing a\n     * the number to join the conference.\n     */\n    _conferenceID: number,\n\n    /**\n     * The url of the page containing the dial-in numbers list.\n     */\n    _dialInfoPageUrl: string,\n\n    /**\n     * If multiple dial-in numbers are available\n     */\n    _hasMultipleNumbers: boolean;\n\n    /**\n     * The phone number to dial to begin the process of dialing into a\n     * conference.\n     */\n    phoneNumber: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n\n};\n\n/**\n * Returns a ReactElement for showing how to dial into the conference, if\n * dialing in is available.\n *\n * @private\n * @returns {null|ReactElement}\n */\nfunction DialInSection({\n    _conferenceID,\n    _dialInfoPageUrl,\n    _hasMultipleNumbers,\n    phoneNumber,\n    t\n}: Props) {\n    return (\n        <div className = 'invite-more-dialog dial-in-display'>\n            <DialInNumber\n                conferenceID = { _conferenceID }\n                phoneNumber = { phoneNumber } />\n            {_hasMultipleNumbers ? <a\n                className = 'more-numbers'\n                href = { _dialInfoPageUrl }\n                rel = 'noopener noreferrer'\n                target = '_blank'>\n                { t('info.moreNumbers') }\n            </a> : null}\n        </div>\n    );\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code DialInLink} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const dialIn = state['features/invite'];\n\n    return {\n        _conferenceID: dialIn.conferenceID,\n        _dialInfoPageUrl: getDialInfoPageURL(state),\n        _hasMultipleNumbers: hasMultipleNumbers(dialIn.numbers)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DialInSection));\n","// @flow\n\nimport React, { useState } from 'react';\n\nimport { isIosMobileBrowser } from '../../../../base/environment/utils';\nimport { translate } from '../../../../base/i18n';\nimport {\n    Icon,\n    IconArrowDownSmall,\n    IconCopy,\n    IconEmail,\n    IconGoogle,\n    IconOutlook,\n    IconYahoo\n} from '../../../../base/icons';\nimport { Tooltip } from '../../../../base/tooltip';\nimport { copyText } from '../../../../base/util';\n\ntype Props = {\n\n    /**\n     * The encoded invitation subject.\n     */\n    inviteSubject: string,\n\n    /**\n     * The encoded invitation text to be sent.\n     */\n    inviteText: string,\n\n    /**\n     * The encoded no new-lines iOS invitation text to be sent on default mail.\n     */\n    inviteTextiOS: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * Component that renders email invite options.\n *\n * @returns {React$Element<any>}\n */\nfunction InviteByEmailSection({ inviteSubject, inviteText, inviteTextiOS, t }: Props) {\n    const [ isActive, setIsActive ] = useState(false);\n    const encodedInviteSubject = encodeURIComponent(inviteSubject);\n    const encodedInviteText = encodeURIComponent(inviteText);\n    const encodedInviteTextiOS = encodeURIComponent(inviteTextiOS);\n\n    const encodedDefaultEmailText = isIosMobileBrowser() ? encodedInviteTextiOS : encodedInviteText;\n\n    /**\n     * Copies the conference invitation to the clipboard.\n     *\n     * @returns {void}\n     */\n    function _onCopyText() {\n        copyText(inviteText);\n    }\n\n    /**\n     * Copies the conference invitation to the clipboard.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    function _onCopyTextKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            copyText(inviteText);\n        }\n    }\n\n    /**\n     * Toggles the email invite drawer.\n     *\n     * @returns {void}\n     */\n    function _onToggleActiveState() {\n        setIsActive(!isActive);\n    }\n\n    /**\n     * Toggles the email invite drawer.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    function _onToggleActiveStateKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            setIsActive(!isActive);\n        }\n    }\n\n    /**\n     * Renders clickable elements that each open an email client\n     * containing a conference invite.\n     *\n     * @returns {React$Element<any>}\n     */\n    function renderEmailIcons() {\n        const PROVIDER_MAPPING = [\n            {\n                icon: IconEmail,\n                tooltipKey: 'addPeople.defaultEmail',\n                url: `mailto:?subject=${encodedInviteSubject}&body=${encodedDefaultEmailText}`\n            },\n            {\n                icon: IconGoogle,\n                tooltipKey: 'addPeople.googleEmail',\n                url: `https://mail.google.com/mail/?view=cm&fs=1&su=${encodedInviteSubject}&body=${encodedInviteText}`\n            },\n            {\n                icon: IconOutlook,\n                tooltipKey: 'addPeople.outlookEmail',\n                // eslint-disable-next-line max-len\n                url: `https://outlook.office.com/mail/deeplink/compose?subject=${encodedInviteSubject}&body=${encodedInviteText}`\n            },\n            {\n                icon: IconYahoo,\n                tooltipKey: 'addPeople.yahooEmail',\n                url: `https://compose.mail.yahoo.com/?To=&Subj=${encodedInviteSubject}&Body=${encodedInviteText}`\n            }\n        ];\n\n        return (\n            <>\n                {\n                    PROVIDER_MAPPING.map(({ icon, tooltipKey, url }, idx) => (\n                        <Tooltip\n                            content = { t(tooltipKey) }\n                            key = { idx }\n                            position = 'top'>\n                            <a\n                                aria-label = { t(tooltipKey) }\n                                className = 'provider-icon'\n                                href = { url }\n                                rel = 'noopener noreferrer'\n                                target = '_blank'>\n                                <Icon src = { icon } />\n                            </a>\n                        </Tooltip>\n                    ))\n                }\n            </>\n        );\n\n    }\n\n    return (\n        <>\n            <div>\n                <div\n                    aria-expanded = { isActive }\n                    aria-label = { t('addPeople.shareInvite') }\n                    className = { `invite-more-dialog email-container${isActive ? ' active' : ''}` }\n                    onClick = { _onToggleActiveState }\n                    onKeyPress = { _onToggleActiveStateKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    <span>{t('addPeople.shareInvite')}</span>\n                    <Icon src = { IconArrowDownSmall } />\n                </div>\n                <div className = { `invite-more-dialog icon-container${isActive ? ' active' : ''}` }>\n                    <Tooltip\n                        content = { t('addPeople.copyInvite') }\n                        position = 'top'>\n                        <div\n                            aria-label = { t('addPeople.copyInvite') }\n                            className = 'copy-invite-icon'\n                            onClick = { _onCopyText }\n                            onKeyPress = { _onCopyTextKeyPress }\n                            role = 'button'\n                            tabIndex = { 0 }>\n                            <Icon src = { IconCopy } />\n                        </div>\n                    </Tooltip>\n                    {renderEmailIcons()}\n                </div>\n            </div>\n        </>\n    );\n}\n\nexport default translate(InviteByEmailSection);\n","import CheckCircleIcon from '@atlaskit/icon/glyph/check-circle';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport InfoIcon from '@atlaskit/icon/glyph/info';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport { gridSize } from '@atlaskit/theme/constants';\nexport var itemSpacing = gridSize() / 2;\nexport var typesMapping = {\n  connectivity: {\n    icon: WarningIcon,\n    iconSize: 'medium'\n  },\n  confirmation: {\n    icon: CheckCircleIcon,\n    iconSize: 'medium'\n  },\n  info: {\n    icon: InfoIcon,\n    iconSize: 'medium'\n  },\n  warning: {\n    icon: WarningIcon,\n    iconSize: 'medium'\n  },\n  error: {\n    icon: ErrorIcon,\n    iconSize: 'medium'\n  }\n};","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 auto;\\n  padding: 0 \", \";\\n  color: \", \";\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport styled from 'styled-components';\nimport * as colors from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { itemSpacing } from '../../constants';\nvar getBaseColor = themed('appearance', {\n  connectivity: {\n    light: colors.B400,\n    dark: colors.B100\n  },\n  confirmation: {\n    light: colors.G300,\n    dark: colors.G300\n  },\n  info: {\n    light: colors.P300,\n    dark: colors.P300\n  },\n  warning: {\n    light: colors.Y300,\n    dark: colors.Y300\n  },\n  error: {\n    light: colors.R400,\n    dark: colors.R400\n  }\n});\nvar getHoverColor = themed('appearance', {\n  connectivity: {\n    light: colors.B300,\n    dark: colors.B75\n  },\n  confirmation: {\n    light: colors.G200,\n    dark: colors.G200\n  },\n  info: {\n    light: colors.P200,\n    dark: colors.P200\n  },\n  warning: {\n    light: colors.Y200,\n    dark: colors.Y200\n  },\n  error: {\n    light: colors.R300,\n    dark: colors.R300\n  }\n});\n\nvar getColor = function getColor(props) {\n  if (props.isHovered || props.isOpen) {\n    return getHoverColor(props);\n  }\n\n  return getBaseColor(props);\n};\n\nvar IconWrapper = styled.span(_templateObject(), itemSpacing, getColor);\nexport default IconWrapper;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport { typesMapping } from '../../constants';\nimport IconWrapper from './styledIconForType';\n\nvar SelectedIconForType = /*#__PURE__*/function (_React$Component) {\n  _inherits(SelectedIconForType, _React$Component);\n\n  var _super = _createSuper(SelectedIconForType);\n\n  function SelectedIconForType() {\n    _classCallCheck(this, SelectedIconForType);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(SelectedIconForType, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          type = _this$props.type,\n          isHovered = _this$props.isHovered,\n          isOpen = _this$props.isOpen;\n      var _typesMapping$type = typesMapping[type],\n          SelectedIcon = _typesMapping$type.icon,\n          iconSize = _typesMapping$type.iconSize;\n      return /*#__PURE__*/React.createElement(IconWrapper, {\n        appearance: type,\n        isHovered: isHovered,\n        isOpen: isOpen\n      }, /*#__PURE__*/React.createElement(SelectedIcon, {\n        label: \"Inline message icon\",\n        size: iconSize\n      }));\n    }\n  }]);\n\n  return SelectedIconForType;\n}(React.Component);\n\nexport { SelectedIconForType as default };","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject5() {\n  var data = _taggedTemplateLiteral([\"\\n  color: \", \";\\n  padding: 0 \", \"px;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n\"]);\n\n  _templateObject5 = function _templateObject5() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject4() {\n  var data = _taggedTemplateLiteral([\"\\n  color: \", \";\\n  font-weight: 500;\\n  padding: 0 \", \"px;\\n\"]);\n\n  _templateObject4 = function _templateObject4() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n      color: \", \";\\n      text-decoration: underline;\\n    \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n  align-items: center;\\n  display: flex;\\n  text-decoration: none;\\n  \", \";\\n\"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  display: inline-block;\\n  max-width: 100%;\\n  &:focus {\\n    outline: 1px solid \", \";\\n  }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport styled, { css } from 'styled-components';\nimport * as colors from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { itemSpacing } from '../../constants';\nvar getFocusColor = themed('appearance', {\n  connectivity: {\n    light: colors.B500,\n    dark: colors.B200\n  },\n  confirmation: {\n    light: colors.G400,\n    dark: colors.G400\n  },\n  info: {\n    light: colors.P500,\n    dark: colors.P300\n  },\n  warning: {\n    light: colors.Y500,\n    dark: colors.Y500\n  },\n  error: {\n    light: colors.R500,\n    dark: colors.R500\n  }\n});\nexport var Root = styled.div(_templateObject(), getFocusColor);\nexport var ButtonContents = styled.div(_templateObject2(), function (_ref) {\n  var isHovered = _ref.isHovered;\n  return isHovered && css(_templateObject3(), colors.N600);\n});\nvar getTitleColor = themed({\n  light: colors.N600,\n  dark: colors.DN600\n});\nvar getTextColor = themed({\n  light: colors.N300,\n  dark: colors.DN100\n});\nexport var Title = styled.span(_templateObject4(), getTitleColor, itemSpacing);\nexport var Text = styled.span(_templateObject5(), getTextColor, itemSpacing);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React from 'react';\nimport Button from '@atlaskit/button/custom-theme-button';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport IconForType from '../IconForType';\nimport { ButtonContents, Root, Text, Title } from './styledInlineMessage';\n\nvar InlineMessage = /*#__PURE__*/function (_React$Component) {\n  _inherits(InlineMessage, _React$Component);\n\n  var _super = _createSuper(InlineMessage);\n\n  function InlineMessage() {\n    var _this;\n\n    _classCallCheck(this, InlineMessage);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      isOpen: false,\n      isHovered: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onMouseEnter\", function () {\n      _this.setState({\n        isHovered: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function () {\n      _this.setState({\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"toggleDialog\", function () {\n      _this.setState({\n        isOpen: !_this.state.isOpen\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineMessage, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          placement = _this$props.placement,\n          secondaryText = _this$props.secondaryText,\n          title = _this$props.title,\n          type = _this$props.type,\n          testId = _this$props.testId;\n      var _this$state = this.state,\n          isHovered = _this$state.isHovered,\n          isOpen = _this$state.isOpen;\n      return /*#__PURE__*/React.createElement(Root, {\n        onMouseEnter: this.onMouseEnter,\n        onMouseLeave: this.onMouseLeave,\n        appearance: type,\n        \"data-testid\": testId\n      }, /*#__PURE__*/React.createElement(InlineDialog, {\n        onClose: function onClose() {\n          _this2.setState({\n            isOpen: false\n          });\n        },\n        content: children,\n        isOpen: isOpen,\n        placement: placement,\n        testId: testId && \"\".concat(testId, \"--inline-dialog\")\n      }, /*#__PURE__*/React.createElement(Button, {\n        appearance: \"subtle-link\",\n        onClick: this.toggleDialog,\n        spacing: \"none\",\n        testId: testId && \"\".concat(testId, \"--button\")\n      }, /*#__PURE__*/React.createElement(ButtonContents, {\n        isHovered: isHovered\n      }, /*#__PURE__*/React.createElement(IconForType, {\n        type: type,\n        isHovered: isHovered,\n        isOpen: isOpen\n      }), title ? /*#__PURE__*/React.createElement(Title, {\n        \"data-testid\": testId && \"\".concat(testId, \"--title\"),\n        isHovered: isHovered\n      }, title) : null, secondaryText ? /*#__PURE__*/React.createElement(Text, {\n        \"data-testid\": testId && \"\".concat(testId, \"--text\"),\n        isHovered: isHovered\n      }, secondaryText) : null))));\n    }\n  }]);\n\n  return InlineMessage;\n}(React.Component);\n\n_defineProperty(InlineMessage, \"defaultProps\", {\n  children: null,\n  placement: 'bottom-start',\n  secondaryText: '',\n  title: '',\n  type: 'connectivity'\n});\n\nexport { InlineMessage as default };","// @flow\n\nimport { Component } from 'react';\n\nimport { createInviteDialogEvent, sendAnalytics } from '../../../analytics';\nimport {\n    NOTIFICATION_TIMEOUT,\n    showNotification\n} from '../../../notifications';\nimport { invite } from '../../actions';\nimport { INVITE_TYPES } from '../../constants';\nimport {\n    getInviteResultsForQuery,\n    getInviteTypeCounts,\n    isAddPeopleEnabled,\n    isDialOutEnabled,\n    isSipInviteEnabled\n} from '../../functions';\nimport logger from '../../logger';\n\nexport type Props = {\n\n    /**\n     * Whether or not to show Add People functionality.\n     */\n    _addPeopleEnabled: boolean,\n\n    /**\n     * Whether or not call flows are enabled.\n     */\n    _callFlowsEnabled: boolean,\n\n    /**\n     * The URL for validating if a phone number can be called.\n     */\n    _dialOutAuthUrl: string,\n\n    /**\n     * Whether or not to show Dial Out functionality.\n     */\n    _dialOutEnabled: boolean,\n\n    /**\n     * Whether or not to allow sip invites.\n     */\n     _sipInviteEnabled: boolean,\n\n    /**\n     * The JWT token.\n     */\n    _jwt: string,\n\n    /**\n     * The query types used when searching people.\n     */\n    _peopleSearchQueryTypes: Array<string>,\n\n    /**\n     * The URL pointing to the service allowing for people search.\n     */\n    _peopleSearchUrl: string,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function\n};\n\nexport type State = {\n\n    /**\n     * Indicating that an error occurred when adding people to the call.\n     */\n    addToCallError: boolean,\n\n    /**\n     * Indicating that we're currently adding the new people to the\n     * call.\n     */\n    addToCallInProgress: boolean,\n\n    /**\n     * The list of invite items.\n     */\n    inviteItems: Array<Object>,\n};\n\n/**\n * Implements an abstract dialog to invite people to the conference.\n */\nexport default class AbstractAddPeopleDialog<P: Props, S: State>\n    extends Component<P, S> {\n    /**\n     * Constructor of the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this._query = this._query.bind(this);\n    }\n\n    /**\n     * Retrieves the notification display name for the invitee.\n     *\n     * @param {Object} invitee - The invitee object.\n     * @returns {string}\n     */\n    _getDisplayName(invitee) {\n        if (invitee.type === INVITE_TYPES.PHONE) {\n            return invitee.number;\n        }\n\n        if (invitee.type === INVITE_TYPES.SIP) {\n            return invitee.address;\n        }\n\n        return invitee.name;\n    }\n\n    /**\n     * Invite people and numbers to the conference. The logic works by inviting\n     * numbers, people/rooms, sip endpoints and videosipgw in parallel. All invitees are\n     * stored in an array. As each invite succeeds, the invitee is removed\n     * from the array. After all invites finish, close the modal if there are\n     * no invites left to send. If any are left, that means an invite failed\n     * and an error state should display.\n     *\n     * @param {Array<Object>} invitees - The items to be invited.\n     * @returns {Promise<Array<Object>>}\n     */\n    _invite(invitees) {\n        const inviteTypeCounts = getInviteTypeCounts(invitees);\n\n        sendAnalytics(createInviteDialogEvent(\n            'clicked', 'inviteButton', {\n                ...inviteTypeCounts,\n                inviteAllowed: this._isAddDisabled()\n            }));\n\n        if (this._isAddDisabled()) {\n            return Promise.resolve([]);\n        }\n\n        this.setState({\n            addToCallInProgress: true\n        });\n\n        const { _callFlowsEnabled, dispatch } = this.props;\n\n        return dispatch(invite(invitees))\n            .then(invitesLeftToSend => {\n                this.setState({\n                    addToCallInProgress: false\n                });\n\n                // If any invites are left that means something failed to send\n                // so treat it as an error.\n                if (invitesLeftToSend.length) {\n                    const erroredInviteTypeCounts\n                        = getInviteTypeCounts(invitesLeftToSend);\n\n                    logger.error(`${invitesLeftToSend.length} invites failed`,\n                        erroredInviteTypeCounts);\n\n                    sendAnalytics(createInviteDialogEvent(\n                        'error', 'invite', {\n                            ...erroredInviteTypeCounts\n                        }));\n\n                    this.setState({\n                        addToCallError: true\n                    });\n                } else if (!_callFlowsEnabled) {\n                    const invitedCount = invitees.length;\n                    let notificationProps;\n\n                    if (invitedCount >= 3) {\n                        notificationProps = {\n                            titleArguments: {\n                                name: this._getDisplayName(invitees[0]),\n                                count: invitedCount - 1\n                            },\n                            titleKey: 'notify.invitedThreePlusMembers'\n                        };\n                    } else if (invitedCount === 2) {\n                        notificationProps = {\n                            titleArguments: {\n                                first: this._getDisplayName(invitees[0]),\n                                second: this._getDisplayName(invitees[1])\n                            },\n                            titleKey: 'notify.invitedTwoMembers'\n                        };\n                    } else if (invitedCount) {\n                        notificationProps = {\n                            titleArguments: {\n                                name: this._getDisplayName(invitees[0])\n                            },\n                            titleKey: 'notify.invitedOneMember'\n                        };\n                    }\n\n                    if (notificationProps) {\n                        dispatch(\n                            showNotification(notificationProps, NOTIFICATION_TIMEOUT));\n                    }\n                }\n\n                return invitesLeftToSend;\n            });\n    }\n\n    /**\n     * Indicates if the Add button should be disabled.\n     *\n     * @private\n     * @returns {boolean} - True to indicate that the Add button should\n     * be disabled, false otherwise.\n     */\n    _isAddDisabled() {\n        return !this.state.inviteItems.length\n            || this.state.addToCallInProgress;\n    }\n\n    _query: (?string) => Promise<Array<Object>>;\n\n    /**\n     * Performs a people and phone number search request.\n     *\n     * @param {string} query - The search text.\n     * @private\n     * @returns {Promise}\n     */\n    _query(query = '') {\n        const {\n            _addPeopleEnabled: addPeopleEnabled,\n            _dialOutAuthUrl: dialOutAuthUrl,\n            _dialOutEnabled: dialOutEnabled,\n            _jwt: jwt,\n            _peopleSearchQueryTypes: peopleSearchQueryTypes,\n            _peopleSearchUrl: peopleSearchUrl,\n            _sipInviteEnabled: sipInviteEnabled\n        } = this.props;\n        const options = {\n            addPeopleEnabled,\n            dialOutAuthUrl,\n            dialOutEnabled,\n            jwt,\n            peopleSearchQueryTypes,\n            peopleSearchUrl,\n            sipInviteEnabled\n        };\n\n        return getInviteResultsForQuery(query, options);\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _addPeopleEnabled: boolean,\n *     _dialOutAuthUrl: string,\n *     _dialOutEnabled: boolean,\n *     _jwt: string,\n *     _peopleSearchQueryTypes: Array<string>,\n *     _peopleSearchUrl: string\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    const {\n        callFlowsEnabled,\n        dialOutAuthUrl,\n        peopleSearchQueryTypes,\n        peopleSearchUrl\n    } = state['features/base/config'];\n\n    return {\n        _addPeopleEnabled: isAddPeopleEnabled(state),\n        _callFlowsEnabled: callFlowsEnabled,\n        _dialOutAuthUrl: dialOutAuthUrl,\n        _dialOutEnabled: isDialOutEnabled(state),\n        _jwt: state['features/base/jwt'].jwt,\n        _peopleSearchQueryTypes: peopleSearchQueryTypes,\n        _peopleSearchUrl: peopleSearchUrl,\n        _sipInviteEnabled: isSipInviteEnabled(state)\n    };\n}\n","// @flow\n\nimport InlineMessage from '@atlaskit/inline-message';\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Avatar } from '../../../../base/avatar';\nimport { translate, translateToHTML } from '../../../../base/i18n';\nimport { Icon, IconPhone } from '../../../../base/icons';\nimport { getLocalParticipant } from '../../../../base/participants';\nimport { MultiSelectAutocomplete } from '../../../../base/react';\nimport { connect } from '../../../../base/redux';\nimport { isVpaasMeeting } from '../../../../jaas/functions';\nimport { hideAddPeopleDialog } from '../../../actions';\nimport { INVITE_TYPES } from '../../../constants';\nimport AbstractAddPeopleDialog, {\n    type Props as AbstractProps,\n    type State,\n    _mapStateToProps as _abstractMapStateToProps\n} from '../AbstractAddPeopleDialog';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = AbstractProps & {\n\n    /**\n     * The {@link JitsiMeetConference} which will be used to invite \"room\" participants.\n     */\n    _conference: Object,\n\n    /**\n     * Whether to show a footer text after the search results as a last element.\n     */\n    _footerTextEnabled: boolean,\n\n    /**\n     * Whether the meeting belongs to JaaS user\n     */\n    _isVpaas: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * Form that enables inviting others to the call.\n */\nclass InviteContactsForm extends AbstractAddPeopleDialog<Props, State> {\n    _multiselect = null;\n\n    _resourceClient: Object;\n\n    _translations: Object;\n\n    state = {\n        addToCallError: false,\n        addToCallInProgress: false,\n        inviteItems: []\n    };\n\n    /**\n     * Initializes a new {@code AddPeopleDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClearItems = this._onClearItems.bind(this);\n        this._onClearItemsKeyPress = this._onClearItemsKeyPress.bind(this);\n        this._onItemSelected = this._onItemSelected.bind(this);\n        this._onSelectionChange = this._onSelectionChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onSubmitKeyPress = this._onSubmitKeyPress.bind(this);\n        this._parseQueryResults = this._parseQueryResults.bind(this);\n        this._setMultiSelectElement = this._setMultiSelectElement.bind(this);\n        this._renderFooterText = this._renderFooterText.bind(this);\n        this._onKeyDown = this._onKeyDown.bind(this);\n\n        this._resourceClient = {\n            makeQuery: this._query,\n            parseResults: this._parseQueryResults\n        };\n\n\n        const { t } = props;\n\n        this._translations = {\n            _dialOutEnabled: t('addPeople.phoneNumbers'),\n            _addPeopleEnabled: t('addPeople.contacts'),\n            _sipInviteEnabled: t('addPeople.sipAddresses')\n        };\n\n    }\n\n    /**\n     * React Component method that executes once component is updated.\n     *\n     * @param {Object} prevProps - The state object before the update.\n     * @param {Object} prevState - The state object before the update.\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps, prevState) {\n        /**\n         * Clears selected items from the multi select component on successful\n         * invite.\n         */\n        if (prevState.addToCallError\n                && !this.state.addToCallInProgress\n                && !this.state.addToCallError\n                && this._multiselect) {\n            this._multiselect.setSelectedItems([]);\n        }\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _addPeopleEnabled,\n            _dialOutEnabled,\n            _isVpaas,\n            _sipInviteEnabled,\n            t\n        } = this.props;\n        const footerText = this._renderFooterText();\n        let isMultiSelectDisabled = this.state.addToCallInProgress;\n        const loadingMessage = 'addPeople.searching';\n        const noMatches = 'addPeople.noResults';\n\n        const features = {\n            _dialOutEnabled,\n            _addPeopleEnabled,\n            _sipInviteEnabled\n        };\n\n        const computedPlaceholder = Object.keys(features)\n            .filter(v => Boolean(features[v]))\n            .map(v => this._translations[v])\n            .join(', ');\n\n        const placeholder = computedPlaceholder ? `${t('dialog.add')} ${computedPlaceholder}` : t('addPeople.disabled');\n\n        if (!computedPlaceholder) {\n            isMultiSelectDisabled = true;\n        }\n\n        return (\n            <div\n                className = 'add-people-form-wrap'\n                onKeyDown = { this._onKeyDown }>\n                { this._renderErrorMessage() }\n                <MultiSelectAutocomplete\n                    footer = { footerText }\n                    isDisabled = { isMultiSelectDisabled }\n                    loadingMessage = { t(loadingMessage) }\n                    noMatchesFound = { t(noMatches) }\n                    onItemSelected = { this._onItemSelected }\n                    onSelectionChange = { this._onSelectionChange }\n                    placeholder = { placeholder }\n                    ref = { this._setMultiSelectElement }\n                    resourceClient = { this._resourceClient }\n                    shouldFitContainer = { true }\n                    shouldFocus = { true }\n                    showSupportLink = { !_isVpaas } />\n                { this._renderFormActions() }\n            </div>\n        );\n    }\n\n    _invite: Array<Object> => Promise<*>\n\n    _isAddDisabled: () => boolean;\n\n    _onItemSelected: (Object) => Object;\n\n    /**\n     * Callback invoked when a selection has been made but before it has been\n     * set as selected.\n     *\n     * @param {Object} item - The item that has just been selected.\n     * @private\n     * @returns {Object} The item to display as selected in the input.\n     */\n    _onItemSelected(item) {\n        if (item.item.type === INVITE_TYPES.PHONE) {\n            item.content = item.item.number;\n        }\n\n        return item;\n    }\n\n    _onSelectionChange: (Map<*, *>) => void;\n\n    /**\n     * Handles a selection change.\n     *\n     * @param {Array} selectedItems - The list of selected items.\n     * @private\n     * @returns {void}\n     */\n    _onSelectionChange(selectedItems) {\n        this.setState({\n            inviteItems: selectedItems\n        });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Submits the selection for inviting.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { inviteItems } = this.state;\n        const invitees = inviteItems.map(({ item }) => item);\n\n        this._invite(invitees)\n            .then(invitesLeftToSend => {\n                if (invitesLeftToSend.length) {\n                    const unsentInviteIDs\n                        = invitesLeftToSend.map(invitee =>\n                            invitee.id || invitee.user_id || invitee.number);\n                    const itemsToSelect\n                        = inviteItems.filter(({ item }) =>\n                            unsentInviteIDs.includes(item.id || item.user_id || item.number));\n\n                    if (this._multiselect) {\n                        this._multiselect.setSelectedItems(itemsToSelect);\n                    }\n                } else {\n                    this.props.dispatch(hideAddPeopleDialog());\n                }\n            });\n    }\n\n    _onSubmitKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onSubmitKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onSubmit();\n        }\n    }\n\n    _onKeyDown: (Object) => void;\n\n    /**\n     * Handles 'Enter' key in the form to trigger the invite.\n     *\n     * @param {Object} event - The key event.\n     * @returns {void}\n     */\n    _onKeyDown(event) {\n        const { inviteItems } = this.state;\n\n        if (event.key === 'Enter') {\n            event.preventDefault();\n            if (!this._isAddDisabled() && inviteItems.length) {\n                this._onSubmit();\n            }\n        }\n    }\n\n    _parseQueryResults: (?Array<Object>) => Array<Object>;\n\n    /**\n     * Returns the avatar component for a user.\n     *\n     * @param {Object} user - The user.\n     * @param {string} className - The CSS class for the avatar component.\n     * @private\n     * @returns {ReactElement}\n     */\n    _getAvatar(user, className = 'avatar-small') {\n        return (\n            <Avatar\n                className = { className }\n                status = { user.status }\n                url = { user.avatar } />\n        );\n    }\n\n    /**\n     * Processes results from requesting available numbers and people by munging\n     * each result into a format {@code MultiSelectAutocomplete} can use for\n     * display.\n     *\n     * @param {Array} response - The response object from the server for the\n     * query.\n     * @private\n     * @returns {Object[]} Configuration objects for items to display in the\n     * search autocomplete.\n     */\n    _parseQueryResults(response = []) {\n        const { t, _dialOutEnabled } = this.props;\n        const users = response.filter(item => item.type === INVITE_TYPES.USER);\n        const userDisplayItems = [];\n\n        for (const user of users) {\n            const { name, phone } = user;\n            const tagAvatar = this._getAvatar(user, 'avatar-xsmall');\n            const elemAvatar = this._getAvatar(user);\n\n            userDisplayItems.push({\n                content: name,\n                elemBefore: elemAvatar,\n                item: user,\n                tag: {\n                    elemBefore: tagAvatar\n                },\n                value: user.id || user.user_id\n            });\n\n            if (phone && _dialOutEnabled) {\n                userDisplayItems.push({\n                    filterValues: [ name, phone ],\n                    content: `${phone} (${name})`,\n                    elemBefore: elemAvatar,\n                    item: {\n                        type: INVITE_TYPES.PHONE,\n                        number: phone\n                    },\n                    tag: {\n                        elemBefore: tagAvatar\n                    },\n                    value: phone\n                });\n            }\n        }\n\n        const numbers = response.filter(item => item.type === INVITE_TYPES.PHONE);\n        const telephoneIcon = this._renderTelephoneIcon();\n\n        const numberDisplayItems = numbers.map(number => {\n            const numberNotAllowedMessage\n                = number.allowed ? '' : t('addPeople.countryNotSupported');\n            const countryCodeReminder = number.showCountryCodeReminder\n                ? t('addPeople.countryReminder') : '';\n            const description\n                = `${numberNotAllowedMessage} ${countryCodeReminder}`.trim();\n\n            return {\n                filterValues: [\n                    number.originalEntry,\n                    number.number\n                ],\n                content: t('addPeople.telephone', { number: number.number }),\n                description,\n                isDisabled: !number.allowed,\n                elemBefore: telephoneIcon,\n                item: number,\n                tag: {\n                    elemBefore: telephoneIcon\n                },\n                value: number.number\n            };\n        });\n\n\n        const sipAddresses = response.filter(item => item.type === INVITE_TYPES.SIP);\n\n        const sipDisplayItems = sipAddresses.map(sip => {\n            return {\n                filterValues: [\n                    sip.address\n                ],\n                content: sip.address,\n                description: '',\n                item: sip,\n                value: sip.address\n            };\n        });\n\n        return [\n            ...userDisplayItems,\n            ...numberDisplayItems,\n            ...sipDisplayItems\n        ];\n    }\n\n    _query: (string) => Promise<Array<Object>>;\n\n    _renderFooterText: () => Object;\n\n    /**\n     * Sets up the rendering of the footer text, if enabled.\n     *\n     * @returns {Object | undefined}\n     */\n    _renderFooterText() {\n        const { _footerTextEnabled, t } = this.props;\n        let footerText;\n\n        if (_footerTextEnabled) {\n            footerText = {\n                content: <div className = 'footer-text-wrap'>\n                    <div>\n                        <span className = 'footer-telephone-icon'>\n                            <Icon src = { IconPhone } />\n                        </span>\n                    </div>\n                    { translateToHTML(t, 'addPeople.footerText') }\n                </div>\n            };\n        }\n\n        return footerText;\n    }\n\n    _onClearItems: () => void;\n\n    /**\n     * Clears the selected items from state and form.\n     *\n     * @returns {void}\n     */\n    _onClearItems() {\n        if (this._multiselect) {\n            this._multiselect.setSelectedItems([]);\n        }\n        this.setState({ inviteItems: [] });\n    }\n\n    _onClearItemsKeyPress: () => void;\n\n    /**\n     * Clears the selected items from state and form.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onClearItemsKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClearItems();\n        }\n    }\n\n    /**\n     * Renders the add/cancel actions for the form.\n     *\n     * @returns {ReactElement|null}\n     */\n    _renderFormActions() {\n        const { inviteItems } = this.state;\n        const { t } = this.props;\n\n        if (!inviteItems.length) {\n            return null;\n        }\n\n        return (\n            <div className = { `invite-more-dialog invite-buttons${this._isAddDisabled() ? ' disabled' : ''}` }>\n                <a\n                    aria-label = { t('dialog.Cancel') }\n                    className = 'invite-more-dialog invite-buttons-cancel'\n                    onClick = { this._onClearItems }\n                    onKeyPress = { this._onClearItemsKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    {t('dialog.Cancel')}\n                </a>\n                <a\n                    aria-label = { t('addPeople.add') }\n                    className = 'invite-more-dialog invite-buttons-add'\n                    onClick = { this._onSubmit }\n                    onKeyPress = { this._onSubmitKeyPress }\n                    role = 'button'\n                    tabIndex = { 0 }>\n                    {t('addPeople.add')}\n                </a>\n            </div>\n        );\n    }\n\n    /**\n     * Renders the error message if the add doesn't succeed.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderErrorMessage() {\n        if (!this.state.addToCallError) {\n            return null;\n        }\n\n        const { t } = this.props;\n        const supportString = t('inlineDialogFailure.supportMsg');\n        const supportLink = interfaceConfig.SUPPORT_URL;\n\n        const supportLinkContent = supportLink ? (\n            <span>\n                <span>\n                    { supportString.padEnd(supportString.length + 1) }\n                </span>\n                <span>\n                    <a\n                        aria-label = { supportLink }\n                        href = { supportLink }\n                        rel = 'noopener noreferrer'\n                        target = '_blank'>\n                        { t('inlineDialogFailure.support') }\n                    </a>\n                </span>\n                <span>.</span>\n            </span>\n        ) : null;\n\n        return (\n            <div className = 'modal-dialog-form-error'>\n                <InlineMessage\n                    title = { t('addPeople.failedToAdd') }\n                    type = 'error'>\n                    { supportLinkContent }\n                </InlineMessage>\n            </div>\n        );\n    }\n\n    /**\n     * Renders a telephone icon.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTelephoneIcon() {\n        return (\n            <span className = 'add-telephone-icon'>\n                <Icon src = { IconPhone } />\n            </span>\n        );\n    }\n\n    _setMultiSelectElement: (React$ElementRef<*> | null) => void;\n\n    /**\n     * Sets the instance variable for the multi select component\n     * element so it can be accessed directly.\n     *\n     * @param {Object} element - The DOM element for the component's dialog.\n     * @private\n     * @returns {void}\n     */\n    _setMultiSelectElement(element) {\n        this._multiselect = element;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AddPeopleDialog}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { enableFeaturesBasedOnToken } = state['features/base/config'];\n    let footerTextEnabled = false;\n\n    if (enableFeaturesBasedOnToken) {\n        const { features = {} } = getLocalParticipant(state);\n\n        if (String(features['outbound-call']) !== 'true') {\n            footerTextEnabled = true;\n        }\n    }\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _footerTextEnabled: footerTextEnabled,\n        _isVpaas: isVpaasMeeting(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(InviteContactsForm));\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\n\nimport InviteContactsForm from './InviteContactsForm';\n\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Component that represents the invitation section of the {@code AddPeopleDialog}.\n *\n * @returns {ReactElement$<any>}\n */\nfunction InviteContactsSection({ t }: Props) {\n    return (\n        <>\n            <span>{t('addPeople.addContacts')}</span>\n            <InviteContactsForm />\n            <div className = 'invite-more-dialog separator' />\n        </>\n    );\n}\n\nexport default translate(InviteContactsSection);\n","// @flow\n\nimport React, { useState } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { Icon, IconCheck, IconCopy } from '../../../../base/icons';\nimport { copyText } from '../../../../base/util';\n\ntype Props = {\n\n    /**\n     * The current known URL for a live stream in progress.\n     */\n    liveStreamViewURL: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * Section of the {@code AddPeopleDialog} that renders the\n * live streaming url, allowing a copy action.\n *\n * @returns {React$Element<any>}\n */\nfunction LiveStreamSection({ liveStreamViewURL, t }: Props) {\n    const [ isClicked, setIsClicked ] = useState(false);\n    const [ isHovered, setIsHovered ] = useState(false);\n\n    /**\n     * Click handler for the element.\n     *\n     * @returns {void}\n     */\n    async function onClick() {\n        setIsHovered(false);\n\n        const isCopied = await copyText(liveStreamViewURL);\n\n        if (isCopied) {\n            setIsClicked(true);\n\n            setTimeout(() => {\n                setIsClicked(false);\n            }, 2500);\n        }\n    }\n\n    /**\n     * Hover handler for the element.\n     *\n     * @returns {void}\n     */\n    function onHoverIn() {\n        if (!isClicked) {\n            setIsHovered(true);\n        }\n    }\n\n    /**\n     * Hover handler for the element.\n     *\n     * @returns {void}\n     */\n    function onHoverOut() {\n        setIsHovered(false);\n    }\n\n    /**\n     * Renders the content of the link based on the state.\n     *\n     * @returns {React$Element<any>}\n     */\n    function renderLinkContent() {\n        if (isClicked) {\n            return (\n                <>\n                    <div className = 'invite-more-dialog stream-text selected'>\n                        {t('addPeople.linkCopied')}\n                    </div>\n                    <Icon src = { IconCheck } />\n                </>\n            );\n        }\n\n        return (\n            <>\n                <div className = 'invite-more-dialog stream-text'>\n                    {isHovered ? t('addPeople.copyStream') : liveStreamViewURL}\n                </div>\n                <Icon src = { IconCopy } />\n            </>\n        );\n    }\n\n    return (\n        <>\n            <span>{t('addPeople.shareStream')}</span>\n            <div\n                className = { `invite-more-dialog stream${isClicked ? ' clicked' : ''}` }\n                onClick = { onClick }\n                onMouseOut = { onHoverOut }\n                onMouseOver = { onHoverIn }>\n                { renderLinkContent() }\n            </div>\n            <div className = 'invite-more-dialog separator' />\n        </>\n    );\n}\n\nexport default translate(LiveStreamSection);\n","// @flow\n\nimport React, { useEffect } from 'react';\n\nimport { createInviteDialogEvent, sendAnalytics } from '../../../../analytics';\nimport { getInviteURL } from '../../../../base/connection';\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { JitsiRecordingConstants } from '../../../../base/lib-jitsi-meet';\nimport { connect } from '../../../../base/redux';\nimport { isDynamicBrandingDataLoaded } from '../../../../dynamic-branding/functions';\nimport EmbedMeetingTrigger from '../../../../embed-meeting/components/EmbedMeetingTrigger';\nimport { isVpaasMeeting } from '../../../../jaas/functions';\nimport { getActiveSession } from '../../../../recording';\nimport { updateDialInNumbers } from '../../../actions';\nimport {\n    _getDefaultPhoneNumber,\n    getInviteText,\n    getInviteTextiOS,\n    isAddPeopleEnabled,\n    isDialOutEnabled,\n    sharingFeatures,\n    isSharingEnabled\n} from '../../../functions';\n\nimport CopyMeetingLinkSection from './CopyMeetingLinkSection';\nimport DialInSection from './DialInSection';\nimport InviteByEmailSection from './InviteByEmailSection';\nimport InviteContactsSection from './InviteContactsSection';\nimport LiveStreamSection from './LiveStreamSection';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * The object representing the dialIn feature.\n     */\n    _dialIn: Object,\n\n    /**\n     * Whether or not embed meeting should be visible.\n     */\n    _embedMeetingVisible: boolean,\n\n    /**\n     * Whether or not dial in number should be visible.\n     */\n    _dialInVisible: boolean,\n\n    /**\n     * Whether or not url sharing button should be visible.\n     */\n    _urlSharingVisible: boolean,\n\n    /**\n     * Whether or not email sharing features should be visible.\n     */\n    _emailSharingVisible: boolean,\n\n    /**\n     * The meeting invitation text.\n     */\n    _invitationText: string,\n\n    /**\n     * The custom no new-lines meeting invitation text for iOS default email.\n     * Needed because of this mailto: iOS issue: https://developer.apple.com/forums/thread/681023\n     */\n    _invitationTextiOS: string,\n\n    /**\n     * An alternate app name to be displayed in the email subject.\n     */\n    _inviteAppName: ?string,\n\n    /**\n     * Whether or not invite contacts should be visible.\n     */\n    _inviteContactsVisible: boolean,\n\n    /**\n     * The current url of the conference to be copied onto the clipboard.\n     */\n    _inviteUrl: string,\n\n    /**\n     * The current known URL for a live stream in progress.\n     */\n    _liveStreamViewURL: string,\n\n    /**\n     * The default phone number.\n     */\n    _phoneNumber: ?string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Method to update the dial in numbers.\n     */\n    updateNumbers: Function\n};\n\n/**\n * Invite More component.\n *\n * @returns {React$Element<any>}\n */\nfunction AddPeopleDialog({\n    _dialIn,\n    _embedMeetingVisible,\n    _dialInVisible,\n    _urlSharingVisible,\n    _emailSharingVisible,\n    _invitationText,\n    _invitationTextiOS,\n    _inviteAppName,\n    _inviteContactsVisible,\n    _inviteUrl,\n    _liveStreamViewURL,\n    _phoneNumber,\n    t,\n    updateNumbers }: Props) {\n\n    /**\n     * Updates the dial-in numbers.\n     */\n    useEffect(() => {\n        if (!_dialIn.numbers) {\n            updateNumbers();\n        }\n    }, []);\n\n    /**\n     * Sends analytics events when the dialog opens/closes.\n     *\n     * @returns {void}\n     */\n    useEffect(() => {\n        sendAnalytics(createInviteDialogEvent(\n            'invite.dialog.opened', 'dialog'));\n\n        return () => {\n            sendAnalytics(createInviteDialogEvent(\n                'invite.dialog.closed', 'dialog'));\n        };\n    }, []);\n\n    const inviteSubject = t('addPeople.inviteMoreMailSubject', {\n        appName: _inviteAppName ?? interfaceConfig.APP_NAME\n    });\n\n    return (\n        <Dialog\n            cancelKey = { 'dialog.close' }\n            hideCancelButton = { true }\n            submitDisabled = { true }\n            titleKey = 'addPeople.inviteMorePrompt'\n            width = { 'small' }>\n            <div className = 'invite-more-dialog'>\n                { _inviteContactsVisible && <InviteContactsSection /> }\n                {_urlSharingVisible ? <CopyMeetingLinkSection url = { _inviteUrl } /> : null}\n                {\n                    _emailSharingVisible\n                        ? <InviteByEmailSection\n                            inviteSubject = { inviteSubject }\n                            inviteText = { _invitationText }\n                            inviteTextiOS = { _invitationTextiOS } />\n                        : null\n                }\n                { _embedMeetingVisible && <EmbedMeetingTrigger /> }\n                <div className = 'invite-more-dialog separator' />\n                {\n                    _liveStreamViewURL\n                        && <LiveStreamSection liveStreamViewURL = { _liveStreamViewURL } />\n                }\n                {\n                    _phoneNumber\n                        && _dialInVisible\n                        && <DialInSection phoneNumber = { _phoneNumber } />\n                }\n            </div>\n        </Dialog>\n    );\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code AddPeopleDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The properties explicitly passed to the component.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state, ownProps) {\n    const currentLiveStreamingSession\n        = getActiveSession(state, JitsiRecordingConstants.mode.STREAM);\n    const { iAmRecorder, inviteAppName } = state['features/base/config'];\n    const addPeopleEnabled = isAddPeopleEnabled(state);\n    const dialOutEnabled = isDialOutEnabled(state);\n    const hideInviteContacts = iAmRecorder || (!addPeopleEnabled && !dialOutEnabled);\n    const dialIn = state['features/invite'];\n    const phoneNumber = dialIn && dialIn.numbers ? _getDefaultPhoneNumber(dialIn.numbers) : undefined;\n\n    return {\n        _dialIn: dialIn,\n        _embedMeetingVisible: !isVpaasMeeting(state) && isSharingEnabled(sharingFeatures.embed),\n        _dialInVisible: isSharingEnabled(sharingFeatures.dialIn),\n        _urlSharingVisible: isDynamicBrandingDataLoaded(state) && isSharingEnabled(sharingFeatures.url),\n        _emailSharingVisible: isSharingEnabled(sharingFeatures.email),\n        _invitationText: getInviteText({ state,\n            phoneNumber,\n            t: ownProps.t }),\n        _invitationTextiOS: getInviteTextiOS({ state,\n            phoneNumber,\n            t: ownProps.t }),\n        _inviteAppName: inviteAppName,\n        _inviteContactsVisible: interfaceConfig.ENABLE_DIAL_OUT && !hideInviteContacts,\n        _inviteUrl: getInviteURL(state),\n        _liveStreamViewURL:\n            currentLiveStreamingSession\n                && currentLiveStreamingSession.liveStreamViewURL,\n        _phoneNumber: phoneNumber\n    };\n}\n\n/**\n * Maps dispatching of some action to React component props.\n *\n * @param {Function} dispatch - Redux action dispatcher.\n * @returns {Props}\n */\nconst mapDispatchToProps = {\n    updateNumbers: () => updateDialInNumbers()\n};\n\nexport default translate(\n    connect(mapStateToProps, mapDispatchToProps)(AddPeopleDialog)\n);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { _formatConferenceIDPin } from '../../../_utils';\n\n/**\n * The type of the React {@code Component} props of {@link ConferenceID}.\n */\ntype Props = {\n\n    /**\n     * The conference ID for dialing in.\n     */\n    conferenceID: number,\n\n    /**\n     * The name of the conference.\n     */\n    conferenceName: ?string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Displays a conference ID used as a pin for dialing into a conference.\n *\n * @extends Component\n */\nclass ConferenceID extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { conferenceID, conferenceName, t } = this.props;\n\n        return (\n            <div className = 'dial-in-conference-id'>\n                <div className = 'dial-in-conference-name'>\n                    { conferenceName }\n                </div>\n                <div className = 'dial-in-conference-description'>\n                    { t('info.dialANumber') }\n                </div>\n                <div className = 'dial-in-conference-pin'>\n                    { `${t('info.dialInConferenceID')} ${_formatConferenceIDPin(conferenceID)}` }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default translate(ConferenceID);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { Icon, IconSip } from '../../../../base/icons';\n\ntype Props = {\n\n    /**\n     * Whether or not numbers should include links with the telephone protocol.\n     */\n    clickableNumbers: boolean,\n\n    /**\n     * The conference ID for dialing in.\n     */\n    conferenceID: number,\n\n    /**\n     * The phone numbers to display. Can be an array of number Objects or an\n     * object with countries as keys and an array of numbers as values.\n     */\n    numbers: { [string]: Array<string> } | Array<Object>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * Displays a table with phone numbers to dial in to a conference.\n *\n * @extends Component\n */\nclass NumbersList extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { numbers } = this.props;\n\n        return this._renderWithCountries(numbers);\n    }\n\n    /**\n     * Renders rows of countries and associated phone numbers.\n     *\n     * @param {Object|Array<Object>} numbersMapping - An object with country\n     * names as keys and values as arrays of phone numbers.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderWithCountries(\n            numbersMapping: { numbers: Array<string> } | Array<Object>) {\n        const { t } = this.props;\n        let hasFlags = false, numbers;\n\n        if (Array.isArray(numbersMapping)) {\n            hasFlags = true;\n            numbers = numbersMapping.reduce(\n                (resultNumbers, number) => {\n                    // The i18n-iso-countries package insists on upper case.\n                    const countryCode = number.countryCode.toUpperCase();\n                    const countryName = countryCode === 'SIP'\n                        ? t('info.sip')\n                        : t(`countries:countries.${countryCode}`);\n\n                    if (resultNumbers[countryName]) {\n                        resultNumbers[countryName].push(number);\n                    } else {\n                        resultNumbers[countryName] = [ number ];\n                    }\n\n                    return resultNumbers;\n                }, {});\n        } else {\n            numbers = {};\n\n            for (const [ country, numbersArray ]\n                of Object.entries(numbersMapping.numbers)) {\n\n                if (Array.isArray(numbersArray)) {\n                    /* eslint-disable arrow-body-style */\n                    const formattedNumbers = numbersArray.map(number => ({\n                        formattedNumber: number\n                    }));\n                    /* eslint-enable arrow-body-style */\n\n                    numbers[country] = formattedNumbers;\n                }\n            }\n        }\n\n        const rows = [];\n\n        Object.keys(numbers).forEach((countryName: string) => {\n            const numbersArray = numbers[countryName];\n\n            rows.push(\n                <tr\n                    className = 'number-group'\n                    key = { countryName }>\n                    { this._renderFlag(numbersArray[0].countryCode) }\n                    <td className = 'country' >{ countryName }</td>\n                    <td className = 'numbers-list-column'>\n                        { this._renderNumbersList(numbersArray) }\n                    </td>\n                    <td className = 'toll-free-list-column' >\n                        { this._renderNumbersTollFreeList(numbersArray) }\n                    </td>\n                </tr>\n            );\n        });\n\n        return (\n            <table className = 'dial-in-numbers-list'>\n                <thead>\n                    <tr>\n                        { hasFlags ? <th /> : null}\n                        <th>{ t('info.country') }</th>\n                        <th>{ t('info.numbers') }</th>\n                        <th />\n                    </tr>\n                </thead>\n                <tbody className = 'dial-in-numbers-body'>\n                    { rows }\n                </tbody>\n            </table>\n        );\n    }\n\n    /**\n     * Renders a div container for a flag for the country of the phone number.\n     *\n     * @param {string} countryCode - The country code flag to display.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderFlag(countryCode) {\n        if (countryCode) {\n            return (\n                <td className = 'flag-cell'>\n                    {countryCode === 'SIP'\n                        ? <Icon src = { IconSip } />\n                        : <i className = { `flag iti-flag ${countryCode}` } />\n                    }\n                </td>);\n        }\n\n        return null;\n    }\n\n    /**\n     * Renders a div container for a phone number.\n     *\n     * @param {Array} numbers - The phone number to display.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderNumbersList(numbers) {\n        const numbersListItems = numbers.map(number =>\n            (<li\n                className = 'dial-in-number'\n                key = { number.formattedNumber }>\n                { this._renderNumberLink(number.formattedNumber) }\n            </li>));\n\n        return (\n            <ul className = 'numbers-list'>\n                { numbersListItems }\n            </ul>\n        );\n    }\n\n    /**\n     * Renders list with a toll free text on the position where there is a\n     * number marked as toll free.\n     *\n     * @param {Array} numbers - The phone number that are displayed.\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderNumbersTollFreeList(numbers) {\n        const { t } = this.props;\n\n        const tollNumbersListItems = numbers.map(number =>\n            (<li\n                className = 'toll-free'\n                key = { number.formattedNumber }>\n                { number.tollFree ? t('info.dialInTollFree') : '' }\n            </li>));\n\n        return (\n            <ul className = 'toll-free-list'>\n                { tollNumbersListItems }\n            </ul>\n        );\n    }\n\n    /**\n     * Renders a ReactElement for displaying a telephone number. If the\n     * component prop {@code clickableNumbers} is true, then the number will\n     * have a link with the telephone protocol.\n     *\n     * @param {string} number - The phone number to display.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderNumberLink(number) {\n        if (this.props.clickableNumbers) {\n            // Url encode # to %23, Android phone was cutting the # after\n            // clicking it.\n            // Seems that using ',' and '%23' works on iOS and Android.\n            return (\n                <a\n                    href = { `tel:${number},${this.props.conferenceID}%23` }\n                    key = { number } >\n                    { number }\n                </a>\n            );\n        }\n\n        return number;\n    }\n\n}\n\nexport default translate(NumbersList);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { doGetJSON } from '../../../../base/util';\n\nimport ConferenceID from './ConferenceID';\nimport NumbersList from './NumbersList';\n\ndeclare var config: Object;\n\n/**\n * The type of the React {@code Component} props of {@link DialInSummary}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS classnames to append to the root of the component.\n     */\n    className: string,\n\n    /**\n     * Whether or not numbers should include links with the telephone protocol.\n     */\n    clickableNumbers: boolean,\n\n    /**\n     * The name of the conference to show a conferenceID for.\n     */\n    room: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DialInSummary}.\n */\ntype State = {\n\n    /**\n     * The numeric ID of the conference, used as a pin when dialing in.\n     */\n    conferenceID: ?string,\n\n    /**\n     * An error message to display.\n     */\n    error: string,\n\n    /**\n     * Whether or not the app is fetching data.\n     */\n    loading: boolean,\n\n    /**\n     * The dial-in numbers to be displayed.\n     */\n    numbers: ?Array<Object> | ?Object,\n\n    /**\n     * Whether or not dial-in is allowed.\n     */\n    numbersEnabled: ?boolean\n}\n\n/**\n * Displays a page listing numbers for dialing into a conference and pin to\n * the a specific conference.\n *\n * @extends Component\n */\nclass DialInSummary extends Component<Props, State> {\n    state = {\n        conferenceID: null,\n        error: '',\n        loading: true,\n        numbers: null,\n        numbersEnabled: null\n    };\n\n    /**\n     * Initializes a new {@code DialInSummary} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onGetNumbersSuccess = this._onGetNumbersSuccess.bind(this);\n        this._onGetConferenceIDSuccess\n            = this._onGetConferenceIDSuccess.bind(this);\n        this._setErrorMessage = this._setErrorMessage.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        const getNumbers = this._getNumbers()\n            .then(this._onGetNumbersSuccess)\n            .catch(this._setErrorMessage);\n\n        const getID = this._getConferenceID()\n            .then(this._onGetConferenceIDSuccess)\n            .catch(this._setErrorMessage);\n\n        Promise.all([ getNumbers, getID ])\n            .then(() => {\n                this.setState({ loading: false });\n            });\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        let className = '';\n        let contents;\n\n        const { conferenceID, error, loading, numbersEnabled } = this.state;\n\n        if (loading) {\n            contents = '';\n        } else if (numbersEnabled === false) {\n            contents = this.props.t('info.dialInNotSupported');\n        } else if (error) {\n            contents = error;\n        } else {\n            className = 'has-numbers';\n            contents = [\n                conferenceID\n                    ? <ConferenceID\n                        conferenceID = { conferenceID }\n                        conferenceName = { this.props.room }\n                        key = 'conferenceID' />\n                    : null,\n                <NumbersList\n                    clickableNumbers = { this.props.clickableNumbers }\n                    conferenceID = { conferenceID }\n                    key = 'numbers'\n                    numbers = { this.state.numbers } />\n            ];\n        }\n\n        return (\n            <div className = { `${this.props.className} ${className}` }>\n                { contents }\n            </div>\n        );\n    }\n\n    /**\n     * Creates an AJAX request for the conference ID.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _getConferenceID() {\n        const { room } = this.props;\n        const { dialInConfCodeUrl, hosts } = config;\n        const mucURL = hosts && hosts.muc;\n\n        if (!dialInConfCodeUrl || !mucURL || !room) {\n            return Promise.resolve();\n        }\n\n        return doGetJSON(`${dialInConfCodeUrl}?conference=${room}@${mucURL}`, true)\n            .catch(() => Promise.reject(this.props.t('info.genericError')));\n    }\n\n    /**\n     * Creates an AJAX request for dial-in numbers.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _getNumbers() {\n        const { room } = this.props;\n        const { dialInNumbersUrl, hosts } = config;\n        const mucURL = hosts && hosts.muc;\n        let URLSuffix = '';\n\n        if (!dialInNumbersUrl) {\n            return Promise.reject(this.props.t('info.dialInNotSupported'));\n        }\n\n        // when room and mucURL are available\n        // provide conference when looking up dial in numbers\n\n        if (room && mucURL) {\n            URLSuffix = `?conference=${room}@${mucURL}`;\n        }\n\n        return doGetJSON(`${dialInNumbersUrl}${URLSuffix}`, true)\n            .catch(() => Promise.reject(this.props.t('info.genericError')));\n    }\n\n    _onGetConferenceIDSuccess: (Object) => void;\n\n    /**\n     * Callback invoked when fetching the conference ID succeeds.\n     *\n     * @param {Object} response - The response from fetching the conference ID.\n     * @private\n     * @returns {void}\n     */\n    _onGetConferenceIDSuccess(response = {}) {\n        const { conference, id } = response;\n\n        if (!conference || !id) {\n            return;\n        }\n\n        this.setState({ conferenceID: id });\n    }\n\n    _onGetNumbersSuccess: (Object) => void;\n\n    /**\n     * Callback invoked when fetching dial-in numbers succeeds. Sets the\n     * internal to show the numbers.\n     *\n     * @param {Array|Object} response - The response from fetching\n     * dial-in numbers.\n     * @param {Array|Object} response.numbers - The dial-in numbers.\n     * @param {boolean} response.numbersEnabled - Whether or not dial-in is\n     * enabled, old syntax that is deprecated.\n     * @private\n     * @returns {void}\n     */\n    _onGetNumbersSuccess(\n            response: Array<Object> | { numbersEnabled?: boolean }) {\n\n        this.setState({\n            numbersEnabled:\n                Array.isArray(response)\n                    ? response.length > 0 : response.numbersEnabled,\n            numbers: response\n        });\n    }\n\n    _setErrorMessage: (string) => void;\n\n    /**\n     * Sets an error message to display on the page instead of content.\n     *\n     * @param {string} error - The error message to display.\n     * @private\n     * @returns {void}\n     */\n    _setErrorMessage(error) {\n        this.setState({\n            error\n        });\n    }\n}\n\nexport default translate(DialInSummary);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { MEDIA_TYPE } from '../../../base/media';\nimport {\n    getParticipantDisplayName,\n    getParticipantPresenceStatus,\n    getRemoteParticipants\n} from '../../../base/participants';\nimport { Container, Text } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { isLocalTrackMuted } from '../../../base/tracks';\nimport { CALLING, PresenceLabel } from '../../../presence-status';\n\nimport styles from './styles';\n\n/**\n * The type of the React {@code Component} props of {@link CalleeInfo}.\n */\ntype Props = {\n\n    /**\n     * The callee's information such as display name.\n     */\n    _callee: Object,\n\n    _isVideoMuted: boolean\n};\n\n\n/**\n * Implements a React {@link Component} which depicts the establishment of a\n * call with a specific remote callee.\n *\n * @extends Component\n */\nclass CalleeInfo extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            id,\n            name,\n            status = CALLING\n        } = this.props._callee;\n        const className = this.props._isVideoMuted ? 'solidBG' : undefined;\n\n        return (\n            <Container\n                { ...this._style('ringing', className) }\n                id = 'ringOverlay'>\n                <Container\n                    { ...this._style('ringing__content') }>\n                    <Avatar\n                        { ...this._style('ringing__avatar') }\n                        participantId = { id } />\n                    <Container { ...this._style('ringing__status') }>\n                        <PresenceLabel\n                            defaultPresence = { status }\n                            { ...this._style('ringing__text') } />\n                    </Container>\n                    <Container { ...this._style('ringing__name') }>\n                        <Text\n                            { ...this._style('ringing__text') }>\n                            { name }\n                        </Text>\n                    </Container>\n                </Container>\n            </Container>\n        );\n    }\n\n    /**\n     * Attempts to convert specified CSS class names into React\n     * {@link Component} props {@code style} or {@code className}.\n     *\n     * @param {Array<string>} classNames - The CSS class names to convert\n     * into React {@code Component} props {@code style} or {@code className}.\n     * @returns {{\n     *     className: string,\n     *     style: Object\n     * }}\n     */\n    _style(...classNames: Array<?string>) {\n        let className = '';\n        let style;\n\n        for (const aClassName of classNames) {\n            if (aClassName) {\n                // Attempt to convert aClassName into style.\n                if (styles && aClassName in styles) {\n                    // React Native will accept an Array as the value of the\n                    // style prop. However, I do not know about React.\n                    style = {\n                        ...style,\n                        ...styles[aClassName]\n                    };\n                } else {\n                    // Otherwise, leave it as className.\n                    className += `${aClassName} `;\n                }\n            }\n        }\n\n        // Choose which of the className and/or style props has a value and,\n        // consequently, must be returned.\n        const props = {};\n\n        if (className) {\n            props.className = className.trim();\n        }\n        if (style) {\n            props.style = style;\n        }\n\n        return props;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to {@code CalleeInfo}'s props.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _callee: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const _isVideoMuted\n        = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.VIDEO);\n\n    // This would be expensive for big calls but the component will be mounted only when there are up\n    // to 3 participants in the call.\n    for (const [ id, p ] of getRemoteParticipants(state)) {\n        if (p.botType === 'poltergeist') {\n            return {\n                _callee: {\n                    id,\n                    name: getParticipantDisplayName(state, id),\n                    status: getParticipantPresenceStatus(state, id)\n                },\n                _isVideoMuted\n            };\n        }\n    }\n\n    return {\n        _callee: state['features/invite'].initialCalleeInfo,\n        _isVideoMuted\n    };\n}\n\nexport default connect(_mapStateToProps)(CalleeInfo);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { connect } from '../../../base/redux';\n\nimport CalleeInfo from './CalleeInfo';\n\n/**\n * The type of the React {@code Component} props of {@code CalleeInfoContainer}.\n */\ntype Props = {\n\n    /**\n     * The indicator which determines whether {@code CalleeInfo} is to be\n     * rendered.\n     *\n     * @private\n     */\n    _calleeInfoVisible: boolean\n};\n\n/**\n * Implements a React {@link Component} which depicts the establishment of a\n * call with a specific remote callee if there is such a remote callee.\n *\n * @extends Component\n */\nclass CalleeInfoContainer extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return this.props._calleeInfoVisible ? <CalleeInfo /> : null;\n    }\n}\n\n/**\n * Maps parts of the redux state to {@link CalleeInfoContainer} (React\n * {@code Component}) props.\n *\n * @param {Object} state - The redux state of which parts are to be mapped to\n * {@code CalleeInfoContainer} props.\n * @private\n * @returns {{\n *     _calleeInfoVisible: boolean\n * }}\n */\nfunction _mapStateToProps(state: Object): Object {\n    return {\n        /**\n         * The indicator which determines whether {@code CalleeInfo} is to be\n         * rendered.\n         *\n         * @private\n         * @type {boolean}\n         */\n        _calleeInfoVisible: state['features/invite'].calleeInfoVisible\n    };\n}\n\nexport default connect(_mapStateToProps)(CalleeInfoContainer);\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport { isLocalParticipantModerator } from '../../base/participants';\nimport { setKnockingParticipantApproval } from '../actions';\nimport { getLobbyState } from '../functions';\n\nexport type Props = {\n\n    /**\n     * The list of participants.\n     */\n    _participants: Array<Object>,\n\n    /**\n     * True if the list should be rendered.\n     */\n    _visible: boolean,\n\n    /**\n     * The Redux Dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract class to encapsulate the platform common code of the {@code KnockingParticipantList}.\n */\nexport default class AbstractKnockingParticipantList<P: Props = Props> extends PureComponent<P> {\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this._onRespondToParticipant = this._onRespondToParticipant.bind(this);\n    }\n\n    _onRespondToParticipant: (string, boolean) => Function;\n\n    /**\n     * Function that constructs a callback for the response handler button.\n     *\n     * @param {string} id - The id of the knocking participant.\n     * @param {boolean} approve - The response for the knocking.\n     * @returns {Function}\n     */\n    _onRespondToParticipant(id, approve) {\n        return () => {\n            this.props.dispatch(setKnockingParticipantApproval(id, approve));\n        };\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function mapStateToProps(state: Object): $Shape<Props> {\n    const { knockingParticipants, lobbyEnabled } = getLobbyState(state);\n\n    return {\n        _participants: knockingParticipants,\n        _visible: lobbyEnabled && isLocalParticipantModerator(state)\n          && Boolean(knockingParticipants && knockingParticipants.length)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport NotificationWithParticipants from '../../../notifications/components/web/NotificationWithParticipants';\nimport { approveKnockingParticipant, rejectKnockingParticipant } from '../../actions';\nimport AbstractKnockingParticipantList, {\n    mapStateToProps as abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractKnockingParticipantList';\n\ntype Props = AbstractProps & {\n\n    /**\n     * True if the toolbox is visible, so we need to adjust the position.\n     */\n    _toolboxVisible: boolean\n};\n\n/**\n * Component to render a list for the actively knocking participants.\n */\nclass KnockingParticipantList extends AbstractKnockingParticipantList<Props> {\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _participants, _visible, t } = this.props;\n\n        if (!_visible) {\n            return null;\n        }\n\n        return (\n            <div id = 'knocking-participant-list'>\n                <div className = 'title'>\n                    { t('lobby.knockingParticipantList') }\n                </div>\n                <NotificationWithParticipants\n                    approveButtonText = { t('lobby.allow') }\n                    onApprove = { approveKnockingParticipant }\n                    onReject = { rejectKnockingParticipant }\n                    participants = { _participants }\n                    rejectButtonText = { t('lobby.reject') }\n                    testIdPrefix = 'lobby' />\n            </div>\n        );\n    }\n\n    _onRespondToParticipant: (string, boolean) => Function;\n}\n\nexport default translate(connect(abstractMapStateToProps)(KnockingParticipantList));\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { isLocalParticipantModerator } from '../../../base/participants';\nimport { Switch } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { toggleLobbyMode } from '../../actions';\n\ntype Props = {\n\n    /**\n     * True if lobby is currently enabled in the conference.\n     */\n    _lobbyEnabled: boolean,\n\n    /**\n     * True if the section should be visible.\n     */\n    _visible: boolean,\n\n    /**\n     * The Redux Dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * True if the lobby switch is toggled on.\n     */\n    lobbyEnabled: boolean\n}\n\n/**\n * Implements a security feature section to control lobby mode.\n */\nclass LobbySection extends PureComponent<Props, State> {\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            lobbyEnabled: props._lobbyEnabled\n        };\n\n        this._onToggleLobby = this._onToggleLobby.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: Object) {\n        if (props._lobbyEnabled !== state.lobbyEnabled) {\n\n            return {\n                lobbyEnabled: props._lobbyEnabled\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _visible, t } = this.props;\n\n        if (!_visible) {\n            return null;\n        }\n\n        return (\n            <>\n                <div id = 'lobby-section'>\n                    <p\n                        className = 'description'\n                        role = 'banner'>\n                        { t('lobby.enableDialogText') }\n                    </p>\n                    <div className = 'control-row'>\n                        <label htmlFor = 'lobby-section-switch'>\n                            { t('lobby.toggleLabel') }\n                        </label>\n                        <Switch\n                            id = 'lobby-section-switch'\n                            onValueChange = { this._onToggleLobby }\n                            value = { this.state.lobbyEnabled } />\n                    </div>\n                </div>\n                <div className = 'separator-line' />\n            </>\n        );\n    }\n\n    _onToggleLobby: () => void;\n\n    /**\n     * Callback to be invoked when the user toggles the lobby feature on or off.\n     *\n     * @returns {void}\n     */\n    _onToggleLobby() {\n        const newValue = !this.state.lobbyEnabled;\n\n        this.setState({\n            lobbyEnabled: newValue\n        });\n\n        this.props.dispatch(toggleLobbyMode(newValue));\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction mapStateToProps(state: Object): $Shape<Props> {\n    const { conference } = state['features/base/conference'];\n    const { hideLobbyButton } = state['features/base/config'];\n\n    return {\n        _lobbyEnabled: state['features/lobby'].lobbyEnabled,\n        _visible: conference && conference.isLobbySupported() && isLocalParticipantModerator(state)\n            && !hideLobbyButton\n    };\n}\n\nexport default translate(connect(mapStateToProps)(LobbySection));\n","// @flow\n// eslint-disable-next-line no-unused-vars\nimport React, { PureComponent } from 'react';\n\nimport { getConferenceName } from '../../base/conference';\nimport { getFeatureFlag, INVITE_ENABLED } from '../../base/flags';\nimport { getLocalParticipant } from '../../base/participants';\nimport { getFieldValue } from '../../base/react';\nimport { updateSettings } from '../../base/settings';\nimport { cancelKnocking, joinWithPassword, setPasswordJoinFailed, startKnocking } from '../actions';\n\nexport const SCREEN_STATES = {\n    EDIT: 1,\n    PASSWORD: 2,\n    VIEW: 3\n};\n\nexport type Props = {\n\n    /**\n     * True if knocking is already happening, so we're waiting for a response.\n     */\n    _knocking: boolean,\n\n    /**\n     * The name of the meeting we're about to join.\n     */\n    _meetingName: string,\n\n    /**\n     * The email of the participant about to knock/join.\n     */\n    _participantEmail: string,\n\n    /**\n     * The id of the participant about to knock/join. This is the participant ID in the lobby room, at this point.\n     */\n    _participantId: string,\n\n    /**\n     * The name of the participant about to knock/join.\n     */\n    _participantName: string;\n\n    /**\n     * True if a recent attempt to join with password failed.\n     */\n    _passwordJoinFailed: boolean,\n\n    /**\n     * True if the password field should be available for lobby participants.\n     */\n     _renderPassword: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Indicates whether the copy url button should be shown\n     */\n    showCopyUrlButton: boolean,\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * The display name value entered into the field.\n     */\n    displayName: string,\n\n    /**\n     * The email value entered into the field.\n     */\n    email: string,\n\n    /**\n     * The password value entered into the field.\n     */\n    password: string,\n\n    /**\n     * True if a recent attempt to join with password failed.\n     */\n    passwordJoinFailed: boolean,\n\n    /**\n     * The state of the screen. One of {@code SCREEN_STATES[*]}\n     */\n    screenState: number\n}\n\n/**\n * Abstract class to encapsulate the platform common code of the {@code LobbyScreen}.\n */\nexport default class AbstractLobbyScreen<P: Props = Props> extends PureComponent<P, State> {\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            displayName: props._participantName || '',\n            email: props._participantEmail || '',\n            password: '',\n            passwordJoinFailed: false,\n            screenState: props._participantName ? SCREEN_STATES.VIEW : SCREEN_STATES.EDIT\n        };\n\n        this._onAskToJoin = this._onAskToJoin.bind(this);\n        this._onCancel = this._onCancel.bind(this);\n        this._onChangeDisplayName = this._onChangeDisplayName.bind(this);\n        this._onChangeEmail = this._onChangeEmail.bind(this);\n        this._onChangePassword = this._onChangePassword.bind(this);\n        this._onEnableEdit = this._onEnableEdit.bind(this);\n        this._onJoinWithPassword = this._onJoinWithPassword.bind(this);\n        this._onSwitchToKnockMode = this._onSwitchToKnockMode.bind(this);\n        this._onSwitchToPasswordMode = this._onSwitchToPasswordMode.bind(this);\n    }\n\n    /**\n     * Implements {@code PureComponent.getDerivedStateFromProps}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: State) {\n        if (props._passwordJoinFailed && !state.passwordJoinFailed) {\n            return {\n                password: '',\n                passwordJoinFailed: true\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the screen title.\n     *\n     * @returns {string}\n     */\n    _getScreenTitleKey() {\n        const { screenState } = this.state;\n        const passwordPrompt = screenState === SCREEN_STATES.PASSWORD;\n\n        return !passwordPrompt && this.props._knocking\n            ? 'lobby.joiningTitle'\n            : passwordPrompt ? 'lobby.enterPasswordTitle' : 'lobby.joinTitle';\n    }\n\n    _onAskToJoin: () => void;\n\n    /**\n     * Callback to be invoked when the user submits the joining request.\n     *\n     * @returns {void}\n     */\n    _onAskToJoin() {\n        this.setState({\n            password: ''\n        });\n\n        this.props.dispatch(startKnocking());\n\n        return false;\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Callback to be invoked when the user cancels the dialog.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _onCancel() {\n        this.props.dispatch(cancelKnocking());\n\n        return true;\n    }\n\n    _onChangeDisplayName: Object => void;\n\n    /**\n     * Callback to be invoked when the user changes its display name.\n     *\n     * @param {SyntheticEvent} event - The SyntheticEvent instance of the change.\n     * @returns {void}\n     */\n    _onChangeDisplayName(event) {\n        const displayName = getFieldValue(event);\n\n        this.setState({\n            displayName\n        }, () => {\n            this.props.dispatch(updateSettings({\n                displayName\n            }));\n        });\n    }\n\n    _onChangeEmail: Object => void;\n\n    /**\n     * Callback to be invoked when the user changes its email.\n     *\n     * @param {SyntheticEvent} event - The SyntheticEvent instance of the change.\n     * @returns {void}\n     */\n    _onChangeEmail(event) {\n        const email = getFieldValue(event);\n\n        this.setState({\n            email\n        }, () => {\n            this.props.dispatch(updateSettings({\n                email\n            }));\n        });\n    }\n\n    _onChangePassword: Object => void;\n\n    /**\n     * Callback to be invoked when the user changes the password.\n     *\n     * @param {SyntheticEvent} event - The SyntheticEvent instance of the change.\n     * @returns {void}\n     */\n    _onChangePassword(event) {\n        this.setState({\n            password: getFieldValue(event)\n        });\n    }\n\n    _onEnableEdit: () => void;\n\n    /**\n     * Callback to be invoked for the edit button.\n     *\n     * @returns {void}\n     */\n    _onEnableEdit() {\n        this.setState({\n            screenState: SCREEN_STATES.EDIT\n        });\n    }\n\n    _onJoinWithPassword: () => void;\n\n    /**\n     * Callback to be invoked when the user tries to join using a preset password.\n     *\n     * @returns {void}\n     */\n    _onJoinWithPassword() {\n        this.setState({\n            passwordJoinFailed: false\n        });\n        this.props.dispatch(joinWithPassword(this.state.password));\n    }\n\n    _onSwitchToKnockMode: () => void;\n\n    /**\n     * Callback to be invoked for the enter (go back to) knocking mode button.\n     *\n     * @returns {void}\n     */\n    _onSwitchToKnockMode() {\n        this.setState({\n            password: '',\n            screenState: this.state.displayName ? SCREEN_STATES.VIEW : SCREEN_STATES.EDIT\n        });\n        this.props.dispatch(setPasswordJoinFailed(false));\n    }\n\n    _onSwitchToPasswordMode: () => void;\n\n    /**\n     * Callback to be invoked for the enter password button.\n     *\n     * @returns {void}\n     */\n    _onSwitchToPasswordMode() {\n        this.setState({\n            screenState: SCREEN_STATES.PASSWORD\n        });\n    }\n\n    /**\n     * Renders the content of the dialog.\n     *\n     * @returns {React$Element}\n     */\n    _renderContent() {\n        const { _knocking } = this.props;\n        const { screenState } = this.state;\n\n        if (screenState !== SCREEN_STATES.PASSWORD && _knocking) {\n            return this._renderJoining();\n        }\n\n        return (\n            <>\n                { screenState === SCREEN_STATES.VIEW && this._renderParticipantInfo() }\n                { screenState === SCREEN_STATES.EDIT && this._renderParticipantForm() }\n                { screenState === SCREEN_STATES.PASSWORD && this._renderPasswordForm() }\n\n                { (screenState === SCREEN_STATES.VIEW || screenState === SCREEN_STATES.EDIT)\n                    && this._renderStandardButtons() }\n                { screenState === SCREEN_STATES.PASSWORD && this._renderPasswordJoinButtons() }\n            </>\n        );\n    }\n\n    /**\n     * Renders the joining (waiting) fragment of the screen.\n     *\n     * @returns {React$Element}\n     */\n    _renderJoining: () => React$Element<*>;\n\n    /**\n     * Renders the participant form to let the knocking participant enter its details.\n     *\n     * @returns {React$Element}\n     */\n    _renderParticipantForm: () => React$Element<*>;\n\n    /**\n     * Renders the participant info fragment when we have all the required details of the user.\n     *\n     * @returns {React$Element}\n     */\n    _renderParticipantInfo: () => React$Element<*>;\n\n    /**\n     * Renders the password form to let the participant join by using a password instead of knocking.\n     *\n     * @returns {React$Element}\n     */\n    _renderPasswordForm: () => React$Element<*>;\n\n    /**\n     * Renders the password join button (set).\n     *\n     * @returns {React$Element}\n     */\n    _renderPasswordJoinButtons: () => React$Element<*>;\n\n    /**\n     * Renders the standard (pre-knocking) button set.\n     *\n     * @returns {React$Element}\n     */\n    _renderStandardButtons: () => React$Element<*>;\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object): $Shape<Props> {\n    const localParticipant = getLocalParticipant(state);\n    const participantId = localParticipant?.id;\n    const inviteEnabledFlag = getFeatureFlag(state, INVITE_ENABLED, true);\n    const { disableInviteFunctions } = state['features/base/config'];\n    const { knocking, passwordJoinFailed } = state['features/lobby'];\n    const { iAmSipGateway } = state['features/base/config'];\n    const showCopyUrlButton = inviteEnabledFlag || !disableInviteFunctions;\n\n    return {\n        _knocking: knocking,\n        _meetingName: getConferenceName(state),\n        _participantEmail: localParticipant?.email,\n        _participantId: participantId,\n        _participantName: localParticipant?.name,\n        _passwordJoinFailed: passwordJoinFailed,\n        _renderPassword: !iAmSipGateway,\n        showCopyUrlButton\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { ActionButton, InputField, PreMeetingScreen } from '../../../base/premeeting';\nimport { LoadingIndicator } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport AbstractLobbyScreen, {\n    _mapStateToProps\n} from '../AbstractLobbyScreen';\n\n/**\n * Implements a waiting screen that represents the participant being in the lobby.\n */\nclass LobbyScreen extends AbstractLobbyScreen {\n    /**\n     * Implements {@code PureComponent#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { showCopyUrlButton, t } = this.props;\n\n        return (\n            <PreMeetingScreen\n                showCopyUrlButton = { showCopyUrlButton }\n                title = { t(this._getScreenTitleKey()) }>\n                { this._renderContent() }\n            </PreMeetingScreen>\n        );\n    }\n\n    _getScreenTitleKey: () => string;\n\n    _onAskToJoin: () => boolean;\n\n    _onCancel: () => boolean;\n\n    _onChangeDisplayName: Object => void;\n\n    _onChangeEmail: Object => void;\n\n    _onChangePassword: Object => void;\n\n    _onEnableEdit: () => void;\n\n    _onJoinWithPassword: () => void;\n\n    _onSubmit: () => boolean;\n\n    _onSwitchToKnockMode: () => void;\n\n    _onSwitchToPasswordMode: () => void;\n\n    _renderContent: () => React$Element<*>;\n\n    /**\n     * Renders the joining (waiting) fragment of the screen.\n     *\n     * @inheritdoc\n     */\n    _renderJoining() {\n        return (\n            <div className = 'container'>\n                <div className = 'spinner'>\n                    <LoadingIndicator size = 'large' />\n                </div>\n                <span className = 'joining-message'>\n                    { this.props.t('lobby.joiningMessage') }\n                </span>\n                { this._renderStandardButtons() }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the participant form to let the knocking participant enter its details.\n     *\n     * NOTE: We don't use edit action on web since the prejoin functionality got merged.\n     * Mobile won't use it either once prejoin gets implemented there too.\n     *\n     * @inheritdoc\n     */\n    _renderParticipantForm() {\n        return this._renderParticipantInfo();\n    }\n\n    /**\n     * Renders the participant info fragment when we have all the required details of the user.\n     *\n     * @inheritdoc\n     */\n    _renderParticipantInfo() {\n        const { displayName } = this.state;\n        const { t } = this.props;\n\n        return (\n            <InputField\n                onChange = { this._onChangeDisplayName }\n                placeHolder = { t('lobby.nameField') }\n                testId = 'lobby.nameField'\n                value = { displayName } />\n        );\n    }\n\n    /**\n     * Renders the password form to let the participant join by using a password instead of knocking.\n     *\n     * @inheritdoc\n     */\n    _renderPasswordForm() {\n        const { _passwordJoinFailed, t } = this.props;\n\n        return (\n            <InputField\n                className = { _passwordJoinFailed ? 'error' : '' }\n                onChange = { this._onChangePassword }\n                placeHolder = { _passwordJoinFailed ? t('lobby.invalidPassword') : t('lobby.passwordField') }\n                testId = 'lobby.password'\n                type = 'password'\n                value = { this.state.password } />\n        );\n    }\n\n    /**\n     * Renders the password join button (set).\n     *\n     * @inheritdoc\n     */\n    _renderPasswordJoinButtons() {\n        const { t } = this.props;\n\n        return (\n            <>\n                <ActionButton\n                    disabled = { !this.state.password }\n                    onClick = { this._onJoinWithPassword }\n                    testId = 'lobby.passwordJoinButton'\n                    type = 'primary'>\n                    { t('lobby.passwordJoinButton') }\n                </ActionButton>\n                <ActionButton\n                    onClick = { this._onSwitchToKnockMode }\n                    testId = 'lobby.backToKnockModeButton'\n                    type = 'secondary'>\n                    { t('lobby.backToKnockModeButton') }\n                </ActionButton>\n            </>\n        );\n    }\n\n    /**\n     * Renders the standard button set.\n     *\n     * @inheritdoc\n     */\n    _renderStandardButtons() {\n        const { _knocking, _renderPassword, t } = this.props;\n\n        return (\n            <>\n                { _knocking || <ActionButton\n                    disabled = { !this.state.displayName }\n                    onClick = { this._onAskToJoin }\n                    testId = 'lobby.knockButton'\n                    type = 'primary'>\n                    { t('lobby.knockButton') }\n                </ActionButton> }\n                {_renderPassword && <ActionButton\n                    onClick = { this._onSwitchToPasswordMode }\n                    testId = 'lobby.enterPasswordButton'\n                    type = 'secondary'>\n                    { t('lobby.enterPasswordButton') }\n                </ActionButton> }\n            </>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(LobbyScreen));\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/connection');\n","// @flow\n\nimport _ from 'lodash';\nimport type { Dispatch } from 'redux';\n\nimport { conferenceLeft, conferenceWillLeave } from '../conference/actions';\nimport { getCurrentConference } from '../conference/functions';\nimport JitsiMeetJS, { JitsiConnectionEvents } from '../lib-jitsi-meet';\nimport {\n    getBackendSafeRoomName,\n    parseURIString\n} from '../util';\n\nimport {\n    CONNECTION_DISCONNECTED,\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    CONNECTION_WILL_CONNECT,\n    SET_LOCATION_URL\n} from './actionTypes';\nimport { JITSI_CONNECTION_URL_KEY } from './constants';\nimport logger from './logger';\n\n/**\n * The error structure passed to the {@link connectionFailed} action.\n *\n * Note there was an intention to make the error resemble an Error instance (to\n * the extent that jitsi-meet needs it).\n */\nexport type ConnectionFailedError = {\n\n    /**\n     * The invalid credentials that were used to authenticate and the\n     * authentication failed.\n     */\n    credentials?: {\n\n        /**\n         * The XMPP user's ID.\n         */\n        jid: string,\n\n        /**\n         * The XMPP user's password.\n         */\n        password: string\n    },\n\n    /**\n     * The details about the connection failed event.\n     */\n    details?: Object,\n\n    /**\n     * Error message.\n     */\n    message?: string,\n\n    /**\n     * One of {@link JitsiConnectionError} constants (defined in\n     * lib-jitsi-meet).\n     */\n    name: string,\n\n    /**\n     * Indicates whether this event is recoverable or not.\n     */\n    recoverable?: boolean\n};\n\n/**\n * Opens new connection.\n *\n * @param {string} [id] - The XMPP user's ID (e.g. {@code user@server.com}).\n * @param {string} [password] - The XMPP user's password.\n * @returns {Function}\n */\nexport function connect(id: ?string, password: ?string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const options = _constructOptions(state);\n        const { locationURL } = state['features/base/connection'];\n        const { jwt } = state['features/base/jwt'];\n        const connection = new JitsiMeetJS.JitsiConnection(options.appId, jwt, options);\n\n        connection[JITSI_CONNECTION_URL_KEY] = locationURL;\n\n        dispatch(_connectionWillConnect(connection));\n\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_DISCONNECTED,\n            _onConnectionDisconnected);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n            _onConnectionEstablished);\n        connection.addEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            _onConnectionFailed);\n\n        connection.connect({\n            id,\n            password\n        });\n\n        /**\n         * Dispatches {@code CONNECTION_DISCONNECTED} action when connection is\n         * disconnected.\n         *\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionDisconnected() {\n            unsubscribe();\n            dispatch(connectionDisconnected(connection));\n        }\n\n        /**\n         * Resolves external promise when connection is established.\n         *\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionEstablished() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_ESTABLISHED,\n                _onConnectionEstablished);\n            dispatch(connectionEstablished(connection, Date.now()));\n        }\n\n        /**\n         * Rejects external promise when connection fails.\n         *\n         * @param {JitsiConnectionErrors} err - Connection error.\n         * @param {string} [msg] - Error message supplied by lib-jitsi-meet.\n         * @param {Object} [credentials] - The invalid credentials that were\n         * used to authenticate and the authentication failed.\n         * @param {string} [credentials.jid] - The XMPP user's ID.\n         * @param {string} [credentials.password] - The XMPP user's password.\n         * @param {Object} details - Additional information about the error.\n         * @private\n         * @returns {void}\n         */\n        function _onConnectionFailed( // eslint-disable-line max-params\n                err: string,\n                msg: string,\n                credentials: Object,\n                details: Object) {\n            unsubscribe();\n            dispatch(\n                connectionFailed(\n                    connection, {\n                        credentials,\n                        details,\n                        name: err,\n                        message: msg\n                    }\n                ));\n        }\n\n        /**\n         * Unsubscribe the connection instance from\n         * {@code CONNECTION_DISCONNECTED} and {@code CONNECTION_FAILED} events.\n         *\n         * @returns {void}\n         */\n        function unsubscribe() {\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_DISCONNECTED,\n                _onConnectionDisconnected);\n            connection.removeEventListener(\n                JitsiConnectionEvents.CONNECTION_FAILED,\n                _onConnectionFailed);\n        }\n    };\n}\n\n/**\n * Create an action for when the signaling connection has been lost.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which\n * disconnected.\n * @private\n * @returns {{\n *     type: CONNECTION_DISCONNECTED,\n *     connection: JitsiConnection\n * }}\n */\nexport function connectionDisconnected(connection: Object) {\n    return {\n        type: CONNECTION_DISCONNECTED,\n        connection\n    };\n}\n\n/**\n * Create an action for when the signaling connection has been established.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which was\n * established.\n * @param {number} timeEstablished - The time at which the\n * {@code JitsiConnection} which was established.\n * @public\n * @returns {{\n *     type: CONNECTION_ESTABLISHED,\n *     connection: JitsiConnection,\n *     timeEstablished: number\n * }}\n */\nexport function connectionEstablished(\n        connection: Object, timeEstablished: number) {\n    return {\n        type: CONNECTION_ESTABLISHED,\n        connection,\n        timeEstablished\n    };\n}\n\n/**\n * Create an action for when the signaling connection could not be created.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which\n * failed.\n * @param {ConnectionFailedError} error - Error.\n * @public\n * @returns {{\n *     type: CONNECTION_FAILED,\n *     connection: JitsiConnection,\n *     error: ConnectionFailedError\n * }}\n */\nexport function connectionFailed(\n        connection: Object,\n        error: ConnectionFailedError) {\n    const { credentials } = error;\n\n    if (credentials && !Object.keys(credentials).length) {\n        error.credentials = undefined;\n    }\n\n    return {\n        type: CONNECTION_FAILED,\n        connection,\n        error\n    };\n}\n\n/**\n * Create an action for when a connection will connect.\n *\n * @param {JitsiConnection} connection - The {@code JitsiConnection} which will\n * connect.\n * @private\n * @returns {{\n *     type: CONNECTION_WILL_CONNECT,\n *     connection: JitsiConnection\n * }}\n */\nfunction _connectionWillConnect(connection) {\n    return {\n        type: CONNECTION_WILL_CONNECT,\n        connection\n    };\n}\n\n/**\n * Constructs options to be passed to the constructor of {@code JitsiConnection}\n * based on the redux state.\n *\n * @param {Object} state - The redux state.\n * @returns {Object} The options to be passed to the constructor of\n * {@code JitsiConnection}.\n */\nfunction _constructOptions(state) {\n    // Deep clone the options to make sure we don't modify the object in the\n    // redux store.\n    const options = _.cloneDeep(state['features/base/config']);\n\n    // Normalize the BOSH URL.\n    let { bosh } = options;\n\n    if (bosh) {\n        const { locationURL } = state['features/base/connection'];\n\n        if (bosh.startsWith('//')) {\n            // By default our config.js doesn't include the protocol.\n            bosh = `${locationURL.protocol}${bosh}`;\n        } else if (bosh.startsWith('/')) {\n            // Handle relative URLs, which won't work on mobile.\n            const {\n                protocol,\n                host,\n                contextRoot\n            } = parseURIString(locationURL.href);\n\n            // eslint-disable-next-line max-len\n            bosh = `${protocol}//${host}${contextRoot || '/'}${bosh.substr(1)}`;\n        }\n\n        // Append room to the URL's search.\n        const { room } = state['features/base/conference'];\n\n        room && (bosh += `?room=${getBackendSafeRoomName(room)}`);\n\n        // FIXME Remove deprecated 'bosh' option assignment at some point.\n        options.serviceUrl = options.bosh = bosh;\n    }\n\n    return options;\n}\n\n/**\n * Closes connection.\n *\n * @returns {Function}\n */\nexport function disconnect() {\n    return (dispatch: Dispatch<any>, getState: Function): Promise<void> => {\n        const state = getState();\n\n        // The conference we have already joined or are joining.\n        const conference_ = getCurrentConference(state);\n\n        // Promise which completes when the conference has been left and the\n        // connection has been disconnected.\n        let promise;\n\n        // Leave the conference.\n        if (conference_) {\n            // In a fashion similar to JitsiConference's CONFERENCE_LEFT event\n            // (and the respective Redux action) which is fired after the\n            // conference has been left, notify the application about the\n            // intention to leave the conference.\n            dispatch(conferenceWillLeave(conference_));\n\n            promise\n                = conference_.leave()\n                    .catch(error => {\n                        logger.warn(\n                            'JitsiConference.leave() rejected with:',\n                            error);\n\n                        // The library lib-jitsi-meet failed to make the\n                        // JitsiConference leave. Which may be because\n                        // JitsiConference thinks it has already left.\n                        // Regardless of the failure reason, continue in\n                        // jitsi-meet as if the leave has succeeded.\n                        dispatch(conferenceLeft(conference_));\n                    });\n        } else {\n            promise = Promise.resolve();\n        }\n\n        // Disconnect the connection.\n        const { connecting, connection } = state['features/base/connection'];\n\n        // The connection we have already connected or are connecting.\n        const connection_ = connection || connecting;\n\n        if (connection_) {\n            promise = promise.then(() => connection_.disconnect());\n        } else {\n            logger.info('No connection found while disconnecting.');\n        }\n\n        return promise;\n    };\n}\n\n/**\n * Sets the location URL of the application, connection, conference, etc.\n *\n * @param {URL} [locationURL] - The location URL of the application,\n * connection, conference, etc.\n * @returns {{\n *     type: SET_LOCATION_URL,\n *     locationURL: URL\n * }}\n */\nexport function setLocationURL(locationURL: ?URL) {\n    return {\n        type: SET_LOCATION_URL,\n        locationURL\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\ndeclare var APP: Object;\ndeclare var config: Object;\n\nimport { configureInitialDevices } from '../devices';\nimport { getBackendSafeRoomName } from '../util';\n\nexport {\n    connectionDisconnected,\n    connectionEstablished,\n    connectionFailed,\n    setLocationURL\n} from './actions.native';\nimport logger from './logger';\n\n/**\n * Opens new connection.\n *\n * @returns {Promise<JitsiConnection>}\n */\nexport function connect() {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const room = getBackendSafeRoomName(getState()['features/base/conference'].room);\n\n        // XXX For web based version we use conference initialization logic\n        // from the old app (at the moment of writing).\n        return dispatch(configureInitialDevices()).then(\n            () => APP.conference.init({\n                roomName: room\n            }).catch(error => {\n                APP.API.notifyConferenceLeft(APP.conference.roomName);\n                logger.error(error);\n            }));\n    };\n}\n\n/**\n * Closes connection.\n *\n * @param {boolean} [requestFeedback] - Whether or not to attempt showing a\n * request for call feedback.\n * @returns {Function}\n */\nexport function disconnect(requestFeedback: boolean = false) {\n    // XXX For web based version we use conference hanging up logic from the old\n    // app.\n    return () => APP.conference.hangup(requestFeedback);\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}","// @flow\n\nimport { MEDIA_TYPE, type MediaType } from '../base/media/constants';\n\n/**\n * Mapping between a media type and the witelist reducer key.\n */\nexport const MEDIA_TYPE_TO_WHITELIST_STORE_KEY: {[key: MediaType]: string} = {\n    [MEDIA_TYPE.AUDIO]: 'audioWhitelist',\n    [MEDIA_TYPE.VIDEO]: 'videoWhitelist'\n};\n\n/**\n * Mapping between a media type and the pending reducer key.\n */\nexport const MEDIA_TYPE_TO_PENDING_STORE_KEY: {[key: MediaType]: string} = {\n    [MEDIA_TYPE.AUDIO]: 'pendingAudio',\n    [MEDIA_TYPE.VIDEO]: 'pendingVideo'\n};\n","export var easeInOut = 'cubic-bezier(0.15,1,0.3,1)';\nexport var easeOut = 'cubic-bezier(0.2,0,0,1)';\nexport var easeIn = 'cubic-bezier(0.8,0,0,0.8)';","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _ScrollLock = require('./ScrollLock');\n\nObject.defineProperty(exports, 'default', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_ScrollLock).default;\n  }\n});\n\nvar _TouchScrollable = require('./TouchScrollable');\n\nObject.defineProperty(exports, 'TouchScrollable', {\n  enumerable: true,\n  get: function get() {\n    return _TouchScrollable.TouchScrollable;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n  this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n  if (typeof token !== 'string') {\n    throw new InvalidTokenError('Invalid token specified');\n  }\n\n  options = options || {};\n  var pos = options.header === true ? 0 : 1;\n  try {\n    return JSON.parse(base64_url_decode(token.split('.')[pos]));\n  } catch (e) {\n    throw new InvalidTokenError('Invalid token specified: ' + e.message);\n  }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\n","/**\n * A list of all UI errors.\n */\n\n/**\n * Indicates that a Feedback request is currently in progress.\n *\n * @type {{FEEDBACK_REQUEST_IN_PROGRESS: string}}\n */\nexport const FEEDBACK_REQUEST_IN_PROGRESS = 'FeedbackRequestInProgress';\n\n/**\n * Indicated an attempted audio only screen share session with no audio track present\n *\n * @type {{AUDIO_ONLY_SCREEN_SHARE_NO_TRACK: string}}\n */\nexport const AUDIO_ONLY_SCREEN_SHARE_NO_TRACK = 'AudioOnlyScreenShareNoTrack';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/calendar-sync');\n","// @flow\n\nimport React, { useEffect, useRef } from 'react';\n\nimport { isMobileBrowser } from '../../../base/environment/utils';\n\ntype Props = {\n\n    /**\n     * The component(s) that need to be scrollable on mobile.\n     */\n   children: React$Node,\n\n    /**\n     * Whether the component is rendered within a modal.\n     */\n    isModal: boolean\n};\n\n\n/**\n * Component that disables {@code touchmove} propagation below it.\n *\n * @returns {ReactElement}\n */\nfunction TouchmoveHack({ children, isModal }: Props) {\n    if (!isModal || !isMobileBrowser()) {\n        return children;\n    }\n\n    const touchMoveElementRef = useRef(null);\n\n    /**\n     * Atlaskit's {@code Modal} uses a third party library to disable touchmove events\n     * which makes scrolling inside dialogs impossible. We therefore employ this hack\n     * to intercept and stop the propagation of touchmove events from this wrapper that\n     * is placed around the chat conversation from the {@code ChatDialog}.\n     *\n     * @param {Event} event - The touchmove event fired within the component.\n     * @returns {void}\n     */\n    function handleTouchMove(event: TouchEvent) {\n        event.stopImmediatePropagation();\n    }\n\n    useEffect(() => {\n        if (touchMoveElementRef && touchMoveElementRef.current) {\n            touchMoveElementRef.current.addEventListener('touchmove', handleTouchMove, true);\n        }\n\n        return () => {\n            if (touchMoveElementRef && touchMoveElementRef.current) {\n                touchMoveElementRef.current.removeEventListener('touchmove', handleTouchMove, true);\n            }\n        };\n    }, []);\n\n    return (\n        <div\n            className = 'touchmove-hack'\n            ref = { touchMoveElementRef }>\n            {children}\n        </div>\n    );\n}\n\nexport default TouchmoveHack;\n","// @flow\n\nexport * from './components';\n","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\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\n  return _arr;\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","// @flow\n\nimport {\n    PARTICIPANTS_PANE_CLOSE,\n    PARTICIPANTS_PANE_OPEN\n} from './actionTypes';\n\n/**\n * Action to close the participants pane.\n *\n * @returns {Object}\n */\nexport const close = () => {\n    return {\n        type: PARTICIPANTS_PANE_CLOSE\n    };\n};\n\n/**\n * Action to open the participants pane.\n *\n * @returns {Object}\n */\nexport const open = () => {\n    return {\n        type: PARTICIPANTS_PANE_OPEN\n    };\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.pipe = exports.listenerOptions = undefined;\nexports.preventTouchMove = preventTouchMove;\nexports.allowTouchMove = allowTouchMove;\nexports.preventInertiaScroll = preventInertiaScroll;\nexports.isTouchDevice = isTouchDevice;\nexports.camelToKebab = camelToKebab;\nexports.parse = parse;\nexports.getPadding = getPadding;\nexports.getWindowHeight = getWindowHeight;\nexports.getDocumentHeight = getDocumentHeight;\nexports.makeStyleTag = makeStyleTag;\nexports.injectStyles = injectStyles;\nexports.insertStyleTag = insertStyleTag;\n\nvar _exenv = require('exenv');\n\nvar listenerOptions = exports.listenerOptions = {\n  capture: false,\n  passive: false\n};\n\n// ==============================\n// Touch Helpers\n// ==============================\n\nfunction preventTouchMove(e) {\n  e.preventDefault();\n\n  return false;\n}\n\nfunction allowTouchMove(e) {\n  var target = e.currentTarget;\n\n  if (target.scrollHeight > target.clientHeight) {\n    e.stopPropagation();\n    return true;\n  }\n\n  e.preventDefault();\n  return false;\n}\n\nfunction preventInertiaScroll() {\n  var top = this.scrollTop;\n  var totalScroll = this.scrollHeight;\n  var currentScroll = top + this.offsetHeight;\n\n  if (top === 0) {\n    this.scrollTop = 1;\n  } else if (currentScroll === totalScroll) {\n    this.scrollTop = top - 1;\n  }\n}\n\n// `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\nfunction isTouchDevice() {\n  if (!_exenv.canUseDOM) return false;\n  return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\n// ==============================\n// Misc.\n// ==============================\n\nfunction camelToKebab(str) {\n  return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction parse(val) {\n  return isNaN(val) ? val : val + 'px';\n}\n\n// Take a list of functions and return a function that applies the list of\n// functions from left to right\n\nvar pipeFns = function pipeFns(a, b) {\n  return function () {\n    return b(a.apply(undefined, arguments));\n  };\n};\nvar pipe = exports.pipe = function pipe() {\n  for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return fns.reduce(pipeFns);\n};\n\n// ==============================\n// Document Helpers\n// ==============================\n\nfunction getPadding() {\n  if (!_exenv.canUseDOM) return 0;\n\n  var paddingRight = parseInt(window.getComputedStyle(document.body).paddingRight, 10);\n  var scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n  return paddingRight + scrollbarWidth;\n}\n\nfunction getWindowHeight() {\n  var multiplier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n  if (_exenv.canUseDOM) {\n    return window.innerHeight * multiplier;\n  }\n}\n\nfunction getDocumentHeight() {\n  if (_exenv.canUseDOM) {\n    return document.body.clientHeight;\n  }\n}\n\n// ==============================\n// Style Sheets\n// ==============================\n\nfunction makeStyleTag() {\n  if (!_exenv.canUseDOM) return;\n\n  var tag = document.createElement('style');\n  tag.type = 'text/css';\n  tag.setAttribute('data-react-scrolllock', '');\n\n  return tag;\n}\nfunction injectStyles(tag, css) {\n  if (!_exenv.canUseDOM) return;\n\n  if (tag.styleSheet) {\n    tag.styleSheet.cssText = css;\n  } else {\n    tag.appendChild(document.createTextNode(css));\n  }\n}\nfunction insertStyleTag(tag) {\n  if (!_exenv.canUseDOM) return;\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n\n  head.appendChild(tag);\n}","import md5 from 'js-md5';\n\n/**\n * Returns the Gravatar URL of a given email id.\n *\n * @param {string} key - Email or id for which we need gravatar URL.\n * @param {string} baseURL - Base Gravatar URL.\n * @returns {string} - Gravatar URL.\n */\nexport function getGravatarURL(key, baseURL = 'https://seccdn.libravatar.org/avatar/') {\n    const urlSuffix = '?d=404&size=200';\n\n    // If the key is a valid email, we hash it. If it's not, we assume it's already a hashed format\n    const avatarKey = isValidEmail(key) ? md5.hex(key.trim().toLowerCase()) : key;\n\n    return `${baseURL}${avatarKey}${urlSuffix}`;\n}\n\n/**\n * Returns if the email id is valid.\n *\n * @param {string} email - Email id to be checked.\n * @returns {boolean}\n */\nfunction isValidEmail(email) {\n    return email && email.indexOf('@') > 0;\n}\n","/* @flow */\n\nimport { applyMiddleware } from 'redux';\nimport type { Middleware } from 'redux';\n\n/**\n * A registry for Redux middleware, allowing features to register their\n * middleware without needing to create additional inter-feature dependencies.\n */\nclass MiddlewareRegistry {\n    _elements: Array<Middleware<*, *>>;\n\n    /**\n     * Creates a MiddlewareRegistry instance.\n     */\n    constructor() {\n        /**\n         * The set of registered middleware.\n         *\n         * @private\n         * @type {Middleware[]}\n         */\n        this._elements = [];\n    }\n\n    /**\n     * Applies all registered middleware into a store enhancer.\n     * (@link http://redux.js.org/docs/api/applyMiddleware.html).\n     *\n     * @param {Middleware[]} additional - Any additional middleware that need to\n     * be included (such as middleware from third-party modules).\n     * @returns {Middleware}\n     */\n    applyMiddleware(...additional: Array<Middleware<*, *>>) {\n        // $FlowExpectedError\n        return applyMiddleware(...this._elements, ...additional);\n    }\n\n    /**\n     * Adds a middleware to the registry.\n     *\n     * The method is to be invoked only before {@link #applyMiddleware()}.\n     *\n     * @param {Middleware} middleware - A Redux middleware.\n     * @returns {void}\n     */\n    register(middleware: Middleware<*, *>) {\n        this._elements.push(middleware);\n    }\n}\n\n/**\n * The public singleton instance of the MiddlewareRegistry class.\n */\nexport default new MiddlewareRegistry();\n","// @flow\n\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport md5 from 'js-md5';\n\nimport logger from './logger';\n\ndeclare var __DEV__;\n\n/**\n * The name of the {@code localStorage} store where the app persists its values.\n */\nconst PERSISTED_STATE_NAME = 'jitsi-state';\n\n/**\n * Mixed type of the element (subtree) config. If it's a {@code boolean} (and is\n * {@code true}), we persist the entire subtree. If it's an {@code Object}, we\n * perist a filtered subtree based on the properties of the config object.\n */\ndeclare type ElementConfig = boolean | Object;\n\n/**\n * The type of the name-config pairs stored in {@code PersistenceRegistry}.\n */\ndeclare type PersistencyConfigMap = { [name: string]: ElementConfig };\n\n/**\n * A registry to allow features to register their redux store subtree to be\n * persisted and also handles the persistency calls too.\n */\nclass PersistenceRegistry {\n    _checksum: string;\n    _defaultStates: { [name: string ]: ?Object} = {};\n    _elements: PersistencyConfigMap = {};\n\n    /**\n     * Returns the persisted redux state. Takes the {@link #_elements} into\n     * account as we may have persisted something in the past that we don't want\n     * to retrieve anymore. The next {@link #persistState} will remove such\n     * values.\n     *\n     * @returns {Object}\n     */\n    getPersistedState() {\n        let filteredPersistedState = {};\n\n        // localStorage key per feature\n        for (const subtreeName of Object.keys(this._elements)) {\n            // Assumes that the persisted value is stored under the same key as\n            // the feature's redux state name.\n            // TODO We'll need to introduce functions later that can control the\n            // persist key's name. Similar to control serialization and\n            // deserialization. But that should be a straightforward change.\n            const persistedSubtree\n                = this._getPersistedSubtree(\n                    subtreeName,\n                    this._elements[subtreeName],\n                    this._defaultStates[subtreeName]);\n\n            if (persistedSubtree !== undefined) {\n                filteredPersistedState[subtreeName] = persistedSubtree;\n            }\n        }\n\n        // legacy\n        if (Object.keys(filteredPersistedState).length === 0) {\n            let persistedState = jitsiLocalStorage.getItem(PERSISTED_STATE_NAME);\n\n            if (persistedState) {\n                try {\n                    persistedState = Bourne.parse(persistedState);\n                } catch (error) {\n                    logger.error(\n                        'Error parsing persisted state',\n                        persistedState,\n                        error);\n                    persistedState = {};\n                }\n\n                filteredPersistedState = this._getFilteredState(persistedState);\n\n                // Store into the new format and delete the old format so that\n                // it's not used again.\n                this.persistState(filteredPersistedState);\n                jitsiLocalStorage.removeItem(PERSISTED_STATE_NAME);\n            }\n        }\n\n        // Initialize the checksum.\n        this._checksum = this._calculateChecksum(filteredPersistedState);\n\n        if (typeof __DEV__ !== 'undefined' && __DEV__) {\n            logger.info('redux state rehydrated as', filteredPersistedState);\n        }\n\n        return filteredPersistedState;\n    }\n\n    /**\n     * Initiates a persist operation, but its execution will depend on the\n     * current checksums (checks changes).\n     *\n     * @param {Object} state - The redux state.\n     * @returns {void}\n     */\n    persistState(state: Object) {\n        const filteredState = this._getFilteredState(state);\n        const checksum = this._calculateChecksum(filteredState);\n\n        if (checksum !== this._checksum) {\n            for (const subtreeName of Object.keys(filteredState)) {\n                try {\n                    jitsiLocalStorage.setItem(subtreeName, JSON.stringify(filteredState[subtreeName]));\n                } catch (error) {\n                    logger.error('Error persisting redux subtree', subtreeName, error);\n                }\n            }\n            logger.info(`redux state persisted. ${this._checksum} -> ${checksum}`);\n            this._checksum = checksum;\n        }\n    }\n\n    /**\n     * Registers a new subtree config to be used for the persistency.\n     *\n     * @param {string} name - The name of the subtree the config belongs to.\n     * @param {ElementConfig} config - The config {@code Object}, or\n     * {@code boolean} if the entire subtree needs to be persisted.\n     * @param {Object} defaultState - The default state of the component. If\n     * it's provided, the rehydrated state will be merged with it before it gets\n     * pushed into Redux.\n     * @returns {void}\n     */\n    register(\n            name: string,\n            config?: ElementConfig = true,\n            defaultState?: Object) {\n        this._elements[name] = config;\n        this._defaultStates[name] = defaultState;\n    }\n\n    /**\n     * Calculates the checksum of a specific state.\n     *\n     * @param {Object} state - The redux state to calculate the checksum of.\n     * @private\n     * @returns {string} The checksum of the specified {@code state}.\n     */\n    _calculateChecksum(state: Object) {\n        try {\n            return md5.hex(JSON.stringify(state) || '');\n        } catch (error) {\n            logger.error('Error calculating checksum for state', error);\n\n            return '';\n        }\n    }\n\n    /**\n     * Prepares a filtered state from the actual or the persisted redux state,\n     * based on this registry.\n     *\n     * @param {Object} state - The actual or persisted redux state.\n     * @private\n     * @returns {Object}\n     */\n    _getFilteredState(state: Object) {\n        const filteredState = {};\n\n        for (const name of Object.keys(this._elements)) {\n            if (state[name]) {\n                filteredState[name]\n                    = this._getFilteredSubtree(\n                        state[name],\n                        this._elements[name]);\n            }\n        }\n\n        return filteredState;\n    }\n\n    /**\n     * Prepares a filtered subtree based on the config for persisting or for\n     * retrieval.\n     *\n     * @param {Object} subtree - The redux state subtree.\n     * @param {ElementConfig} subtreeConfig - The related config.\n     * @private\n     * @returns {Object}\n     */\n    _getFilteredSubtree(subtree, subtreeConfig) {\n        let filteredSubtree;\n\n        if (typeof subtreeConfig === 'object') {\n            // Only a filtered subtree gets persisted as specified by\n            // subtreeConfig.\n            filteredSubtree = {};\n            for (const persistedKey of Object.keys(subtree)) {\n                if (subtreeConfig[persistedKey]) {\n                    filteredSubtree[persistedKey] = subtree[persistedKey];\n                }\n            }\n        } else if (subtreeConfig) {\n            // Persist the entire subtree.\n            filteredSubtree = subtree;\n        }\n\n        return filteredSubtree;\n    }\n\n    /**\n     * Retrieves a persisted subtree from the storage.\n     *\n     * @param {string} subtreeName - The name of the subtree.\n     * @param {Object} subtreeConfig - The config of the subtree from\n     * {@link #_elements}.\n     * @param {Object} subtreeDefaults - The defaults of the persisted subtree.\n     * @private\n     * @returns {Object}\n     */\n    _getPersistedSubtree(subtreeName, subtreeConfig, subtreeDefaults) {\n        let persistedSubtree = jitsiLocalStorage.getItem(subtreeName);\n\n        if (persistedSubtree) {\n            try {\n                persistedSubtree = Bourne.parse(persistedSubtree);\n\n                const filteredSubtree\n                    = this._getFilteredSubtree(persistedSubtree, subtreeConfig);\n\n                if (filteredSubtree !== undefined) {\n                    return this._mergeDefaults(\n                        filteredSubtree, subtreeDefaults);\n                }\n            } catch (error) {\n                logger.error(\n                    'Error parsing persisted subtree',\n                    subtreeName,\n                    persistedSubtree,\n                    error);\n            }\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Merges the persisted subtree with its defaults before rehydrating the\n     * values.\n     *\n     * @private\n     * @param {Object} subtree - The Redux subtree.\n     * @param {?Object} defaults - The defaults, if any.\n     * @returns {Object}\n     */\n    _mergeDefaults(subtree: Object, defaults: ?Object) {\n        if (!defaults) {\n            return subtree;\n        }\n\n        // If the subtree is an array, we don't need to merge it with the\n        // defaults, because if it has a value, it will overwrite it, and if\n        // it's undefined, it won't be even returned, and Redux will natively\n        // use the default values instead.\n        if (!Array.isArray(subtree)) {\n            return {\n                ...defaults,\n                ...subtree\n            };\n        }\n    }\n}\n\nexport default new PersistenceRegistry();\n","// @flow\n\n/**\n * The default server URL to open if no other was specified.\n */\nexport const DEFAULT_SERVER_URL = 'https://meet.jit.si';\n","// @flow\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport type { Dispatch } from 'redux';\n\nimport { addKnownDomains } from '../known-domains';\nimport { parseURIString } from '../util';\n\nimport {\n    CONFIG_WILL_LOAD,\n    LOAD_CONFIG_ERROR,\n    SET_CONFIG,\n    UPDATE_CONFIG,\n    OVERWRITE_CONFIG\n} from './actionTypes';\nimport { _CONFIG_STORE_PREFIX } from './constants';\nimport { setConfigFromURLParams } from './functions';\n\n\n/**\n * Updates the config with new options.\n *\n * @param {Object} config - The new options (to add).\n * @returns {Function}\n */\nexport function updateConfig(config: Object) {\n    return {\n        type: UPDATE_CONFIG,\n        config\n    };\n}\n\n/**\n * Signals that the configuration (commonly known in Jitsi Meet as config.js)\n * for a specific locationURL will be loaded now.\n *\n * @param {URL} locationURL - The URL of the location which necessitated the\n * loading of a configuration.\n * @param {string} room - The name of the room (conference) for which we're loading the config for.\n * @returns {{\n *     type: CONFIG_WILL_LOAD,\n *     locationURL: URL,\n *     room: string\n * }}\n */\nexport function configWillLoad(locationURL: URL, room: string) {\n    return {\n        type: CONFIG_WILL_LOAD,\n        locationURL,\n        room\n    };\n}\n\n/**\n * Signals that a configuration (commonly known in Jitsi Meet as config.js)\n * could not be loaded due to a specific error.\n *\n * @param {Error} error - The {@code Error} which prevented the successful\n * loading of a configuration.\n * @param {URL} locationURL - The URL of the location which necessitated the\n * loading of a configuration.\n * @returns {{\n *     type: LOAD_CONFIG_ERROR,\n *     error: Error,\n *     locationURL: URL\n * }}\n */\nexport function loadConfigError(error: Error, locationURL: URL) {\n    return {\n        type: LOAD_CONFIG_ERROR,\n        error,\n        locationURL\n    };\n}\n\n/**\n * Overwrites some config values.\n *\n * @param {Object} config - The new options (to overwrite).\n * @returns {{\n *     type: OVERWRITE_CONFIG,\n *     config: Object\n * }}\n */\nexport function overwriteConfig(config: Object) {\n    return {\n        type: OVERWRITE_CONFIG,\n        config\n    };\n}\n\n/**\n * Sets the configuration represented by the feature base/config. The\n * configuration is defined and consumed by the library lib-jitsi-meet but some\n * of its properties are consumed by the application jitsi-meet as well.\n *\n * @param {Object} config - The configuration to be represented by the feature\n * base/config.\n * @returns {Function}\n */\nexport function setConfig(config: Object = {}) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const { locationURL } = getState()['features/base/connection'];\n\n        // Now that the loading of the config was successful override the values\n        // with the parameters passed in the hash part of the location URI.\n        // TODO We're still in the middle ground between old Web with config,\n        // interfaceConfig, and loggingConfig used via global variables and new\n        // Web and mobile reading the respective values from the redux store.\n        // On React Native there's no interfaceConfig at all yet and\n        // loggingConfig is not loaded but there's a default value in the redux\n        // store.\n        // Only the config will be overridden on React Native, as the other\n        // globals will be undefined here. It's intentional - we do not care to\n        // override those configs yet.\n        locationURL\n            && setConfigFromURLParams(\n\n                // On Web the config also comes from the window.config global,\n                // but it is resolved in the loadConfig procedure.\n                config,\n                window.interfaceConfig,\n                window.loggingConfig,\n                locationURL);\n\n        dispatch({\n            type: SET_CONFIG,\n            config\n        });\n    };\n}\n\n/**\n * Stores a specific Jitsi Meet config.js object into {@code localStorage}.\n *\n * @param {string} baseURL - The base URL from which the config.js was\n * downloaded.\n * @param {Object} config - The Jitsi Meet config.js to store.\n * @returns {Function}\n */\nexport function storeConfig(baseURL: string, config: Object) {\n    return (dispatch: Dispatch<any>) => {\n        // Try to store the configuration in localStorage. If the deployment\n        // specified 'getroom' as a function, for example, it does not make\n        // sense to and it will not be stored.\n        let b = false;\n\n        try {\n            if (typeof window.config === 'undefined' || window.config !== config) {\n                jitsiLocalStorage.setItem(`${_CONFIG_STORE_PREFIX}/${baseURL}`, JSON.stringify(config));\n                b = true;\n            }\n        } catch (e) {\n            // Ignore the error because the caching is optional.\n        }\n\n        // If base/config knows a domain, then the app knows it.\n        if (b) {\n            try {\n                dispatch(addKnownDomains(parseURIString(baseURL).host));\n            } catch (e) {\n                // Ignore the error because the fiddling with \"known domains\" is\n                // a side effect here.\n            }\n        }\n\n        return b;\n    };\n}\n","// @flow\n\nimport { getBackendSafeRoomName } from '../util';\n\n/**\n * Builds and returns the room name.\n *\n * @returns {string}\n */\nexport default function getRoomName(): ?string {\n    const path = window.location.pathname;\n\n    // The last non-directory component of the path (name) is the room.\n    const roomName = path.substring(path.lastIndexOf('/') + 1) || undefined;\n\n    return getBackendSafeRoomName(roomName);\n}\n","// @flow\n\nimport { getAppProp } from '../app';\nimport { toState } from '../redux';\n\n/**\n * Gets the value of a specific feature flag.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState}\n * function.\n * @param {string} flag - The name of the React {@code Component} prop of\n * the currently mounted {@code App} to get.\n * @param {*} defaultValue - A default value for the flag, in case it's not defined.\n * @returns {*} The value of the specified React {@code Component} prop of the\n * currently mounted {@code App}.\n */\nexport function getFeatureFlag(stateful: Function | Object, flag: string, defaultValue: any) {\n    const state = toState(stateful)['features/base/flags'];\n\n    if (state) {\n        const value = state[flag];\n\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n\n    // Maybe the value hasn't made it to the redux store yet, check the app props.\n    const flags = getAppProp(stateful, 'flags') || {};\n\n    return flags[flag] || defaultValue;\n}\n","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext, useContext, useCallback } from 'react';\n\n/*\ncreateTheme is used to create a set of Providers and Consumers for theming components.\n- Takes a default theme function; this theme function gets a set of props, and returns tokens\n   based on those props. An example of this default theme function is one that produces the standard\n   appearance of the component\n- Returns two things - a Provider that allow for additional themes to be applied, and a Consumer\n   that can get the current theme and fetch it.\n*/\nexport function createTheme(defaultGetTokens) {\n  var emptyThemeFn = function emptyThemeFn(getTokens, props) {\n    return getTokens(props);\n  };\n  /* Internally, Theme uses React Context, with internal providers and consumers.\n     The React Context passes only a function that gets props, and turns them into tokens. This\n        function gets mixed as more Providers with their own themes are added. This mixed function\n        is ultimately picked up by Consumers, which implement a context consumer internally to fetch\n        the theme. */\n\n\n  var ThemeContext = /*#__PURE__*/createContext(defaultGetTokens); // The Theme Consumer takes a function as its child - this function takes tokens, and the\n  // return value is generally a set of nodes with the tokens applied appropriately.\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]);\n\n    var theme = useContext(ThemeContext);\n    var themeFn = theme || emptyThemeFn; // @ts-ignore See issue for more info: https://github.com/Microsoft/TypeScript/issues/10727\n    // Argument of type 'Pick<ThemeProps & { children: (tokens: ThemeTokens) => ReactNode; }, Exclude<keyof ThemeProps, \"children\">>' is not assignable to parameter of type 'ThemeProps'.ts(2345)\n\n    var tokens = themeFn(themeProps); // We add a fragment to ensure we don't break people upgrading.\n    // Previously they may have been able to pass in undefined without things blowing up.\n\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children(tokens));\n  }\n  /* The Theme Provider takes regular nodes as its child, but also takes a *theme function*\n     - The theme function takes a set of props, as well as a function (getTokens) that can\n        turn props into tokens.\n     - The getTokens function isn't called immediately - instead the props are passed\n        through a mix of parent theming functions\n     Children of this provider will receive this mixed theme\n  */\n\n\n  function Provider(props) {\n    var themeFn = useContext(ThemeContext);\n    var valueFn = props.value || emptyThemeFn;\n    var mixedFn = useCallback(function (themeProps) {\n      return valueFn(themeFn, themeProps);\n    }, [themeFn, valueFn]);\n    return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n      value: mixedFn\n    }, props.children);\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider\n  };\n}","import * as colors from './colors';\nimport themed from './utils/themed'; // Cards on a board\n\nexport var e100 = themed({\n  light: \"box-shadow: 0 1px 1px \".concat(colors.N50A, \", 0 0 1px 1px \").concat(colors.N40A, \";\"),\n  dark: \"box-shadow: 0 1px 1px \".concat(colors.DN50A, \", 0 0 1px 1px \").concat(colors.DN40A, \";\")\n}); // Inline dialogs\n\nexport var e200 = themed({\n  light: \"box-shadow: 0 4px 8px -2px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 4px 8px -2px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Modals\n\nexport var e300 = themed({\n  light: \"box-shadow: 0 8px 16px -4px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 8px 16px -4px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Panels\n\nexport var e400 = themed({\n  light: \"box-shadow: 0 12px 24px -6px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 12px 24px -6px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n}); // Flag messages (notifications)\n\nexport var e500 = themed({\n  light: \"box-shadow: 0 20px 32px -8px \".concat(colors.N50A, \", 0 0 1px \").concat(colors.N60A, \";\"),\n  dark: \"box-shadow: 0 20px 32px -8px \".concat(colors.DN50A, \", 0 0 1px \").concat(colors.DN60A, \";\")\n});","/* @flow */\n\nimport { ColorSchemeRegistry } from '../color-scheme';\nimport { toState } from '../redux';\n\n/**\n * Checks if any {@code Dialog} is currently open.\n *\n * @param {Function|Object} stateful - The redux store, the redux\n * {@code getState} function, or the redux state itself.\n * @returns {boolean}\n */\nexport function isAnyDialogOpen(stateful: Function) {\n    return Boolean(toState(stateful)['features/base/dialog'].component);\n}\n\n/**\n * Checks if a {@code Dialog} with a specific {@code component} is currently\n * open.\n *\n * @param {Function|Object} stateful - The redux store, the redux\n * {@code getState} function, or the redux state itself.\n * @param {React.Component} component - The {@code component} of a\n * {@code Dialog} to be checked.\n * @returns {boolean}\n */\nexport function isDialogOpen(stateful: Function | Object, component: Object) {\n    return toState(stateful)['features/base/dialog'].component === component;\n}\n\n/**\n * Maps part of the Redux state to the props of any Dialog based component.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _dialogStyles: StyleType\n * }}\n */\nexport function _abstractMapStateToProps(state: Object): Object {\n    return {\n        _dialogStyles: ColorSchemeRegistry.get(state, 'Dialog')\n    };\n}\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractDialogTab}.\n */\nexport type Props = {\n\n    /**\n     * Function that closes the dialog.\n     */\n    closeDialog: Function,\n\n    /**\n     * Callback to invoke on change.\n     */\n    onTabStateChange: Function,\n\n    /**\n     * The id of the tab.\n     */\n    tabId: number\n};\n\n\n/**\n * Abstract React {@code Component} for tabs of the DialogWithTabs component.\n *\n * @extends Component\n */\nclass AbstractDialogTab<P: Props, S: *> extends Component<P, S> {\n    /**\n     * Initializes a new {@code AbstractDialogTab} instance.\n     *\n     * @param {P} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onChange = this._onChange.bind(this);\n    }\n\n    _onChange: (Object) => void;\n\n    /**\n     * Uses the onTabStateChange function to pass the changed state of the\n     * controlled tab component to the controlling DialogWithTabs component.\n     *\n     * @param {Object} change - Object that contains the changed property and\n     * value.\n     * @returns {void}\n     */\n    _onChange(change) {\n        const { onTabStateChange, tabId } = this.props;\n\n        onTabStateChange(tabId, {\n            ...this.props,\n            ...change\n        });\n    }\n\n}\n\nexport default AbstractDialogTab;\n","// @flow\n\n/**\n * The name of the {@code JitsiConnection} property which identifies the {@code JitsiConference} currently associated\n * with it.\n *\n * FIXME: This is a hack. It was introduced to solve the following case: if a user presses hangup quickly, they may\n * \"leave the conference\" before the actual conference was ever created. While we might have a connection in place,\n * there is no conference which can be left, thus no CONFERENCE_LEFT action will ever be fired.\n *\n * This is problematic because the external API module used to send events to the native SDK won't know what to send.\n * So, in order to detect this situation we are attaching the conference object to the connection which runs it.\n */\nexport const JITSI_CONNECTION_CONFERENCE_KEY = Symbol('conference');\n\n/**\n * The name of the {@code JitsiConnection} property which identifies the location URL where the connection will be made.\n */\nexport const JITSI_CONNECTION_URL_KEY = Symbol('url');\n","// @flow\n\nimport {\n    MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n    SET_FATAL_ERROR,\n    TOGGLE_SLOW_GUM_OVERLAY\n} from './actionTypes';\n\n/**\n * Signals that the prompt for media permission is visible or not.\n *\n * @param {boolean} isVisible - If the value is true - the prompt for media\n * permission is visible otherwise the value is false/undefined.\n * @param {string} browser - The name of the current browser.\n * @public\n * @returns {{\n *     type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n *     browser: {string},\n *     isVisible: {boolean}\n * }}\n */\nexport function mediaPermissionPromptVisibilityChanged(isVisible: boolean, browser: string) {\n    return {\n        type: MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n        browser,\n        isVisible\n    };\n}\n\n/**\n * Signals that the prompt for media permission is visible or not.\n *\n * @param {boolean} isVisible - If the value is true - the prompt for media\n * permission is visible otherwise the value is false/undefined.\n * @public\n * @returns {{\n*     type: SLOW_GET_USER_MEDIA_OVERLAY,\n*     isVisible: {boolean}\n* }}\n*/\nexport function toggleSlowGUMOverlay(isVisible: boolean) {\n    return {\n        type: TOGGLE_SLOW_GUM_OVERLAY,\n        isVisible\n    };\n}\n\n/**\n * The action indicates that an unrecoverable error has occurred and the reload\n * screen will be displayed or hidden.\n *\n * @param {Object} fatalError - A critical error which was not claimed by any\n * feature for error recovery (the recoverable flag was not set). If\n * {@code undefined} then any fatal error currently stored will be discarded.\n * @returns {{\n *     type: SET_FATAL_ERROR,\n *     fatalError: ?Error\n * }}\n */\nexport function setFatalError(fatalError: Object) {\n    return {\n        type: SET_FATAL_ERROR,\n        fatalError\n    };\n}\n","// @flow\n\nimport { SET_JWT } from './actionTypes';\n\n/**\n * Stores a specific JSON Web Token (JWT) into the redux store.\n *\n * @param {string} [jwt] - The JSON Web Token (JWT) to store.\n * @returns {{\n *     type: SET_TOKEN_DATA,\n *     jwt: (string|undefined)\n * }}\n */\nexport function setJWT(jwt: ?string) {\n    return {\n        type: SET_JWT,\n        jwt\n    };\n}\n","/**\n * The list of supported meeting features to enable/disable through jwt.\n */\nexport const MEET_FEATURES = [\n    'branding',\n    'calendar',\n    'callstats',\n    'livestreaming',\n    'lobby',\n    'moderation',\n    'outbound-call',\n    'recording',\n    'room',\n    'screen-sharing',\n    'sip-outbound-call',\n    'transcription'\n];\n","// @flow\n\n/**\n * Appends a suffix to the display name.\n *\n * @param {string} displayName - The display name.\n * @param {string} suffix - Suffix that will be appended.\n * @returns {string} The formatted display name.\n */\nexport function appendSuffix(displayName: string, suffix: string = '') {\n    return `${displayName || suffix}${\n        displayName && suffix && displayName !== suffix ? ` (${suffix})` : ''}`;\n}\n","// @flow\n\nimport { toState } from '../base/redux';\n\n/**\n * Returns true if follow me is active and false otherwise.\n *\n * @param {Object|Function} stateful - Object or function that can be resolved\n * to the Redux state.\n * @returns {boolean} - True if follow me is active and false otherwise.\n */\nexport function isFollowMeActive(stateful: Object | Function) {\n    const state = toState(stateful);\n\n    return Boolean(state['features/follow-me'].moderator);\n}\n","// @flow\nimport { getLogger } from 'jitsi-meet-logger';\nimport type { Dispatch } from 'redux';\n\nimport UIEvents from '../../../service/UI/UIEvents';\nimport {\n    AUDIO_MUTE,\n    createRemoteMuteConfirmedEvent,\n    createToolbarEvent,\n    sendAnalytics,\n    VIDEO_MUTE\n} from '../analytics';\nimport { showModeratedNotification } from '../av-moderation/actions';\nimport { shouldShowModeratedNotification } from '../av-moderation/functions';\nimport {\n    MEDIA_TYPE,\n    setAudioMuted,\n    setVideoMuted,\n    VIDEO_MUTISM_AUTHORITY\n} from '../base/media';\nimport {\n    getLocalParticipant,\n    getRemoteParticipants,\n    muteRemoteParticipant\n} from '../base/participants';\n\ndeclare var APP: Object;\n\nconst logger = getLogger(__filename);\n\n/**\n * Mutes the local participant.\n *\n * @param {boolean} enable - Whether to mute or unmute.\n * @param {MEDIA_TYPE} mediaType - The type of the media channel to mute.\n * @returns {Function}\n */\nexport function muteLocal(enable: boolean, mediaType: MEDIA_TYPE) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const isAudio = mediaType === MEDIA_TYPE.AUDIO;\n\n        if (!isAudio && mediaType !== MEDIA_TYPE.VIDEO) {\n            logger.error(`Unsupported media type: ${mediaType}`);\n\n            return;\n        }\n\n        // check for A/V Moderation when trying to unmute\n        if (!enable && shouldShowModeratedNotification(MEDIA_TYPE.AUDIO, getState())) {\n            dispatch(showModeratedNotification(MEDIA_TYPE.AUDIO));\n\n            return;\n        }\n\n        sendAnalytics(createToolbarEvent(isAudio ? AUDIO_MUTE : VIDEO_MUTE, { enable }));\n        dispatch(isAudio ? setAudioMuted(enable, /* ensureTrack */ true)\n            : setVideoMuted(enable, mediaType, VIDEO_MUTISM_AUTHORITY.USER, /* ensureTrack */ true));\n\n        // FIXME: The old conference logic still relies on this event being emitted.\n        typeof APP === 'undefined'\n            || APP.UI.emitEvent(isAudio ? UIEvents.AUDIO_MUTED : UIEvents.VIDEO_MUTED, enable);\n    };\n}\n\n/**\n * Mutes the remote participant with the given ID.\n *\n * @param {string} participantId - ID of the participant to mute.\n * @param {MEDIA_TYPE} mediaType - The type of the media channel to mute.\n * @returns {Function}\n */\nexport function muteRemote(participantId: string, mediaType: MEDIA_TYPE) {\n    return (dispatch: Dispatch<any>) => {\n        if (mediaType !== MEDIA_TYPE.AUDIO && mediaType !== MEDIA_TYPE.VIDEO) {\n            logger.error(`Unsupported media type: ${mediaType}`);\n\n            return;\n        }\n        sendAnalytics(createRemoteMuteConfirmedEvent(participantId, mediaType));\n        dispatch(muteRemoteParticipant(participantId, mediaType));\n    };\n}\n\n/**\n * Mutes all participants.\n *\n * @param {Array<string>} exclude - Array of participant IDs to not mute.\n * @param {MEDIA_TYPE} mediaType - The media type to mute.\n * @returns {Function}\n */\nexport function muteAllParticipants(exclude: Array<string>, mediaType: MEDIA_TYPE) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const localId = getLocalParticipant(state).id;\n\n        if (!exclude.includes(localId)) {\n            dispatch(muteLocal(true, mediaType));\n        }\n\n        getRemoteParticipants(state).forEach((p, id) => {\n            if (exclude.includes(id)) {\n                return;\n            }\n\n            dispatch(muteRemote(id, mediaType));\n        });\n    };\n}\n\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { MEDIA_TYPE } from '../base/media';\nimport {\n    getDominantSpeakerParticipant,\n    getLocalParticipant,\n    getPinnedParticipant,\n    getRemoteParticipants\n} from '../base/participants';\n\nimport {\n    SELECT_LARGE_VIDEO_PARTICIPANT,\n    UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION\n} from './actionTypes';\n\n/**\n * Action to select the participant to be displayed in LargeVideo based on the\n * participant id provided. If a participant id is not provided, the LargeVideo\n * participant will be selected based on a variety of factors: If there is a\n * dominant or pinned speaker, or if there are remote tracks, etc.\n *\n * @param {string} participant - The participant id of the user that needs to be\n * displayed on the large video.\n * @returns {Function}\n */\nexport function selectParticipantInLargeVideo(participant: ?string) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const participantId = participant ?? _electParticipantInLargeVideo(state);\n        const largeVideo = state['features/large-video'];\n        const remoteScreenShares = state['features/video-layout'].remoteScreenShares;\n        let latestScreenshareParticipantId;\n\n        if (remoteScreenShares && remoteScreenShares.length) {\n            latestScreenshareParticipantId = remoteScreenShares[remoteScreenShares.length - 1];\n        }\n\n        // When trying to auto pin screenshare, always select the endpoint even though it happens to be\n        // the large video participant in redux (for the reasons listed above in the large video selection\n        // logic above). The auto pin screenshare logic kicks in after the track is added\n        // (which updates the large video participant and selects all endpoints because of the auto tile\n        // view mode). If the screenshare endpoint is not among the forwarded endpoints from the bridge,\n        // it needs to be selected again at this point.\n        if (participantId !== largeVideo.participantId || participantId === latestScreenshareParticipantId) {\n            dispatch({\n                type: SELECT_LARGE_VIDEO_PARTICIPANT,\n                participantId\n            });\n        }\n    };\n}\n\n/**\n * Updates the currently seen resolution of the video displayed on large video.\n *\n * @param {number} resolution - The current resolution (height) of the video.\n * @returns {{\n *     type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n *     resolution: number\n * }}\n */\nexport function updateKnownLargeVideoResolution(resolution: number) {\n    return {\n        type: UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION,\n        resolution\n    };\n}\n\n/**\n * Returns the most recent existing remote video track.\n *\n * @param {Track[]} tracks - All current tracks.\n * @private\n * @returns {(Track|undefined)}\n */\nfunction _electLastVisibleRemoteVideo(tracks) {\n    // First we try to get most recent remote video track.\n    for (let i = tracks.length - 1; i >= 0; --i) {\n        const track = tracks[i];\n\n        if (!track.local && track.mediaType === MEDIA_TYPE.VIDEO) {\n            return track;\n        }\n    }\n}\n\n/**\n * Returns the identifier of the participant who is to be on the stage and\n * should be displayed in {@code LargeVideo}.\n *\n * @param {Object} state - The Redux state from which the participant to be\n * displayed in {@code LargeVideo} is to be elected.\n * @private\n * @returns {(string|undefined)}\n */\nfunction _electParticipantInLargeVideo(state) {\n    // 1. If a participant is pinned, they will be shown in the LargeVideo\n    // (regardless of whether they are local or remote).\n    let participant = getPinnedParticipant(state);\n\n    if (participant) {\n        return participant.id;\n    }\n\n    // 2. Next, pick the most recent remote screenshare that was added to the conference.\n    const remoteScreenShares = state['features/video-layout'].remoteScreenShares;\n\n    if (remoteScreenShares?.length) {\n        return remoteScreenShares[remoteScreenShares.length - 1];\n    }\n\n    // 3. Next, pick the dominant speaker (other than self).\n    participant = getDominantSpeakerParticipant(state);\n    if (participant && !participant.local) {\n        return participant.id;\n    }\n\n    // In case this is the local participant.\n    participant = undefined;\n\n    // 4. Next, pick the most recent participant with video.\n    const tracks = state['features/base/tracks'];\n    const videoTrack = _electLastVisibleRemoteVideo(tracks);\n\n    if (videoTrack) {\n        return videoTrack.participantId;\n    }\n\n    // 5. As a last resort, select the participant that joined last (other than poltergist or other bot type\n    // participants).\n\n    const participants = [ ...getRemoteParticipants(state).values() ];\n\n    for (let i = participants.length; i > 0 && !participant; i--) {\n        const p = participants[i - 1];\n\n        !p.botType && (participant = p);\n    }\n    if (participant) {\n        return participant.id;\n    }\n\n    return getLocalParticipant(state)?.id;\n}\n","/* @flow */\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteRemoteParticipantDialog\n    from '../AbstractMuteRemoteParticipantDialog';\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before muting a remote participant.\n *\n * @extends Component\n */\nclass MuteRemoteParticipantDialog extends AbstractMuteRemoteParticipantDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantButton'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.muteParticipantTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.muteParticipantBody') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(MuteRemoteParticipantDialog));\n","/* @flow */\n\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractMuteRemoteParticipantsVideoDialog\n    from '../AbstractMuteRemoteParticipantsVideoDialog';\n\n/**\n * A React Component with the contents for a dialog that asks for confirmation\n * from the user before disabling a remote participants camera.\n *\n * @extends Component\n */\nclass MuteRemoteParticipantsVideoDialog extends AbstractMuteRemoteParticipantsVideoDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.muteParticipantsVideoButton'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.muteParticipantsVideoTitle'\n                width = 'small'>\n                <div>\n                    { this.props.t('dialog.muteParticipantsVideoBody') }\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect()(MuteRemoteParticipantsVideoDialog));\n","module.exports = {\n  angry: [\">:(\", \">:-(\"],\n  blush: [':\")', ':-\")'],\n  broken_heart: [\"</3\", \"<\\\\3\"],\n  confused: [\":/\", \":-/\"],\n  cry: [\":'(\", \":'-(\", \":,(\", \":,-(\"],\n  frowning: [\":(\", \":-(\"],\n  heart: [\"<3\"],\n  imp: [\"]:(\", \"]:-(\"],\n  innocent: [\"o:)\", \"O:)\", \"o:-)\", \"O:-)\", \"0:)\", \"0:-)\"],\n  joy: [\":')\", \":'-)\", \":,)\", \":,-)\", \":'D\", \":'-D\", \":,D\", \":,-D\"],\n  kissing: [\":*\", \":-*\"],\n  laughing: [\"x-)\", \"X-)\"],\n  neutral_face: [\":|\", \":-|\"],\n  open_mouth: [\":o\", \":-o\", \":O\", \":-O\"],\n  rage: [\":@\", \":-@\"],\n  smile: [\":D\", \":-D\"],\n  smiley: [\":)\", \":-)\"],\n  smiling_imp: [\"]:)\", \"]:-)\"],\n  sob: [\":,'(\", \":,'-(\", \";(\", \";-(\"],\n  stuck_out_tongue: [\":P\", \":-P\", \":p\", \":-p\"],\n  sunglasses: [\"8-)\", \"B-)\"],\n  sweat: [\",:(\", \",:-(\"],\n  sweat_smile: [\",:)\", \",:-)\"],\n  unamused: [\":s\", \":-S\", \":z\", \":-Z\", \":$\", \":-$\"],\n  wink: [\";)\", \";-)\"],\n};\n","// @flow\n\nimport { translate } from '../../base/i18n';\nimport { IconParticipants } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\n/**\n * The type of the React {@code Component} props of {@link ParticipantsPaneButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * External handler for click action.\n     */\n    handleClick: Function\n};\n\n/**\n * Implementation of a button for accessing participants pane.\n */\nclass ParticipantsPaneButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.participants';\n    icon = IconParticipants;\n    label = 'toolbar.participants';\n    tooltip = 'toolbar.participants';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.handleClick();\n    }\n}\n\nexport default translate(connect()(ParticipantsPaneButton));\n","// @flow\n\nimport { SET_LAST_N } from './actionTypes';\n\n/**\n * Sets the last-n, i.e., the number of remote videos to be requested from the bridge for the conference.\n *\n * @param {number} lastN - The number of remote videos to be requested.\n * @returns {{\n *     type: SET_LAST_N,\n *     lastN: number\n * }}\n */\nexport function setLastN(lastN: number) {\n    return {\n        type: SET_LAST_N,\n        lastN\n    };\n}\n","/* eslint-disable no-restricted-syntax */\nexport default function getThemeProps(params) {\n  var theme = params.theme,\n      name = params.name,\n      props = params.props;\n\n  if (!theme || !theme.props || !theme.props[name]) {\n    return props;\n  } // Resolve default props, code borrow from React source.\n  // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n  var defaultProps = theme.props[name];\n  var propName;\n\n  for (propName in defaultProps) {\n    if (props[propName] === undefined) {\n      props[propName] = defaultProps[propName];\n    }\n  }\n\n  return props;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport { chainPropTypes, getDisplayName } from '@material-ui/utils';\nimport makeStyles from '../makeStyles';\nimport getThemeProps from '../getThemeProps';\nimport useTheme from '../useTheme'; // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `classes` property.\n\nvar withStyles = function withStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return function (Component) {\n    var defaultTheme = options.defaultTheme,\n        _options$withTheme = options.withTheme,\n        withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n        name = options.name,\n        stylesOptions = _objectWithoutProperties(options, [\"defaultTheme\", \"withTheme\", \"name\"]);\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (Component === undefined) {\n        throw new Error(['You are calling withStyles(styles)(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\\n'));\n      }\n    }\n\n    var classNamePrefix = name;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!name) {\n        // Provide a better DX outside production.\n        var displayName = getDisplayName(Component);\n\n        if (displayName !== undefined) {\n          classNamePrefix = displayName;\n        }\n      }\n    }\n\n    var useStyles = makeStyles(stylesOrCreator, _extends({\n      defaultTheme: defaultTheme,\n      Component: Component,\n      name: name || Component.displayName,\n      classNamePrefix: classNamePrefix\n    }, stylesOptions));\n    var WithStyles = /*#__PURE__*/React.forwardRef(function WithStyles(props, ref) {\n      var classesProp = props.classes,\n          innerRef = props.innerRef,\n          other = _objectWithoutProperties(props, [\"classes\", \"innerRef\"]); // The wrapper receives only user supplied props, which could be a subset of\n      // the actual props Component might receive due to merging with defaultProps.\n      // So copying it here would give us the same result in the wrapper as well.\n\n\n      var classes = useStyles(_extends({}, Component.defaultProps, props));\n      var theme;\n      var more = other;\n\n      if (typeof name === 'string' || withTheme) {\n        // name and withTheme are invariant in the outer scope\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        theme = useTheme() || defaultTheme;\n\n        if (name) {\n          more = getThemeProps({\n            theme: theme,\n            name: name,\n            props: other\n          });\n        } // Provide the theme to the wrapped component.\n        // So we don't have to use the `withTheme()` Higher-order Component.\n\n\n        if (withTheme && !more.theme) {\n          more.theme = theme;\n        }\n      }\n\n      return /*#__PURE__*/React.createElement(Component, _extends({\n        ref: innerRef || ref,\n        classes: classes\n      }, more));\n    });\n    process.env.NODE_ENV !== \"production\" ? WithStyles.propTypes = {\n      /**\n       * Override or extend the styles applied to the component.\n       */\n      classes: PropTypes.object,\n\n      /**\n       * Use that prop to pass a ref to the decorated component.\n       * @deprecated\n       */\n      innerRef: chainPropTypes(PropTypes.oneOfType([PropTypes.func, PropTypes.object]), function (props) {\n        if (props.innerRef == null) {\n          return null;\n        }\n\n        return null; // return new Error(\n        //   'Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' +\n        //     'Refs are now automatically forwarded to the inner component.',\n        // );\n      })\n    } : void 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      WithStyles.displayName = \"WithStyles(\".concat(getDisplayName(Component), \")\");\n    }\n\n    hoistNonReactStatics(WithStyles, Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // Exposed for test purposes.\n      WithStyles.Naked = Component;\n      WithStyles.options = options;\n      WithStyles.useStyles = useStyles;\n    }\n\n    return WithStyles;\n  };\n};\n\nexport default withStyles;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { withStyles as withStylesWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\n\nfunction withStyles(stylesOrCreator, options) {\n  return withStylesWithoutDefault(stylesOrCreator, _extends({\n    defaultTheme: defaultTheme\n  }, options));\n}\n\nexport default withStyles;","// @flow\n\nimport { Component } from 'react';\n\nimport { JitsiRecordingConstants } from '../../base/lib-jitsi-meet';\nimport { getSessionStatusToShow } from '../functions';\n\n/**\n * NOTE: Web currently renders multiple indicators if multiple recording\n * sessions are running. This is however may not be a good UX as it's not\n * obvious why there are multiple similar 'REC' indicators rendered. Mobile\n * only renders one indicator if there is at least one recording session\n * running. These boolean are shared across the two components to make it\n * easier to align web's behaviour to mobile's later if necessary.\n */\ntype Props = {\n\n    /**\n     * The status of the highermost priority session.\n     */\n    _status: ?string,\n\n    /**\n     * An object containing the CSS classes.\n     */\n    classes: ?{[ key: string]: string},\n\n    /**\n     * The recording mode this indicator should display.\n     */\n    mode: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * State of the component.\n */\ntype State = {\n\n    /**\n     * True if the label status is stale, so it needs to be removed.\n     */\n    staleLabel: boolean\n};\n\n/**\n * The timeout after a label is considered stale. See {@code _updateStaleStatus}\n * for more details.\n */\nconst STALE_TIMEOUT = 10 * 1000;\n\n/**\n * Abstract class for the {@code RecordingLabel} component.\n */\nexport default class AbstractRecordingLabel\n    extends Component<Props, State> {\n    /**\n     * Implements {@code Component#getDerivedStateFromProps}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, prevState: State) {\n        return {\n            staleLabel: props._status !== JitsiRecordingConstants.status.OFF\n                && prevState.staleLabel ? false : prevState.staleLabel\n        };\n    }\n\n    /**\n     * Initializes a new {@code AbstractRecordingLabel} component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            staleLabel: false\n        };\n\n        this._updateStaleStatus({}, props);\n    }\n\n    /**\n     * Implements {@code Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        this._updateStaleStatus(prevProps, this.props);\n    }\n\n    /**\n     * Implements React {@code Component}'s render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return this.props._status && !this.state.staleLabel\n            ? this._renderLabel() : null;\n    }\n\n    _getLabelKey: () => ?string\n\n    /**\n     * Returns the label key that this indicator should render.\n     *\n     * @protected\n     * @returns {?string}\n     */\n    _getLabelKey() {\n        switch (this.props.mode) {\n        case JitsiRecordingConstants.mode.STREAM:\n            return 'recording.live';\n        case JitsiRecordingConstants.mode.FILE:\n            return 'recording.rec';\n        default:\n            // Invalid mode is passed to the component.\n            return undefined;\n        }\n    }\n\n    /**\n     * Renders the platform specific label component.\n     *\n     * @protected\n     * @returns {React$Element}\n     */\n    _renderLabel: () => React$Element<*>\n\n    /**\n     * Updates the stale status of the label on a prop change. A label is stale\n     * if it's in a {@code _status} that doesn't need to be rendered anymore.\n     *\n     * @param {Props} oldProps - The previous props of the component.\n     * @param {Props} newProps - The new props of the component.\n     * @returns {void}\n     */\n    _updateStaleStatus(oldProps, newProps) {\n        if (newProps._status === JitsiRecordingConstants.status.OFF) {\n            if (oldProps._status !== JitsiRecordingConstants.status.OFF) {\n                setTimeout(() => {\n                    // Only if it's still OFF.\n                    if (this.props._status\n                            === JitsiRecordingConstants.status.OFF) {\n                        this.setState({\n                            staleLabel: true\n                        });\n                    }\n                }, STALE_TIMEOUT);\n            }\n        }\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code AbstractRecordingLabel}'s props.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The component's own props.\n * @private\n * @returns {{\n *     _status: ?string\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    const { mode } = ownProps;\n\n    return {\n        _status: getSessionStatusToShow(state, mode)\n    };\n}\n","// @flow\n\nimport { withStyles } from '@material-ui/core/styles';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Label } from '../../../base/label';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { connect } from '../../../base/redux';\nimport AbstractRecordingLabel, {\n    _mapStateToProps\n} from '../AbstractRecordingLabel';\n\n/**\n * Creates the styles for the component.\n *\n * @param {Object} theme - The current UI theme.\n *\n * @returns {Object}\n */\nconst styles = theme => {\n    return {\n        [JitsiRecordingConstants.mode.STREAM]: {\n            background: theme.palette.ui03\n        },\n        [JitsiRecordingConstants.mode.FILE]: {\n            background: theme.palette.iconError\n        }\n    };\n};\n\n/**\n * Implements a React {@link Component} which displays the current state of\n * conference recording.\n *\n * @extends {Component}\n */\nclass RecordingLabel extends AbstractRecordingLabel {\n    /**\n     * Renders the platform specific label component.\n     *\n     * @inheritdoc\n     */\n    _renderLabel() {\n        if (this.props._status !== JitsiRecordingConstants.status.ON) {\n            // Since there are no expanded labels on web, we only render this\n            // label when the recording status is ON.\n            return null;\n        }\n\n        const { classes, mode, t } = this.props;\n\n        return (\n            <div>\n                <Label\n                    className = { classes && classes[mode] }\n                    text = { t(this._getLabelKey()) } />\n            </div>\n        );\n    }\n\n    _getLabelKey: () => ?string\n}\n\nexport default withStyles(styles)(translate(connect(_mapStateToProps)(RecordingLabel)));\n","// @flow\n\nimport React from 'react';\n\nimport { translate, translateToHTML } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\n/**\n * The type of the React {@code Component} props of {@link RecordingLimitNotificationDescription}.\n */\ntype Props = {\n\n    /**\n     * The limit of time in minutes for the recording.\n     */\n    _limit: number,\n\n    /**\n     * The name of the app with unlimited recordings.\n     */\n    _appName: string,\n\n    /**\n     * The URL to the app with unlimited recordings.\n     */\n    _appURL: string,\n\n    /**\n     * True if the notification is related to the livestreaming and false if not.\n     */\n    isLiveStreaming: Boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A component that renders the description of the notification for the recording initiator.\n *\n * @param {Props} props - The props of the component.\n * @returns {Component}\n */\nfunction RecordingLimitNotificationDescription(props: Props) {\n    const { _limit, _appName, _appURL, isLiveStreaming, t } = props;\n\n    return (\n        <span>\n            {\n                translateToHTML(\n                    t,\n                    `${isLiveStreaming ? 'liveStreaming' : 'recording'}.limitNotificationDescriptionWeb`, {\n                        limit: _limit,\n                        app: _appName,\n                        url: _appURL\n                    })\n            }\n        </span>\n    );\n}\n\n\n/**\n * Maps part of the Redix state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction _mapStateToProps(state): $Shape<Props> {\n    const { recordingLimit = {} } = state['features/base/config'];\n    const { limit: _limit, appName: _appName, appURL: _appURL } = recordingLimit;\n\n    return {\n        _limit,\n        _appName,\n        _appURL\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RecordingLimitNotificationDescription));\n","// @flow\n\nimport { openDialog } from '../../../base/dialog';\nimport { IconLiveStreaming } from '../../../base/icons';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    isLocalParticipantModerator\n} from '../../../base/participants';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { maybeShowPremiumFeatureDialog } from '../../../jaas/actions';\nimport { FEATURES } from '../../../jaas/constants';\nimport { getActiveSession } from '../../functions';\n\nimport {\n    StartLiveStreamDialog,\n    StopLiveStreamDialog\n} from './_';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractLiveStreamButton}.\n */\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * True if there is a running active live stream, false otherwise.\n     */\n    _isLiveStreamRunning: boolean,\n\n    /**\n     * True if the button needs to be disabled.\n     */\n    _disabled: Boolean,\n\n    /**\n     * The tooltip to display when hovering over the button.\n     */\n    _tooltip: ?String,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The i18n translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract class of a button for starting and stopping live streaming.\n */\nexport default class AbstractLiveStreamButton<P: Props> extends AbstractButton<P, *> {\n    accessibilityLabel = 'dialog.accessibilityLabel.liveStreaming';\n    icon = IconLiveStreaming;\n    label = 'dialog.startLiveStreaming';\n    toggledLabel = 'dialog.stopLiveStreaming';\n\n    /**\n     * Returns the tooltip that should be displayed when the button is disabled.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.props._tooltip || '';\n    }\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    async _handleClick() {\n        const { _isLiveStreamRunning, dispatch } = this.props;\n\n        const dialogShown = await dispatch(maybeShowPremiumFeatureDialog(FEATURES.RECORDING));\n\n        if (!dialogShown) {\n            dispatch(openDialog(\n                _isLiveStreamRunning ? StopLiveStreamDialog : StartLiveStreamDialog\n            ));\n        }\n    }\n\n    /**\n     * Returns a boolean value indicating if this button is disabled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isLiveStreamRunning;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code AbstractLiveStreamButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _disabled: boolean,\n *     _isLiveStreamRunning: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props) {\n    let { visible } = ownProps;\n\n    // A button can be disabled/enabled only if enableFeaturesBasedOnToken\n    // is on or if the recording is running.\n    let _disabled;\n    let _tooltip = '';\n\n    if (typeof visible === 'undefined') {\n        // If the containing component provides the visible prop, that is one\n        // above all, but if not, the button should be autonomus and decide on\n        // its own to be visible or not.\n        const isModerator = isLocalParticipantModerator(state);\n        const {\n            enableFeaturesBasedOnToken,\n            liveStreamingEnabled\n        } = state['features/base/config'];\n        const { features = {} } = getLocalParticipant(state);\n\n        visible = isModerator && liveStreamingEnabled;\n\n        if (enableFeaturesBasedOnToken) {\n            visible = visible && String(features.livestreaming) === 'true';\n            _disabled = String(features.livestreaming) === 'disabled';\n\n            if (!visible && !_disabled) {\n                _disabled = true;\n                visible = true;\n                _tooltip = 'dialog.liveStreamingDisabledTooltip';\n            }\n        }\n    }\n\n    // disable the button if the recording is running.\n    if (getActiveSession(state, JitsiRecordingConstants.mode.FILE)) {\n        _disabled = true;\n        _tooltip = 'dialog.liveStreamingDisabledBecauseOfActiveRecordingTooltip';\n    }\n\n    return {\n        _disabled,\n        _isLiveStreamRunning: Boolean(\n            getActiveSession(state, JitsiRecordingConstants.mode.STREAM)),\n        _tooltip,\n        visible\n    };\n}\n","// @flow\n\nimport { getToolbarButtons } from '../../../../base/config';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport AbstractLiveStreamButton, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props\n} from '../AbstractLiveStreamButton';\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code LiveStreamButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _conference: Object,\n *     _isLiveStreamRunning: boolean,\n *     _disabled: boolean,\n *     visible: boolean\n * }}\n */\nfunction _mapStateToProps(state: Object, ownProps: Props) {\n    const abstractProps = _abstractMapStateToProps(state, ownProps);\n    const toolbarButtons = getToolbarButtons(state);\n    let { visible } = ownProps;\n\n    if (typeof visible === 'undefined') {\n        visible = toolbarButtons.includes('livestreaming') && abstractProps.visible;\n    }\n\n    return {\n        ...abstractProps,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(AbstractLiveStreamButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createLiveStreamingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractStartLiveStreamDialog}.\n */\nexport type Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The current state of interactions with the Google API. Determines what\n     * Google related UI should display.\n     */\n    _googleAPIState: number,\n\n    /**\n     * The email of the user currently logged in to the Google web client\n     * application.\n     */\n    _googleProfileEmail: string,\n\n    /**\n     * The live stream key that was used before.\n     */\n    _streamKey: string,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * The type of the React {@code Component} state of\n * {@link AbstractStartLiveStreamDialog}.\n */\nexport type State = {\n\n    /**\n     * Details about the broadcasts available for use for the logged in Google\n     * user's YouTube account.\n     */\n    broadcasts: ?Array<Object>,\n\n    /**\n     * The error type, as provided by Google, for the most recent error\n     * encountered by the Google API.\n     */\n    errorType: ?string,\n\n    /**\n     * The boundStreamID of the broadcast currently selected in the broadcast\n     * dropdown.\n     */\n    selectedBoundStreamID: ?string,\n\n    /**\n     * The selected or entered stream key to use for YouTube live streaming.\n     */\n    streamKey: string\n};\n\n/**\n * Implements an abstract class for the StartLiveStreamDialog on both platforms.\n *\n * NOTE: Google log-in is not supported for mobile yet for later implementation\n * but the abstraction of its properties are already present in this abstract\n * class.\n */\nexport default class AbstractStartLiveStreamDialog<P: Props>\n    extends Component<P, State> {\n    _isMounted: boolean;\n\n    /**\n     * Constructor of the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            broadcasts: undefined,\n            errorType: undefined,\n            selectedBoundStreamID: undefined,\n            streamKey: ''\n        };\n\n        /**\n         * Instance variable used to flag whether the component is or is not\n         * mounted. Used as a hack to avoid setting state on an unmounted\n         * component.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._isMounted = false;\n\n        this._onCancel = this._onCancel.bind(this);\n        this._onStreamKeyChange = this._onStreamKeyChange.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._isMounted = true;\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._isMounted = false;\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Invokes the passed in {@link onCancel} callback and closes\n     * {@code StartLiveStreamDialog}.\n     *\n     * @private\n     * @returns {boolean} True is returned to close the modal.\n     */\n    _onCancel() {\n        sendAnalytics(createLiveStreamingDialogEvent('start', 'cancel.button'));\n\n        return true;\n    }\n\n    /**\n     * Asks the user to sign in, if not already signed in, and then requests a\n     * list of the user's YouTube broadcasts.\n     *\n     * NOTE: To be implemented by platforms.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onGetYouTubeBroadcasts: () => Promise<*>;\n\n    _onStreamKeyChange: string => void;\n\n    /**\n     * Callback invoked to update the {@code StartLiveStreamDialog} component's\n     * display of the entered YouTube stream key.\n     *\n     * @param {string} streamKey - The stream key entered in the field.\n     * @private\n     * @returns {void}\n     */\n    _onStreamKeyChange(streamKey) {\n        this._setStateIfMounted({\n            streamKey,\n            selectedBoundStreamID: undefined\n        });\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Invokes the passed in {@link onSubmit} callback with the entered stream\n     * key, and then closes {@code StartLiveStreamDialog}.\n     *\n     * @private\n     * @returns {boolean} False if no stream key is entered to preventing\n     * closing, true to close the modal.\n     */\n    _onSubmit() {\n        const { broadcasts, selectedBoundStreamID } = this.state;\n        const key\n            = (this.state.streamKey || this.props._streamKey || '').trim();\n\n        if (!key) {\n            return false;\n        }\n\n        let selectedBroadcastID = null;\n\n        if (selectedBoundStreamID) {\n            const selectedBroadcast = broadcasts && broadcasts.find(\n                broadcast => broadcast.boundStreamID === selectedBoundStreamID);\n\n            selectedBroadcastID = selectedBroadcast && selectedBroadcast.id;\n        }\n\n        sendAnalytics(\n            createLiveStreamingDialogEvent('start', 'confirm.button'));\n\n        this.props._conference.startRecording({\n            broadcastId: selectedBroadcastID,\n            mode: JitsiRecordingConstants.mode.STREAM,\n            streamId: key\n        });\n\n        return true;\n    }\n\n    /**\n     * Updates the internal state if the component is still mounted. This is a\n     * workaround for all the state setting that occurs after ajax.\n     *\n     * @param {Object} newState - The new state to merge into the existing\n     * state.\n     * @private\n     * @returns {void}\n     */\n    _setStateIfMounted(newState) {\n        if (this._isMounted) {\n            this.setState(newState);\n        }\n    }\n}\n\n/**\n * Maps part of the Redux state to the component's props.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _conference: Object,\n *     _googleAPIState: number,\n *     _googleProfileEmail: string,\n *     _streamKey: string\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _googleAPIState: state['features/google-api'].googleAPIState,\n        _googleProfileEmail: state['features/google-api'].profileEmail,\n        _streamKey: state['features/recording'].streamKey\n    };\n}\n","// @flow\n\nimport debounce from 'lodash/debounce';\nimport { Component } from 'react';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The live streaming help link to display. On web it comes from\n * interfaceConfig, but we don't have that on mobile.\n *\n * FIXME: This is in props now to prepare for the Redux-based interfaceConfig\n */\nconst LIVE_STREAMING_HELP_LINK = 'https://jitsi.org/live';\n\n/**\n * The props of the component.\n */\nexport type Props = {\n\n    /**\n     * Callback invoked when the entered stream key has changed.\n     */\n    onChange: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The stream key value to display as having been entered so far.\n     */\n    value: string\n};\n\n/**\n * The state of the component.\n */\ntype State = {\n\n    /**\n     * Whether or not to show the warnings that the passed in value seems like\n     * an improperly formatted stream key.\n     */\n    showValidationError: boolean\n};\n\n/**\n * An abstract React Component for entering a key for starting a YouTube live\n * stream.\n *\n * @extends Component\n */\nexport default class AbstractStreamKeyForm<P: Props>\n    extends Component<P, State> {\n    helpURL: string;\n    _debouncedUpdateValidationErrorVisibility: Function;\n\n    /**\n     * Constructor for the component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this.state = {\n            showValidationError: Boolean(this.props.value)\n                && !this._validateStreamKey(this.props.value)\n        };\n\n        this.helpURL = (typeof interfaceConfig !== 'undefined'\n            && interfaceConfig.LIVE_STREAMING_HELP_LINK)\n            || LIVE_STREAMING_HELP_LINK;\n\n        this._debouncedUpdateValidationErrorVisibility = debounce(\n            this._updateValidationErrorVisibility.bind(this),\n            800,\n            { leading: false }\n        );\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onInputChange = this._onInputChange.bind(this);\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        if (this.props.value !== prevProps.value) {\n            this._debouncedUpdateValidationErrorVisibility();\n        }\n    }\n\n    /**\n     * Implements React Component's componentWillUnmount.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._debouncedUpdateValidationErrorVisibility.cancel();\n    }\n\n    _onInputChange: Object => void\n\n    /**\n     * Callback invoked when the value of the input field has updated through\n     * user input. This forwards the value (string only, even if it was a dom\n     * event) to the onChange prop provided to the component.\n     *\n     * @param {Object | string} change - DOM Event for value change or the\n     * changed text.\n     * @private\n     * @returns {void}\n     */\n    _onInputChange(change) {\n        const value = typeof change === 'object' ? change.target.value : change;\n\n        this.props.onChange(value);\n    }\n\n    /**\n     * Checks if the stream key value seems like a valid stream key and sets the\n     * state for showing or hiding the notification about the stream key seeming\n     * invalid.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _updateValidationErrorVisibility() {\n        const newShowValidationError = Boolean(this.props.value)\n            && !this._validateStreamKey(this.props.value);\n\n        if (newShowValidationError !== this.state.showValidationError) {\n            this.setState({\n                showValidationError: newShowValidationError\n            });\n        }\n    }\n\n    /**\n     * Checks if a passed in stream key appears to be in a valid format.\n     *\n     * @param {string} streamKey - The stream key to check for valid formatting.\n     * @returns {void}\n     * @returns {boolean}\n     */\n    _validateStreamKey(streamKey = '') {\n        const trimmedKey = streamKey.trim();\n        const fourGroupsDashSeparated = /^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}/;\n        const match = fourGroupsDashSeparated.exec(trimmedKey);\n\n        return Boolean(match);\n    }\n}\n","// @flow\n\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport AbstractStreamKeyForm, {\n    type Props\n} from '../AbstractStreamKeyForm';\nimport { GOOGLE_PRIVACY_POLICY, YOUTUBE_TERMS_URL } from '../constants';\n\n/**\n * A React Component for entering a key for starting a YouTube live stream.\n *\n * @extends Component\n */\nclass StreamKeyForm extends AbstractStreamKeyForm<Props> {\n\n    /**\n     * Initializes a new {@code StreamKeyForm} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StreamKeyForm} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onOpenHelp = this._onOpenHelp.bind(this);\n        this._onOpenHelpKeyPress = this._onOpenHelpKeyPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t, value } = this.props;\n\n        return (\n            <div className = 'stream-key-form'>\n                <FieldTextStateless\n                    autoFocus = { true }\n                    compact = { true }\n                    isSpellCheckEnabled = { false }\n                    label = { t('dialog.streamKey') }\n                    name = 'streamId'\n                    okDisabled = { !value }\n                    onChange = { this._onInputChange }\n                    placeholder = { t('liveStreaming.enterStreamKey') }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.props.value } />\n                <div className = 'form-footer'>\n                    <div className = 'help-container'>\n                        {\n                            this.state.showValidationError\n                                ? <span className = 'warning-text'>\n                                    { t('liveStreaming.invalidStreamKey') }\n                                </span>\n                                : null\n                        }\n                        { this.helpURL\n                            ? <a\n                                aria-label = { t('liveStreaming.streamIdHelp') }\n                                className = 'helper-link'\n                                onClick = { this._onOpenHelp }\n                                onKeyPress = { this._onOpenHelpKeyPress }\n                                role = 'link'\n                                tabIndex = { 0 }>\n                                { t('liveStreaming.streamIdHelp') }\n                            </a>\n                            : null\n                        }\n                    </div>\n                    <a\n                        className = 'helper-link'\n                        href = { YOUTUBE_TERMS_URL }\n                        rel = 'noopener noreferrer'\n                        target = '_blank'>\n                        { t('liveStreaming.youtubeTerms') }\n                    </a>\n                    <a\n                        className = 'helper-link'\n                        href = { GOOGLE_PRIVACY_POLICY }\n                        rel = 'noopener noreferrer'\n                        target = '_blank'>\n                        { t('liveStreaming.googlePrivacyPolicy') }\n                    </a>\n                </div>\n            </div>\n        );\n    }\n\n    _onInputChange: Object => void\n\n    _onOpenHelp: () => void\n\n    /**\n     * Opens a new tab with information on how to manually locate a YouTube\n     * broadcast stream key.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenHelp() {\n        window.open(this.helpURL, '_blank', 'noopener');\n    }\n\n    _onOpenHelpKeyPress: () => void\n\n    /**\n     * Opens a new tab with information on how to manually locate a YouTube\n     * broadcast stream key.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenHelpKeyPress(e) {\n        if (e.key === ' ') {\n            e.preventDefault();\n            this._onOpenHelp();\n        }\n    }\n}\n\nexport default translate(StreamKeyForm);\n","/**\n * The URL for Google Privacy Policy.\n */\nexport const GOOGLE_PRIVACY_POLICY = 'https://policies.google.com/privacy';\n\n/**\n * The URL that is the main landing page for YouTube live streaming and should\n * have a user's live stream key.\n */\nexport const YOUTUBE_LIVE_DASHBOARD_URL = 'https://www.youtube.com/live_dashboard';\n\n/**\n * The URL for YouTube terms and conditions.\n */\nexport const YOUTUBE_TERMS_URL = 'https://www.youtube.com/t/terms';\n","/* @flow */\n\nimport {\n    DropdownItem,\n    DropdownItemGroup,\n    DropdownMenuStateless\n} from '@atlaskit/dropdown-menu';\nimport React, { PureComponent } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { YOUTUBE_LIVE_DASHBOARD_URL } from '../constants';\n\n/**\n * The type of the React {@code Component} props of {@link StreamKeyPicker}.\n */\ntype Props = {\n\n    /**\n     * Broadcasts available for selection. Each broadcast item should be an\n     * object with a title for display in the dropdown and a boundStreamID to\n     * return in the {@link onBroadcastSelected} callback.\n     */\n    broadcasts: Array<Object>,\n\n    /**\n     * Callback invoked when an item in the dropdown is selected. The selected\n     * broadcast's boundStreamID will be passed back.\n     */\n    onBroadcastSelected: Function,\n\n    /**\n     * The boundStreamID of the broadcast that should display as selected in the\n     * dropdown.\n     */\n    selectedBoundStreamID: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link StreamKeyPicker}.\n */\ntype State = {\n\n    /**\n     * Whether or not to display the dropdown menu to pick a YouTube broadcast.\n     */\n    isDropdownOpen: boolean\n};\n\n/**\n * A dropdown to select a YouTube broadcast.\n *\n * @extends Component\n */\nclass StreamKeyPicker extends PureComponent<Props, State> {\n    /**\n     * Default values for {@code StreamKeyForm} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        broadcasts: []\n    };\n\n    /**\n     * The initial state of a {@code StreamKeyForm} instance.\n     */\n    state = {\n        isDropdownOpen: false\n    };\n\n    /**\n     * Initializes a new {@code StreamKeyPicker} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StreamKeyPicker} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onDropdownOpenChange = this._onDropdownOpenChange.bind(this);\n        this._onSelect = this._onSelect.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { broadcasts, selectedBoundStreamID, t } = this.props;\n\n        if (!broadcasts.length) {\n            return (\n                <a\n                    className = 'warning-text'\n                    href = { YOUTUBE_LIVE_DASHBOARD_URL }\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    { t('liveStreaming.getStreamKeyManually') }\n                </a>\n            );\n        }\n\n        const dropdownItems\n            = broadcasts.map(broadcast => (\n                <DropdownItem\n                    data-streamid = { broadcast.boundStreamID }\n                    key = { broadcast.boundStreamID }\n                    onClick = { this._onSelect }>\n                    { broadcast.title }\n                </DropdownItem>));\n        const selected\n            = this.props.broadcasts.find(\n                broadcast => broadcast.boundStreamID === selectedBoundStreamID);\n        const triggerText\n            = (selected && selected.title) || t('liveStreaming.choose');\n\n        return (\n            <div className = 'broadcast-dropdown dropdown-menu'>\n                <DropdownMenuStateless\n                    isOpen = { this.state.isDropdownOpen }\n                    onItemActivated = { this._onSelect }\n                    onOpenChange = { this._onDropdownOpenChange }\n                    shouldFitContainer = { true }\n                    trigger = { triggerText }\n                    triggerButtonProps = {{\n                        className: 'broadcast-dropdown-trigger',\n                        shouldFitContainer: true\n                    }}\n                    triggerType = 'button'>\n                    <DropdownItemGroup>\n                        { dropdownItems }\n                    </DropdownItemGroup>\n                </DropdownMenuStateless>\n            </div>\n        );\n    }\n\n    /**\n     * Transforms the passed in broadcasts into an array of objects that can\n     * be parsed by {@code DropdownMenuStateless}.\n     *\n     * @param {Array<Object>} broadcasts - The YouTube broadcasts to display.\n     * @private\n     * @returns {Array<Object>}\n     */\n    _formatBroadcasts(broadcasts) {\n        return broadcasts.map(broadcast => {\n            return {\n                content: broadcast.title,\n                value: broadcast\n            };\n        });\n    }\n\n    _onDropdownOpenChange: (Object) => void;\n\n    /**\n     * Sets the dropdown to be displayed or not based on the passed in event.\n     *\n     * @param {Object} dropdownEvent - The event passed from\n     * {@code DropdownMenuStateless} indicating if the dropdown should be open\n     * or closed.\n     * @private\n     * @returns {void}\n     */\n    _onDropdownOpenChange(dropdownEvent) {\n        this.setState({\n            isDropdownOpen: dropdownEvent.isOpen\n        });\n    }\n\n    _onSelect: (string) => void;\n\n    /**\n     * Callback invoked when an item has been clicked in the dropdown menu.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onSelect(e) {\n        const streamId = e.currentTarget.getAttribute('data-streamid');\n\n        this.props.onBroadcastSelected(streamId);\n    }\n}\n\nexport default translate(StreamKeyPicker);\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport {\n    GOOGLE_API_STATES,\n    GoogleSignInButton,\n    loadGoogleAPI,\n    requestAvailableYouTubeBroadcasts,\n    requestLiveStreamsForYouTubeBroadcast,\n    showAccountSelection,\n    signIn,\n    updateProfile\n} from '../../../../google-api';\nimport AbstractStartLiveStreamDialog, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractStartLiveStreamDialog';\n\nimport StreamKeyForm from './StreamKeyForm';\nimport StreamKeyPicker from './StreamKeyPicker';\n\ntype Props = AbstractProps & {\n\n    /**\n     * The ID for the Google client application used for making stream key\n     * related requests.\n     */\n    _googleApiApplicationClientID: string\n}\n\n/**\n * A React Component for requesting a YouTube stream key to use for live\n * streaming of the current conference.\n *\n * @extends Component\n */\nclass StartLiveStreamDialog\n    extends AbstractStartLiveStreamDialog<Props> {\n\n    /**\n     * Initializes a new {@code StartLiveStreamDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code StartLiveStreamDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onGetYouTubeBroadcasts = this._onGetYouTubeBroadcasts.bind(this);\n        this._onInitializeGoogleApi = this._onInitializeGoogleApi.bind(this);\n        this._onGoogleSignIn = this._onGoogleSignIn.bind(this);\n        this._onRequestGoogleSignIn = this._onRequestGoogleSignIn.bind(this);\n        this._onYouTubeBroadcastIDSelected\n            = this._onYouTubeBroadcastIDSelected.bind(this);\n    }\n\n    /**\n     * Implements {@link Component#componentDidMount()}. Invoked immediately\n     * after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        if (this.props._googleApiApplicationClientID) {\n            this._onInitializeGoogleApi();\n        }\n    }\n\n    /**\n     * Implements {@code Component}'s render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { _googleApiApplicationClientID } = this.props;\n\n        return (\n            <Dialog\n                cancelKey = 'dialog.Cancel'\n                okKey = 'dialog.startLiveStreaming'\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'liveStreaming.start'\n                width = { 'small' }>\n                <div className = 'live-stream-dialog'>\n                    { _googleApiApplicationClientID\n                        ? this._renderYouTubePanel() : null }\n                    <StreamKeyForm\n                        onChange = { this._onStreamKeyChange }\n                        value = {\n                            this.state.streamKey || this.props._streamKey\n                        } />\n                </div>\n            </Dialog>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    _onSubmit: () => boolean;\n\n    _onInitializeGoogleApi: () => void;\n\n    /**\n     * Loads the Google web client application used for fetching stream keys.\n     * If the user is already logged in, then a request for available YouTube\n     * broadcasts is also made.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onInitializeGoogleApi() {\n        this.props.dispatch(loadGoogleAPI())\n        .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    /**\n     * Automatically selects the input field's value after starting to edit the\n     * display name.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(previousProps) {\n        if (previousProps._googleAPIState === GOOGLE_API_STATES.LOADED\n            && this.props._googleAPIState === GOOGLE_API_STATES.SIGNED_IN) {\n            this._onGetYouTubeBroadcasts();\n        }\n    }\n\n    _onGetYouTubeBroadcasts: () => void;\n\n    /**\n     * Asks the user to sign in, if not already signed in, and then requests a\n     * list of the user's YouTube broadcasts.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onGetYouTubeBroadcasts() {\n        this.props.dispatch(updateProfile())\n            .catch(response => this._parseErrorFromResponse(response));\n\n        this.props.dispatch(requestAvailableYouTubeBroadcasts())\n            .then(broadcasts => {\n                this._setStateIfMounted({\n                    broadcasts\n                });\n\n                if (broadcasts.length === 1) {\n                    const broadcast = broadcasts[0];\n\n                    this._onYouTubeBroadcastIDSelected(broadcast.boundStreamID);\n                }\n            })\n            .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    _onGoogleSignIn: () => Object;\n\n    /**\n     * Forces the Google web client application to prompt for a sign in, such as\n     * when changing account, and will then fetch available YouTube broadcasts.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onGoogleSignIn() {\n        this.props.dispatch(signIn())\n            .catch(response => this._parseErrorFromResponse(response));\n    }\n\n    _onRequestGoogleSignIn: () => Object;\n\n    /**\n     * Forces the Google web client application to prompt for a sign in, such as\n     * when changing account, and will then fetch available YouTube broadcasts.\n     *\n     * @private\n     * @returns {Promise}\n     */\n    _onRequestGoogleSignIn() {\n        // when there is an error we show the google sign-in button.\n        // once we click it we want to clear the error from the state\n        this.props.dispatch(showAccountSelection())\n            .then(() =>\n                this._setStateIfMounted({\n                    broadcasts: undefined,\n                    errorType: undefined\n                }))\n            .then(() => this._onGetYouTubeBroadcasts());\n    }\n\n    _onStreamKeyChange: string => void;\n\n    _onYouTubeBroadcastIDSelected: (string) => Object;\n\n    /**\n     * Fetches the stream key for a YouTube broadcast and updates the internal\n     * state to display the associated stream key as being entered.\n     *\n     * @param {string} boundStreamID - The bound stream ID associated with the\n     * broadcast from which to get the stream key.\n     * @private\n     * @returns {Promise}\n     */\n    _onYouTubeBroadcastIDSelected(boundStreamID) {\n        this.props.dispatch(\n            requestLiveStreamsForYouTubeBroadcast(boundStreamID))\n            .then(({ streamKey, selectedBoundStreamID }) =>\n                this._setStateIfMounted({\n                    streamKey,\n                    selectedBoundStreamID\n                }));\n\n    }\n\n    /**\n     * Only show an error if an external request was made with the Google api.\n     * Do not error if the login in canceled.\n     * And searches in a Google API error response for the error type.\n     *\n     * @param {Object} response - The Google API response that may contain an\n     * error.\n     * @private\n     * @returns {string|null}\n     */\n    _parseErrorFromResponse(response) {\n\n        if (!response || !response.result) {\n            return;\n        }\n\n        const result = response.result;\n        const error = result.error;\n        const errors = error && error.errors;\n        const firstError = errors && errors[0];\n\n        this._setStateIfMounted({\n            errorType: (firstError && firstError.reason) || null\n        });\n    }\n\n    /**\n     * Renders a React Element for authenticating with the Google web client.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderYouTubePanel() {\n        const {\n            t,\n            _googleProfileEmail\n        } = this.props;\n        const {\n            broadcasts,\n            selectedBoundStreamID\n        } = this.state;\n\n        let googleContent, helpText;\n\n        switch (this.props._googleAPIState) {\n        case GOOGLE_API_STATES.LOADED:\n            googleContent\n                = <GoogleSignInButton onClick = { this._onGoogleSignIn } />;\n            helpText = t('liveStreaming.signInCTA');\n\n            break;\n\n        case GOOGLE_API_STATES.SIGNED_IN:\n            if (broadcasts) {\n                googleContent = (\n                    <StreamKeyPicker\n                        broadcasts = { broadcasts }\n                        onBroadcastSelected\n                            = { this._onYouTubeBroadcastIDSelected }\n                        selectedBoundStreamID = { selectedBoundStreamID } />\n                );\n            } else {\n                googleContent = (\n                    <Spinner\n                        isCompleting = { false }\n                        size = 'medium' />\n                );\n            }\n\n            /**\n             * FIXME: Ideally this help text would be one translation string\n             * that also accepts the anchor. This can be done using the Trans\n             * component of react-i18next but I couldn't get it working...\n             */\n            helpText = (\n                <div>\n                    { `${t('liveStreaming.chooseCTA',\n                        { email: _googleProfileEmail })} ` }\n                    <a onClick = { this._onRequestGoogleSignIn }>\n                        { t('liveStreaming.changeSignIn') }\n                    </a>\n                </div>\n            );\n\n            break;\n\n        case GOOGLE_API_STATES.NEEDS_LOADING:\n        default:\n            googleContent = (\n                <Spinner\n                    isCompleting = { false }\n                    size = 'medium' />\n            );\n\n            break;\n        }\n\n        if (this.state.errorType !== undefined) {\n            googleContent = (\n                <GoogleSignInButton\n                    onClick = { this._onRequestGoogleSignIn } />\n            );\n            helpText = this._getGoogleErrorMessageToDisplay();\n        }\n\n        return (\n            <div className = 'google-panel'>\n                <div className = 'live-stream-cta'>\n                    { helpText }\n                </div>\n                <div className = 'google-api'>\n                    { googleContent }\n                </div>\n            </div>\n        );\n    }\n\n    _setStateIfMounted: Object => void\n\n    /**\n     * Returns the error message to display for the current error state.\n     *\n     * @private\n     * @returns {string} The error message to display.\n     */\n    _getGoogleErrorMessageToDisplay() {\n        let text;\n\n        switch (this.state.errorType) {\n        case 'liveStreamingNotEnabled':\n            text = this.props.t(\n                'liveStreaming.errorLiveStreamNotEnabled',\n                { email: this.props._googleProfileEmail });\n            break;\n        default:\n            text = this.props.t('liveStreaming.errorAPI');\n            break;\n        }\n\n        return <div className = 'google-error'>{ text }</div>;\n    }\n}\n\n/**\n * Maps part of the Redux state to the component's props.\n *\n * @param {Object} state - The Redux state.\n * @returns {{\n *     _googleApiApplicationClientID: string\n * }}\n*/\nfunction _mapStateToProps(state: Object) {\n    return {\n        ..._abstractMapStateToProps(state),\n        _googleApiApplicationClientID:\n        state['features/base/config'].googleApiApplicationClientID\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(StartLiveStreamDialog));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createLiveStreamingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { getActiveSession } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link StopLiveStreamDialog}.\n */\ntype Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The redux representation of the live stremaing to be stopped.\n     */\n    _session: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A React Component for confirming the participant wishes to stop the currently\n * active live stream of the conference.\n *\n * @extends Component\n */\nexport default class AbstractStopLiveStreamDialog extends Component<Props> {\n    /**\n     * Initializes a new {@code StopLiveStreamDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Callback invoked when stopping of live streaming is confirmed.\n     *\n     * @private\n     * @returns {boolean} True to close the modal.\n     */\n    _onSubmit() {\n        sendAnalytics(createLiveStreamingDialogEvent('stop', 'confirm.button'));\n\n        const { _session } = this.props;\n\n        if (_session) {\n            this.props._conference.stopRecording(_session.id);\n        }\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props of\n * {@code StopLiveStreamDialog}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _conference: Object,\n *     _session: Object\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _session: getActiveSession(state, JitsiRecordingConstants.mode.STREAM)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport AbstractStopLiveStreamDialog, {\n    _mapStateToProps\n} from '../AbstractStopLiveStreamDialog';\n\n/**\n * A React Component for confirming the participant wishes to stop the currently\n * active live stream of the conference.\n *\n * @extends Component\n */\nclass StopLiveStreamDialog extends AbstractStopLiveStreamDialog {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = 'dialog.stopLiveStreaming'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.liveStreaming'\n                width = 'small'>\n                { this.props.t('dialog.stopStreamingWarning') }\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean;\n}\n\nexport default translate(connect(_mapStateToProps)(StopLiveStreamDialog));\n","// @flow\n\nimport {\n    createToolbarEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { openDialog } from '../../../base/dialog';\nimport { IconToggleRecording } from '../../../base/icons';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport {\n    getLocalParticipant,\n    isLocalParticipantModerator\n} from '../../../base/participants';\nimport { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox/components';\nimport { maybeShowPremiumFeatureDialog } from '../../../jaas/actions';\nimport { FEATURES } from '../../../jaas/constants';\nimport { getActiveSession } from '../../functions';\n\nimport { StartRecordingDialog, StopRecordingDialog } from './_';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractRecordButton}.\n */\nexport type Props = AbstractButtonProps & {\n\n    /**\n     * True if the button needs to be disabled.\n     */\n    _disabled: Boolean,\n\n    /**\n     * True if there is a running active recording, false otherwise.\n     */\n    _isRecordingRunning: boolean,\n\n    /**\n     * The tooltip to display when hovering over the button.\n     */\n    _tooltip: ?String,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The i18n translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract implementation of a button for starting and stopping recording.\n */\nexport default class AbstractRecordButton<P: Props> extends AbstractButton<P, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.recording';\n    icon = IconToggleRecording;\n    label = 'dialog.startRecording';\n    toggledLabel = 'dialog.stopRecording';\n\n    /**\n     * Returns the tooltip that should be displayed when the button is disabled.\n     *\n     * @private\n     * @returns {string}\n     */\n    _getTooltip() {\n        return this.props._tooltip || '';\n    }\n\n    /**\n     * Handles clicking / pressing the button.\n     *\n     * @override\n     * @protected\n     * @returns {void}\n     */\n    async _handleClick() {\n        const { _isRecordingRunning, dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent(\n            'recording.button',\n            {\n                'is_recording': _isRecordingRunning,\n                type: JitsiRecordingConstants.mode.FILE\n            }));\n\n        const dialogShown = await dispatch(maybeShowPremiumFeatureDialog(FEATURES.RECORDING));\n\n        if (!dialogShown) {\n            dispatch(openDialog(\n                _isRecordingRunning ? StopRecordingDialog : StartRecordingDialog\n            ));\n        }\n    }\n\n    /**\n     * Helper function to be implemented by subclasses, which must return a\n     * boolean value indicating if this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._disabled;\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isRecordingRunning;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code RecordButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _disabled: boolean,\n *     _isRecordingRunning: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    let { visible } = ownProps;\n\n    // a button can be disabled/enabled if enableFeaturesBasedOnToken\n    // is on or if the livestreaming is running.\n    let _disabled;\n    let _tooltip = '';\n\n    if (typeof visible === 'undefined') {\n        // If the containing component provides the visible prop, that is one\n        // above all, but if not, the button should be autonomus and decide on\n        // its own to be visible or not.\n        const isModerator = isLocalParticipantModerator(state);\n        const {\n            enableFeaturesBasedOnToken,\n            fileRecordingsEnabled\n        } = state['features/base/config'];\n        const { features = {} } = getLocalParticipant(state);\n\n        visible = isModerator && fileRecordingsEnabled;\n\n        if (enableFeaturesBasedOnToken) {\n            visible = visible && String(features.recording) === 'true';\n            _disabled = String(features.recording) === 'disabled';\n            if (!visible && !_disabled) {\n                _disabled = true;\n                visible = true;\n                _tooltip = 'dialog.recordingDisabledTooltip';\n            }\n        }\n    }\n\n    // disable the button if the livestreaming is running.\n    if (getActiveSession(state, JitsiRecordingConstants.mode.STREAM)) {\n        _disabled = true;\n        _tooltip = 'dialog.recordingDisabledBecauseOfActiveLiveStreamingTooltip';\n    }\n\n    return {\n        _disabled,\n        _isRecordingRunning: Boolean(getActiveSession(state, JitsiRecordingConstants.mode.FILE)),\n        _tooltip,\n        visible\n    };\n}\n","// @flow\n\nimport { getToolbarButtons } from '../../../../base/config';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport AbstractRecordButton, {\n    _mapStateToProps as _abstractMapStateToProps,\n    type Props\n} from '../AbstractRecordButton';\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code RecordButton} component.\n *\n * @param {Object} state - The Redux state.\n * @param {Props} ownProps - The own props of the Component.\n * @private\n * @returns {{\n *     _fileRecordingsDisabledTooltipKey: ?string,\n *     _isRecordingRunning: boolean,\n *     _disabled: boolean,\n *     visible: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object, ownProps: Props): Object {\n    const abstractProps = _abstractMapStateToProps(state, ownProps);\n    const toolbarButtons = getToolbarButtons(state);\n    let { visible } = ownProps;\n\n    if (typeof visible === 'undefined') {\n        visible = toolbarButtons.includes('recording') && abstractProps.visible;\n    }\n\n    return {\n        ...abstractProps,\n        visible\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(AbstractRecordButton));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport {\n    getDropboxData,\n    isEnabled as isDropboxEnabled\n} from '../../../dropbox';\nimport { showErrorNotification } from '../../../notifications';\nimport { toggleRequestingSubtitles } from '../../../subtitles';\nimport { setSelectedRecordingService } from '../../actions';\nimport { RECORDING_TYPES } from '../../constants';\n\ntype Props = {\n\n    /**\n     * Requests subtitles when recording is turned on.\n     */\n    _autoCaptionOnRecord: boolean,\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The app key for the dropbox authentication.\n     */\n    _appKey: string,\n\n    /**\n     * Whether to show file recordings service, even if integrations\n     * are enabled.\n     */\n    _fileRecordingsServiceEnabled: boolean,\n\n    /**\n     * Whether to show the possibility to share file recording with other people (e.g. meeting participants), based on\n     * the actual implementation on the backend.\n     */\n    _fileRecordingsServiceSharingEnabled: boolean,\n\n    /**\n     * If true the dropbox integration is enabled, otherwise - disabled.\n     */\n    _isDropboxEnabled: boolean,\n\n    /**\n     * The dropbox access token.\n     */\n    _token: string,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\ntype State = {\n\n    /**\n     * <tt>true</tt> if we have valid oauth token.\n     */\n    isTokenValid: boolean,\n\n    /**\n     * <tt>true</tt> if we are in process of validating the oauth token.\n     */\n    isValidating: boolean,\n\n    /**\n     * The currently selected recording service of type: RECORDING_TYPES.\n     */\n    selectedRecordingService: ?string,\n\n    /**\n     * True if the user requested the service to share the recording with others.\n     */\n    sharingEnabled: boolean,\n\n    /**\n     * Number of MiB of available space in user's Dropbox account.\n     */\n    spaceLeft: ?number,\n\n    /**\n     * The display name of the user's Dropbox account.\n     */\n    userName: ?string\n};\n\n/**\n * Component for the recording start dialog.\n */\nclass AbstractStartRecordingDialog extends Component<Props, State> {\n    /**\n     * Initializes a new {@code StartRecordingDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onSelectedRecordingServiceChanged\n            = this._onSelectedRecordingServiceChanged.bind(this);\n        this._onSharingSettingChanged = this._onSharingSettingChanged.bind(this);\n\n        let selectedRecordingService;\n\n        // TODO: Potentially check if we need to handle changes of\n        // _fileRecordingsServiceEnabled and _areIntegrationsEnabled()\n        if (this.props._fileRecordingsServiceEnabled\n                || !this._areIntegrationsEnabled()) {\n            selectedRecordingService = RECORDING_TYPES.JITSI_REC_SERVICE;\n        } else if (this._areIntegrationsEnabled()) {\n            selectedRecordingService = RECORDING_TYPES.DROPBOX;\n        }\n\n        this.state = {\n            isTokenValid: false,\n            isValidating: false,\n            userName: undefined,\n            sharingEnabled: true,\n            spaceLeft: undefined,\n            selectedRecordingService\n        };\n    }\n\n    /**\n     * Validates the oauth access token.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        if (typeof this.props._token !== 'undefined') {\n            this._onTokenUpdated();\n        }\n    }\n\n    /**\n     * Validates the oauth access token.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (this.props._token !== prevProps._token) {\n            this._onTokenUpdated();\n        }\n    }\n\n    _areIntegrationsEnabled: () => boolean;\n\n    /**\n     * Returns true if the integrations with third party services are enabled\n     * and false otherwise.\n     *\n     * @returns {boolean} - True if the integrations with third party services\n     * are enabled and false otherwise.\n     */\n    _areIntegrationsEnabled() {\n        return this.props._isDropboxEnabled;\n    }\n\n    _onSharingSettingChanged: () => void;\n\n    /**\n     * Callback to handle sharing setting change from the dialog.\n     *\n     * @returns {void}\n     */\n    _onSharingSettingChanged() {\n        this.setState({\n            sharingEnabled: !this.state.sharingEnabled\n        });\n    }\n\n    _onSelectedRecordingServiceChanged: (string) => void;\n\n    /**\n     * Handles selected recording service changes.\n     *\n     * @param {string} selectedRecordingService - The new selected recording\n     * service.\n     * @returns {void}\n     */\n    _onSelectedRecordingServiceChanged(selectedRecordingService) {\n        this.setState({ selectedRecordingService }, () => {\n            this.props.dispatch(setSelectedRecordingService(selectedRecordingService));\n        });\n    }\n\n    /**\n     * Validates the dropbox access token and fetches account information.\n     *\n     * @returns {void}\n     */\n    _onTokenUpdated() {\n        const { _appKey, _isDropboxEnabled, _token } = this.props;\n\n        if (!_isDropboxEnabled) {\n            return;\n        }\n\n        if (typeof _token === 'undefined') {\n            this.setState({\n                isTokenValid: false,\n                isValidating: false\n            });\n        } else {\n            this.setState({\n                isTokenValid: false,\n                isValidating: true\n            });\n            getDropboxData(_token, _appKey).then(data => {\n                if (typeof data === 'undefined') {\n                    this.setState({\n                        isTokenValid: false,\n                        isValidating: false\n                    });\n                } else {\n                    this.setState({\n                        isTokenValid: true,\n                        isValidating: false,\n                        ...data\n                    });\n                }\n            });\n        }\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Starts a file recording session.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { _autoCaptionOnRecord, _conference, _isDropboxEnabled, _token, dispatch } = this.props;\n        let appData;\n        const attributes = {};\n\n        if (_isDropboxEnabled && this.state.selectedRecordingService === RECORDING_TYPES.DROPBOX) {\n            if (_token) {\n                appData = JSON.stringify({\n                    'file_recording_metadata': {\n                        'upload_credentials': {\n                            'service_name': RECORDING_TYPES.DROPBOX,\n                            'token': _token\n                        }\n                    }\n                });\n                attributes.type = RECORDING_TYPES.DROPBOX;\n            } else {\n                dispatch(showErrorNotification({\n                    titleKey: 'dialog.noDropboxToken'\n                }));\n\n                return;\n            }\n        } else {\n            appData = JSON.stringify({\n                'file_recording_metadata': {\n                    'share': this.state.sharingEnabled\n                }\n            });\n            attributes.type = RECORDING_TYPES.JITSI_REC_SERVICE;\n        }\n\n        sendAnalytics(\n            createRecordingDialogEvent('start', 'confirm.button', attributes)\n        );\n\n        _conference.startRecording({\n            mode: JitsiRecordingConstants.mode.FILE,\n            appData\n        });\n\n        if (_autoCaptionOnRecord) {\n            dispatch(toggleRequestingSubtitles());\n        }\n\n        return true;\n    }\n\n    /**\n     * Renders the platform specific dialog content.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    _renderDialogContent: () => React$Component<*>\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code StartRecordingDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _appKey: string,\n *     _autoCaptionOnRecord: boolean,\n *     _conference: JitsiConference,\n *     _fileRecordingsServiceEnabled: boolean,\n *     _fileRecordingsServiceSharingEnabled: boolean,\n *     _isDropboxEnabled: boolean,\n *     _token: string\n * }}\n */\nexport function mapStateToProps(state: Object) {\n    const {\n        autoCaptionOnRecord = false,\n        fileRecordingsServiceEnabled = false,\n        fileRecordingsServiceSharingEnabled = false,\n        dropbox = {}\n    } = state['features/base/config'];\n\n    return {\n        _appKey: dropbox.appKey,\n        _autoCaptionOnRecord: autoCaptionOnRecord,\n        _conference: state['features/base/conference'].conference,\n        _fileRecordingsServiceEnabled: fileRecordingsServiceEnabled,\n        _fileRecordingsServiceSharingEnabled: fileRecordingsServiceSharingEnabled,\n        _isDropboxEnabled: isDropboxEnabled(state),\n        _token: state['features/dropbox'].token\n    };\n}\n\nexport default AbstractStartRecordingDialog;\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { ColorSchemeRegistry } from '../../../base/color-scheme';\nimport {\n    _abstractMapStateToProps\n} from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport {\n    Button,\n    Container,\n    Image,\n    LoadingIndicator,\n    Switch,\n    Text\n} from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { ColorPalette, StyleType } from '../../../base/styles';\nimport { authorizeDropbox, updateDropboxToken } from '../../../dropbox';\nimport { isVpaasMeeting } from '../../../jaas/functions';\nimport { RECORDING_TYPES } from '../../constants';\nimport { getRecordingDurationEstimation } from '../../functions';\n\nimport { DROPBOX_LOGO, ICON_CLOUD, JITSI_LOGO } from './styles';\n\ntype Props = {\n\n    /**\n     * Style of the dialogs feature.\n     */\n    _dialogStyles: StyleType,\n\n    /**\n     * The color-schemed stylesheet of this component.\n     */\n    _styles: StyleType,\n\n    /**\n     * The redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * Whether to show file recordings service, even if integrations\n     * are enabled.\n     */\n    fileRecordingsServiceEnabled: boolean,\n\n    /**\n     * Whether to show the possibility to share file recording with other people (e.g. meeting participants), based on\n     * the actual implementation on the backend.\n     */\n    fileRecordingsServiceSharingEnabled: boolean,\n\n    /**\n     * If true the content related to the integrations will be shown.\n     */\n    integrationsEnabled: boolean,\n\n    /**\n     * <tt>true</tt> if we have valid oauth token.\n     */\n    isTokenValid: boolean,\n\n    /**\n     * <tt>true</tt> if we are in process of validating the oauth token.\n     */\n    isValidating: boolean,\n\n    /**\n     * Whether or not the current meeting is a vpaas one.\n     */\n    isVpaas: boolean,\n\n    /**\n     * The function will be called when there are changes related to the\n     * switches.\n     */\n    onChange: Function,\n\n    /**\n     * Callback to be invoked on sharing setting change.\n     */\n    onSharingSettingChanged: Function,\n\n    /**\n     * The currently selected recording service of type: RECORDING_TYPES.\n     */\n    selectedRecordingService: ?string,\n\n    /**\n     * Boolean to set file recording sharing on or off.\n     */\n    sharingSetting: boolean,\n\n    /**\n     * Number of MiB of available space in user's Dropbox account.\n     */\n    spaceLeft: ?number,\n\n    /**\n     * The translate function.\n     */\n    t: Function,\n\n    /**\n     * The display name of the user's Dropbox account.\n     */\n    userName: ?string\n};\n\n/**\n * React Component for getting confirmation to start a file recording session.\n *\n * @extends Component\n */\nclass StartRecordingDialogContent extends Component<Props> {\n    /**\n     * Initializes a new {@code StartRecordingDialogContent} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSignIn = this._onSignIn.bind(this);\n        this._onSignOut = this._onSignOut.bind(this);\n        this._onDropboxSwitchChange = this._onDropboxSwitchChange.bind(this);\n        this._onRecordingServiceSwitchChange = this._onRecordingServiceSwitchChange.bind(this);\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    render() {\n        const { _styles: styles } = this.props;\n\n        return (\n            <Container\n                className = 'recording-dialog'\n                style = { styles.container }>\n                { this._renderNoIntegrationsContent() }\n                { this._renderIntegrationsContent() }\n                { this._renderFileSharingContent() }\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the file recording service sharing options, if enabled.\n     *\n     * @returns {React$Component}\n     */\n    _renderFileSharingContent() {\n        const { fileRecordingsServiceSharingEnabled, isVpaas, selectedRecordingService } = this.props;\n\n        if (!fileRecordingsServiceSharingEnabled\n            || isVpaas\n            || selectedRecordingService !== RECORDING_TYPES.JITSI_REC_SERVICE) {\n            return null;\n        }\n\n        const {\n            _dialogStyles,\n            _styles: styles,\n            isValidating,\n            onSharingSettingChanged,\n            sharingSetting,\n            t\n        } = this.props;\n\n        return (\n            <Container\n                className = 'recording-header'\n                key = 'fileSharingSetting'\n                style = { [\n                    styles.header,\n                    _dialogStyles.topBorderContainer\n                ] }>\n                <Container className = 'recording-icon-container'>\n                    <Image\n                        className = 'recording-icon'\n                        src = { ICON_CLOUD }\n                        style = { styles.recordingIcon } />\n                </Container>\n                <Text\n                    className = 'recording-title'\n                    style = {{\n                        ..._dialogStyles.text,\n                        ...styles.title\n                    }}>\n                    { t('recording.fileSharingdescription') }\n                </Text>\n                <Switch\n                    className = 'recording-switch'\n                    disabled = { isValidating }\n                    onValueChange\n                        = { onSharingSettingChanged }\n                    style = { styles.switch }\n                    trackColor = {{ false: ColorPalette.lightGrey }}\n                    value = { sharingSetting } />\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the content in case no integrations were enabled.\n     *\n     * @returns {React$Component}\n     */\n    _renderNoIntegrationsContent() {\n\n        // show the non integrations part only if fileRecordingsServiceEnabled\n        // is enabled or when there are no integrations enabled\n        if (!(this.props.fileRecordingsServiceEnabled\n            || !this.props.integrationsEnabled)) {\n            return null;\n        }\n\n        const { _dialogStyles, _styles: styles, isValidating, isVpaas, t } = this.props;\n\n        const switchContent\n            = this.props.integrationsEnabled\n                ? (\n                    <Switch\n                        className = 'recording-switch'\n                        disabled = { isValidating }\n                        onValueChange = { this._onRecordingServiceSwitchChange }\n                        style = { styles.switch }\n                        trackColor = {{ false: ColorPalette.lightGrey }}\n                        value = { this.props.selectedRecordingService === RECORDING_TYPES.JITSI_REC_SERVICE } />\n                ) : null;\n\n        const icon = isVpaas ? ICON_CLOUD : JITSI_LOGO;\n        const label = isVpaas ? t('recording.serviceDescriptionCloud') : t('recording.serviceDescription');\n\n        return (\n            <Container\n                className = 'recording-header'\n                key = 'noIntegrationSetting'\n                style = { styles.header }>\n                <Container className = 'recording-icon-container'>\n                    <Image\n                        className = 'recording-icon'\n                        src = { icon }\n                        style = { styles.recordingIcon } />\n                </Container>\n                <Text\n                    className = 'recording-title'\n                    style = {{\n                        ..._dialogStyles.text,\n                        ...styles.title\n                    }}>\n                    { label }\n                </Text>\n                { switchContent }\n            </Container>\n        );\n    }\n\n    /**\n     * Renders the content in case integrations were enabled.\n     *\n     * @protected\n     * @returns {React$Component}\n     */\n    _renderIntegrationsContent() {\n        if (!this.props.integrationsEnabled) {\n            return null;\n        }\n\n        const { _dialogStyles, _styles: styles, isTokenValid, isValidating, t } = this.props;\n\n        let content = null;\n        let switchContent = null;\n\n        if (isValidating) {\n            content = this._renderSpinner();\n            switchContent = <Container className = 'recording-switch' />;\n        } else if (isTokenValid) {\n            content = this._renderSignOut();\n            switchContent = (\n                <Container className = 'recording-switch'>\n                    <Button\n                        onValueChange = { this._onSignOut }\n                        style = { styles.signButton }>\n                        { t('recording.signOut') }\n                    </Button>\n                </Container>\n            );\n\n        } else {\n            switchContent = (\n                <Container className = 'recording-switch'>\n                    <Button\n                        onValueChange = { this._onSignIn }\n                        style = { styles.signButton }>\n                        { t('recording.signIn') }\n                    </Button>\n                </Container>\n            );\n        }\n\n        if (this.props.fileRecordingsServiceEnabled) {\n            switchContent = (\n                <Switch\n                    className = 'recording-switch'\n                    disabled = { isValidating }\n                    onValueChange = { this._onDropboxSwitchChange }\n                    style = { styles.switch }\n                    trackColor = {{ false: ColorPalette.lightGrey }}\n                    value = { this.props.selectedRecordingService\n                        === RECORDING_TYPES.DROPBOX } />\n            );\n        }\n\n        return (\n            <Container>\n                <Container\n                    className = 'recording-header recording-header-line'\n                    style = { styles.header }>\n                    <Container\n                        className = 'recording-icon-container'>\n                        <Image\n                            className = 'recording-icon'\n                            src = { DROPBOX_LOGO }\n                            style = { styles.recordingIcon } />\n                    </Container>\n                    <Text\n                        className = 'recording-title'\n                        style = {{\n                            ..._dialogStyles.text,\n                            ...styles.title\n                        }}>\n                        { t('recording.authDropboxText') }\n                    </Text>\n                    { switchContent }\n                </Container>\n                <Container\n                    className = 'authorization-panel'>\n                    { content }\n                </Container>\n            </Container>\n        );\n    }\n\n    _onDropboxSwitchChange: () => void;\n    _onRecordingServiceSwitchChange: () => void;\n\n    /**\n     * Handler for onValueChange events from the Switch component.\n     *\n     * @returns {void}\n     */\n    _onRecordingServiceSwitchChange() {\n        const {\n            isTokenValid,\n            onChange,\n            selectedRecordingService\n        } = this.props;\n\n        // act like group, cannot toggle off\n        if (selectedRecordingService\n                === RECORDING_TYPES.JITSI_REC_SERVICE) {\n            return;\n        }\n\n        onChange(RECORDING_TYPES.JITSI_REC_SERVICE);\n\n        if (isTokenValid) {\n            this._onSignOut();\n        }\n    }\n\n    /**\n     * Handler for onValueChange events from the Switch component.\n     *\n     * @returns {void}\n     */\n    _onDropboxSwitchChange() {\n        const {\n            isTokenValid,\n            onChange,\n            selectedRecordingService\n        } = this.props;\n\n        // act like group, cannot toggle off\n        if (selectedRecordingService\n                === RECORDING_TYPES.DROPBOX) {\n            return;\n        }\n\n        onChange(RECORDING_TYPES.DROPBOX);\n\n        if (!isTokenValid) {\n            this._onSignIn();\n        }\n    }\n\n    /**\n     * Renders a spinner component.\n     *\n     * @returns {React$Component}\n     */\n    _renderSpinner() {\n        return (\n            <LoadingIndicator\n                isCompleting = { false }\n                size = 'small' />\n        );\n    }\n\n    /**\n     * Renders the screen with the account information of a logged in user.\n     *\n     * @returns {React$Component}\n     */\n    _renderSignOut() {\n        const { _styles: styles, spaceLeft, t, userName } = this.props;\n        const duration = getRecordingDurationEstimation(spaceLeft);\n\n        return (\n            <Container>\n                <Container\n                    className = 'logged-in-panel'\n                    style = { styles.loggedIn }>\n                    <Container>\n                        <Text style = { styles.text }>\n                            { t('recording.loggedIn', { userName }) }\n                        </Text>\n                    </Container>\n                    <Container>\n                        <Text style = { styles.text }>\n                            {\n                                t('recording.availableSpace', {\n                                    spaceLeft,\n                                    duration\n                                })\n                            }\n                        </Text>\n                    </Container>\n                </Container>\n            </Container>\n        );\n    }\n\n    _onSignIn: () => void;\n\n    /**\n     * Sings in a user.\n     *\n     * @returns {void}\n     */\n    _onSignIn() {\n        sendAnalytics(createRecordingDialogEvent('start', 'signIn.button'));\n        this.props.dispatch(authorizeDropbox());\n    }\n\n    _onSignOut: () => void;\n\n    /**\n     * Sings out an user from dropbox.\n     *\n     * @returns {void}\n     */\n    _onSignOut() {\n        sendAnalytics(createRecordingDialogEvent('start', 'signOut.button'));\n        this.props.dispatch(updateDropboxToken());\n    }\n}\n\n/**\n * Maps part of the redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    return {\n        ..._abstractMapStateToProps(state),\n        isVpaas: isVpaasMeeting(state),\n        _styles: ColorSchemeRegistry.get(state, 'StartRecordingDialogContent')\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(StartRecordingDialogContent));\n","// XXX CSS is used on Web, JavaScript styles are use only for mobile. Export an\n// (empty) object so that styles[*] statements on Web don't trigger errors.\nexport default {};\n\nexport const DROPBOX_LOGO = 'images/dropboxLogo_square.png';\n\nexport const ICON_CLOUD = 'images/icon-cloud.png';\n\nexport const JITSI_LOGO = 'images/jitsiLogo_square.png';\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport AbstractStartRecordingDialog, {\n    mapStateToProps\n} from '../AbstractStartRecordingDialog';\nimport StartRecordingDialogContent from '../StartRecordingDialogContent';\n\n/**\n * React Component for getting confirmation to start a file recording session in\n * progress.\n *\n * @extends Component\n */\nclass StartRecordingDialog extends AbstractStartRecordingDialog {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            isTokenValid,\n            isValidating,\n            selectedRecordingService,\n            sharingEnabled,\n            spaceLeft,\n            userName\n        } = this.state;\n        const { _fileRecordingsServiceEnabled, _fileRecordingsServiceSharingEnabled, _isDropboxEnabled } = this.props;\n\n        // disable ok button id recording service is shown only, when\n        // validating dropbox token, if that is not enabled we either always\n        // show the ok button or if just dropbox is enabled ok is available\n        // when there is token\n        const isOkDisabled\n            = _fileRecordingsServiceEnabled ? isValidating\n                : _isDropboxEnabled ? !isTokenValid : false;\n\n        return (\n            <Dialog\n                okDisabled = { isOkDisabled }\n                okKey = 'dialog.startRecording'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.startRecording'\n                width = 'small'>\n                <StartRecordingDialogContent\n                    fileRecordingsServiceEnabled = { _fileRecordingsServiceEnabled }\n                    fileRecordingsServiceSharingEnabled = { _fileRecordingsServiceSharingEnabled }\n                    integrationsEnabled = { this._areIntegrationsEnabled() }\n                    isTokenValid = { isTokenValid }\n                    isValidating = { isValidating }\n                    onChange = { this._onSelectedRecordingServiceChanged }\n                    onSharingSettingChanged = { this._onSharingSettingChanged }\n                    selectedRecordingService = { selectedRecordingService }\n                    sharingSetting = { sharingEnabled }\n                    spaceLeft = { spaceLeft }\n                    userName = { userName } />\n            </Dialog>\n        );\n    }\n\n    _areIntegrationsEnabled: () => boolean;\n    _onSubmit: () => boolean;\n    _onSelectedRecordingServiceChanged: (string) => void;\n    _onSharingSettingChanged: () => void;\n}\n\nexport default translate(connect(mapStateToProps)(StartRecordingDialog));\n","// @flow\n\nimport { Component } from 'react';\n\nimport {\n    createRecordingDialogEvent,\n    sendAnalytics\n} from '../../../analytics';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { getActiveSession } from '../../functions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractStopRecordingDialog}.\n */\nexport type Props = {\n\n    /**\n     * The {@code JitsiConference} for the current conference.\n     */\n    _conference: Object,\n\n    /**\n     * The redux representation of the recording session to be stopped.\n     */\n    _fileRecordingSession: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Abstract React Component for getting confirmation to stop a file recording\n * session in progress.\n *\n * @extends Component\n */\nexport default class AbstractStopRecordingDialog<P: Props>\n    extends Component<P> {\n    /**\n     * Initializes a new {@code AbstrStopRecordingDialog} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Stops the recording session.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        sendAnalytics(createRecordingDialogEvent('stop', 'confirm.button'));\n\n        const { _fileRecordingSession } = this.props;\n\n        if (_fileRecordingSession) {\n            this.props._conference.stopRecording(_fileRecordingSession.id);\n        }\n\n        return true;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code StopRecordingDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _conference: JitsiConference,\n *     _fileRecordingSession: Object\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _conference: state['features/base/conference'].conference,\n        _fileRecordingSession:\n            getActiveSession(state, JitsiRecordingConstants.mode.FILE)\n    };\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Dialog } from '../../../../base/dialog';\nimport { translate } from '../../../../base/i18n';\nimport { connect } from '../../../../base/redux';\nimport AbstractStopRecordingDialog, {\n    type Props,\n    _mapStateToProps\n} from '../AbstractStopRecordingDialog';\n\n/**\n * React Component for getting confirmation to stop a file recording session in\n * progress.\n *\n * @extends Component\n */\nclass StopRecordingDialog extends AbstractStopRecordingDialog<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                okKey = 'dialog.confirm'\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.recording'\n                width = 'small'>\n                { t('dialog.stopRecordingWarning') }\n            </Dialog>\n        );\n    }\n\n    _onSubmit: () => boolean\n}\n\nexport default translate(connect(_mapStateToProps)(StopRecordingDialog));\n","import * as colors from '@atlaskit/theme/colors';\nvar flagBackgroundColor = {\n  error: {\n    light: colors.R400,\n    dark: colors.R300\n  },\n  info: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  normal: {\n    light: colors.N0,\n    dark: colors.DN50\n  },\n  success: {\n    light: colors.G400,\n    dark: colors.G300\n  },\n  warning: {\n    light: colors.Y200,\n    dark: colors.Y300\n  }\n};\nexport var getFlagBackgroundColor = function getFlagBackgroundColor(appearance, mode) {\n  return flagBackgroundColor[appearance][mode];\n};\nexport var flagBorderColor = colors.N60A;\nvar flagTextColor = {\n  error: {\n    light: colors.N0,\n    dark: colors.DN40\n  },\n  info: {\n    light: colors.N0,\n    dark: colors.DN600\n  },\n  normal: {\n    light: colors.N500,\n    dark: colors.DN600\n  },\n  success: {\n    light: colors.N0,\n    dark: colors.DN40\n  },\n  warning: {\n    light: colors.N700,\n    dark: colors.DN40\n  }\n};\nexport var getFlagTextColor = function getFlagTextColor(appearance, mode) {\n  return flagTextColor[appearance][mode];\n};\nexport var flagShadowColor = colors.N50A;\nvar flagFocusRingColor = {\n  error: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  info: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  normal: {\n    light: colors.B100,\n    dark: colors.B100\n  },\n  success: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  warning: {\n    light: colors.N200,\n    dark: colors.N200\n  }\n};\nexport var getFlagFocusRingColor = function getFlagFocusRingColor(appearance, mode) {\n  return flagFocusRingColor[appearance][mode];\n};\nvar lightButtonBackground = 'rgba(255, 255, 255, 0.08)';\nvar actionBackground = {\n  success: {\n    light: lightButtonBackground,\n    dark: colors.N30A\n  },\n  info: {\n    light: lightButtonBackground,\n    dark: lightButtonBackground\n  },\n  error: {\n    light: lightButtonBackground,\n    dark: colors.N30A\n  },\n  warning: {\n    light: colors.N30A,\n    dark: colors.N30A\n  },\n  normal: {\n    light: 'none',\n    dark: 'none'\n  }\n};\nvar actionColor = {\n  success: {\n    light: colors.N0,\n    dark: colors.DN40\n  },\n  info: {\n    light: colors.N0,\n    dark: colors.DN600\n  },\n  error: {\n    light: colors.N0,\n    dark: colors.DN600\n  },\n  warning: {\n    light: colors.N700,\n    dark: colors.DN40\n  },\n  normal: {\n    light: colors.B400,\n    dark: colors.B100\n  }\n};\nexport var getActionBackground = function getActionBackground(appearance, mode) {\n  return actionBackground[appearance][mode];\n};\nexport var getActionColor = function getActionColor(appearance, mode) {\n  return actionColor[appearance][mode];\n};","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n        max-height: \", \"px;\\n        transition: max-height 0.3s;\\n        display: flex;\\n        flex: 1 1 100%;\\n        flex-direction: column;\\n        justify-content: center;\\n        min-width: 0;\\n        padding: 0 0 0 \", \"px;\\n      \"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport { css, jsx } from '@emotion/core';\nimport { ExitingPersistence, FadeIn } from '@atlaskit/motion';\nimport { gridSize } from '@atlaskit/theme/constants';\nvar paddingLeft = gridSize() * 5;\n\nvar Expander = function Expander(_ref) {\n  var children = _ref.children,\n      isExpanded = _ref.isExpanded,\n      testId = _ref.testId;\n  // Need to always render the ExpanderInternal otherwise the\n  // reveal transition doesn't happen. We can't use CSS animation for\n  // the the reveal because we don't know the height of the content.\n  return jsx(\"div\", {\n    \"aria-hidden\": !isExpanded,\n    css: css(_templateObject(), isExpanded ? 150 : 0, paddingLeft),\n    \"data-testid\": testId && \"\".concat(testId, \"-expander\")\n  }, jsx(ExitingPersistence, {\n    appear: true\n  }, isExpanded && jsx(FadeIn, null, function (props) {\n    return jsx(\"div\", props, children);\n  })));\n};\n\nexport default Expander;","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n            &&,\\n            a&& {\\n              margin-left: \", \"px;\\n              font-weight: 500;\\n              padding: 0 \", \"px !important;\\n              background: \", \";\\n              color: \", \" !important;\\n            }\\n            &&:focus,\\n            a&&:focus {\\n              box-shadow: 0 0 0 2px \", \";\\n            }\\n            &&:hover,\\n            &&:active,\\n            a&&:hover,\\n            a&&:active {\\n              text-decoration: underline;\\n            }\\n          \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n              text-align: center;\\n              display: inline-block;\\n              width: \", \"px;\\n            \"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n        display: flex;\\n        flex-wrap: wrap;\\n        padding-top: \", \"px;\\n        transform: \", \";\\n        align-items: center;\\n      \"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport { css, jsx } from '@emotion/core';\nimport Button from '@atlaskit/button/custom-theme-button';\nimport { gridSize as getGridSize } from '@atlaskit/theme/constants';\nimport { DEFAULT_APPEARANCE } from './constants';\nimport { getActionBackground, getActionColor, getFlagFocusRingColor } from './theme';\nvar gridSize = getGridSize();\nvar separatorWidth = gridSize * 2;\nvar defaultAppearanceTranslate = gridSize / 4;\n\nvar FlagActions = function FlagActions(props) {\n  var _props$appearance = props.appearance,\n      appearance = _props$appearance === void 0 ? DEFAULT_APPEARANCE : _props$appearance,\n      _props$actions = props.actions,\n      actions = _props$actions === void 0 ? [] : _props$actions,\n      linkComponent = props.linkComponent,\n      mode = props.mode,\n      testId = props.testId;\n\n  if (!actions.length) {\n    return null;\n  }\n\n  var isBold = appearance !== DEFAULT_APPEARANCE;\n  return jsx(\"div\", {\n    css: css(_templateObject(), gridSize, appearance === DEFAULT_APPEARANCE ? \"translateX(-\".concat(defaultAppearanceTranslate, \"px)\") : 0),\n    \"data-testid\": testId && \"\".concat(testId, \"-actions\")\n  }, actions.map(function (action, index) {\n    return [index && !isBold ? jsx(\"div\", {\n      css: css(_templateObject2(), separatorWidth),\n      key: index + 0.5\n    }, \"\\xB7\") : '', jsx(Button, {\n      onClick: action.onClick,\n      href: action.href,\n      target: action.target,\n      appearance: isBold ? 'default' : 'link',\n      component: linkComponent,\n      spacing: \"compact\",\n      testId: action.testId,\n      key: index,\n      css: css(_templateObject3(), index && isBold ? gridSize : 0, appearance === 'normal' ? 0 : gridSize, getActionBackground(appearance, mode), getActionColor(appearance, mode), getFlagFocusRingColor(appearance, mode))\n    }, action.content)];\n  }));\n};\n\nexport default FlagActions;","export var DEFAULT_APPEARANCE = 'normal';","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport React from 'react';\nimport { easeIn, easeOut } from '../utils/curves';\nimport { mediumDurationMs } from '../utils/durations';\nimport KeyframesMotion from './keyframes-motion';\nexport var slideInAnimation = function slideInAnimation(from, state, fade) {\n  var _ref;\n\n  var initial = state === 'entering' ? '0%' : '100%';\n  var end = state === 'entering' ? '100%' : '0%';\n  var fromMap = {\n    top: 'translate3d(0, -100%, 0)',\n    right: 'translate3d(100%, 0, 0)',\n    bottom: 'translate3d(0, 100%, 0)',\n    left: 'translate3d(-100%, 0, 0)'\n  };\n  var animateOpacity = fade === 'inout' || fade === 'in' && state === 'entering' || fade === 'out' && state === 'exiting';\n  return _ref = {}, _defineProperty(_ref, initial, {\n    transform: fromMap[from],\n    opacity: animateOpacity ? 0 : 1\n  }), _defineProperty(_ref, end, {\n    transform: 'none',\n    opacity: 1\n  }), _ref;\n};\n\nvar SlideIn = function SlideIn(_ref2) {\n  var children = _ref2.children,\n      enterFrom = _ref2.enterFrom,\n      exitTo = _ref2.exitTo,\n      _ref2$fade = _ref2.fade,\n      fade = _ref2$fade === void 0 ? 'none' : _ref2$fade,\n      _ref2$duration = _ref2.duration,\n      duration = _ref2$duration === void 0 ? mediumDurationMs : _ref2$duration,\n      _ref2$animationTiming = _ref2.animationTimingFunction,\n      animationTimingFunction = _ref2$animationTiming === void 0 ? function (state) {\n    return state === 'entering' ? easeOut : easeIn;\n  } : _ref2$animationTiming,\n      props = _objectWithoutProperties(_ref2, [\"children\", \"enterFrom\", \"exitTo\", \"fade\", \"duration\", \"animationTimingFunction\"]);\n\n  return /*#__PURE__*/React.createElement(KeyframesMotion, _extends({\n    duration: duration,\n    enteringAnimation: slideInAnimation(enterFrom, 'entering', fade),\n    exitingAnimation: slideInAnimation(exitTo || enterFrom, 'exiting', fade),\n    animationTimingFunction: animationTimingFunction\n  }, props), children);\n};\n\nexport default SlideIn;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n                border: 0;\\n                clip: rect(1px, 1px, 1px, 1px);\\n                height: 1px;\\n                overflow: hidden;\\n                padding: 0;\\n                position: absolute;\\n                white-space: nowrap;\\n                width: 1px;\\n              \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n            bottom: \", \"px;\\n            left: \", \"px;\\n            position: fixed;\\n            z-index: \", \";\\n            @media (max-width: 560px) {\\n              bottom: 0;\\n              left: 0;\\n            }\\n          \"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n                    \", \"\\n                    \", \"\\n                  \"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport { Children, createContext, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { easeIn, ExitingPersistence, SlideIn } from '@atlaskit/motion';\nimport Portal from '@atlaskit/portal';\nimport { gridSize as getGridSize, layers } from '@atlaskit/theme/constants';\nvar gridSize = getGridSize();\nexport var flagWidth = gridSize * 50;\nexport var flagAnimationTime = 400;\nvar flagBottom = gridSize * 6;\nvar flagLeft = gridSize * 10;\nexport var FlagGroupContext = /*#__PURE__*/createContext({\n  dismissAllowed: function dismissAllowed() {\n    return false;\n  }\n});\nexport function useFlagGroup() {\n  return useContext(FlagGroupContext);\n} // transition: none is set on first-of-type to prevent a bug in Firefox\n// that causes a broken transition\n\nvar baseStyles = \"\\n  bottom: 0;\\n  position: absolute;\\n  width: \".concat(flagWidth, \"px;\\n  transition: transform \").concat(flagAnimationTime, \"ms ease-in-out;\\n\\n  @media (max-width: 560px) {\\n    width: 100vw;\\n  }\\n\\n  &:first-of-type {\\n    transition: none;\\n    transform: translate(0,0);\\n  }\\n\\n  &:nth-of-type(n + 2) {\\n    animation-duration: 0ms;\\n    transform: translateX(0) translateY(100%) translateY(\").concat(2 * gridSize, \"px);\\n  }\\n\\n  /* Layer the 'primary' flag above the 'secondary' flag */\\n  &:nth-of-type(1) {\\n    z-index: 5;\\n  }\\n  &:nth-of-type(2) {\\n    z-index: 4;\\n  }\\n\\n  &:nth-of-type(n + 4) {\\n    visibility: hidden;\\n  }\\n\");\n\nvar FlagGroup = function FlagGroup(props) {\n  var id = props.id,\n      _props$label = props.label,\n      label = _props$label === void 0 ? 'Flag notifications' : _props$label,\n      _props$labelTag = props.labelTag,\n      LabelTag = _props$labelTag === void 0 ? 'h2' : _props$labelTag,\n      children = props.children,\n      onDismissed = props.onDismissed;\n\n  var renderChildren = function renderChildren() {\n    return children ? Children.map(children, function (flag, index) {\n      var isDismissAllowed = index === 0;\n      var id = flag.props.id;\n      return jsx(SlideIn, {\n        key: id,\n        enterFrom: 'left',\n        fade: 'inout',\n        duration: flagAnimationTime,\n        animationTimingFunction: function animationTimingFunction() {\n          return easeIn;\n        }\n      }, function (props) {\n        return jsx(\"div\", _extends({}, props, {\n          css: css(_templateObject(), baseStyles, isDismissAllowed ? // Transform needed to push up while 1st flag is leaving\n          // Exiting time should match the exiting time of motion so is halved\n          \"\\n                    && + * {\\n                     transform: translate(0, 0);\\n                     transition-duration: \".concat(flagAnimationTime / 2, \"ms\\n                   }\") : '')\n        }), flag);\n      });\n    }) : false;\n  };\n\n  var hasFlags = Array.isArray(children) ? children.length > 0 : Boolean(children);\n  var firstFlagId = null;\n\n  if (hasFlags && children) {\n    firstFlagId = Array.isArray(children) ? children[0].props.id : children.props.id;\n  }\n\n  var api = {\n    onDismissed: onDismissed,\n    dismissAllowed: function dismissAllowed(id) {\n      return id === firstFlagId;\n    }\n  };\n  return jsx(FlagGroupContext.Provider, {\n    value: api\n  }, jsx(Portal, {\n    zIndex: layers.flag()\n  }, jsx(\"div\", {\n    id: id,\n    css: css(_templateObject2(), flagBottom, flagLeft, layers.flag())\n  }, hasFlags ? jsx(LabelTag, {\n    css: css(_templateObject3())\n  }, label) : null, jsx(ExitingPersistence, {\n    appear: false\n  }, renderChildren()))));\n};\n\nexport default FlagGroup;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction _templateObject5() {\n  var data = _taggedTemplateLiteral([\"\\n                    color: \", \";\\n                    word-wrap: break-word;\\n                    overflow: auto;\\n                    max-height: 100px; /* height is defined as 5 lines maximum by design */\\n                  \"]);\n\n  _templateObject5 = function _templateObject5() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject4() {\n  var data = _taggedTemplateLiteral([\"\\n                  color: \", \";\\n                  font-weight: 600;\\n                  flex: 1;\\n                  overflow: hidden;\\n                  text-overflow: ellipsis;\\n                  white-space: nowrap;\\n                  padding: 0 0 0 \", \"px;\\n                \"]);\n\n  _templateObject4 = function _templateObject4() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n                display: flex;\\n                align-items: center;\\n                height: \", \"px;\\n              \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n              background-color: \", \";\\n              border-radius: \", \"px;\\n              box-sizing: border-box;\\n              box-shadow: \", \";\\n              color: \", \";\\n              padding: \", \"px;\\n              transition: background-color 200ms;\\n              width: 100%;\\n              z-index: \", \";\\n\\n              &:focus {\\n                outline: none;\\n                box-shadow: 0 0 0 2px \", \";\\n              }\\n            \"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n            appearance: none;\\n            background: none;\\n            border: none;\\n            border-radius: \", \"px;\\n            color: \", \";\\n            cursor: pointer;\\n            flex: 0 0 auto;\\n            line-height: 1;\\n            margin-left: \", \"px;\\n            padding: 0;\\n            white-space: nowrap;\\n            &:focus {\\n              outline: none;\\n              box-shadow: 0 0 0 2px \", \";\\n            }\\n          \"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport { useCallback, useEffect, useState } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';\nimport ChevronUpIcon from '@atlaskit/icon/glyph/chevron-up';\nimport CrossIcon from '@atlaskit/icon/glyph/cross';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { borderRadius, gridSize as getGridSize, layers } from '@atlaskit/theme/constants';\nimport { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';\nimport { DEFAULT_APPEARANCE } from './constants';\nimport { flagBorderColor, flagShadowColor, getFlagBackgroundColor, getFlagFocusRingColor, getFlagTextColor } from './theme';\nimport { name as packageName, version as packageVersion } from './version.json';\nimport Expander from './expander';\nimport Actions from './flag-actions';\nimport { useFlagGroup } from './flag-group';\n\nfunction noop() {}\n\nvar analyticsAttributes = {\n  componentName: 'flag',\n  packageName: packageName,\n  packageVersion: packageVersion\n};\nvar gridSize = getGridSize();\nvar doubleGridSize = gridSize * 2;\nvar headerHeight = gridSize * 4;\n\nvar Flag = function Flag(props) {\n  var _props$actions = props.actions,\n      actions = _props$actions === void 0 ? [] : _props$actions,\n      _props$appearance = props.appearance,\n      appearance = _props$appearance === void 0 ? DEFAULT_APPEARANCE : _props$appearance,\n      icon = props.icon,\n      title = props.title,\n      description = props.description,\n      linkComponent = props.linkComponent,\n      onMouseOver = props.onMouseOver,\n      _props$onFocus = props.onFocus,\n      onFocus = _props$onFocus === void 0 ? noop : _props$onFocus,\n      onMouseOut = props.onMouseOut,\n      _props$onBlur = props.onBlur,\n      onBlur = _props$onBlur === void 0 ? noop : _props$onBlur,\n      testId = props.testId,\n      id = props.id,\n      analyticsContext = props.analyticsContext;\n\n  var _useFlagGroup = useFlagGroup(),\n      _useFlagGroup$onDismi = _useFlagGroup.onDismissed,\n      onDismissed = _useFlagGroup$onDismi === void 0 ? noop : _useFlagGroup$onDismi,\n      dismissAllowed = _useFlagGroup.dismissAllowed;\n\n  var isDismissAllowed = dismissAllowed(id);\n\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      isExpanded = _useState2[0],\n      setIsExpanded = _useState2[1];\n\n  var onDismissedAnalytics = usePlatformLeafEventHandler(_objectSpread({\n    fn: onDismissed,\n    action: 'dismissed',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var isBold = appearance !== DEFAULT_APPEARANCE;\n  var renderToggleOrDismissButton = useCallback(function (_ref) {\n    var mode = _ref.mode;\n\n    // If it is normal appearance a toggle button cannot be rendered\n    // Ensure onDismissed is defined and isDismissAllowed is true to render\n    // the dismiss button\n    if (!isBold && !isDismissAllowed) {\n      return null;\n    } // If it is bold then ensure there is a description or actions to render\n    // the toggle button\n\n\n    if (isBold && !description && !actions.length) {\n      return null;\n    }\n\n    var ButtonIcon = CrossIcon;\n    var buttonLabel = 'Dismiss flag';\n\n    var buttonAction = function buttonAction() {\n      if (isDismissAllowed) {\n        onDismissedAnalytics(id);\n      }\n    };\n\n    var size = 'small';\n    var buttonTestId = testId && \"\".concat(testId, \"-dismiss\");\n\n    if (isBold) {\n      ButtonIcon = isExpanded ? ChevronUpIcon : ChevronDownIcon;\n      buttonLabel = 'Toggle flag body';\n\n      buttonAction = function buttonAction() {\n        return setIsExpanded(!isExpanded);\n      };\n\n      size = 'large';\n      buttonTestId = testId && \"\".concat(testId, \"-toggle\");\n    }\n\n    return jsx(\"button\", {\n      css: css(_templateObject(), borderRadius(), getFlagTextColor(appearance, mode), gridSize, getFlagFocusRingColor(appearance, mode)),\n      \"aria-expanded\": isExpanded,\n      onClick: buttonAction,\n      \"data-testid\": buttonTestId,\n      type: \"button\"\n    }, jsx(ButtonIcon, {\n      label: buttonLabel,\n      size: size\n    }));\n  }, [actions.length, appearance, description, id, isBold, isDismissAllowed, isExpanded, onDismissedAnalytics, testId]); // We prevent default on mouse down to avoid focus ring when the flag is clicked,\n  // while still allowing it to be focused with the keyboard.\n\n  var handleMouseDown = useCallback(function (e) {\n    e.preventDefault();\n  }, []);\n  useEffect(function () {\n    // If buttons are removed as a prop, update isExpanded to be false\n    if (isBold && isExpanded && !description && !actions.length) {\n      setIsExpanded(false);\n    }\n  }, [actions.length, description, isBold, isExpanded]);\n  var onFocusAnalytics = usePlatformLeafEventHandler(_objectSpread({\n    fn: onFocus,\n    action: 'focused',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var onBlurAnalytics = usePlatformLeafEventHandler(_objectSpread({\n    fn: onBlur,\n    action: 'blurred',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var autoDismissProps = {\n    onMouseOver: onMouseOver,\n    onFocus: onFocusAnalytics,\n    onMouseOut: onMouseOut,\n    onBlur: onBlurAnalytics\n  };\n  var OptionalDismissButton = renderToggleOrDismissButton;\n  var boxShadow = \"0 20px 32px -8px \".concat(flagShadowColor);\n\n  if (!isBold) {\n    boxShadow = \"0 0 1px \".concat(flagBorderColor, \", \").concat(boxShadow);\n  }\n\n  return jsx(GlobalTheme.Consumer, null, function (tokens) {\n    var mode = tokens.mode;\n    var textColour = getFlagTextColor(appearance, mode);\n    return jsx(\"div\", _extends({\n      css: css(_templateObject2(), getFlagBackgroundColor(appearance, mode), borderRadius(), boxShadow, textColour, doubleGridSize, layers.flag(), getFlagFocusRingColor(appearance, mode)),\n      role: \"alert\",\n      tabIndex: 0,\n      onMouseDown: handleMouseDown,\n      \"data-testid\": testId\n    }, autoDismissProps), jsx(\"div\", {\n      css: css(_templateObject3(), headerHeight)\n    }, icon, jsx(\"span\", {\n      css: css(_templateObject4(), textColour, doubleGridSize)\n    }, title), jsx(OptionalDismissButton, {\n      mode: mode\n    })), jsx(Expander, {\n      isExpanded: !isBold || isExpanded,\n      testId: testId\n    }, description && jsx(\"div\", {\n      css: css(_templateObject5(), textColour),\n      \"data-testid\": testId && \"\".concat(testId, \"-description\")\n    }, description), jsx(Actions, {\n      actions: actions,\n      appearance: appearance,\n      linkComponent: linkComponent,\n      testId: testId,\n      mode: mode\n    })));\n  });\n};\n\nexport default Flag;","// @flow\n\nimport { Component } from 'react';\n\nimport { NOTIFICATION_TYPE } from '../constants';\n\nexport type Props = {\n\n    /**\n     * Display appearance for the component, passed directly to the\n     * notification.\n     */\n    appearance: string,\n\n    /**\n     * Callback invoked when the custom button is clicked.\n     */\n    customActionHandler: Function,\n\n    /**\n     * The text to display as button in the notification for the custom action.\n     */\n    customActionNameKey: string,\n\n    /**\n     * The text to display in the body of the notification. If not passed\n     * in, the passed in descriptionKey will be used.\n     */\n    defaultTitleKey: string,\n\n    /**\n     * A description string that can be used in addition to the prop\n     * descriptionKey.\n     */\n    description: string,\n\n    /**\n     * The translation arguments that may be necessary for the description.\n     */\n    descriptionArguments: Object,\n\n    /**\n     * The translation key to use as the body of the notification.\n     */\n    descriptionKey: string,\n\n    /**\n     * Whether the support link should be hidden in the case of an error\n     * message.\n     */\n    hideErrorSupportLink: boolean,\n\n    /**\n     * Whether or not the dismiss button should be displayed.\n     */\n    isDismissAllowed: boolean,\n\n    /**\n     * Maximum lines of the description.\n     */\n    maxLines: ?number,\n\n    /**\n     * Callback invoked when the user clicks to dismiss the notification.\n     */\n    onDismissed: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The text to display at the top of the notification. If not passed in,\n     * the passed in titleKey will be used.\n     */\n    title: string,\n\n    /**\n     * The translation arguments that may be necessary for the title.\n     */\n    titleArguments: Object,\n\n    /**\n     * The translation key to display as the title of the notification if\n     * no title is provided.\n     */\n    titleKey: string,\n\n    /**\n     * The unique identifier for the notification.\n     */\n    uid: string\n};\n\n/**\n * Abstract class for {@code Notification} component.\n *\n * @extends Component\n */\nexport default class AbstractNotification<P: Props> extends Component<P> {\n    /**\n     * Default values for {@code Notification} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        appearance: NOTIFICATION_TYPE.NORMAL,\n        isDismissAllowed: true\n    };\n\n    /**\n     * Initializes a new {@code Notification} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onDismissed = this._onDismissed.bind(this);\n    }\n\n    _getDescription: () => Array<string>\n\n    /**\n     * Returns the description array to be displayed.\n     *\n     * @protected\n     * @returns {Array<string>}\n     */\n    _getDescription() {\n        const {\n            description,\n            descriptionArguments,\n            descriptionKey,\n            t\n        } = this.props;\n\n        const descriptionArray = [];\n\n        descriptionKey\n            && descriptionArray.push(t(descriptionKey, descriptionArguments));\n\n        description && descriptionArray.push(description);\n\n        return descriptionArray;\n    }\n\n    _getDescriptionKey: () => string\n\n    /**\n     * Returns the description key that was used if any.\n     *\n     * @protected\n     * @returns {string}\n     */\n    _getDescriptionKey() {\n        return this.props.descriptionKey;\n    }\n\n    _onDismissed: () => void;\n\n    /**\n     * Callback to dismiss the notification.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDismissed() {\n        this.props.onDismissed(this.props.uid);\n    }\n}\n","// @flow\n\nimport Flag from '@atlaskit/flag';\nimport EditorInfoIcon from '@atlaskit/icon/glyph/editor/info';\nimport ErrorIcon from '@atlaskit/icon/glyph/error';\nimport WarningIcon from '@atlaskit/icon/glyph/warning';\nimport { colors } from '@atlaskit/theme';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { NOTIFICATION_TYPE } from '../../constants';\nimport AbstractNotification, {\n    type Props\n} from '../AbstractNotification';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Secondary colors for notification icons.\n *\n * @type {{error, info, normal, success, warning}}\n */\nconst ICON_COLOR = {\n    error: colors.R400,\n    info: colors.N500,\n    normal: colors.N0,\n    success: colors.G400,\n    warning: colors.Y200\n};\n\n/**\n * Implements a React {@link Component} to display a notification.\n *\n * @extends Component\n */\nclass Notification extends AbstractNotification<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            appearance,\n            hideErrorSupportLink,\n            t,\n            title,\n            titleArguments,\n            titleKey,\n            uid\n        } = this.props;\n\n        return (\n            <Flag\n                actions = { this._mapAppearanceToButtons(hideErrorSupportLink) }\n                appearance = { appearance }\n                description = { this._renderDescription() }\n                icon = { this._mapAppearanceToIcon() }\n                id = { uid }\n                testId = { titleKey }\n                title = { title || t(titleKey, titleArguments) } />\n        );\n    }\n\n    _getDescription: () => Array<string>\n\n    _getDescriptionKey: () => string\n\n    _onDismissed: () => void;\n\n    /**\n     * Creates a {@code ReactElement} for displaying the contents of the\n     * notification.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderDescription() {\n        const description = this._getDescription();\n\n        // the id is used for testing the UI\n        return (\n            <p data-testid = { this._getDescriptionKey() } >\n                { description }\n            </p>\n        );\n    }\n\n    /**\n     * Opens the support page.\n     *\n     * @returns {void}\n     * @private\n     */\n    _onOpenSupportLink() {\n        window.open(interfaceConfig.SUPPORT_URL, '_blank', 'noopener');\n    }\n\n    /**\n     * Creates action button configurations for the notification based on\n     * notification appearance.\n     *\n     * @param {boolean} hideErrorSupportLink - Indicates if the support link\n     * should be hidden in the error messages.\n     * @private\n     * @returns {Object[]}\n     */\n    _mapAppearanceToButtons(hideErrorSupportLink) {\n        switch (this.props.appearance) {\n        case NOTIFICATION_TYPE.ERROR: {\n            const buttons = [\n                {\n                    content: this.props.t('dialog.dismiss'),\n                    onClick: this._onDismissed\n                }\n            ];\n\n            if (!hideErrorSupportLink && interfaceConfig.SUPPORT_URL) {\n                buttons.push({\n                    content: this.props.t('dialog.contactSupport'),\n                    onClick: this._onOpenSupportLink\n                });\n            }\n\n            return buttons;\n        }\n        case NOTIFICATION_TYPE.WARNING:\n            return [\n                {\n                    content: this.props.t('dialog.Ok'),\n                    onClick: this._onDismissed\n                }\n            ];\n\n        default:\n            if (this.props.customActionNameKey && this.props.customActionHandler) {\n                return [\n                    {\n                        content: this.props.t(this.props.customActionNameKey),\n                        onClick: () => {\n                            if (this.props.customActionHandler()) {\n                                this._onDismissed();\n                            }\n                        }\n                    }\n                ];\n            }\n\n            return [];\n        }\n    }\n\n    /**\n     * Creates an icon component depending on the configured notification\n     * appearance.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _mapAppearanceToIcon() {\n        const appearance = this.props.appearance;\n        const secIconColor = ICON_COLOR[this.props.appearance];\n        const iconSize = 'medium';\n\n        switch (appearance) {\n        case NOTIFICATION_TYPE.ERROR:\n            return (\n                <ErrorIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n\n        case NOTIFICATION_TYPE.WARNING:\n            return (\n                <WarningIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n\n        default:\n            return (\n                <EditorInfoIcon\n                    label = { appearance }\n                    secondaryColor = { secIconColor }\n                    size = { iconSize } />\n            );\n        }\n    }\n}\n\nexport default translate(Notification);\n","// @flow\n\nimport { Component } from 'react';\n\nimport { hideNotification } from '../actions';\nimport { areThereNotifications } from '../functions';\n\nexport type Props = {\n\n    /**\n     * The notifications to be displayed, with the first index being the\n     * notification at the top and the rest shown below it in order.\n     */\n    _notifications: Array<Object>,\n\n    /**\n     * The length, in milliseconds, to use as a default timeout for all\n     * dismissable timeouts that do not have a timeout specified.\n     */\n    autoDismissTimeout: number,\n\n    /**\n     * Invoked to update the redux store in order to remove notifications.\n     */\n    dispatch: Function\n};\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Abstract class for {@code NotificationsContainer} component.\n */\nexport default class AbstractNotificationsContainer<P: Props>\n    extends Component<P> {\n    /**\n     * A timeout id returned by setTimeout.\n     */\n    _notificationDismissTimeout: ?TimeoutID;\n\n    /**\n     * Initializes a new {@code AbstractNotificationsContainer} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        /**\n         * The timeout set for automatically dismissing a displayed\n         * notification. This value is set on the instance and not state to\n         * avoid additional re-renders.\n         *\n         * @type {number|null}\n         */\n        this._notificationDismissTimeout = null;\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onDismissed = this._onDismissed.bind(this);\n    }\n\n    /**\n     * Sets a timeout for the first notification (if applicable).\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        // Set the initial dismiss timeout (if any)\n        this._manageDismissTimeout();\n    }\n\n    /**\n     * Sets a timeout if the currently displayed notification has changed.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: P) {\n        this._manageDismissTimeout(prevProps);\n    }\n\n    /**\n     * Sets/clears the dismiss timeout for the top notification.\n     *\n     * @param {P} [prevProps] - The previous properties (if called from\n     * {@code componentDidUpdate}).\n     * @returns {void}\n     * @private\n     */\n    _manageDismissTimeout(prevProps: ?P) {\n        const { _notifications, autoDismissTimeout } = this.props;\n\n        if (_notifications.length) {\n            const notification = _notifications[0];\n            const previousNotification\n                = prevProps && prevProps._notifications.length\n                    ? prevProps._notifications[0]\n                    : undefined;\n\n            if (notification !== previousNotification) {\n                this._clearNotificationDismissTimeout();\n\n                if (notification\n                        && (notification.timeout\n                            || typeof autoDismissTimeout === 'number')\n                        && notification.props.isDismissAllowed !== false) {\n                    const {\n                        timeout = autoDismissTimeout,\n                        uid\n                    } = notification;\n\n                    this._notificationDismissTimeout = setTimeout(() => {\n                        // Perform a no-op if a timeout is not specified.\n                        this._onDismissed(uid);\n                    }, timeout);\n                }\n            }\n        } else if (this._notificationDismissTimeout) {\n            // Clear timeout when all notifications are cleared (e.g external\n            // call to clear them)\n            this._clearNotificationDismissTimeout();\n        }\n    }\n\n    /**\n     * Clear any dismissal timeout that is still active.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentWillUnmount() {\n        this._clearNotificationDismissTimeout();\n    }\n\n    _onDismissed: number => void;\n\n    /**\n     * Clears the running notification dismiss timeout, if any.\n     *\n     * @returns {void}\n     */\n    _clearNotificationDismissTimeout() {\n        this._notificationDismissTimeout\n            && clearTimeout(this._notificationDismissTimeout);\n\n        this._notificationDismissTimeout = null;\n    }\n\n    /**\n     * Emits an action to remove the notification from the redux store so it\n     * stops displaying.\n     *\n     * @param {number} uid - The id of the notification to be removed.\n     * @private\n     * @returns {void}\n     */\n    _onDismissed(uid) {\n        const { _notifications } = this.props;\n\n        // Clear the timeout only if it's the top notification that's being\n        // dismissed (the timeout is set only for the top one).\n        if (!_notifications.length || _notifications[0].uid === uid) {\n            this._clearNotificationDismissTimeout();\n        }\n\n        this.props.dispatch(hideNotification(uid));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated NotificationsContainer's\n * props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _notifications: Array\n * }}\n */\nexport function _abstractMapStateToProps(state: Object) {\n    const { notifications } = state['features/notifications'];\n    const _visible = areThereNotifications(state);\n\n    return {\n        _notifications: _visible ? notifications : [],\n        autoDismissTimeout: typeof interfaceConfig === 'undefined'\n            ? undefined // Ignore for the case of mobile\n            : interfaceConfig.ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT\n    };\n}\n","// @flow\n\nimport { FlagGroup } from '@atlaskit/flag';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\nimport AbstractNotificationsContainer, {\n    _abstractMapStateToProps,\n    type Props as AbstractProps\n} from '../AbstractNotificationsContainer';\n\nimport Notification from './Notification';\n\ntype Props = AbstractProps & {\n\n    /**\n     * Whether we are a SIP gateway or not.\n     */\n     _iAmSipGateway: boolean,\n\n     /**\n     * Invoked to obtain translated strings.\n     */\n     t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays notifications and handles\n * automatic dismissmal after a notification is shown for a defined timeout\n * period.\n *\n * @extends {Component}\n */\nclass NotificationsContainer extends AbstractNotificationsContainer<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this.props._iAmSipGateway) {\n            return null;\n        }\n\n        return (\n            <FlagGroup\n                id = 'notifications-container'\n                label = { this.props.t('notify.groupTitle') }\n                onDismissed = { this._onDismissed }>\n                { this._renderFlags() }\n            </FlagGroup>\n        );\n    }\n\n    _onDismissed: number => void;\n\n    /**\n     * Renders notifications to display as ReactElements. An empty array will\n     * be returned if notifications are disabled.\n     *\n     * @private\n     * @returns {ReactElement[]}\n     */\n    _renderFlags() {\n        const { _notifications } = this.props;\n\n        return _notifications.map(notification => {\n            const { props, uid } = notification;\n\n            // The id attribute is necessary as {@code FlagGroup} looks for\n            // either id or key to set a key on notifications, but accessing\n            // props.key will cause React to print an error.\n            return (\n                <Notification\n                    { ...props }\n                    id = { uid }\n                    key = { uid }\n                    onDismissed = { this._onDismissed }\n                    uid = { uid } />\n            );\n        });\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { iAmSipGateway } = state['features/base/config'];\n\n    return {\n        ..._abstractMapStateToProps(state),\n        _iAmSipGateway: Boolean(iAmSipGateway)\n    };\n}\n\n\nexport default translate(connect(_mapStateToProps)(NotificationsContainer));\n","// @flow\n\nimport React from 'react';\n\ntype Props = {\n\n    /**\n     * The text for the Label.\n     */\n    children: React$Node,\n\n    /**\n     * The CSS class of the label.\n     */\n    className?: string,\n\n    /**\n     * The (round) number prefix for the Label.\n     */\n    number?: string | number,\n\n    /**\n     * The click handler.\n     */\n    onClick?: Function,\n};\n\n/**\n *  Label for the dialogs.\n *\n *  @returns {ReactElement}\n */\nfunction Label({ children, className, number, onClick }: Props) {\n    const containerClass = className\n        ? `prejoin-dialog-label ${className}`\n        : 'prejoin-dialog-label';\n\n    return (\n        <div\n            className = { containerClass }\n            onClick = { onClick }>\n            {number && <div className = 'prejoin-dialog-label-num'>{number}</div>}\n            <span>{children}</span>\n        </div>\n    );\n}\n\nexport default Label;\n","// @flow\n\nimport React from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconClose } from '../../../base/icons';\nimport Label from '../Label';\n\ntype Props = {\n\n    /**\n     * The phone number that is being called.\n     */\n    number: string,\n\n    /**\n     * Closes the dialog.\n     */\n    onClose: Function,\n\n    /**\n     * Handler used on hangup click.\n     */\n    onHangup: Function,\n\n    /**\n     * The status of the call.\n     */\n    status: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n};\n\n/**\n * Dialog displayed when the user gets called by the meeting.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nfunction CallingDialog(props: Props) {\n    const { number, onClose, status, t } = props;\n\n    return (\n        <div className = 'prejoin-dialog-calling'>\n            <div className = 'prejoin-dialog-calling-header'>\n                <Icon\n                    className = 'prejoin-dialog-icon'\n                    onClick = { onClose }\n                    role = 'button'\n                    size = { 24 }\n                    src = { IconClose } />\n            </div>\n            <Label className = 'prejoin-dialog-calling-label'>\n                {t(status)}\n            </Label>\n            <Avatar size = { 72 } />\n            <div className = 'prejoin-dialog-calling-number'>{number}</div>\n        </div>\n    );\n}\n\nexport default translate(CallingDialog);\n","// @flow\n\nexport const countries = [\n    { name: 'Afghanistan',\n        dialCode: '93',\n        code: 'af' },\n    { name: 'Aland Islands',\n        dialCode: '358',\n        code: 'ax' },\n    { name: 'Albania',\n        dialCode: '355',\n        code: 'al' },\n    { name: 'Algeria',\n        dialCode: '213',\n        code: 'dz' },\n    { name: 'AmericanSamoa',\n        dialCode: '1684',\n        code: 'as' },\n    { name: 'Andorra',\n        dialCode: '376',\n        code: 'ad' },\n    { name: 'Angola',\n        dialCode: '244',\n        code: 'ao' },\n    { name: 'Anguilla',\n        dialCode: '1264',\n        code: 'ai' },\n    { name: 'Antarctica',\n        dialCode: '672',\n        code: 'aq' },\n    { name: 'Antigua and Barbuda',\n        dialCode: '1268',\n        code: 'ag' },\n    { name: 'Argentina',\n        dialCode: '54',\n        code: 'ar' },\n    { name: 'Armenia',\n        dialCode: '374',\n        code: 'am' },\n    { name: 'Aruba',\n        dialCode: '297',\n        code: 'aw' },\n    { name: 'Australia',\n        dialCode: '61',\n        code: 'au' },\n    { name: 'Austria',\n        dialCode: '43',\n        code: 'at' },\n    { name: 'Azerbaijan',\n        dialCode: '994',\n        code: 'az' },\n    { name: 'Bahamas',\n        dialCode: '1242',\n        code: 'bs' },\n    { name: 'Bahrain',\n        dialCode: '973',\n        code: 'bh' },\n    { name: 'Bangladesh',\n        dialCode: '880',\n        code: 'bd' },\n    { name: 'Barbados',\n        dialCode: '1246',\n        code: 'bb' },\n    { name: 'Belarus',\n        dialCode: '375',\n        code: 'by' },\n    { name: 'Belgium',\n        dialCode: '32',\n        code: 'be' },\n    { name: 'Belize',\n        dialCode: '501',\n        code: 'bz' },\n    { name: 'Benin',\n        dialCode: '229',\n        code: 'bj' },\n    { name: 'Bermuda',\n        dialCode: '1441',\n        code: 'bm' },\n    { name: 'Bhutan',\n        dialCode: '975',\n        code: 'bt' },\n    { name: 'Bolivia, Plurinational State of',\n        dialCode: '591',\n        code: 'bo' },\n    { name: 'Bosnia and Herzegovina',\n        dialCode: '387',\n        code: 'ba' },\n    { name: 'Botswana',\n        dialCode: '267',\n        code: 'bw' },\n    { name: 'Brazil',\n        dialCode: '55',\n        code: 'br' },\n    { name: 'British Indian Ocean Territory',\n        dialCode: '246',\n        code: 'io' },\n    { name: 'Brunei Darussalam',\n        dialCode: '673',\n        code: 'bn' },\n    { name: 'Bulgaria',\n        dialCode: '359',\n        code: 'bg' },\n    { name: 'Burkina Faso',\n        dialCode: '226',\n        code: 'bf' },\n    { name: 'Burundi',\n        dialCode: '257',\n        code: 'bi' },\n    { name: 'Cambodia',\n        dialCode: '855',\n        code: 'kh' },\n    { name: 'Cameroon',\n        dialCode: '237',\n        code: 'cm' },\n    { name: 'Canada',\n        dialCode: '1',\n        code: 'ca' },\n    { name: 'Cape Verde',\n        dialCode: '238',\n        code: 'cv' },\n    { name: 'Cayman Islands',\n        dialCode: ' 345',\n        code: 'ky' },\n    { name: 'Central African Republic',\n        dialCode: '236',\n        code: 'cf' },\n    { name: 'Chad',\n        dialCode: '235',\n        code: 'td' },\n    { name: 'Chile',\n        dialCode: '56',\n        code: 'cl' },\n    { name: 'China',\n        dialCode: '86',\n        code: 'cn' },\n    { name: 'Christmas Island',\n        dialCode: '61',\n        code: 'cx' },\n    { name: 'Cocos (Keeling) Islands',\n        dialCode: '61',\n        code: 'cc' },\n    { name: 'Colombia',\n        dialCode: '57',\n        code: 'co' },\n    { name: 'Comoros',\n        dialCode: '269',\n        code: 'km' },\n    { name: 'Congo',\n        dialCode: '242',\n        code: 'cg' },\n    {\n        name: 'Congo, The Democratic Republic of the Congo',\n        dialCode: '243',\n        code: 'cd'\n    },\n    { name: 'Cook Islands',\n        dialCode: '682',\n        code: 'ck' },\n    { name: 'Costa Rica',\n        dialCode: '506',\n        code: 'cr' },\n    { name: 'Cote d\\'Ivoire',\n        dialCode: '225',\n        code: 'ci' },\n    { name: 'Croatia',\n        dialCode: '385',\n        code: 'hr' },\n    { name: 'Cuba',\n        dialCode: '53',\n        code: 'cu' },\n    { name: 'Cyprus',\n        dialCode: '357',\n        code: 'cy' },\n    { name: 'Czech Republic',\n        dialCode: '420',\n        code: 'cz' },\n    { name: 'Denmark',\n        dialCode: '45',\n        code: 'dk' },\n    { name: 'Djibouti',\n        dialCode: '253',\n        code: 'dj' },\n    { name: 'Dominica',\n        dialCode: '1767',\n        code: 'dm' },\n    { name: 'Dominican Republic',\n        dialCode: '1849',\n        code: 'do' },\n    { name: 'Ecuador',\n        dialCode: '593',\n        code: 'ec' },\n    { name: 'Egypt',\n        dialCode: '20',\n        code: 'eg' },\n    { name: 'El Salvador',\n        dialCode: '503',\n        code: 'sv' },\n    { name: 'Equatorial Guinea',\n        dialCode: '240',\n        code: 'gq' },\n    { name: 'Eritrea',\n        dialCode: '291',\n        code: 'er' },\n    { name: 'Estonia',\n        dialCode: '372',\n        code: 'ee' },\n    { name: 'Ethiopia',\n        dialCode: '251',\n        code: 'et' },\n    { name: 'Falkland Islands (Malvinas)',\n        dialCode: '500',\n        code: 'fk' },\n    { name: 'Faroe Islands',\n        dialCode: '298',\n        code: 'fo' },\n    { name: 'Fiji',\n        dialCode: '679',\n        code: 'fj' },\n    { name: 'Finland',\n        dialCode: '358',\n        code: 'fi' },\n    { name: 'France',\n        dialCode: '33',\n        code: 'fr' },\n    { name: 'French Guiana',\n        dialCode: '594',\n        code: 'gf' },\n    { name: 'French Polynesia',\n        dialCode: '689',\n        code: 'pf' },\n    { name: 'Gabon',\n        dialCode: '241',\n        code: 'ga' },\n    { name: 'Gambia',\n        dialCode: '220',\n        code: 'gm' },\n    { name: 'Georgia',\n        dialCode: '995',\n        code: 'ge' },\n    { name: 'Germany',\n        dialCode: '49',\n        code: 'de' },\n    { name: 'Ghana',\n        dialCode: '233',\n        code: 'gh' },\n    { name: 'Gibraltar',\n        dialCode: '350',\n        code: 'gi' },\n    { name: 'Greece',\n        dialCode: '30',\n        code: 'gr' },\n    { name: 'Greenland',\n        dialCode: '299',\n        code: 'gl' },\n    { name: 'Grenada',\n        dialCode: '1473',\n        code: 'gd' },\n    { name: 'Guadeloupe',\n        dialCode: '590',\n        code: 'gp' },\n    { name: 'Guam',\n        dialCode: '1671',\n        code: 'gu' },\n    { name: 'Guatemala',\n        dialCode: '502',\n        code: 'gt' },\n    { name: 'Guernsey',\n        dialCode: '44',\n        code: 'gg' },\n    { name: 'Guinea',\n        dialCode: '224',\n        code: 'gn' },\n    { name: 'Guinea-Bissau',\n        dialCode: '245',\n        code: 'gw' },\n    { name: 'Guyana',\n        dialCode: '595',\n        code: 'gy' },\n    { name: 'Haiti',\n        dialCode: '509',\n        code: 'ht' },\n    { name: 'Holy See (Vatican City State)',\n        dialCode: '379',\n        code: 'va' },\n    { name: 'Honduras',\n        dialCode: '504',\n        code: 'hn' },\n    { name: 'Hong Kong',\n        dialCode: '852',\n        code: 'hk' },\n    { name: 'Hungary',\n        dialCode: '36',\n        code: 'hu' },\n    { name: 'Iceland',\n        dialCode: '354',\n        code: 'is' },\n    { name: 'India',\n        dialCode: '91',\n        code: 'in' },\n    { name: 'Indonesia',\n        dialCode: '62',\n        code: 'id' },\n    {\n        name: 'Iran, Islamic Republic of Persian Gulf',\n        dialCode: '98',\n        code: 'ir'\n    },\n    { name: 'Iraq',\n        dialCode: '964',\n        code: 'iq' },\n    { name: 'Ireland',\n        dialCode: '353',\n        code: 'ie' },\n    { name: 'Isle of Man',\n        dialCode: '44',\n        code: 'im' },\n    { name: 'Israel',\n        dialCode: '972',\n        code: 'il' },\n    { name: 'Italy',\n        dialCode: '39',\n        code: 'it' },\n    { name: 'Jamaica',\n        dialCode: '1876',\n        code: 'jm' },\n    { name: 'Japan',\n        dialCode: '81',\n        code: 'jp' },\n    { name: 'Jersey',\n        dialCode: '44',\n        code: 'je' },\n    { name: 'Jordan',\n        dialCode: '962',\n        code: 'jo' },\n    { name: 'Kazakhstan',\n        dialCode: '77',\n        code: 'kz' },\n    { name: 'Kenya',\n        dialCode: '254',\n        code: 'ke' },\n    { name: 'Kiribati',\n        dialCode: '686',\n        code: 'ki' },\n    {\n        name: 'Korea, Democratic People\\'s Republic of Korea',\n        dialCode: '850',\n        code: 'kp'\n    },\n    { name: 'Korea, Republic of South Korea',\n        dialCode: '82',\n        code: 'kr' },\n    { name: 'Kuwait',\n        dialCode: '965',\n        code: 'kw' },\n    { name: 'Kyrgyzstan',\n        dialCode: '996',\n        code: 'kg' },\n    { name: 'Laos',\n        dialCode: '856',\n        code: 'la' },\n    { name: 'Latvia',\n        dialCode: '371',\n        code: 'lv' },\n    { name: 'Lebanon',\n        dialCode: '961',\n        code: 'lb' },\n    { name: 'Lesotho',\n        dialCode: '266',\n        code: 'ls' },\n    { name: 'Liberia',\n        dialCode: '231',\n        code: 'lr' },\n    { name: 'Libyan Arab Jamahiriya',\n        dialCode: '218',\n        code: 'ly' },\n    { name: 'Liechtenstein',\n        dialCode: '423',\n        code: 'li' },\n    { name: 'Lithuania',\n        dialCode: '370',\n        code: 'lt' },\n    { name: 'Luxembourg',\n        dialCode: '352',\n        code: 'lu' },\n    { name: 'Macao',\n        dialCode: '853',\n        code: 'mo' },\n    { name: 'Macedonia',\n        dialCode: '389',\n        code: 'mk' },\n    { name: 'Madagascar',\n        dialCode: '261',\n        code: 'mg' },\n    { name: 'Malawi',\n        dialCode: '265',\n        code: 'mw' },\n    { name: 'Malaysia',\n        dialCode: '60',\n        code: 'my' },\n    { name: 'Maldives',\n        dialCode: '960',\n        code: 'mv' },\n    { name: 'Mali',\n        dialCode: '223',\n        code: 'ml' },\n    { name: 'Malta',\n        dialCode: '356',\n        code: 'mt' },\n    { name: 'Marshall Islands',\n        dialCode: '692',\n        code: 'mh' },\n    { name: 'Martinique',\n        dialCode: '596',\n        code: 'mq' },\n    { name: 'Mauritania',\n        dialCode: '222',\n        code: 'mr' },\n    { name: 'Mauritius',\n        dialCode: '230',\n        code: 'mu' },\n    { name: 'Mayotte',\n        dialCode: '262',\n        code: 'yt' },\n    { name: 'Mexico',\n        dialCode: '52',\n        code: 'mx' },\n    {\n        name: 'Micronesia, Federated States of Micronesia',\n        dialCode: '691',\n        code: 'fm'\n    },\n    { name: 'Moldova',\n        dialCode: '373',\n        code: 'md' },\n    { name: 'Monaco',\n        dialCode: '377',\n        code: 'mc' },\n    { name: 'Mongolia',\n        dialCode: '976',\n        code: 'mn' },\n    { name: 'Montenegro',\n        dialCode: '382',\n        code: 'me' },\n    { name: 'Montserrat',\n        dialCode: '1664',\n        code: 'ms' },\n    { name: 'Morocco',\n        dialCode: '212',\n        code: 'ma' },\n    { name: 'Mozambique',\n        dialCode: '258',\n        code: 'mz' },\n    { name: 'Myanmar',\n        dialCode: '95',\n        code: 'mm' },\n    { name: 'Namibia',\n        dialCode: '264',\n        code: 'na' },\n    { name: 'Nauru',\n        dialCode: '674',\n        code: 'nr' },\n    { name: 'Nepal',\n        dialCode: '977',\n        code: 'np' },\n    { name: 'Netherlands',\n        dialCode: '31',\n        code: 'nl' },\n    { name: 'Netherlands Antilles',\n        dialCode: '599',\n        code: 'an' },\n    { name: 'New Caledonia',\n        dialCode: '687',\n        code: 'nc' },\n    { name: 'New Zealand',\n        dialCode: '64',\n        code: 'nz' },\n    { name: 'Nicaragua',\n        dialCode: '505',\n        code: 'ni' },\n    { name: 'Niger',\n        dialCode: '227',\n        code: 'ne' },\n    { name: 'Nigeria',\n        dialCode: '234',\n        code: 'ng' },\n    { name: 'Niue',\n        dialCode: '683',\n        code: 'nu' },\n    { name: 'Norfolk Island',\n        dialCode: '672',\n        code: 'nf' },\n    { name: 'Northern Mariana Islands',\n        dialCode: '1670',\n        code: 'mp' },\n    { name: 'Norway',\n        dialCode: '47',\n        code: 'no' },\n    { name: 'Oman',\n        dialCode: '968',\n        code: 'om' },\n    { name: 'Pakistan',\n        dialCode: '92',\n        code: 'pk' },\n    { name: 'Palau',\n        dialCode: '680',\n        code: 'pw' },\n    { name: 'Palestinian Territory, Occupied',\n        dialCode: '970',\n        code: 'ps' },\n    { name: 'Panama',\n        dialCode: '507',\n        code: 'pa' },\n    { name: 'Papua New Guinea',\n        dialCode: '675',\n        code: 'pg' },\n    { name: 'Paraguay',\n        dialCode: '595',\n        code: 'py' },\n    { name: 'Peru',\n        dialCode: '51',\n        code: 'pe' },\n    { name: 'Philippines',\n        dialCode: '63',\n        code: 'ph' },\n    { name: 'Pitcairn',\n        dialCode: '872',\n        code: 'pn' },\n    { name: 'Poland',\n        dialCode: '48',\n        code: 'pl' },\n    { name: 'Portugal',\n        dialCode: '351',\n        code: 'pt' },\n    { name: 'Puerto Rico',\n        dialCode: '1939',\n        code: 'pr' },\n    { name: 'Qatar',\n        dialCode: '974',\n        code: 'qa' },\n    { name: 'Romania',\n        dialCode: '40',\n        code: 'ro' },\n    { name: 'Russia',\n        dialCode: '7',\n        code: 'ru' },\n    { name: 'Rwanda',\n        dialCode: '250',\n        code: 'rw' },\n    { name: 'Reunion',\n        dialCode: '262',\n        code: 're' },\n    { name: 'Saint Barthelemy',\n        dialCode: '590',\n        code: 'bl' },\n    {\n        name: 'Saint Helena, Ascension and Tristan Da Cunha',\n        dialCode: '290',\n        code: 'sh'\n    },\n    { name: 'Saint Kitts and Nevis',\n        dialCode: '1869',\n        code: 'kn' },\n    { name: 'Saint Lucia',\n        dialCode: '1758',\n        code: 'lc' },\n    { name: 'Saint Martin',\n        dialCode: '590',\n        code: 'mf' },\n    { name: 'Saint Pierre and Miquelon',\n        dialCode: '508',\n        code: 'pm' },\n    { name: 'Saint Vincent and the Grenadines',\n        dialCode: '1784',\n        code: 'vc' },\n    { name: 'Samoa',\n        dialCode: '685',\n        code: 'ws' },\n    { name: 'San Marino',\n        dialCode: '378',\n        code: 'sm' },\n    { name: 'Sao Tome and Principe',\n        dialCode: '239',\n        code: 'st' },\n    { name: 'Saudi Arabia',\n        dialCode: '966',\n        code: 'sa' },\n    { name: 'Senegal',\n        dialCode: '221',\n        code: 'sn' },\n    { name: 'Serbia',\n        dialCode: '381',\n        code: 'rs' },\n    { name: 'Seychelles',\n        dialCode: '248',\n        code: 'sc' },\n    { name: 'Sierra Leone',\n        dialCode: '232',\n        code: 'sl' },\n    { name: 'Singapore',\n        dialCode: '65',\n        code: 'sg' },\n    { name: 'Slovakia',\n        dialCode: '421',\n        code: 'sk' },\n    { name: 'Slovenia',\n        dialCode: '386',\n        code: 'si' },\n    { name: 'Solomon Islands',\n        dialCode: '677',\n        code: 'sb' },\n    { name: 'Somalia',\n        dialCode: '252',\n        code: 'so' },\n    { name: 'South Africa',\n        dialCode: '27',\n        code: 'za' },\n    { name: 'South Sudan',\n        dialCode: '211',\n        code: 'ss' },\n    {\n        name: 'South Georgia and the South Sandwich Islands',\n        dialCode: '500',\n        code: 'gs'\n    },\n    { name: 'Spain',\n        dialCode: '34',\n        code: 'es' },\n    { name: 'Sri Lanka',\n        dialCode: '94',\n        code: 'lk' },\n    { name: 'Sudan',\n        dialCode: '249',\n        code: 'sd' },\n    { name: 'Suriname',\n        dialCode: '597',\n        code: 'sr' },\n    { name: 'Svalbard and Jan Mayen',\n        dialCode: '47',\n        code: 'sj' },\n    { name: 'Swaziland',\n        dialCode: '268',\n        code: 'sz' },\n    { name: 'Sweden',\n        dialCode: '46',\n        code: 'se' },\n    { name: 'Switzerland',\n        dialCode: '41',\n        code: 'ch' },\n    { name: 'Syrian Arab Republic',\n        dialCode: '963',\n        code: 'sy' },\n    { name: 'Taiwan',\n        dialCode: '886',\n        code: 'tw' },\n    { name: 'Tajikistan',\n        dialCode: '992',\n        code: 'tj' },\n    {\n        name: 'Tanzania, United Republic of Tanzania',\n        dialCode: '255',\n        code: 'tz'\n    },\n    { name: 'Thailand',\n        dialCode: '66',\n        code: 'th' },\n    { name: 'Timor-Leste',\n        dialCode: '670',\n        code: 'tl' },\n    { name: 'Togo',\n        dialCode: '228',\n        code: 'tg' },\n    { name: 'Tokelau',\n        dialCode: '690',\n        code: 'tk' },\n    { name: 'Tonga',\n        dialCode: '676',\n        code: 'to' },\n    { name: 'Trinidad and Tobago',\n        dialCode: '1868',\n        code: 'tt' },\n    { name: 'Tunisia',\n        dialCode: '216',\n        code: 'tn' },\n    { name: 'Turkey',\n        dialCode: '90',\n        code: 'tr' },\n    { name: 'Turkmenistan',\n        dialCode: '993',\n        code: 'tm' },\n    { name: 'Turks and Caicos Islands',\n        dialCode: '1649',\n        code: 'tc' },\n    { name: 'Tuvalu',\n        dialCode: '688',\n        code: 'tv' },\n    { name: 'Uganda',\n        dialCode: '256',\n        code: 'ug' },\n    { name: 'Ukraine',\n        dialCode: '380',\n        code: 'ua' },\n    { name: 'United Arab Emirates',\n        dialCode: '971',\n        code: 'ae' },\n    { name: 'United Kingdom',\n        dialCode: '44',\n        code: 'gb' },\n    { name: 'United States',\n        dialCode: '1',\n        code: 'us' },\n    { name: 'Uruguay',\n        dialCode: '598',\n        code: 'uy' },\n    { name: 'Uzbekistan',\n        dialCode: '998',\n        code: 'uz' },\n    { name: 'Vanuatu',\n        dialCode: '678',\n        code: 'vu' },\n    {\n        name: 'Venezuela, Bolivarian Republic of Venezuela',\n        dialCode: '58',\n        code: 've'\n    },\n    { name: 'Vietnam',\n        dialCode: '84',\n        code: 'vn' },\n    { name: 'Virgin Islands, British',\n        dialCode: '1284',\n        code: 'vg' },\n    { name: 'Virgin Islands, U.S.',\n        dialCode: '1340',\n        code: 'vi' },\n    { name: 'Wallis and Futuna',\n        dialCode: '681',\n        code: 'wf' },\n    { name: 'Yemen',\n        dialCode: '967',\n        code: 'ye' },\n    { name: 'Zambia',\n        dialCode: '260',\n        code: 'zm' },\n    { name: 'Zimbabwe',\n        dialCode: '263',\n        code: 'zw' }\n];\n\nconst countriesByCodeMap = countries.reduce((result, country) => {\n    result[country.dialCode] = country;\n\n    return result;\n}, {});\n\n/**\n * Map between country dial codes and country objects.\n *\n */\nconst codesByNumbersMap = countries.reduce((result, country) => {\n    result[country.dialCode] = country.code;\n\n    return result;\n}, {});\n\n/**\n * Returns the corresponding country code from a phone number.\n *\n * @param {string} phoneNumber - The phone number.\n * @returns {string}\n */\nexport function getCountryCodeFromPhone(phoneNumber: string): string {\n    const number = phoneNumber.replace(/[+.\\s]/g, '');\n\n\n    for (let i = 4; i > 0; i--) {\n        const prefix = number.slice(0, i);\n\n        if (codesByNumbersMap[prefix]) {\n            return codesByNumbersMap[prefix];\n        }\n    }\n\n    return '';\n}\n\n/**\n * Returns the corresponding country for a text starting with the dial code.\n *\n * @param {string} text - The text containing the dial code.\n * @returns {Object}\n */\nexport function getCountryFromDialCodeText(text: string): Object {\n    return (\n        countriesByCodeMap[text.slice(0, 4)]\n        || countriesByCodeMap[text.slice(0, 3)]\n        || countriesByCodeMap[text.slice(0, 2)]\n        || countriesByCodeMap[text.slice(0, 1)]\n        || null\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconArrowLeft } from '../../../base/icons';\nimport { ActionButton } from '../../../base/premeeting';\nimport { getCountryCodeFromPhone } from '../../utils';\nimport Label from '../Label';\n\ntype Props = {\n\n    /**\n     * The number to call in order to join the conference.\n     */\n    number: string,\n\n    /**\n     * Handler used when clicking the back button.\n     */\n    onBack: Function,\n\n    /**\n     * Click handler for the text button.\n     */\n    onTextButtonClick: Function,\n\n    /**\n     * Click handler for primary button.\n     */\n    onPrimaryButtonClick: Function,\n\n    /**\n     * Click handler for the small additional text.\n     */\n    onSmallTextClick: Function,\n\n    /**\n     * The passCode of the conference.\n     */\n    passCode: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n};\n\n/**\n * This component displays the dialog with all the information\n * to join a meeting by calling it.\n *\n * @param {Props} props - The props of the component.\n * @returns {React$Element}\n */\nfunction DialinDialog(props: Props) {\n    const {\n        number,\n        onBack,\n        onPrimaryButtonClick,\n        onSmallTextClick,\n        onTextButtonClick,\n        passCode,\n        t\n    } = props;\n    const flagClassName = `prejoin-dialog-flag iti-flag ${getCountryCodeFromPhone(\n        number,\n    )}`;\n\n    return (\n        <div className = 'prejoin-dialog-dialin'>\n            <div className = 'prejoin-dialog-dialin-header'>\n                <Icon\n                    className = 'prejoin-dialog-icon prejoin-dialog-dialin-icon'\n                    onClick = { onBack }\n                    role = 'button'\n                    size = { 24 }\n                    src = { IconArrowLeft } />\n                <div className = 'prejoin-dialog-title'>\n                    {t('prejoin.dialInMeeting')}\n                </div>\n            </div>\n            <Label number = { 1 }>{ t('prejoin.dialInPin') }</Label>\n\n            <div className = 'prejoin-dialog-dialin-num-container'>\n                <div className = 'prejoin-dialog-dialin-num'>\n                    <div className = { flagClassName } />\n                    <span>{number}</span>\n                </div>\n                <div className = 'prejoin-dialog-dialin-num'>{passCode}</div>\n            </div>\n            <div>\n                <span\n                    className = 'prejoin-dialog-dialin-link'\n                    onClick = { onSmallTextClick }>\n                    {t('prejoin.viewAllNumbers')}\n                </span>\n            </div>\n            <div className = 'prejoin-dialog-delimiter' />\n            <Label\n                className = 'prejoin-dialog-dialin-spaced-label'\n                number = { 2 }>\n                {t('prejoin.connectedWithAudioQ')}\n            </Label>\n            <div className = 'prejoin-dialog-dialin-btns'>\n                <ActionButton\n                    className = 'prejoin-dialog-btn'\n                    onClick = { onPrimaryButtonClick }\n                    type = 'primary'>\n                    {t('prejoin.joinMeeting')}\n                </ActionButton>\n                <ActionButton\n                    className = 'prejoin-dialog-btn'\n                    onClick = { onTextButtonClick }\n                    type = 'text'>\n                    {t('dialog.Cancel')}\n                </ActionButton>\n            </div>\n        </div>\n    );\n}\n\nexport default translate(DialinDialog);\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\ntype Props = {\n\n    /**\n     * Country of the entry.\n     */\n    country: { name: string, dialCode: string, code: string },\n\n    /**\n     * Entry click handler.\n     */\n    onEntryClick: Function,\n};\n\n/**\n * This component displays a row from the country picker dropdown.\n */\nclass CountryRow extends PureComponent<Props> {\n    /**\n     * Initializes a new {@code CountryRow} instance.\n     *\n     * @param {Props} props - The props of the component.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            country: { code, dialCode, name }\n        } = this.props;\n\n        return (\n            <div\n                className = 'cpick-dropdown-entry'\n                onClick = { this._onClick }>\n                <div className = { `prejoin-dialog-flag iti-flag ${code}` } />\n                <div className = 'cpick-dropdown-entry-text'>\n                    {`${name} (+${dialCode})`}\n                </div>\n            </div>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Click handler.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        this.props.onEntryClick(this.props.country);\n    }\n}\n\nexport default CountryRow;\n","// @flow\n\nimport React from 'react';\n\nimport { countries } from '../../utils';\n\nimport CountryRow from './CountryRow';\n\ntype Props = {\n\n    /**\n     * Click handler for a single entry.\n     */\n    onEntryClick: Function,\n};\n\n/**\n * This component displays the dropdown for the country picker.\n *\n * @returns {ReactElement}\n */\nfunction CountryDropdown({ onEntryClick }: Props) {\n    return (\n        <div className = 'cpick-dropdown'>\n            {countries.map(country => (\n                <CountryRow\n                    country = { country }\n                    key = { `${country.code}` }\n                    onEntryClick = { onEntryClick } />\n            ))}\n        </div>\n    );\n}\n\nexport default CountryDropdown;\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { Icon, IconArrowDown } from '../../../base/icons';\n\ntype Props = {\n\n    /**\n     * Country object of the entry.\n     */\n    country: { name: string, dialCode: string, code: string },\n\n    /**\n     * Click handler for the selector.\n     */\n    onClick: Function,\n};\n\n/**\n * This component displays the country selector with the flag.\n *\n * @returns {ReactElement}\n */\nfunction CountrySelector({ country: { code, dialCode }, onClick }: Props) {\n    const onKeyPressHandler = useCallback(e => {\n        if (onClick && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            onClick();\n        }\n    }, [ onClick ]);\n\n    return (\n        <div\n            className = 'cpick-selector'\n            onClick = { onClick }\n            onKeyPress = { onKeyPressHandler }>\n            <div className = { `prejoin-dialog-flag iti-flag ${code}` } />\n            <span>{`+${dialCode}`}</span>\n            <Icon\n                className = 'cpick-icon'\n                size = { 16 }\n                src = { IconArrowDown } />\n        </div>\n    );\n}\n\nexport default CountrySelector;\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { PureComponent } from 'react';\n\nimport { connect } from '../../../base/redux';\nimport { setDialOutCountry, setDialOutNumber } from '../../actions';\nimport { getDialOutCountry, getDialOutNumber } from '../../functions';\nimport { getCountryFromDialCodeText } from '../../utils';\n\nimport CountryDropDown from './CountryDropdown';\nimport CountrySelector from './CountrySelector';\n\nconst PREFIX_REG = /^(00)|\\+/;\n\ntype Props = {\n\n    /**\n     * The country to dial out to.\n     */\n    dialOutCountry: { name: string, dialCode: string, code: string },\n\n    /**\n     * The number to dial out to.\n     */\n    dialOutNumber: string,\n\n    /**\n     * Handler used when user presses 'Enter'.\n     */\n    onSubmit: Function,\n\n    /**\n     * Sets the dial out number.\n     */\n    setDialOutNumber: Function,\n\n    /**\n     * Sets the dial out country.\n     */\n    setDialOutCountry: Function,\n};\n\ntype State = {\n\n    /**\n     * If the country picker is open or not.\n     */\n    isOpen: boolean,\n\n    /**\n     * The value of the input.\n     */\n    value: string\n}\n\n/**\n * This component displays a country picker with an input for the phone number.\n */\nclass CountryPicker extends PureComponent<Props, State> {\n    /**\n     * A React ref to the HTML element containing the {@code input} instance.\n     */\n    inputRef: Object;\n\n    /**\n     * Initializes a new {@code CountryPicker} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            isOpen: false,\n            value: ''\n        };\n        this.inputRef = React.createRef();\n        this._onChange = this._onChange.bind(this);\n        this._onDropdownClose = this._onDropdownClose.bind(this);\n        this._onCountrySelectorClick = this._onCountrySelectorClick.bind(this);\n        this._onEntryClick = this._onEntryClick.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n\n    /**\n     * Implements React's {@link Component#componentDidUnmount()}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.inputRef.current.focus();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { dialOutCountry, dialOutNumber } = this.props;\n        const { isOpen } = this.state;\n        const {\n            inputRef,\n            _onChange,\n            _onCountrySelectorClick,\n            _onDropdownClose,\n            _onKeyPress,\n            _onEntryClick\n        } = this;\n\n        return (\n            <div className = 'cpick-container'>\n                <InlineDialog\n                    content = { <CountryDropDown onEntryClick = { _onEntryClick } /> }\n                    isOpen = { isOpen }\n                    onClose = { _onDropdownClose }>\n                    <div className = 'cpick'>\n                        <CountrySelector\n                            country = { dialOutCountry }\n                            onClick = { _onCountrySelectorClick } />\n                        <input\n                            className = 'cpick-input'\n                            onChange = { _onChange }\n                            onKeyPress = { _onKeyPress }\n                            ref = { inputRef }\n                            value = { dialOutNumber } />\n                    </div>\n                </InlineDialog>\n            </div>\n        );\n    }\n\n    _onChange: (Object) => void;\n\n    /**\n     * Handles the input text change.\n     * Automatically updates the country from the 'CountrySelector' if a\n     * phone number prefix is entered (00 or +).\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onChange({ target: { value } }) {\n        if (PREFIX_REG.test(value)) {\n            const textWithDialCode = value.replace(PREFIX_REG, '');\n\n            if (textWithDialCode.length >= 4) {\n                const country = getCountryFromDialCodeText(textWithDialCode);\n\n                if (country) {\n                    const rest = textWithDialCode.replace(country.dialCode, '');\n\n                    this.props.setDialOutCountry(country);\n                    this.props.setDialOutNumber(rest);\n\n                    return;\n                }\n            }\n        }\n\n        this.props.setDialOutNumber(value);\n    }\n\n    _onCountrySelectorClick: (Object) => void;\n\n    /**\n     * Click handler for country selector.\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onCountrySelectorClick() {\n        this.setState({\n            isOpen: !this.setState.isOpen\n        });\n    }\n\n    _onDropdownClose: () => void;\n\n    /**\n     * Closes the dropdown.\n     *\n     * @returns {void}\n     */\n    _onDropdownClose() {\n        this.setState({\n            isOpen: false\n        });\n    }\n\n    _onEntryClick: (Object) => void;\n\n    /**\n     * Click handler for a single entry from the dropdown.\n     *\n     * @param {Object} country - The country used for dialing out.\n     * @returns {void}\n     */\n    _onEntryClick(country) {\n        this.props.setDialOutCountry(country);\n        this._onDropdownClose();\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * Handler for key presses.\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this.props.onSubmit();\n        }\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    return {\n        dialOutCountry: getDialOutCountry(state),\n        dialOutNumber: getDialOutNumber(state)\n    };\n}\n\n/**\n * Maps redux actions to the props of the component.\n *\n * @type {{\n *     setDialOutCountry: Function,\n *     setDialOutNumber: Function\n * }}\n */\nconst mapDispatchToProps = {\n    setDialOutCountry,\n    setDialOutNumber\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CountryPicker);\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconClose } from '../../../base/icons';\nimport { ActionButton } from '../../../base/premeeting';\nimport Label from '../Label';\nimport CountryPicker from '../country-picker/CountryPicker';\n\ntype Props = {\n\n    /**\n     * Closes a dialog.\n     */\n    onClose: Function,\n\n    /**\n     * Submit handler.\n     */\n    onSubmit: Function,\n\n    /**\n     * Handler for text button.\n     */\n    onTextButtonClick: Function,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n};\n\n/**\n * This component displays the dialog from which the user can enter the\n * phone number in order to be called by the meeting.\n *\n * @param {Props} props - The props of the component.\n * @returns {React$Element}\n */\nfunction DialOutDialog(props: Props) {\n    const { onClose, onTextButtonClick, onSubmit, t } = props;\n\n    return (\n        <div className = 'prejoin-dialog-callout'>\n            <div className = 'prejoin-dialog-callout-header'>\n                <div className = 'prejoin-dialog-title'>\n                    {t('prejoin.startWithPhone')}\n                </div>\n                <Icon\n                    className = 'prejoin-dialog-icon'\n                    onClick = { onClose }\n                    role = 'button'\n                    size = { 24 }\n                    src = { IconClose } />\n            </div>\n            <Label>{t('prejoin.callMeAtNumber')}</Label>\n            <div className = 'prejoin-dialog-callout-picker'>\n                <CountryPicker onSubmit = { onSubmit } />\n            </div>\n            <ActionButton\n                className = 'prejoin-dialog-btn'\n                onClick = { onSubmit }\n                type = 'primary'>\n                {t('prejoin.callMe')}\n            </ActionButton>\n            <div className = 'prejoin-dialog-delimiter-container'>\n                <div className = 'prejoin-dialog-delimiter' />\n                <div className = 'prejoin-dialog-delimiter-txt-container'>\n                    <span className = 'prejoin-dialog-delimiter-txt'>\n                        {t('prejoin.or')}\n                    </span>\n                </div>\n            </div>\n            <div className = 'prejoin-dialog-dialin-container'>\n                <ActionButton\n                    className = 'prejoin-dialog-btn'\n                    onClick = { onTextButtonClick }\n                    type = 'text'>\n                    {t('prejoin.iWantToDialIn')}\n                </ActionButton>\n            </div>\n        </div>\n    );\n}\n\nexport default translate(DialOutDialog);\n","// @flow\n\nimport React, { PureComponent } from 'react';\n\nimport { connect } from '../../../base/redux';\nimport {\n    getConferenceId,\n    getDefaultDialInNumber,\n    updateDialInNumbers\n} from '../../../invite';\nimport {\n    dialOut as dialOutAction,\n    joinConferenceWithoutAudio as joinConferenceWithoutAudioAction,\n    openDialInPage as openDialInPageAction\n} from '../../actions';\nimport { getDialOutStatus, getFullDialOutNumber } from '../../functions';\n\nimport CallingDialog from './CallingDialog';\nimport DialInDialog from './DialInDialog';\nimport DialOutDialog from './DialOutDialog';\n\ntype Props = {\n\n    /**\n     * The number to call in order to join the conference.\n     */\n    dialInNumber: string,\n\n    /**\n     * The status of the call when the meeting calls the user.\n     */\n    dialOutStatus: string,\n\n    /**\n     * The action by which the meeting calls the user.\n     */\n    dialOut: Function,\n\n    /**\n     * The number the conference should call.\n     */\n    dialOutNumber: string,\n\n    /**\n     * Fetches conference dial in numbers & conference id\n     */\n    fetchConferenceDetails: Function,\n\n    /**\n     * Joins the conference without audio.\n     */\n    joinConferenceWithoutAudio: Function,\n\n    /**\n     * Closes the dialog.\n     */\n    onClose: Function,\n\n    /**\n     * Opens a web page with all the dial in numbers.\n     */\n    openDialInPage: Function,\n\n    /**\n     * The passCode of the conference used when joining a meeting by phone.\n     */\n    passCode: string,\n};\n\ntype State = {\n\n    /**\n     * The dialout call is ongoing, 'CallingDialog' is shown;\n     */\n    isCalling: boolean,\n\n    /**\n     * If should show 'DialInDialog'.\n     */\n    showDialIn: boolean,\n\n    /**\n     * If should show 'DialOutDialog'.\n     */\n    showDialOut: boolean\n}\n\n/**\n * This is the dialog shown when a user wants to join with phone audio.\n */\nclass JoinByPhoneDialog extends PureComponent<Props, State> {\n    /**\n     * Initializes a new {@code JoinByPhoneDialog} instance.\n     *\n     * @param {Props} props - The props of the component.\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            isCalling: false,\n            showDialOut: true,\n            showDialIn: false\n        };\n\n        this._dialOut = this._dialOut.bind(this);\n        this._showDialInDialog = this._showDialInDialog.bind(this);\n        this._showDialOutDialog = this._showDialOutDialog.bind(this);\n    }\n\n    _dialOut: () => void;\n\n    /**\n     * Meeting calls the user & shows the 'CallingDialog'.\n     *\n     * @returns {void}\n     */\n    _dialOut() {\n        const { dialOut, joinConferenceWithoutAudio } = this.props;\n\n        this.setState({\n            isCalling: true,\n            showDialOut: false,\n            showDialIn: false\n        });\n        dialOut(joinConferenceWithoutAudio, this._showDialOutDialog);\n    }\n\n    _showDialInDialog: () => void;\n\n    /**\n     * Shows the 'DialInDialog'.\n     *\n     * @returns {void}\n     */\n    _showDialInDialog() {\n        this.setState({\n            isCalling: false,\n            showDialOut: false,\n            showDialIn: true\n        });\n    }\n\n    _showDialOutDialog: () => void;\n\n    /**\n     * Shows the 'DialOutDialog'.\n     *\n     * @returns {void}\n     */\n    _showDialOutDialog() {\n        this.setState({\n            isCalling: false,\n            showDialOut: true,\n            showDialIn: false\n        });\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this.props.fetchConferenceDetails();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            dialOutStatus,\n            dialInNumber,\n            dialOutNumber,\n            joinConferenceWithoutAudio,\n            passCode,\n            onClose,\n            openDialInPage\n        } = this.props;\n        const {\n            _dialOut,\n            _showDialInDialog,\n            _showDialOutDialog\n        } = this;\n        const { isCalling, showDialOut, showDialIn } = this.state;\n        const className = isCalling\n            ? 'prejoin-dialog prejoin-dialog--small'\n            : 'prejoin-dialog';\n\n        return (\n            <div className = 'prejoin-dialog-container'>\n                <div className = { className }>\n                    {showDialOut && (\n                        <DialOutDialog\n                            onClose = { onClose }\n                            onSubmit = { _dialOut }\n                            onTextButtonClick = { _showDialInDialog } />\n                    )}\n                    {showDialIn && (\n                        <DialInDialog\n                            number = { dialInNumber }\n                            onBack = { _showDialOutDialog }\n                            onPrimaryButtonClick = { joinConferenceWithoutAudio }\n                            onSmallTextClick = { openDialInPage }\n                            onTextButtonClick = { onClose }\n                            passCode = { passCode } />\n                    )}\n                    {isCalling && (\n                        <CallingDialog\n                            number = { dialOutNumber }\n                            onClose = { onClose }\n                            status = { dialOutStatus } />\n                    )}\n                </div>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction mapStateToProps(state): Object {\n    return {\n        dialInNumber: getDefaultDialInNumber(state),\n        dialOutNumber: getFullDialOutNumber(state),\n        dialOutStatus: getDialOutStatus(state),\n        passCode: getConferenceId(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    dialOut: dialOutAction,\n    fetchConferenceDetails: updateDialInNumbers,\n    joinConferenceWithoutAudio: joinConferenceWithoutAudioAction,\n    openDialInPage: openDialInPageAction\n};\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JoinByPhoneDialog);\n","// @flow\n\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconCheck, IconExclamation } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport {\n    getDeviceStatusType,\n    getDeviceStatusText,\n    getRawError\n} from '../../functions';\n\nexport type Props = {\n\n    /**\n     * The text to be displayed in relation to the status of the audio/video devices.\n     */\n    deviceStatusText: string,\n\n    /**\n     * The type of status for current devices, controlling the background color of the text.\n     * Can be `ok` or `warning`.\n     */\n    deviceStatusType: string,\n\n    /**\n     * The error coming from device configuration.\n     */\n    rawError: string,\n\n    /**\n     * Used for translation.\n     */\n    t: Function\n};\n\nconst iconMap = {\n    warning: {\n        src: IconExclamation,\n        className: 'prejoin-preview-status--warning'\n    },\n    ok: {\n        src: IconCheck,\n        className: 'prejoin-preview-status--ok'\n    }\n};\n\n/**\n * Strip showing the current status of the devices.\n * User is informed if there are missing or malfunctioning devices.\n *\n * @returns {ReactElement}\n */\nfunction DeviceStatus({ deviceStatusType, deviceStatusText, rawError, t }: Props) {\n    const { src, className } = iconMap[deviceStatusType];\n\n    return (\n        <div\n            className = { `prejoin-preview-status ${className}` }\n            role = 'alert'\n            tabIndex = { -1 }>\n            <Icon\n                className = 'prejoin-preview-icon'\n                size = { 16 }\n                src = { src } />\n            <span\n                className = 'prejoin-preview-error-desc'\n                role = 'heading'>\n                {t(deviceStatusText)}\n            </span>\n            { rawError && <span>\n                { rawError }\n            </span> }\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @returns {{ deviceStatusText: string, deviceStatusText: string }}\n */\nfunction mapStateToProps(state) {\n    return {\n        deviceStatusText: getDeviceStatusText(state),\n        deviceStatusType: getDeviceStatusType(state),\n        rawError: getRawError(state)\n    };\n}\n\nexport default translate(connect(mapStateToProps)(DeviceStatus));\n","// @flow\n\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport React, { Component } from 'react';\n\nimport { getRoomName } from '../../base/conference';\nimport { getToolbarButtons } from '../../base/config';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconArrowDown, IconArrowUp, IconPhone, IconVolumeOff } from '../../base/icons';\nimport { isVideoMutedByUser } from '../../base/media';\nimport { ActionButton, InputField, PreMeetingScreen, ToggleButton } from '../../base/premeeting';\nimport { connect } from '../../base/redux';\nimport { getDisplayName, updateSettings } from '../../base/settings';\nimport { getLocalJitsiVideoTrack } from '../../base/tracks';\nimport { isButtonEnabled } from '../../toolbox/functions.web';\nimport {\n    joinConference as joinConferenceAction,\n    joinConferenceWithoutAudio as joinConferenceWithoutAudioAction,\n    setSkipPrejoin as setSkipPrejoinAction,\n    setJoinByPhoneDialogVisiblity as setJoinByPhoneDialogVisiblityAction\n} from '../actions';\nimport {\n    isDeviceStatusVisible,\n    isDisplayNameRequired,\n    isJoinByPhoneButtonVisible,\n    isJoinByPhoneDialogVisible,\n    isPrejoinSkipped\n} from '../functions';\n\nimport JoinByPhoneDialog from './dialogs/JoinByPhoneDialog';\nimport DeviceStatus from './preview/DeviceStatus';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * Flag signaling if the 'skip prejoin' button is toggled or not.\n     */\n    buttonIsToggled: boolean,\n\n    /**\n     * Flag signaling if the device status is visible or not.\n     */\n    deviceStatusVisible: boolean,\n\n    /**\n     * If join by phone button should be visible.\n     */\n    hasJoinByPhoneButton: boolean,\n\n    /**\n     * Joins the current meeting.\n     */\n    joinConference: Function,\n\n    /**\n     * Joins the current meeting without audio.\n     */\n    joinConferenceWithoutAudio: Function,\n\n    /**\n     * The name of the user that is about to join.\n     */\n    name: string,\n\n    /**\n     * Updates settings.\n     */\n    updateSettings: Function,\n\n    /**\n     * The name of the meeting that is about to be joined.\n     */\n    roomName: string,\n\n    /**\n     * Sets visibility of the prejoin page for the next sessions.\n     */\n    setSkipPrejoin: Function,\n\n    /**\n     * Sets visibility of the 'JoinByPhoneDialog'.\n     */\n    setJoinByPhoneDialogVisiblity: Function,\n\n    /**\n     * Indicates whether the avatar should be shown when video is off\n     */\n    showAvatar: boolean,\n\n    /**\n     * Flag signaling the visibility of camera preview.\n     */\n    showCameraPreview: boolean,\n\n    /**\n     * If should show an error when joining without a name.\n     */\n    showErrorOnJoin: boolean,\n\n    /**\n     * Flag signaling the visibility of join label, input and buttons\n     */\n    showJoinActions: boolean,\n\n    /**\n     * Flag signaling the visibility of the conference URL section.\n     */\n    showConferenceInfo: boolean,\n\n    /**\n     * If 'JoinByPhoneDialog' is visible or not.\n     */\n    showDialog: boolean,\n\n    /**\n     * Flag signaling the visibility of the skip prejoin toggle\n     */\n    showSkipPrejoin: boolean,\n\n    /**\n     * Used for translation.\n     */\n    t: Function,\n\n    /**\n     * The JitsiLocalTrack to display.\n     */\n    videoTrack: ?Object,\n\n    /**\n     * Array with the buttons which this Toolbox should display.\n     */\n    visibleButtons: Array<string>\n};\n\ntype State = {\n\n    /**\n     * Flag controlling the visibility of the error label.\n     */\n    showError: boolean,\n\n    /**\n     * Flag controlling the visibility of the 'join by phone' buttons.\n     */\n    showJoinByPhoneButtons: boolean\n}\n\n/**\n * This component is displayed before joining a meeting.\n */\nclass Prejoin extends Component<Props, State> {\n    /**\n     * Default values for {@code Prejoin} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        showConferenceInfo: true,\n        showJoinActions: true,\n        showSkipPrejoin: true\n    };\n\n    /**\n     * Initializes a new {@code Prejoin} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            showError: false,\n            showJoinByPhoneButtons: false\n        };\n\n        this._closeDialog = this._closeDialog.bind(this);\n        this._showDialog = this._showDialog.bind(this);\n        this._onJoinButtonClick = this._onJoinButtonClick.bind(this);\n        this._onToggleButtonClick = this._onToggleButtonClick.bind(this);\n        this._onDropdownClose = this._onDropdownClose.bind(this);\n        this._onOptionsClick = this._onOptionsClick.bind(this);\n        this._setName = this._setName.bind(this);\n        this._onJoinConferenceWithoutAudioKeyPress = this._onJoinConferenceWithoutAudioKeyPress.bind(this);\n        this._showDialogKeyPress = this._showDialogKeyPress.bind(this);\n        this._onJoinKeyPress = this._onJoinKeyPress.bind(this);\n    }\n    _onJoinButtonClick: () => void;\n\n    /**\n     * Handler for the join button.\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onJoinButtonClick() {\n        if (this.props.showErrorOnJoin) {\n            this.setState({\n                showError: true\n            });\n\n            return;\n        }\n\n        this.setState({ showError: false });\n        this.props.joinConference();\n    }\n\n    _onJoinKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onJoinKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onJoinButtonClick();\n        }\n    }\n\n    _onToggleButtonClick: () => void;\n\n    /**\n     * Handler for the toggle button.\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onToggleButtonClick() {\n        this.props.setSkipPrejoin(!this.props.buttonIsToggled);\n    }\n\n    _onDropdownClose: () => void;\n\n    /**\n     * Closes the dropdown.\n     *\n     * @returns {void}\n     */\n    _onDropdownClose() {\n        this.setState({\n            showJoinByPhoneButtons: false\n        });\n    }\n\n    _onOptionsClick: () => void;\n\n    /**\n     * Displays the join by phone buttons dropdown.\n     *\n     * @param {Object} e - The synthetic event.\n     * @returns {void}\n     */\n    _onOptionsClick(e) {\n        e.stopPropagation();\n\n        this.setState({\n            showJoinByPhoneButtons: !this.state.showJoinByPhoneButtons\n        });\n    }\n\n    _setName: () => void;\n\n    /**\n     * Sets the guest participant name.\n     *\n     * @param {string} displayName - Participant name.\n     * @returns {void}\n     */\n    _setName(displayName) {\n        this.props.updateSettings({\n            displayName\n        });\n    }\n\n    _closeDialog: () => void;\n\n    /**\n     * Closes the join by phone dialog.\n     *\n     * @returns {undefined}\n     */\n    _closeDialog() {\n        this.props.setJoinByPhoneDialogVisiblity(false);\n    }\n\n    _showDialog: () => void;\n\n    /**\n     * Displays the dialog for joining a meeting by phone.\n     *\n     * @returns {undefined}\n     */\n    _showDialog() {\n        this.props.setJoinByPhoneDialogVisiblity(true);\n        this._onDropdownClose();\n    }\n\n    _showDialogKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _showDialogKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._showDialog();\n        }\n    }\n\n    _onJoinConferenceWithoutAudioKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onJoinConferenceWithoutAudioKeyPress(e) {\n        if (this.props.joinConferenceWithoutAudio\n            && (e.key === ' '\n                || e.key === 'Enter')) {\n            e.preventDefault();\n            this.props.joinConferenceWithoutAudio();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            hasJoinByPhoneButton,\n            joinConference,\n            joinConferenceWithoutAudio,\n            name,\n            showAvatar,\n            showCameraPreview,\n            showDialog,\n            showConferenceInfo,\n            showJoinActions,\n            t,\n            videoTrack,\n            visibleButtons\n        } = this.props;\n\n        const { _closeDialog, _onDropdownClose, _onJoinButtonClick, _onJoinKeyPress, _showDialogKeyPress,\n            _onJoinConferenceWithoutAudioKeyPress, _onOptionsClick, _setName, _showDialog } = this;\n        const { showJoinByPhoneButtons, showError } = this.state;\n\n        return (\n            <PreMeetingScreen\n                footer = { this._renderFooter() }\n                name = { name }\n                showAvatar = { showAvatar }\n                showConferenceInfo = { showConferenceInfo }\n                skipPrejoinButton = { this._renderSkipPrejoinButton() }\n                title = { t('prejoin.joinMeeting') }\n                videoMuted = { !showCameraPreview }\n                videoTrack = { videoTrack }\n                visibleButtons = { visibleButtons }>\n                {showJoinActions && (\n                    <div className = 'prejoin-input-area-container'>\n                        <div className = 'prejoin-input-area'>\n                            <label\n                                className = 'prejoin-input-area-label'\n                                htmlFor = { 'Prejoin-input-field-id' } >\n                                { t('dialog.enterDisplayNameToJoin') }</label>\n                            <InputField\n                                autoComplete = { 'name' }\n                                autoFocus = { true }\n                                className = { showError ? 'error' : '' }\n                                hasError = { showError }\n                                id = { 'Prejoin-input-field-id' }\n                                onChange = { _setName }\n                                onSubmit = { joinConference }\n                                placeHolder = { t('dialog.enterDisplayName') }\n                                value = { name } />\n\n                            {showError && <div\n                                className = 'prejoin-error'\n                                data-testid = 'prejoin.errorMessage'>{t('prejoin.errorMissingName')}</div>}\n\n                            <div className = 'prejoin-preview-dropdown-container'>\n                                <InlineDialog\n                                    content = { <div className = 'prejoin-preview-dropdown-btns'>\n                                        <div\n                                            className = 'prejoin-preview-dropdown-btn'\n                                            data-testid = 'prejoin.joinWithoutAudio'\n                                            onClick = { joinConferenceWithoutAudio }\n                                            onKeyPress = { _onJoinConferenceWithoutAudioKeyPress }\n                                            role = 'button'\n                                            tabIndex = { 0 }>\n                                            <Icon\n                                                className = 'prejoin-preview-dropdown-icon'\n                                                size = { 24 }\n                                                src = { IconVolumeOff } />\n                                            { t('prejoin.joinWithoutAudio') }\n                                        </div>\n                                        {hasJoinByPhoneButton && <div\n                                            className = 'prejoin-preview-dropdown-btn'\n                                            onClick = { _showDialog }\n                                            onKeyPress = { _showDialogKeyPress }\n                                            role = 'button'\n                                            tabIndex = { 0 }>\n                                            <Icon\n                                                className = 'prejoin-preview-dropdown-icon'\n                                                data-testid = 'prejoin.joinByPhone'\n                                                size = { 24 }\n                                                src = { IconPhone } />\n                                            { t('prejoin.joinAudioByPhone') }\n                                        </div>}\n                                    </div> }\n                                    isOpen = { showJoinByPhoneButtons }\n                                    onClose = { _onDropdownClose }>\n                                    <ActionButton\n                                        OptionsIcon = { showJoinByPhoneButtons ? IconArrowUp : IconArrowDown }\n                                        ariaDropDownLabel = { t('prejoin.joinWithoutAudio') }\n                                        ariaLabel = { t('prejoin.joinMeeting') }\n                                        ariaPressed = { showJoinByPhoneButtons }\n                                        hasOptions = { true }\n                                        onClick = { _onJoinButtonClick }\n                                        onKeyPress = { _onJoinKeyPress }\n                                        onOptionsClick = { _onOptionsClick }\n                                        role = 'button'\n                                        tabIndex = { 0 }\n                                        testId = 'prejoin.joinMeeting'\n                                        type = 'primary'>\n                                        { t('prejoin.joinMeeting') }\n                                    </ActionButton>\n                                </InlineDialog>\n                            </div>\n                        </div>\n                    </div>\n                )}\n                { showDialog && (\n                    <JoinByPhoneDialog\n                        joinConferenceWithoutAudio = { joinConferenceWithoutAudio }\n                        onClose = { _closeDialog } />\n                )}\n            </PreMeetingScreen>\n        );\n    }\n\n    /**\n     * Renders the screen footer if any.\n     *\n     * @returns {React$Element}\n     */\n    _renderFooter() {\n        return this.props.deviceStatusVisible && <DeviceStatus />;\n    }\n\n    /**\n     * Renders the 'skip prejoin' button.\n     *\n     * @returns {React$Element}\n     */\n    _renderSkipPrejoinButton() {\n        const { buttonIsToggled, t, showSkipPrejoin } = this.props;\n\n        if (!showSkipPrejoin) {\n            return null;\n        }\n\n        return (\n            <div className = 'prejoin-checkbox-container'>\n                <ToggleButton\n                    isToggled = { buttonIsToggled }\n                    onClick = { this._onToggleButtonClick }>\n                    {t('prejoin.doNotShow')}\n                </ToggleButton>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props.\n *\n * @param {Object} state - The redux state.\n * @param {Object} ownProps - The props passed to the component.\n * @returns {Object}\n */\nfunction mapStateToProps(state, ownProps): Object {\n    const name = getDisplayName(state);\n    const showErrorOnJoin = isDisplayNameRequired(state) && !name;\n    const { showJoinActions } = ownProps;\n    const isInviteButtonEnabled = isButtonEnabled('invite', state);\n\n    // Hide conference info when interfaceConfig is available and the invite button is disabled.\n    // In all other cases we want to preserve the behaviour and control the the conference info\n    // visibility through showJoinActions.\n    const showConferenceInfo\n        = typeof isInviteButtonEnabled === 'undefined' || isInviteButtonEnabled === true\n            ? showJoinActions\n            : false;\n\n    return {\n        buttonIsToggled: isPrejoinSkipped(state),\n        name,\n        deviceStatusVisible: isDeviceStatusVisible(state),\n        roomName: getRoomName(state),\n        showDialog: isJoinByPhoneDialogVisible(state),\n        showErrorOnJoin,\n        hasJoinByPhoneButton: isJoinByPhoneButtonVisible(state),\n        showCameraPreview: !isVideoMutedByUser(state),\n        showConferenceInfo,\n        videoTrack: getLocalJitsiVideoTrack(state),\n        visibleButtons: getToolbarButtons(state)\n    };\n}\n\nconst mapDispatchToProps = {\n    joinConferenceWithoutAudio: joinConferenceWithoutAudioAction,\n    joinConference: joinConferenceAction,\n    setJoinByPhoneDialogVisiblity: setJoinByPhoneDialogVisiblityAction,\n    setSkipPrejoin: setSkipPrejoinAction,\n    updateSettings\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(translate(Prejoin));\n","import React from 'react';\n\nimport { connect } from '../../../base/redux';\nimport { PLAYBACK_STATUSES } from '../../constants';\n\nimport AbstractVideoManager, {\n    _mapDispatchToProps,\n    _mapStateToProps,\n    Props\n} from './AbstractVideoManager';\n\n\n/**\n * Manager of shared video.\n */\nclass VideoManager extends AbstractVideoManager<Props> {\n    /**\n     * Initializes a new VideoManager instance.\n     *\n     * @param {Object} props - This component's props.\n     *\n     * @returns {void}\n     */\n    constructor(props) {\n        super(props);\n\n        this.playerRef = React.createRef();\n    }\n\n    /**\n     * Retrieves the current player ref.\n     */\n    get player() {\n        return this.playerRef.current;\n    }\n\n    /**\n     * Indicates the playback state of the video.\n     *\n     * @returns {string}\n     */\n    getPlaybackStatus() {\n        let status;\n\n        if (!this.player) {\n            return;\n        }\n\n        if (this.player.paused) {\n            status = PLAYBACK_STATUSES.PAUSED;\n        } else {\n            status = PLAYBACK_STATUSES.PLAYING;\n        }\n\n        return status;\n    }\n\n    /**\n     * Indicates whether the video is muted.\n     *\n     * @returns {boolean}\n     */\n    isMuted() {\n        return this.player?.muted;\n    }\n\n    /**\n     * Retrieves current volume.\n     *\n     * @returns {number}\n     */\n    getVolume() {\n        return this.player?.volume;\n    }\n\n    /**\n     * Retrieves current time.\n     *\n     * @returns {number}\n     */\n    getTime() {\n        return this.player?.currentTime;\n    }\n\n    /**\n     * Seeks video to provided time.\n     *\n     * @param {number} time - The time to seek to.\n     *\n     * @returns {void}\n     */\n    seek(time) {\n        if (this.player) {\n            this.player.currentTime = time;\n        }\n    }\n\n    /**\n     * Plays video.\n     *\n     * @returns {void}\n     */\n    play() {\n        return this.player?.play();\n    }\n\n    /**\n     * Pauses video.\n     *\n     * @returns {void}\n     */\n    pause() {\n        return this.player?.pause();\n    }\n\n    /**\n     * Mutes video.\n     *\n     * @returns {void}\n     */\n    mute() {\n        if (this.player) {\n            this.player.muted = true;\n        }\n    }\n\n    /**\n     * Unmutes video.\n     *\n     * @returns {void}\n     */\n    unMute() {\n        if (this.player) {\n            this.player.muted = false;\n        }\n    }\n\n    /**\n     * Retrieves video tag params.\n     *\n     * @returns {void}\n     */\n    getPlayerOptions() {\n        const { _isOwner, videoId } = this.props;\n\n        let options = {\n            autoPlay: true,\n            src: videoId,\n            controls: _isOwner,\n            onError: () => this.onError(),\n            onPlay: () => this.onPlay(),\n            onVolumeChange: () => this.onVolumeChange()\n        };\n\n        if (_isOwner) {\n            options = {\n                ...options,\n                onPause: () => this.onPause(),\n                onTimeUpdate: this.throttledFireUpdateSharedVideoEvent\n            };\n\n        }\n\n        return options;\n    }\n\n    /**\n     * Implements React Component's render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (<video\n            id = 'sharedVideoPlayer'\n            ref = { this.playerRef }\n            { ...this.getPlayerOptions() } />);\n    }\n}\n\nexport default connect(_mapStateToProps, _mapDispatchToProps)(VideoManager);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport isEqual from 'fast-deep-equal';\nimport youTubePlayer from 'youtube-player';\n/**\n * Check whether a `props` change should result in the video being updated.\n *\n * @param {Object} prevProps\n * @param {Object} props\n */\n\nfunction shouldUpdateVideo(prevProps, props) {\n  // A changing video should always trigger an update\n  if (prevProps.videoId !== props.videoId) {\n    return true;\n  } // Otherwise, a change in the start/end time playerVars also requires a player\n  // update.\n\n\n  var prevVars = prevProps.opts.playerVars || {};\n  var vars = props.opts.playerVars || {};\n  return prevVars.start !== vars.start || prevVars.end !== vars.end;\n}\n/**\n * Neutralize API options that only require a video update, leaving only options\n * that require a player reset. The results can then be compared to see if a\n * player reset is necessary.\n *\n * @param {Object} opts\n */\n\n\nfunction filterResetOptions(opts) {\n  return _objectSpread(_objectSpread({}, opts), {}, {\n    playerVars: _objectSpread({\n      autoplay: 0,\n      start: 0,\n      end: 0\n    }, opts.playerVars)\n  });\n}\n/**\n * Check whether a `props` change should result in the player being reset.\n * The player is reset when the `props.opts` change, except if the only change\n * is in the `start` and `end` playerVars, because a video update can deal with\n * those.\n *\n * @param {Object} prevProps\n * @param {Object} props\n */\n\n\nfunction shouldResetPlayer(prevProps, props) {\n  return !isEqual(filterResetOptions(prevProps.opts), filterResetOptions(props.opts));\n}\n/**\n * Check whether a props change should result in an id or className update.\n *\n * @param {Object} prevProps\n * @param {Object} props\n */\n\n\nfunction shouldUpdatePlayer(prevProps, props) {\n  return prevProps.id !== props.id || prevProps.className !== props.className;\n}\n\nvar YouTube = /*#__PURE__*/function (_React$Component) {\n  _inherits(YouTube, _React$Component);\n\n  var _super = _createSuper(YouTube);\n\n  /**\n   * Expose PlayerState constants for convenience. These constants can also be\n   * accessed through the global YT object after the YouTube IFrame API is instantiated.\n   * https://developers.google.com/youtube/iframe_api_reference#onStateChange\n   */\n  function YouTube(props) {\n    var _this;\n\n    _classCallCheck(this, YouTube);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlayerReady\", function (event) {\n      return _this.props.onReady(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlayerError\", function (event) {\n      return _this.props.onError(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlayerStateChange\", function (event) {\n      _this.props.onStateChange(event);\n\n      switch (event.data) {\n        case YouTube.PlayerState.ENDED:\n          _this.props.onEnd(event);\n\n          break;\n\n        case YouTube.PlayerState.PLAYING:\n          _this.props.onPlay(event);\n\n          break;\n\n        case YouTube.PlayerState.PAUSED:\n          _this.props.onPause(event);\n\n          break;\n\n        default:\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlayerPlaybackRateChange\", function (event) {\n      return _this.props.onPlaybackRateChange(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlayerPlaybackQualityChange\", function (event) {\n      return _this.props.onPlaybackQualityChange(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"createPlayer\", function () {\n      // do not attempt to create a player server-side, it won't work\n      if (typeof document === 'undefined') return; // create player\n\n      var playerOpts = _objectSpread(_objectSpread({}, _this.props.opts), {}, {\n        // preload the `videoId` video if one is already given\n        videoId: _this.props.videoId\n      });\n\n      _this.internalPlayer = youTubePlayer(_this.container, playerOpts); // attach event handlers\n\n      _this.internalPlayer.on('ready', _this.onPlayerReady);\n\n      _this.internalPlayer.on('error', _this.onPlayerError);\n\n      _this.internalPlayer.on('stateChange', _this.onPlayerStateChange);\n\n      _this.internalPlayer.on('playbackRateChange', _this.onPlayerPlaybackRateChange);\n\n      _this.internalPlayer.on('playbackQualityChange', _this.onPlayerPlaybackQualityChange);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"resetPlayer\", function () {\n      return _this.internalPlayer.destroy().then(_this.createPlayer);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"updatePlayer\", function () {\n      _this.internalPlayer.getIframe().then(function (iframe) {\n        if (_this.props.id) iframe.setAttribute('id', _this.props.id);else iframe.removeAttribute('id');\n        if (_this.props.className) iframe.setAttribute('class', _this.props.className);else iframe.removeAttribute('class');\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getInternalPlayer\", function () {\n      return _this.internalPlayer;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"updateVideo\", function () {\n      if (typeof _this.props.videoId === 'undefined' || _this.props.videoId === null) {\n        _this.internalPlayer.stopVideo();\n\n        return;\n      } // set queueing options\n\n\n      var autoplay = false;\n      var opts = {\n        videoId: _this.props.videoId\n      };\n\n      if ('playerVars' in _this.props.opts) {\n        autoplay = _this.props.opts.playerVars.autoplay === 1;\n\n        if ('start' in _this.props.opts.playerVars) {\n          opts.startSeconds = _this.props.opts.playerVars.start;\n        }\n\n        if ('end' in _this.props.opts.playerVars) {\n          opts.endSeconds = _this.props.opts.playerVars.end;\n        }\n      } // if autoplay is enabled loadVideoById\n\n\n      if (autoplay) {\n        _this.internalPlayer.loadVideoById(opts);\n\n        return;\n      } // default behaviour just cues the video\n\n\n      _this.internalPlayer.cueVideoById(opts);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"refContainer\", function (container) {\n      _this.container = container;\n    });\n\n    _this.container = null;\n    _this.internalPlayer = null;\n    return _this;\n  }\n\n  _createClass(YouTube, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.createPlayer();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (shouldUpdatePlayer(prevProps, this.props)) {\n        this.updatePlayer();\n      }\n\n      if (shouldResetPlayer(prevProps, this.props)) {\n        this.resetPlayer();\n      }\n\n      if (shouldUpdateVideo(prevProps, this.props)) {\n        this.updateVideo();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      /**\n       * Note: The `youtube-player` package that is used promisifies all YouTube\n       * Player API calls, which introduces a delay of a tick before it actually\n       * gets destroyed. Since React attempts to remove the element instantly\n       * this method isn't quick enough to reset the container element.\n       */\n      this.internalPlayer.destroy();\n    }\n    /**\n     * https://developers.google.com/youtube/iframe_api_reference#onReady\n     *\n     * @param {Object} event\n     *   @param {Object} target - player object\n     */\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(\"div\", {\n        className: this.props.containerClassName\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        id: this.props.id,\n        className: this.props.className,\n        ref: this.refContainer\n      }));\n    }\n  }]);\n\n  return YouTube;\n}(React.Component);\n\n_defineProperty(YouTube, \"PlayerState\", {\n  UNSTARTED: -1,\n  ENDED: 0,\n  PLAYING: 1,\n  PAUSED: 2,\n  BUFFERING: 3,\n  CUED: 5\n});\n\nYouTube.propTypes = {\n  videoId: PropTypes.string,\n  // custom ID for player element\n  id: PropTypes.string,\n  // custom class name for player element\n  className: PropTypes.string,\n  // custom class name for player container element\n  containerClassName: PropTypes.string,\n  // https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player\n  opts: PropTypes.objectOf(PropTypes.any),\n  // event subscriptions\n  onReady: PropTypes.func,\n  onError: PropTypes.func,\n  onPlay: PropTypes.func,\n  onPause: PropTypes.func,\n  onEnd: PropTypes.func,\n  onStateChange: PropTypes.func,\n  onPlaybackRateChange: PropTypes.func,\n  onPlaybackQualityChange: PropTypes.func\n};\nYouTube.defaultProps = {\n  videoId: null,\n  id: null,\n  className: null,\n  opts: {},\n  containerClassName: '',\n  onReady: function onReady() {},\n  onError: function onError() {},\n  onPlay: function onPlay() {},\n  onPause: function onPause() {},\n  onEnd: function onEnd() {},\n  onStateChange: function onStateChange() {},\n  onPlaybackRateChange: function onPlaybackRateChange() {},\n  onPlaybackQualityChange: function onPlaybackQualityChange() {}\n};\nexport default YouTube;\n","/* eslint-disable no-invalid-this */\nimport React from 'react';\nimport YouTube from 'react-youtube';\n\nimport { connect } from '../../../base/redux';\nimport { PLAYBACK_STATUSES } from '../../constants';\n\nimport AbstractVideoManager, {\n    _mapDispatchToProps,\n    _mapStateToProps\n} from './AbstractVideoManager';\n\n/**\n * Manager of shared video.\n *\n * @returns {void}\n */\nclass YoutubeVideoManager extends AbstractVideoManager<Props> {\n    /**\n     * Initializes a new YoutubeVideoManager instance.\n     *\n     * @param {Object} props - This component's props.\n     *\n     * @returns {void}\n     */\n    constructor(props) {\n        super(props);\n\n        this.isPlayerAPILoaded = false;\n    }\n\n    /**\n     * Indicates the playback state of the video.\n     *\n     * @returns {string}\n     */\n    getPlaybackStatus() {\n        let status;\n\n        if (!this.player) {\n            return;\n        }\n\n        const playerState = this.player.getPlayerState();\n\n        if (playerState === YouTube.PlayerState.PLAYING) {\n            status = PLAYBACK_STATUSES.PLAYING;\n        }\n\n        if (playerState === YouTube.PlayerState.PAUSED) {\n            status = PLAYBACK_STATUSES.PAUSED;\n        }\n\n        return status;\n    }\n\n    /**\n     * Indicates whether the video is muted.\n     *\n     * @returns {boolean}\n     */\n    isMuted() {\n        return this.player?.isMuted();\n    }\n\n    /**\n     * Retrieves current volume.\n     *\n     * @returns {number}\n     */\n    getVolume() {\n        return this.player?.getVolume();\n    }\n\n    /**\n     * Retrieves current time.\n     *\n     * @returns {number}\n     */\n    getTime() {\n        return this.player?.getCurrentTime();\n    }\n\n    /**\n     * Seeks video to provided time.\n     *\n     * @param {number} time - The time to seek to.\n     *\n     * @returns {void}\n     */\n    seek(time) {\n        return this.player?.seekTo(time);\n    }\n\n    /**\n     * Plays video.\n     *\n     * @returns {void}\n     */\n    play() {\n        return this.player?.playVideo();\n    }\n\n    /**\n     * Pauses video.\n     *\n     * @returns {void}\n     */\n    pause() {\n        return this.player?.pauseVideo();\n    }\n\n    /**\n     * Mutes video.\n     *\n     * @returns {void}\n     */\n    mute() {\n        return this.player?.mute();\n    }\n\n    /**\n     * Unmutes video.\n     *\n     * @returns {void}\n     */\n    unMute() {\n        return this.player?.unMute();\n    }\n\n    /**\n     * Disposes of the current video player.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        if (this.player) {\n            this.player.destroy();\n            this.player = null;\n        }\n    }\n\n    /**\n     * Fired on play state toggle.\n     *\n     * @param {Object} event - The yt player stateChange event.\n     *\n     * @returns {void}\n     */\n    onPlayerStateChange = event => {\n        if (event.data === YouTube.PlayerState.PLAYING) {\n            this.onPlay();\n        } else if (event.data === YouTube.PlayerState.PAUSED) {\n            this.onPause();\n        }\n    }\n\n    /**\n     * Fired when youtube player is ready.\n     *\n     * @param {Object} event - The youtube player event.\n     *\n     * @returns {void}\n     */\n    onPlayerReady = event => {\n        const { _isOwner } = this.props;\n\n        this.player = event.target;\n\n        this.player.addEventListener('onVolumeChange', () => {\n            this.onVolumeChange();\n        });\n\n        if (_isOwner) {\n            this.player.addEventListener('onVideoProgress', this.throttledFireUpdateSharedVideoEvent);\n        }\n\n        this.play();\n\n        // sometimes youtube can get muted state from previous videos played in the browser\n        // and as we are disabling controls we want to unmute it\n        if (this.isMuted()) {\n            this.unMute();\n        }\n    };\n\n    getPlayerOptions = () => {\n        const { _isOwner, videoId } = this.props;\n        const showControls = _isOwner ? 1 : 0;\n\n        const options = {\n            id: 'sharedVideoPlayer',\n            opts: {\n                height: '100%',\n                width: '100%',\n                playerVars: {\n                    'origin': location.origin,\n                    'fs': '0',\n                    'autoplay': 0,\n                    'controls': showControls,\n                    'rel': 0\n                }\n            },\n            onError: () => this.onError(),\n            onReady: this.onPlayerReady,\n            onStateChange: this.onPlayerStateChange,\n            videoId\n        };\n\n        return options;\n    }\n\n    /**\n     * Implements React Component's render.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (<YouTube\n            { ...this.getPlayerOptions() } />);\n    }\n}\n\nexport default connect(_mapStateToProps, _mapDispatchToProps)(YoutubeVideoManager);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport Filmstrip from '../../../../../modules/UI/videolayout/Filmstrip';\nimport { getLocalParticipant } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { getToolboxHeight } from '../../../toolbox/functions.web';\n\nimport VideoManager from './VideoManager';\nimport YoutubeVideoManager from './YoutubeVideoManager';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * The available client width\n     */\n    clientHeight: number,\n\n    /**\n     * The available client width\n     */\n    clientWidth: number,\n\n    /**\n     * Whether the (vertical) filmstrip is visible or not.\n     */\n    filmstripVisible: boolean,\n\n    /**\n     * Is the video shared by the local user.\n     *\n     * @private\n     */\n     isOwner: boolean,\n\n    /**\n     * The shared video url\n     */\n     videoUrl: string,\n}\n\n/**\n * Implements a React {@link Component} which represents the large video (a.k.a.\n * the conference participant who is on the local stage) on Web/React.\n *\n * @extends Component\n */\nclass SharedVideo extends Component<Props> {\n    /**\n     * Computes the width and the height of the component.\n     *\n     * @returns {{\n     *  height: number,\n     *  width: number\n     * }}\n     */\n    getDimensions() {\n        const { clientHeight, clientWidth, filmstripVisible } = this.props;\n\n        let width;\n        let height;\n\n        if (interfaceConfig.VERTICAL_FILMSTRIP) {\n            if (filmstripVisible) {\n                width = `${clientWidth - Filmstrip.getVerticalFilmstripWidth()}px`;\n            } else {\n                width = `${clientWidth}px`;\n            }\n            height = `${clientHeight - getToolboxHeight()}px`;\n        } else {\n            if (filmstripVisible) {\n                height = `${clientHeight - Filmstrip.getFilmstripHeight()}px`;\n            } else {\n                height = `${clientHeight}px`;\n            }\n            width = `${clientWidth}px`;\n        }\n\n        return {\n            width,\n            height\n        };\n    }\n\n    /**\n     * Retrieves the manager to be used for playing the shared video.\n     *\n     * @returns {Component}\n     */\n    getManager() {\n        const { videoUrl } = this.props;\n\n        if (!videoUrl) {\n            return null;\n        }\n\n        if (videoUrl.match(/http/)) {\n            return <VideoManager videoId = { videoUrl } />;\n        }\n\n        return <YoutubeVideoManager videoId = { videoUrl } />;\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {React$Element}\n     */\n    render() {\n        const { isOwner } = this.props;\n        const className = isOwner ? '' : 'disable-pointer';\n\n        return (\n            <div\n                className = { className }\n                id = 'sharedVideo'\n                style = { this.getDimensions() }>\n                {this.getManager()}\n            </div>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated LargeVideo props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { ownerId, videoUrl } = state['features/shared-video'];\n    const { clientHeight, clientWidth } = state['features/base/responsive-ui'];\n    const { visible } = state['features/filmstrip'];\n\n    const localParticipant = getLocalParticipant(state);\n\n    return {\n        clientHeight,\n        clientWidth,\n        filmstripVisible: visible,\n        isOwner: ownerId === localParticipant?.id,\n        videoUrl\n    };\n}\n\nexport default connect(_mapStateToProps)(SharedVideo);\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../../base/i18n';\nimport { IconShareVideo } from '../../../base/icons';\nimport { connect } from '../../../base/redux';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../../base/toolbox/components';\nimport { toggleSharedVideo } from '../../actions.any';\nimport { isSharingStatus } from '../../functions';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Whether or not the button is disabled.\n     */\n    _isDisabled: boolean,\n\n    /**\n     * Whether or not the local participant is sharing a video.\n     */\n    _sharingVideo: boolean\n};\n\n/**\n * Implements an {@link AbstractButton} to open the user documentation in a new window.\n */\nclass SharedVideoButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.sharedvideo';\n    icon = IconShareVideo;\n    label = 'toolbar.sharedvideo';\n    toggledLabel = 'toolbar.stopSharedVideo';\n\n    /**\n     * Dynamically retrieves tooltip based on sharing state.\n     */\n    get tooltip() {\n        if (this._isToggled()) {\n            return 'toolbar.stopSharedVideo';\n        }\n\n        return 'toolbar.sharedvideo';\n    }\n\n    /**\n     * Required by linter due to AbstractButton overwritten prop being writable.\n     *\n     * @param {string} value - The value.\n     */\n    set tooltip(value) {\n        return value;\n    }\n\n    /**\n     * Handles clicking / pressing the button, and opens a new dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        this._doToggleSharedVideo();\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._sharingVideo;\n    }\n\n    /**\n     * Indicates whether this button is disabled or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isDisabled() {\n        return this.props._isDisabled;\n    }\n\n    /**\n     * Dispatches an action to toggle video sharing.\n     *\n     * @private\n     * @returns {void}\n     */\n    _doToggleSharedVideo() {\n        this.props.dispatch(toggleSharedVideo());\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state): Object {\n    const {\n        disabled: sharedVideoBtnDisabled,\n        status: sharedVideoStatus\n    } = state['features/shared-video'];\n\n    return {\n        _isDisabled: sharedVideoBtnDisabled,\n        _sharingVideo: isSharingStatus(sharedVideoStatus)\n    };\n}\n\n\nexport default translate(connect(_mapStateToProps)(SharedVideoButton));\n","// @flow\n\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { getYoutubeId } from '../functions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractSharedVideoDialog}.\n */\nexport type Props = {\n\n    /**\n     * Invoked to update the shared video link.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Function to be invoked after typing a valid video.\n     */\n    onPostSubmit: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements an abstract class for {@code SharedVideoDialog}.\n */\nexport default class AbstractSharedVideoDialog<S: *> extends Component < Props, S > {\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSetVideoLink = this._onSetVideoLink.bind(this);\n    }\n\n    _onSetVideoLink: string => boolean;\n\n    /**\n     * Validates the entered video link by extracting the id and dispatches it.\n     *\n     * It returns a boolean to comply the Dialog behaviour:\n     *     {@code true} - the dialog should be closed.\n     *     {@code false} - the dialog should be left open.\n     *\n    * @param {string} link - The entered video link.\n     * @returns {boolean}\n     */\n    _onSetVideoLink(link: string) {\n        if (!link || !link.trim()) {\n            return false;\n        }\n\n        const youtubeId = getYoutubeId(link);\n        const { onPostSubmit } = this.props;\n\n        onPostSubmit(youtubeId || link);\n\n        return true;\n    }\n}\n","// @flow\n\nimport { FieldTextStateless } from '@atlaskit/field-text';\nimport React from 'react';\n\nimport { Dialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport { getFieldValue } from '../../../base/react';\nimport { connect } from '../../../base/redux';\nimport { defaultSharedVideoLink } from '../../constants';\nimport AbstractSharedVideoDialog from '../AbstractSharedVideoDialog';\n\n/**\n * Component that renders the video share dialog.\n *\n * @returns {React$Element<any>}\n */\nclass SharedVideoDialog extends AbstractSharedVideoDialog<*> {\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            value: '',\n            okDisabled: true\n        };\n\n        this._onChange = this._onChange.bind(this);\n        this._onSubmitValue = this._onSubmitValue.bind(this);\n    }\n\n    _onChange: Object => void;\n\n    /**\n     * Callback for the onChange event of the field.\n     *\n     * @param {Object} evt - The static event.\n     * @returns {void}\n     */\n    _onChange(evt: Object) {\n        const linkValue = getFieldValue(evt);\n\n        this.setState({\n            value: linkValue,\n            okDisabled: !linkValue\n        });\n    }\n\n    _onSubmitValue: () => boolean;\n\n    /**\n     * Callback to be invoked when the value of the link input is submitted.\n     *\n     * @returns {boolean}\n     */\n    _onSubmitValue() {\n        return super._onSetVideoLink(this.state.value);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                hideCancelButton = { false }\n                okDisabled = { this.state.okDisabled }\n                okKey = { t('dialog.Share') }\n                onSubmit = { this._onSubmitValue }\n                titleKey = { t('dialog.shareVideoTitle') }\n                width = { 'small' }>\n                <FieldTextStateless\n                    autoFocus = { true }\n                    className = 'input-control'\n                    compact = { false }\n                    label = { t('dialog.videoLink') }\n                    name = 'sharedVideoUrl'\n                    onChange = { this._onChange }\n                    placeholder = { defaultSharedVideoLink }\n                    shouldFitContainer = { true }\n                    type = 'text'\n                    value = { this.state.value } />\n            </Dialog>\n        );\n    }\n\n    _onChange: Object => void;\n}\n\nexport default translate(connect()(SharedVideoDialog));\n","/**\n * The application's default properties related to the CSS box model such as\n * margins, borders, padding.\n */\nexport const BoxModel = {\n    /**\n     * The application's default margin when non-zero margin is necessary.\n     */\n    margin: 10,\n\n    /**\n     * The application's default padding when non-zero padding is necessary.\n     */\n    padding: 10\n};\n","/**\n * The application's definition of the default color black.\n */\nconst BLACK = '#111111';\n\n/**\n * The application's color palette.\n */\nexport const ColorPalette = {\n    /**\n     * The application's background color.\n     */\n    appBackground: BLACK,\n\n    /**\n     * The application's definition of the default color black. Generally,\n     * expected to be kept in sync with the application's background color for\n     * the sake of consistency.\n     */\n    black: BLACK,\n    blackBlue: 'rgb(0, 3, 6)',\n    blue: '#17A0DB',\n    blueHighlight: '#1081b2',\n    buttonUnderlay: '#495258',\n    darkGrey: '#555555',\n    darkBackground: 'rgb(19,21,25)',\n    green: '#40b183',\n    lightGrey: '#AAAAAA',\n    overflowMenuItemUnderlay: '#EEEEEE',\n    red: '#D00000',\n    transparent: 'rgba(0, 0, 0, 0)',\n    toggled: 'rgba(255,255,255,.15)',\n    warning: 'rgb(215, 121, 118)',\n    white: '#FFFFFF',\n\n    /**\n     * These are colors from the atlaskit to be used on mobile, when needed.\n     *\n     * FIXME: Maybe a better solution would be good, or a native packaging of\n     * the respective atlaskit components.\n     */\n    G400: '#00875A', // Slime\n    N500: '#42526E', // McFanning\n    R400: '#DE350B', // Red dirt\n    Y200: '#FFC400' // Pub mix\n};\n","// @flow\n\nimport moment from 'moment';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport {\n    PARTICIPANT_ROLE,\n    getLocalParticipant\n} from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { statsUpdate } from '../actions';\nimport { recordingController } from '../controller';\n\n\n/**\n * The type of the React {@code Component} props of\n * {@link LocalRecordingInfoDialog}.\n */\ntype Props = {\n\n    /**\n     * Redux store dispatch function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Current encoding format.\n     */\n    encodingFormat: string,\n\n    /**\n     * Whether the local user is the moderator.\n     */\n    isModerator: boolean,\n\n    /**\n     * Whether local recording is engaged.\n     */\n    isEngaged: boolean,\n\n    /**\n     * The start time of the current local recording session.\n     * Used to calculate the duration of recording.\n     */\n    recordingEngagedAt: Date,\n\n    /**\n     * Stats of all the participant.\n     */\n    stats: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * The type of the React {@code Component} state of\n * {@link LocalRecordingInfoDialog}.\n */\ntype State = {\n\n    /**\n     * The recording duration string to be displayed on the UI.\n     */\n    durationString: string\n}\n\n/**\n * A React Component with the contents for a dialog that shows information about\n * local recording. For users with moderator rights, this is also the \"control\n * panel\" for starting/stopping local recording on all clients.\n *\n * @extends Component\n */\nclass LocalRecordingInfoDialog extends Component<Props, State> {\n\n    /**\n     * Saves a handle to the timer for UI updates,\n     * so that it can be cancelled when the component unmounts.\n     */\n    _timer: ?IntervalID;\n\n    /**\n     * Initializes a new {@code LocalRecordingInfoDialog} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code LocalRecordingInfoDialog} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            durationString: ''\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._timer = setInterval(\n            () => {\n                this.setState((_prevState, props) => {\n                    const nowTime = new Date();\n\n                    return {\n                        durationString: this._getDuration(nowTime,\n                            props.recordingEngagedAt)\n                    };\n                });\n                try {\n                    this.props.dispatch(\n                        statsUpdate(recordingController\n                            .getParticipantsStats()));\n                } catch (e) {\n                    // do nothing\n                }\n            },\n            1000\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}.\n     *\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        if (this._timer) {\n            clearInterval(this._timer);\n            this._timer = null;\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { isModerator, t } = this.props;\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'localRecording.dialogTitle'>\n                <div className = 'localrec-control'>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.moderator')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { isModerator\n                            ? t('localRecording.yes')\n                            : t('localRecording.no') }\n                    </span>\n                </div>\n                { this._renderModeratorControls() }\n                { this._renderDurationAndFormat() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Renders the recording duration and encoding format. Only shown if local\n     * recording is engaged.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderDurationAndFormat() {\n        const { encodingFormat, isEngaged, t } = this.props;\n        const { durationString } = this.state;\n\n        if (!isEngaged) {\n            return null;\n        }\n\n        return (\n            <div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.duration')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { durationString === ''\n                            ? t('localRecording.durationNA')\n                            : durationString }\n                    </span>\n                </div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.encoding')}:`}\n                    </span>\n                    <span className = 'info-value'>\n                        { encodingFormat }\n                    </span>\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Returns React elements for displaying the local recording stats of\n     * each participant.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderStats() {\n        const { stats } = this.props;\n\n        if (stats === undefined) {\n            return null;\n        }\n        const ids = Object.keys(stats);\n\n        return (\n            <div className = 'localrec-participant-stats' >\n                { this._renderStatsHeader() }\n                { ids.map((id, i) => this._renderStatsLine(i, id)) }\n            </div>\n        );\n    }\n\n    /**\n     * Renders the stats for one participant.\n     *\n     * @private\n     * @param {*} lineKey - The key required by React for elements in lists.\n     * @param {*} id - The ID of the participant.\n     * @returns {ReactElement}\n     */\n    _renderStatsLine(lineKey, id) {\n        const { stats } = this.props;\n        let statusClass = 'localrec-participant-stats-item__status-dot ';\n\n        statusClass += stats[id].recordingStats\n            ? stats[id].recordingStats.isRecording\n                ? 'status-on'\n                : 'status-off'\n            : 'status-unknown';\n\n        return (\n            <div\n                className = 'localrec-participant-stats-item'\n                key = { lineKey } >\n                <div className = 'localrec-participant-stats-item__status'>\n                    <span className = { statusClass } />\n                </div>\n                <div className = 'localrec-participant-stats-item__name'>\n                    { stats[id].displayName || id }\n                </div>\n                <div className = 'localrec-participant-stats-item__sessionid'>\n                    { stats[id].recordingStats.currentSessionToken }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Renders the participant stats header line.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderStatsHeader() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'localrec-participant-stats-item'>\n                <div className = 'localrec-participant-stats-item__status' />\n                <div className = 'localrec-participant-stats-item__name'>\n                    { t('localRecording.participant') }\n                </div>\n                <div className = 'localrec-participant-stats-item__sessionid'>\n                    { t('localRecording.sessionToken') }\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Renders the moderator-only controls: The stats of all users and the\n     * action links.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderModeratorControls() {\n        const { isModerator, isEngaged, t } = this.props;\n\n        if (!isModerator) {\n            return null;\n        }\n\n        return (\n            <div>\n                <div className = 'localrec-control-action-links'>\n                    <div className = 'localrec-control-action-link'>\n                        { isEngaged ? <a\n                            onClick = { this._onStop }\n                            role = 'button'\n                            tabIndex = { 0 }>\n                            { t('localRecording.stop') }\n                        </a>\n                            : <a\n                                onClick = { this._onStart }\n                                role = 'button'\n                                tabIndex = { 0 }>\n                                { t('localRecording.start') }\n                            </a>\n                        }\n                    </div>\n                </div>\n                <div>\n                    <span className = 'localrec-control-info-label'>\n                        {`${t('localRecording.participantStats')}:`}\n                    </span>\n                </div>\n                { this._renderStats() }\n            </div>\n        );\n    }\n\n    /**\n     * Creates a duration string \"HH:MM:SS\" from two Date objects.\n     *\n     * @param {Date} now - Current time.\n     * @param {Date} prev - Previous time, the time to be subtracted.\n     * @returns {string}\n     */\n    _getDuration(now, prev) {\n        if (prev === null || prev === undefined) {\n            return '';\n        }\n\n        // Still a hack, as moment.js does not support formatting of duration\n        // (i.e. TimeDelta). Only works if total duration < 24 hours.\n        // But who is going to have a 24-hour long conference?\n        return moment(now - prev).utc()\n            .format('HH:mm:ss');\n    }\n\n    /**\n     * Callback function for the Start UI action.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStart() {\n        recordingController.startRecording();\n    }\n\n    /**\n     * Callback function for the Stop UI action.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onStop() {\n        recordingController.stopRecording();\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code LocalRecordingInfoDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     encodingFormat: string,\n *     isModerator: boolean,\n *     isEngaged: boolean,\n *     recordingEngagedAt: Date,\n *     stats: Object\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        encodingFormat,\n        isEngaged,\n        recordingEngagedAt,\n        stats\n    } = state['features/local-recording'];\n    const isModerator\n        = getLocalParticipant(state).role === PARTICIPANT_ROLE.MODERATOR;\n\n    return {\n        encodingFormat,\n        isModerator,\n        isEngaged,\n        recordingEngagedAt,\n        stats\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LocalRecordingInfoDialog));\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconRec } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\n\nimport LocalRecordingInfoDialog from './LocalRecordingInfoDialog';\n\n/**\n * The type of the React {@code Component} props of {@link LocalRecording}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Implementation of a button for opening local recording dialog.\n */\nclass LocalRecording extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.localRecording';\n    icon = IconRec;\n    label = 'localRecording.dialogTitle';\n    tooltip = 'localRecording.dialogTitle';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('local.recording'));\n        dispatch(openDialog(LocalRecordingInfoDialog));\n    }\n}\n\nexport default translate(connect()(LocalRecording));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n/index';\nimport { Label } from '../../base/label/index';\nimport { connect } from '../../base/redux';\nimport { Tooltip } from '../../base/tooltip';\n\n\n/**\n * The type of the React {@code Component} props of {@link LocalRecordingLabel}.\n */\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Whether local recording is engaged or not.\n     */\n    isEngaged: boolean\n};\n\n/**\n * React Component for displaying a label when local recording is engaged.\n *\n * @extends Component\n */\nclass LocalRecordingLabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props.isEngaged) {\n            return null;\n        }\n\n        return (\n            <Tooltip\n                content = { this.props.t('localRecording.labelToolTip') }\n                position = { 'bottom' }>\n                <Label\n                    className = 'local-rec'\n                    text = { this.props.t('localRecording.label') } />\n            </Tooltip>\n        );\n    }\n\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code LocalRecordingLabel} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n * }}\n */\nfunction _mapStateToProps(state) {\n    const { isEngaged } = state['features/local-recording'];\n\n    return {\n        isEngaged\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(LocalRecordingLabel));\n","/* @flow */\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createE2EEEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { Switch } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { toggleE2EE } from '../actions';\n\n\ntype Props = {\n\n    /**\n     * Whether E2EE is currently enabled or not.\n     */\n    _enabled: boolean,\n\n    /**\n     * Indicates whether all participants in the conference currently support E2EE.\n     */\n    _everyoneSupportE2EE: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * True if the switch is toggled on.\n     */\n    enabled: boolean,\n\n    /**\n     * True if the section description should be expanded, false otherwise.\n     */\n    expand: boolean\n};\n\n/**\n * Implements a React {@code Component} for displaying a security dialog section with a field\n * for setting the E2EE key.\n *\n * @extends Component\n */\nclass E2EESection extends Component<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: Object) {\n        if (props._enabled !== state.enabled) {\n\n            return {\n                enabled: props._enabled\n            };\n        }\n\n        return null;\n    }\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            enabled: false,\n            expand: false\n        };\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onExpand = this._onExpand.bind(this);\n        this._onExpandKeyPress = this._onExpandKeyPress.bind(this);\n        this._onToggle = this._onToggle.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _everyoneSupportE2EE, t } = this.props;\n        const { enabled, expand } = this.state;\n        const description = t('dialog.e2eeDescription');\n\n        return (\n            <div id = 'e2ee-section'>\n                <p\n                    aria-live = 'polite'\n                    className = 'description'\n                    id = 'e2ee-section-description'>\n                    { expand && description }\n                    { !expand && description.substring(0, 100) }\n                    { !expand && <span\n                        aria-controls = 'e2ee-section-description'\n                        aria-expanded = { expand }\n                        className = 'read-more'\n                        onClick = { this._onExpand }\n                        onKeyPress = { this._onExpandKeyPress }\n                        role = 'button'\n                        tabIndex = { 0 }>\n                            ... { t('dialog.readMore') }\n                    </span> }\n                </p>\n                {\n                    !_everyoneSupportE2EE\n                        && <span className = 'warning'>\n                            { t('dialog.e2eeWarning') }\n                        </span>\n                }\n                <div className = 'control-row'>\n                    <label htmlFor = 'e2ee-section-switch'>\n                        { t('dialog.e2eeLabel') }\n                    </label>\n                    <Switch\n                        id = 'e2ee-section-switch'\n                        onValueChange = { this._onToggle }\n                        value = { enabled } />\n                </div>\n            </div>\n        );\n    }\n\n    _onExpand: () => void;\n\n    /**\n     * Callback to be invoked when the description is expanded.\n     *\n     * @returns {void}\n     */\n    _onExpand() {\n        this.setState({\n            expand: true\n        });\n    }\n\n    _onExpandKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onExpandKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onExpand();\n        }\n    }\n\n    _onToggle: () => void;\n\n    /**\n     * Callback to be invoked when the user toggles E2EE on or off.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onToggle() {\n        const newValue = !this.state.enabled;\n\n        this.setState({\n            enabled: newValue\n        });\n\n        sendAnalytics(createE2EEEvent(`enabled.${String(newValue)}`));\n        this.props.dispatch(toggleE2EE(newValue));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const { enabled, everyoneSupportE2EE } = state['features/e2ee'];\n\n    return {\n        _enabled: enabled,\n        _everyoneSupportE2EE: everyoneSupportE2EE\n    };\n}\n\nexport default translate(connect(mapStateToProps)(E2EESection));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { IconE2EE } from '../../base/icons';\nimport { Label } from '../../base/label';\nimport { connect } from '../../base/redux';\nimport { Tooltip } from '../../base/tooltip';\n\nimport { _mapStateToProps, type Props } from './AbstractE2EELabel';\n\n\n/**\n * React {@code Component} for displaying a label when everyone has E2EE enabled in a conferene.\n *\n * @extends Component\n */\nclass E2EELabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._showLabel) {\n            return null;\n        }\n\n        return (\n            <Tooltip\n                content = { this.props.t('e2ee.labelToolTip') }\n                position = { 'bottom' }>\n                <Label\n                    className = 'label--green'\n                    icon = { IconE2EE } />\n            </Tooltip>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(E2EELabel));\n","// @flow\n\n\nexport type Props = {\n\n    /**\n     * True if the label needs to be rendered, false otherwise.\n     */\n    _showLabel: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Maps (parts of) the redux state to the associated props of this {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _showLabel: state['features/e2ee'].everyoneEnabledE2EE\n    };\n}\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../base/i18n';\nimport {\n    IconShareAudio,\n    IconStopAudioShare\n} from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport {\n    AbstractButton,\n    type AbstractButtonProps\n} from '../../base/toolbox/components';\nimport { setOverflowMenuVisible } from '../../toolbox/actions';\nimport { startAudioScreenShareFlow } from '../actions';\nimport { isAudioOnlySharing } from '../functions';\n\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Whether or not the local participant is audio only screen sharing.\n     */\n    _isAudioOnlySharing: boolean\n}\n\n/**\n * Component that renders a toolbar button for toggling audio only screen share.\n */\nclass ShareAudioButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.shareaudio';\n    icon = IconShareAudio;\n    label = 'toolbar.shareaudio';\n    tooltip = 'toolbar.shareaudio';\n    toggledIcon = IconStopAudioShare;\n    toggledLabel = 'toolbar.stopAudioSharing';\n\n    /**\n     * Handles clicking / pressing the button, and opens a new dialog.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleClick() {\n        this.props.dispatch(startAudioScreenShareFlow());\n        this.props.dispatch(setOverflowMenuVisible(false));\n    }\n\n    /**\n     * Indicates whether this button is in toggled state or not.\n     *\n     * @override\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isAudioOnlySharing;\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state: Object): $Shape<Props> {\n\n    return {\n        _isAudioOnlySharing: isAudioOnlySharing(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(ShareAudioButton));\n","// @flow\n\nimport { Checkbox } from '@atlaskit/checkbox';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport {\n    updateSettings,\n    shouldHideShareAudioHelper\n} from '../../base/settings';\nimport { toggleScreensharing } from '../../base/tracks';\n\n/**\n * The type of the React {@code Component} props of {@link ShareAudioDialog}.\n */\nexport type Props = {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Boolean stored in local storage that determines whether or not the dialog will be displayed again.\n     */\n     _shouldHideShareAudioHelper: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Component that displays the audio screen share helper dialog.\n */\nclass ShareAudioDialog extends Component<Props> {\n\n    /**\n     * Instantiates a new component.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this._onContinue = this._onContinue.bind(this);\n        this._onSelectHideShareAudioHelper = this._onSelectHideShareAudioHelper.bind(this);\n    }\n\n    _onContinue: () => boolean;\n\n    /**\n     * Continue the normal screen sharing flow when the user clicks continue.\n     *\n     * @returns {boolean}\n     */\n    _onContinue() {\n        // Pass undefined as the first parameter so the underlying logic decides weather or not to stop screen sharing.\n        this.props.dispatch(toggleScreensharing(undefined, true));\n\n        return true;\n    }\n\n    _onSelectHideShareAudioHelper: (Object) => void;\n\n    /**\n     * Callback invoked when the hide audio helper checkbox has been selected. This setting will be persisted in\n     * the local storage, thus the dialog won't be displayed again.\n     *\n     * @param {Object} e - The key event to handle.\n     * @returns {void}\n     */\n    _onSelectHideShareAudioHelper({ target: { checked } }) {\n        this.props.dispatch(updateSettings({ hideShareAudioHelper: checked }));\n    }\n\n    /**\n     * Implements {@Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n\n        const { t } = this.props;\n\n        return (\n            <Dialog\n                hideCancelButton = { false }\n                okKey = { t('dialog.shareAudio') }\n                onSubmit = { this._onContinue }\n                titleKey = { t('dialog.shareAudioTitle') }\n                width = { 'medium' } >\n                <div className = 'share-audio-dialog'>\n                    <img\n                        className = 'share-audio-animation'\n                        src = 'images/share-audio.gif' />\n                    <Checkbox\n                        isChecked = { this.props._shouldHideShareAudioHelper }\n                        label = { t('dialog.hideShareAudioHelper') }\n                        name = 'hide-share-audio-helper'\n                        // eslint-disable-next-line react/jsx-no-bind\n                        onChange = { this._onSelectHideShareAudioHelper } />\n                </div>\n            </Dialog>\n        );\n    }\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state: Object): $Shape<Props> {\n\n    return {\n        _shouldHideShareAudioHelper: shouldHideShareAudioHelper(state)\n    };\n}\n\n\nexport default translate(connect(_mapStateToProps)(ShareAudioDialog));\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { Container } from '../../react/base';\nimport { styleTypeToObject } from '../../styles';\n\ntype Props = {\n\n    /**\n     * Class name for the web platform, if any.\n     */\n    className?: string,\n\n    /**\n     * Color of the icon (if not provided by the style object).\n     */\n    color?: string,\n\n    /**\n     * Id prop (mainly for autotests).\n     */\n    id?: string,\n\n    /**\n     * Id of the icon container\n     */\n    containerId?: string,\n\n    /**\n     * Function to invoke on click.\n     */\n    onClick?: Function,\n\n    /**\n     * The size of the icon (if not provided by the style object).\n     */\n    size?: number | string,\n\n    /**\n     * The preloaded icon component to render.\n     */\n    src: Function,\n\n    /**\n     * Style object to be applied.\n     */\n    style?: Object,\n\n    /**\n     * aria disabled flag for the Icon.\n     */\n    ariaDisabled?: boolean,\n\n    /**\n     * aria label for the Icon.\n     */\n    ariaLabel?: string,\n\n    /**\n     * whether the element has a popup\n     */\n    ariaHasPopup?: boolean,\n\n    /**\n     * whether the element has a pressed\n     */\n    ariaPressed?: boolean,\n\n    /**\n     * id of description label\n     */\n    ariaDescribedBy?: string,\n\n    /**\n     * whether the element popup is expanded\n     */\n    ariaExpanded?: boolean,\n\n    /**\n     * The id of the element this button icon controls\n     */\n    ariaControls?: string,\n\n      /**\n     * tabIndex  for the Icon.\n     */\n    tabIndex?: number,\n\n     /**\n     * role for the Icon.\n     */\n    role?: string,\n\n    /**\n     * keypress handler.\n     */\n    onKeyPress?: Function,\n\n    /**\n     * keydown handler.\n     */\n    onKeyDown?: Function\n}\n\nexport const DEFAULT_COLOR = navigator.product === 'ReactNative' ? 'white' : undefined;\nexport const DEFAULT_SIZE = navigator.product === 'ReactNative' ? 36 : 22;\n\n/**\n * Implements an Icon component that takes a loaded SVG file as prop and renders it as an icon.\n *\n * @param {Props} props - The props of the component.\n * @returns {Reactelement}\n */\nexport default function Icon(props: Props) {\n    const {\n        className,\n        color,\n        id,\n        containerId,\n        onClick,\n        size,\n        src: IconComponent,\n        style,\n        ariaHasPopup,\n        ariaLabel,\n        ariaDisabled,\n        ariaExpanded,\n        ariaControls,\n        tabIndex,\n        ariaPressed,\n        ariaDescribedBy,\n        role,\n        onKeyPress,\n        onKeyDown,\n        ...rest\n    }: Props = props;\n\n    const {\n        color: styleColor,\n        fontSize: styleSize,\n        ...restStyle\n    } = styleTypeToObject(style ?? {});\n    const calculatedColor = color ?? styleColor ?? DEFAULT_COLOR;\n    const calculatedSize = size ?? styleSize ?? DEFAULT_SIZE;\n\n    const onKeyPressHandler = useCallback(e => {\n        if ((e.key === 'Enter' || e.key === ' ') && onClick) {\n            e.preventDefault();\n            onClick(e);\n        } else if (onKeyPress) {\n            onKeyPress(e);\n        }\n    }, [ onClick, onKeyPress ]);\n\n    return (\n        <Container\n            { ...rest }\n            aria-controls = { ariaControls }\n            aria-describedby = { ariaDescribedBy }\n            aria-disabled = { ariaDisabled }\n            aria-expanded = { ariaExpanded }\n            aria-haspopup = { ariaHasPopup }\n            aria-label = { ariaLabel }\n            aria-pressed = { ariaPressed }\n            className = { `jitsi-icon ${className || ''}` }\n            id = { containerId }\n            onClick = { onClick }\n            onKeyDown = { onKeyDown }\n            onKeyPress = { onKeyPressHandler }\n            role = { role }\n            style = { restStyle }\n            tabIndex = { tabIndex }>\n            <IconComponent\n                fill = { calculatedColor }\n                height = { calculatedSize }\n                id = { id }\n                width = { calculatedSize } />\n        </Container>\n    );\n}\n\nIcon.defaultProps = {\n    className: ''\n};\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { Dialog, hideDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { getParticipantById } from '../../base/participants';\nimport { connect } from '../../base/redux';\nimport { getLocalVideoTrack } from '../../base/tracks';\nimport { grant, deny } from '../actions';\n\ndeclare var APP: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link RemoteControlAuthorizationDialog}.\n */\ntype Props = {\n\n    /**\n     * The display name of the participant who is requesting authorization for\n     * remote desktop control session.\n     */\n    _displayName: string,\n\n    _isScreenSharing: boolean,\n    _sourceType: string,\n\n    /**\n     * Used to show/hide the dialog on cancel.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the participant who is requesting authorization for remote\n     * desktop control session.\n     */\n    participantId: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a dialog for remote control authorization.\n */\nclass RemoteControlAuthorizationDialog extends Component<Props> {\n    /**\n     * Initializes a new RemoteControlAuthorizationDialog instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onCancel = this._onCancel.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Dialog\n                okKey = { 'dialog.allow' }\n                onCancel = { this._onCancel }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.remoteControlTitle'\n                width = 'small'>\n                {\n                    this.props.t(\n                        'dialog.remoteControlRequestMessage',\n                        { user: this.props._displayName })\n                }\n                {\n                    this._getAdditionalMessage()\n                }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Renders additional message text for the dialog.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _getAdditionalMessage() {\n        const { _isScreenSharing, _sourceType } = this.props;\n\n        if (_isScreenSharing && _sourceType === 'screen') {\n            return null;\n        }\n\n        return (\n            <div>\n                <br />\n                { this.props.t('dialog.remoteControlShareScreenWarning') }\n            </div>\n        );\n    }\n\n    _onCancel: () => boolean;\n\n    /**\n     * Notifies the remote control module about the denial of the remote control\n     * request.\n     *\n     * @private\n     * @returns {boolean} Returns true to close the dialog.\n     */\n    _onCancel() {\n        const { dispatch, participantId } = this.props;\n\n        dispatch(deny(participantId));\n\n        return true;\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Notifies the remote control module that the remote control request is\n     * accepted.\n     *\n     * @private\n     * @returns {boolean} Returns false to prevent closure because the dialog is\n     * closed manually to be sure that if the desktop picker dialog can be\n     * displayed (if this dialog is displayed when we try to display the desktop\n     * picker window, the action will be ignored).\n     */\n    _onSubmit() {\n        const { dispatch, participantId } = this.props;\n\n        dispatch(hideDialog());\n        dispatch(grant(participantId));\n\n        return false;\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the RemoteControlAuthorizationDialog's\n * props.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The React Component props passed to the associated\n * (instance of) RemoteControlAuthorizationDialog.\n * @private\n * @returns {{\n *     _displayName: string,\n *     _isScreenSharing: boolean,\n *     _sourceId: string,\n *     _sourceType: string\n * }}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const { _displayName, participantId } = ownProps;\n    const participant = getParticipantById(state, participantId);\n    const tracks = state['features/base/tracks'];\n    const track = getLocalVideoTrack(tracks);\n    const _isScreenSharing = track?.videoType === 'desktop';\n    const { sourceType } = track?.jitsiTrack || {};\n\n    return {\n        _displayName: participant ? participant.name : _displayName,\n        _isScreenSharing,\n        _sourceType: sourceType\n    };\n}\n\nexport default translate(\n    connect(_mapStateToProps)(RemoteControlAuthorizationDialog));\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport React, { PureComponent } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { VIDEO_TYPE } from '../../base/media';\nimport Video from '../../base/media/components/Video';\nimport { connect, equals } from '../../base/redux';\nimport { getCurrentCameraDeviceId } from '../../base/settings';\nimport { createLocalTracksF } from '../../base/tracks/functions';\nimport { toggleBackgroundEffect } from '../actions';\nimport { VIRTUAL_BACKGROUND_TYPE } from '../constants';\nimport { localTrackStopped } from '../functions';\n\nconst videoClassName = 'video-preview-video';\n\n/**\n * The type of the React {@code PureComponent} props of {@link VirtualBackgroundPreview}.\n */\nexport type Props = {\n\n    /**\n     * The deviceId of the camera device currently being used.\n     */\n    _currentCameraDeviceId: string,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * Represents the virtual background setted options.\n     */\n    options: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link VirtualBackgroundPreview}.\n */\ntype State = {\n\n    /**\n     * Loader activated on setting virtual background.\n     */\n    loading: boolean,\n\n    /**\n     * Activate the selected device camera only.\n     */\n    jitsiTrack: Object\n};\n\n/**\n * Implements a React {@link PureComponent} which displays the virtual\n * background preview.\n *\n * @extends PureComponent\n */\nclass VirtualBackgroundPreview extends PureComponent<Props, State> {\n    _componentWasUnmounted: boolean;\n\n    /**\n     * Initializes a new {@code VirtualBackgroundPreview} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            loading: false,\n            jitsiTrack: null\n        };\n    }\n\n    /**\n     * Destroys the jitsiTrack object.\n     *\n     * @param {Object} jitsiTrack - The track that needs to be disposed.\n     * @returns {Promise<void>}\n     */\n    _stopStream(jitsiTrack) {\n        if (jitsiTrack) {\n            jitsiTrack.dispose();\n        }\n    }\n\n    /**\n     * Creates and updates the track data.\n     *\n     * @returns {void}\n     */\n    async _setTracks() {\n        const [ jitsiTrack ] = await createLocalTracksF({\n            cameraDeviceId: this.props._currentCameraDeviceId,\n            devices: [ 'video' ]\n        });\n\n\n        // In case the component gets unmounted before the tracks are created\n        // avoid a leak by not setting the state\n        if (this._componentWasUnmounted) {\n            this._stopStream(jitsiTrack);\n\n            return;\n        }\n        this.setState({\n            jitsiTrack\n        });\n\n        if (this.props.options.backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            this._applyBackgroundEffect();\n        }\n    }\n\n    /**\n     * Apply background effect on video preview.\n     *\n     * @returns {Promise}\n     */\n    async _applyBackgroundEffect() {\n        this.setState({ loading: true });\n        await this.props.dispatch(toggleBackgroundEffect(this.props.options, this.state.jitsiTrack));\n        this.setState({ loading: false });\n    }\n\n    /**\n     * Apply video preview loader.\n     *\n     * @returns {Promise}\n     */\n    _loadVideoPreview() {\n        return (\n            <div className = 'video-preview-loader'>\n                <Spinner\n                    invertColor = { true }\n                    isCompleting = { false }\n                    size = { 'large' } />\n            </div>\n        );\n    }\n\n    /**\n     * Renders a preview entry.\n     *\n     * @param {Object} data - The track data.\n     * @returns {React$Node}\n     */\n    _renderPreviewEntry(data) {\n        const { t } = this.props;\n        const className = 'video-background-preview-entry';\n\n        if (this.state.loading) {\n            return this._loadVideoPreview();\n        }\n        if (!data) {\n            return (\n                <div\n                    className = { className }\n                    video-preview-container = { true }>\n                    <div className = 'video-preview-error'>{t('deviceSelection.previewUnavailable')}</div>\n                </div>\n            );\n        }\n        const props: Object = {\n            className\n        };\n\n        return (\n            <div { ...props }>\n                <Video\n                    className = { videoClassName }\n                    playsinline = { true }\n                    videoTrack = {{ jitsiTrack: data }} />\n            </div>\n        );\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._setTracks();\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._componentWasUnmounted = true;\n        this._stopStream(this.state.jitsiTrack);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidUpdate}.\n     *\n     * @inheritdoc\n     */\n    async componentDidUpdate(prevProps) {\n        if (!equals(this.props._currentCameraDeviceId, prevProps._currentCameraDeviceId)) {\n            this._setTracks();\n        }\n        if (!equals(this.props.options, prevProps.options)) {\n            if (prevProps.options.backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n                prevProps.options.url.dispose();\n            }\n            this._applyBackgroundEffect();\n        }\n        if (this.props.options.url?.videoType === VIDEO_TYPE.DESKTOP) {\n            localTrackStopped(this.props.dispatch, this.props.options.url, this.state.jitsiTrack);\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { jitsiTrack } = this.state;\n\n        return jitsiTrack\n            ? <div className = 'video-preview'>{this._renderPreviewEntry(jitsiTrack)}</div>\n            : <div className = 'video-preview-loader'>{this._loadVideoPreview()}</div>\n        ;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VirtualBackgroundPreview} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{Props}}\n */\nfunction _mapStateToProps(state): Object {\n    return {\n        _currentCameraDeviceId: getCurrentCameraDeviceId(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VirtualBackgroundPreview));\n","// @flow\n\nimport Spinner from '@atlaskit/spinner';\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils/jitsi-local-storage';\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport uuid from 'uuid';\n\nimport { Dialog, hideDialog, openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconCloseSmall, IconPlusCircle, IconShareDesktop } from '../../base/icons';\nimport { browser, JitsiTrackErrors } from '../../base/lib-jitsi-meet';\nimport { createLocalTrack } from '../../base/lib-jitsi-meet/functions';\nimport { VIDEO_TYPE } from '../../base/media';\nimport { connect } from '../../base/redux';\nimport { updateSettings } from '../../base/settings';\nimport { Tooltip } from '../../base/tooltip';\nimport { getLocalVideoTrack } from '../../base/tracks';\nimport { showErrorNotification } from '../../notifications';\nimport { toggleBackgroundEffect } from '../actions';\nimport { VIRTUAL_BACKGROUND_TYPE } from '../constants';\nimport { resizeImage, toDataURL } from '../functions';\nimport logger from '../logger';\n\nimport VirtualBackgroundPreview from './VirtualBackgroundPreview';\n\n\ntype Image = {\n    tooltip?: string,\n    id: string,\n    src: string\n}\n\n// The limit of virtual background uploads is 24. When the number\n// of uploads is 25 we trigger the deleteStoredImage function to delete\n// the first/oldest uploaded background.\nconst backgroundsLimit = 25;\nconst images: Array<Image> = [\n    {\n        tooltip: 'image1',\n        id: '1',\n        src: 'images/virtual-background/background-1.jpg'\n    },\n    {\n        tooltip: 'image2',\n        id: '2',\n        src: 'images/virtual-background/background-2.jpg'\n    },\n    {\n        tooltip: 'image3',\n        id: '3',\n        src: 'images/virtual-background/background-3.jpg'\n    },\n    {\n        tooltip: 'image4',\n        id: '4',\n        src: 'images/virtual-background/background-4.jpg'\n    },\n    {\n        tooltip: 'image5',\n        id: '5',\n        src: 'images/virtual-background/background-5.jpg'\n    },\n    {\n        tooltip: 'image6',\n        id: '6',\n        src: 'images/virtual-background/background-6.jpg'\n    },\n    {\n        tooltip: 'image7',\n        id: '7',\n        src: 'images/virtual-background/background-7.jpg'\n    }\n];\ntype Props = {\n\n    /**\n     * The current local flip x status.\n     */\n    _localFlipX: boolean,\n\n    /**\n     * Returns the jitsi track that will have backgraund effect applied.\n     */\n    _jitsiTrack: Object,\n\n    /**\n     * Returns the selected thumbnail identifier.\n     */\n    _selectedThumbnail: string,\n\n    /**\n     * Returns the selected virtual background object.\n     */\n    _virtualBackground: Object,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function,\n\n    /**\n     * The initial options copied in the state for the {@code VirtualBackground} component.\n     *\n     * NOTE: currently used only for electron in order to open the dialog in the correct state after desktop sharing\n     * selection.\n     */\n    initialOptions: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\nconst onError = event => {\n    event.target.style.display = 'none';\n};\n\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VirtualBackground} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{Props}}\n */\nfunction _mapStateToProps(state): Object {\n    const { localFlipX } = state['features/base/settings'];\n\n    return {\n        _localFlipX: Boolean(localFlipX),\n        _virtualBackground: state['features/virtual-background'],\n        _selectedThumbnail: state['features/virtual-background'].selectedThumbnail,\n        _jitsiTrack: getLocalVideoTrack(state['features/base/tracks'])?.jitsiTrack\n    };\n}\n\nconst VirtualBackgroundDialog = translate(connect(_mapStateToProps)(VirtualBackground));\n\n/**\n * Renders virtual background dialog.\n *\n * @returns {ReactElement}\n */\nfunction VirtualBackground({\n    _localFlipX,\n    _jitsiTrack,\n    _selectedThumbnail,\n    _virtualBackground,\n    dispatch,\n    initialOptions,\n    t\n}: Props) {\n    const [ options, setOptions ] = useState({ ...initialOptions });\n    const localImages = jitsiLocalStorage.getItem('virtualBackgrounds');\n    const [ storedImages, setStoredImages ] = useState<Array<Image>>((localImages && Bourne.parse(localImages)) || []);\n    const [ loading, setLoading ] = useState(false);\n    const uploadImageButton: Object = useRef(null);\n    const [ activeDesktopVideo ] = useState(_virtualBackground?.virtualSource?.videoType === VIDEO_TYPE.DESKTOP\n        ? _virtualBackground.virtualSource\n        : null);\n    const [ initialVirtualBackground ] = useState(_virtualBackground);\n    const deleteStoredImage = useCallback(e => {\n        const imageId = e.currentTarget.getAttribute('data-imageid');\n\n        setStoredImages(storedImages.filter(item => item.id !== imageId));\n    }, [ storedImages ]);\n\n    const deleteStoredImageKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            deleteStoredImage(e);\n        }\n    }, [ deleteStoredImage ]);\n\n    /**\n     * Updates stored images on local storage.\n     */\n    useEffect(() => {\n        try {\n            jitsiLocalStorage.setItem('virtualBackgrounds', JSON.stringify(storedImages));\n        } catch (err) {\n            // Preventing localStorage QUOTA_EXCEEDED_ERR\n            err && setStoredImages(storedImages.slice(1));\n        }\n        if (storedImages.length === backgroundsLimit) {\n            setStoredImages(storedImages.slice(1));\n        }\n    }, [ storedImages ]);\n\n\n    const enableBlur = useCallback(async () => {\n        setOptions({\n            backgroundType: VIRTUAL_BACKGROUND_TYPE.BLUR,\n            enabled: true,\n            blurValue: 25,\n            selectedThumbnail: 'blur'\n        });\n        logger.info('\"Blur\" option setted for virtual background preview!');\n\n    }, []);\n\n    const enableBlurKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            enableBlur();\n        }\n    }, [ enableBlur ]);\n\n    const enableSlideBlur = useCallback(async () => {\n        setOptions({\n            backgroundType: VIRTUAL_BACKGROUND_TYPE.BLUR,\n            enabled: true,\n            blurValue: 8,\n            selectedThumbnail: 'slight-blur'\n        });\n        logger.info('\"Slight-blur\" option setted for virtual background preview!');\n\n    }, []);\n\n    const enableSlideBlurKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            enableSlideBlur();\n        }\n    }, [ enableSlideBlur ]);\n\n\n    const shareDesktop = useCallback(async () => {\n        let isCancelled = false, url;\n\n        try {\n            url = await createLocalTrack('desktop', '');\n        } catch (e) {\n            if (e.name === JitsiTrackErrors.SCREENSHARING_USER_CANCELED) {\n                isCancelled = true;\n            } else {\n                logger.error(e);\n            }\n        }\n\n        if (!url) {\n            if (!isCancelled) {\n                dispatch(showErrorNotification({\n                    titleKey: 'virtualBackground.desktopShareError'\n                }));\n                logger.error('Could not create desktop share as a virtual background!');\n            }\n\n            /**\n             * For electron createLocalTrack will open the {@code DesktopPicker} dialog and hide the\n             * {@code VirtualBackgroundDialog}. That's why we need to reopen the {@code VirtualBackgroundDialog}\n             * and restore the current state through {@code initialOptions} prop.\n             */\n            if (browser.isElectron()) {\n                dispatch(openDialog(VirtualBackgroundDialog, { initialOptions: options }));\n            }\n\n            return;\n        }\n\n        const newOptions = {\n            backgroundType: VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE,\n            enabled: true,\n            selectedThumbnail: 'desktop-share',\n            url\n        };\n\n        /**\n         * For electron createLocalTrack will open the {@code DesktopPicker} dialog and hide the\n         * {@code VirtualBackgroundDialog}. That's why we need to reopen the {@code VirtualBackgroundDialog}\n         * and force it to show desktop share virtual background through {@code initialOptions} prop.\n         */\n        if (browser.isElectron()) {\n            dispatch(openDialog(VirtualBackgroundDialog, { initialOptions: newOptions }));\n        } else {\n            setOptions(newOptions);\n            logger.info('\"Desktop-share\" option setted for virtual background preview!');\n        }\n    }, [ dispatch, options ]);\n\n    const shareDesktopKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            shareDesktop();\n        }\n    }, [ shareDesktop ]);\n\n    const removeBackground = useCallback(async () => {\n        setOptions({\n            enabled: false,\n            selectedThumbnail: 'none'\n        });\n        logger.info('\"None\" option setted for virtual background preview!');\n\n    }, []);\n\n    const removeBackgroundKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            removeBackground();\n        }\n    }, [ removeBackground ]);\n\n    const setUploadedImageBackground = useCallback(async e => {\n        const imageId = e.currentTarget.getAttribute('data-imageid');\n        const image = storedImages.find(img => img.id === imageId);\n\n        if (image) {\n            setOptions({\n                backgroundType: 'image',\n                enabled: true,\n                url: image.src,\n                selectedThumbnail: image.id\n            });\n            logger.info('Uploaded image setted for virtual background preview!');\n        }\n    }, [ storedImages ]);\n\n    const setImageBackground = useCallback(async e => {\n        const imageId = e.currentTarget.getAttribute('data-imageid');\n        const image = images.find(img => img.id === imageId);\n\n        if (image) {\n            const url = await toDataURL(image.src);\n\n            setOptions({\n                backgroundType: 'image',\n                enabled: true,\n                url,\n                selectedThumbnail: image.id\n            });\n            logger.info('Image setted for virtual background preview!');\n\n            setLoading(false);\n        }\n    }, []);\n\n    const uploadImage = useCallback(async e => {\n        const reader = new FileReader();\n        const imageFile = e.target.files;\n\n        reader.readAsDataURL(imageFile[0]);\n        reader.onload = async () => {\n            const url = await resizeImage(reader.result);\n            const uuId = uuid.v4();\n\n            setStoredImages([\n                ...storedImages,\n                {\n                    id: uuId,\n                    src: url\n                }\n            ]);\n            setOptions({\n                backgroundType: VIRTUAL_BACKGROUND_TYPE.IMAGE,\n                enabled: true,\n                url,\n                selectedThumbnail: uuId\n            });\n        };\n        logger.info('New virtual background image uploaded!');\n\n        reader.onerror = () => {\n            setLoading(false);\n            logger.error('Failed to upload virtual image!');\n        };\n    }, [ dispatch, storedImages ]);\n\n    const uploadImageKeyPress = useCallback(e => {\n        if (uploadImageButton.current && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            uploadImageButton.current.click();\n        }\n    }, [ uploadImageButton.current ]);\n\n    const setImageBackgroundKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            setImageBackground(e);\n        }\n    }, [ setImageBackground ]);\n\n    const setUploadedImageBackgroundKeyPress = useCallback(e => {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            setUploadedImageBackground(e);\n        }\n    }, [ setUploadedImageBackground ]);\n\n    const applyVirtualBackground = useCallback(async () => {\n        if (activeDesktopVideo) {\n            await activeDesktopVideo.dispose();\n        }\n        setLoading(true);\n        await dispatch(toggleBackgroundEffect(options, _jitsiTrack));\n        await setLoading(false);\n        if (_localFlipX && options.backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            dispatch(updateSettings({\n                localFlipX: !_localFlipX\n            }));\n        } else {\n\n            // Set x scale to default value.\n            dispatch(updateSettings({\n                localFlipX: true\n            }));\n        }\n        dispatch(hideDialog());\n        logger.info(`Virtual background type: '${typeof options.backgroundType === 'undefined'\n            ? 'none' : options.backgroundType}' applied!`);\n    }, [ dispatch, options, _localFlipX ]);\n\n    // Prevent the selection of a new virtual background if it has not been applied by default\n    const cancelVirtualBackground = useCallback(async () => {\n        await setOptions({\n            backgroundType: initialVirtualBackground.backgroundType,\n            enabled: initialVirtualBackground.backgroundEffectEnabled,\n            url: initialVirtualBackground.virtualSource,\n            selectedThumbnail: initialVirtualBackground.selectedThumbnail,\n            blurValue: initialVirtualBackground.blurValue\n        });\n        dispatch(hideDialog());\n    });\n\n    return (\n        <Dialog\n            hideCancelButton = { false }\n            okKey = { 'virtualBackground.apply' }\n            onCancel = { cancelVirtualBackground }\n            onSubmit = { applyVirtualBackground }\n            submitDisabled = { !options || loading }\n            titleKey = { 'virtualBackground.title' } >\n            <VirtualBackgroundPreview options = { options } />\n            {loading ? (\n                <div className = 'virtual-background-loading'>\n                    <Spinner\n                        isCompleting = { false }\n                        size = 'medium' />\n                </div>\n            ) : (\n                <div>\n                    <label\n                        aria-label = { t('virtualBackground.uploadImage') }\n                        className = 'file-upload-label'\n                        htmlFor = 'file-upload'\n                        onKeyPress = { uploadImageKeyPress }\n                        tabIndex = { 0 } >\n                        <Icon\n                            className = { 'add-background' }\n                            size = { 20 }\n                            src = { IconPlusCircle } />\n                        {t('virtualBackground.addBackground')}\n                    </label>\n                    <input\n                        accept = 'image/*'\n                        className = 'file-upload-btn'\n                        id = 'file-upload'\n                        onChange = { uploadImage }\n                        ref = { uploadImageButton }\n                        type = 'file' />\n                    <div\n                        className = 'virtual-background-dialog'\n                        role = 'radiogroup'\n                        tabIndex = '-1'>\n                        <Tooltip\n                            content = { t('virtualBackground.removeBackground') }\n                            position = { 'top' }>\n                            <div\n                                aria-checked = { _selectedThumbnail === 'none' }\n                                aria-label = { t('virtualBackground.removeBackground') }\n                                className = { _selectedThumbnail === 'none' ? 'background-option none-selected'\n                                    : 'background-option virtual-background-none' }\n                                onClick = { removeBackground }\n                                onKeyPress = { removeBackgroundKeyPress }\n                                role = 'radio'\n                                tabIndex = { 0 } >\n                                {t('virtualBackground.none')}\n                            </div>\n                        </Tooltip>\n                        <Tooltip\n                            content = { t('virtualBackground.slightBlur') }\n                            position = { 'top' }>\n                            <div\n                                aria-checked = { _selectedThumbnail === 'slight-blur' }\n                                aria-label = { t('virtualBackground.slightBlur') }\n                                className = { _selectedThumbnail === 'slight-blur'\n                                    ? 'background-option slight-blur-selected' : 'background-option slight-blur' }\n                                onClick = { enableSlideBlur }\n                                onKeyPress = { enableSlideBlurKeyPress }\n                                role = 'radio'\n                                tabIndex = { 0 }>\n                                {t('virtualBackground.slightBlur')}\n                            </div>\n                        </Tooltip>\n                        <Tooltip\n                            content = { t('virtualBackground.blur') }\n                            position = { 'top' }>\n                            <div\n                                aria-checked = { _selectedThumbnail === 'blur' }\n                                aria-label = { t('virtualBackground.blur') }\n                                className = { _selectedThumbnail === 'blur' ? 'background-option blur-selected'\n                                    : 'background-option blur' }\n                                onClick = { enableBlur }\n                                onKeyPress = { enableBlurKeyPress }\n                                role = 'radio'\n                                tabIndex = { 0 }>\n                                {t('virtualBackground.blur')}\n                            </div>\n                        </Tooltip>\n                        <Tooltip\n                            content = { t('virtualBackground.desktopShare') }\n                            position = { 'top' }>\n                            <div\n                                aria-checked = { _selectedThumbnail === 'desktop-share' }\n                                aria-label = { t('virtualBackground.desktopShare') }\n                                className = { _selectedThumbnail === 'desktop-share'\n                                    ? 'background-option desktop-share-selected'\n                                    : 'background-option desktop-share' }\n                                onClick = { shareDesktop }\n                                onKeyPress = { shareDesktopKeyPress }\n                                role = 'radio'\n                                tabIndex = { 0 }>\n                                <Icon\n                                    className = 'share-desktop-icon'\n                                    size = { 30 }\n                                    src = { IconShareDesktop } />\n                            </div>\n                        </Tooltip>\n                        {images.map(image => (\n                            <Tooltip\n                                content = { image.tooltip && t(`virtualBackground.${image.tooltip}`) }\n                                key = { image.id }\n                                position = { 'top' }>\n                                <img\n                                    alt = { image.tooltip && t(`virtualBackground.${image.tooltip}`) }\n                                    aria-checked = { options.selectedThumbnail === image.id\n                                        || _selectedThumbnail === image.id }\n                                    className = {\n                                        options.selectedThumbnail === image.id || _selectedThumbnail === image.id\n                                            ? 'background-option thumbnail-selected' : 'background-option thumbnail' }\n                                    data-imageid = { image.id }\n                                    onClick = { setImageBackground }\n                                    onError = { onError }\n                                    onKeyPress = { setImageBackgroundKeyPress }\n                                    role = 'radio'\n                                    src = { image.src }\n                                    tabIndex = { 0 } />\n                            </Tooltip>\n                        ))}\n                        {storedImages.map((image, index) => (\n                            <div\n                                className = { 'thumbnail-container' }\n                                key = { image.id }>\n                                <img\n                                    alt = { t('virtualBackground.uploadedImage', { index: index + 1 }) }\n                                    aria-checked = { _selectedThumbnail === image.id }\n                                    className = { _selectedThumbnail === image.id\n                                        ? 'background-option thumbnail-selected' : 'background-option thumbnail' }\n                                    data-imageid = { image.id }\n                                    onClick = { setUploadedImageBackground }\n                                    onError = { onError }\n                                    onKeyPress = { setUploadedImageBackgroundKeyPress }\n                                    role = 'radio'\n                                    src = { image.src }\n                                    tabIndex = { 0 } />\n\n                                <Icon\n                                    ariaLabel = { t('virtualBackground.deleteImage') }\n                                    className = { 'delete-image-icon' }\n                                    data-imageid = { image.id }\n                                    onClick = { deleteStoredImage }\n                                    onKeyPress = { deleteStoredImageKeyPress }\n                                    role = 'button'\n                                    size = { 15 }\n                                    src = { IconCloseSmall }\n                                    tabIndex = { 0 } />\n                            </div>\n                        ))}\n                    </div>\n                </div>\n            )}\n        </Dialog>\n    );\n}\n\nexport default VirtualBackgroundDialog;\n","import extraConfigWhitelist from './extraConfigWhitelist';\n\n/**\n * The config keys to whitelist, the keys that can be overridden.\n * Currently we can only whitelist the first part of the properties, like\n * 'p2p.enabled' we whitelist all p2p options.\n * The whitelist is used only for config.js.\n *\n * @type Array\n */\nexport default [\n    '_desktopSharingSourceDevice',\n    '_peerConnStatusOutOfLastNTimeout',\n    '_peerConnStatusRtcMuteTimeout',\n    'abTesting',\n    'analytics.disabled',\n    'audioLevelsInterval',\n    'audioQuality',\n    'apiLogLevels',\n    'avgRtpStatsN',\n    'backgroundAlpha',\n\n    /**\n     * The display name of the CallKit call representing the conference/meeting\n     * associated with this config.js including while the call is ongoing in the\n     * UI presented by CallKit and in the system-wide call history. The property\n     * is meant for use cases in which the room name is not desirable as a\n     * display name for CallKit purposes and the desired display name is not\n     * provided in the form of a JWT callee. As the value is associated with a\n     * conference/meeting, the value makes sense not as a deployment-wide\n     * configuration, only as a runtime configuration override/overwrite\n     * provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callDisplayName',\n    'callFlowsEnabled',\n\n    /**\n     * The handle\n     * ({@link https://developer.apple.com/documentation/callkit/cxhandle}) of\n     * the CallKit call representing the conference/meeting associated with this\n     * config.js. The property is meant for use cases in which the room URL is\n     * not desirable as the handle for CallKit purposes. As the value is\n     * associated with a conference/meeting, the value makes sense not as a\n     * deployment-wide configuration, only as a runtime configuration\n     * override/overwrite provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callHandle',\n    'callStatsConfIDNamespace',\n    'callStatsID',\n    'callStatsSecret',\n\n    /**\n     * The UUID of the CallKit call representing the conference/meeting\n     * associated with this config.js. The property is meant for use cases in\n     * which Jitsi Meet is to work with a CallKit call created outside of Jitsi\n     * Meet and to be adopted by Jitsi Meet such as, for example, an incoming\n     * and/or outgoing CallKit call created by Jitsi Meet SDK for iOS\n     * clients/consumers prior to giving control to Jitsi Meet. As the value is\n     * associated with a conference/meeting, the value makes sense not as a\n     * deployment-wide configuration, only as a runtime configuration\n     * override/overwrite provided by, for example, Jitsi Meet SDK for iOS.\n     *\n     * @type string\n     */\n    'callUUID',\n\n    'channelLastN',\n    'constraints',\n    'brandingRoomAlias',\n    'debug',\n    'debugAudioLevels',\n    'defaultLanguage',\n    'desktopSharingFrameRate',\n    'desktopSharingSources',\n    'disable1On1Mode',\n    'disableAEC',\n    'disableAGC',\n    'disableAP',\n    'disableAudioLevels',\n    'disableDeepLinking',\n    'disableFilmstripAutohiding',\n    'disableInitialGUM',\n    'disableH264',\n    'disableHPF',\n    'disableInviteFunctions',\n    'disableIncomingMessageSound',\n    'disableJoinLeaveSounds',\n    'disableLocalVideoFlip',\n    'disableNS',\n    'disableProfile',\n    'disableRemoteControl',\n    'disableRemoteMute',\n    'disableResponsiveTiles',\n    'disableRtx',\n    'disableShortcuts',\n    'disableShowMoreStats',\n    'disableSimulcast',\n    'disableThirdPartyRequests',\n    'disableTileView',\n    'displayJids',\n    'doNotStoreRoom',\n    'doNotFlipLocalVideo',\n    'dropbox',\n    'e2eping',\n    'enableDisplayNameInStats',\n    'enableEmailInStats',\n    'enableIceRestart',\n    'enableInsecureRoomNameWarning',\n    'enableLayerSuspension',\n    'enableLipSync',\n    'enableOpusRed',\n    'enableRemb',\n    'enableSaveLogs',\n    'enableScreenshotCapture',\n    'enableTalkWhileMuted',\n    'enableNoAudioDetection',\n    'enableNoisyMicDetection',\n    'enableTcc',\n    'enableAutomaticUrlCopy',\n    'etherpad_base',\n    'failICE',\n    'feedbackPercentage',\n    'fileRecordingsEnabled',\n    'firefox_fake_device',\n    'forceJVB121Ratio',\n    'forceTurnRelay',\n    'gatherStats',\n    'googleApiApplicationClientID',\n    'hideConferenceSubject',\n    'hideRecordingLabel',\n    'hideParticipantsStats',\n    'hideConferenceTimer',\n    'hiddenDomain',\n    'hideLobbyButton',\n    'hosts',\n    'iAmRecorder',\n    'iAmSipGateway',\n    'iceTransportPolicy',\n    'ignoreStartMuted',\n    'inviteAppName',\n    'liveStreamingEnabled',\n    'localRecording',\n    'maxFullResolutionParticipants',\n    'mouseMoveCallbackInterval',\n    'notifications',\n    'openSharedDocumentOnJoin',\n    'opusMaxAverageBitrate',\n    'p2p',\n    'pcStatsInterval',\n    'preferH264',\n    'preferredCodec',\n    'prejoinPageEnabled',\n    'requireDisplayName',\n    'remoteVideoMenu',\n    'roomPasswordNumberOfDigits',\n    'replaceParticipant',\n    'resolution',\n    'startAudioMuted',\n    'startAudioOnly',\n    'startLastN',\n    'startScreenSharing',\n    'startSilent',\n    'startVideoMuted',\n    'startWithAudioMuted',\n    'startWithVideoMuted',\n    'stereo',\n    'subject',\n    'testing',\n    'toolbarButtons',\n    'useHostPageLocalStorage',\n    'useTurnUdp',\n    'videoQuality.persist',\n    'webrtcIceTcpDisable',\n    'webrtcIceUdpDisable'\n].concat(extraConfigWhitelist);\n","/**\n * Deploy-specific configuration whitelists\n */\nexport default [];\n","// @flow\n\nimport { Component } from 'react';\n\nimport logger from '../logger';\n\n/**\n * Describes audio element interface used in the base/media feature for audio\n * playback.\n */\nexport type AudioElement = {\n    currentTime: number,\n    pause: () => void,\n    play: () => void,\n    setSinkId?: string => Function,\n    stop: () => void\n};\n\n/**\n * {@code AbstractAudio} component's property types.\n */\ntype Props = {\n\n    /**\n     * A callback which will be called with {@code AbstractAudio} instance once\n     * the audio element is loaded.\n     */\n    setRef?: ?AudioElement => void,\n\n    /**\n     * The URL of a media resource to use in the element.\n     *\n     * NOTE on react-native sound files are imported through 'require' and then\n     * passed as the 'src' parameter which means their type will be 'any'.\n     *\n     * @type {Object | string}\n     */\n    src: Object | string,\n    stream?: Object,\n    loop?: ?boolean\n}\n\n/**\n * The React {@link Component} which is similar to Web's\n * {@code HTMLAudioElement}.\n */\nexport default class AbstractAudio extends Component<Props> {\n    /**\n     * The {@link AudioElement} instance which implements the audio playback\n     * functionality.\n     */\n    _audioElementImpl: ?AudioElement;\n\n    /**\n     * Initializes a new {@code AbstractAudio} instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this.setAudioElementImpl = this.setAudioElementImpl.bind(this);\n    }\n\n    /**\n     * Attempts to pause the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    pause(): void {\n        this._audioElementImpl && this._audioElementImpl.pause();\n    }\n\n    /**\n     * Attempts to begin the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    play(): void {\n        this._audioElementImpl && this._audioElementImpl.play();\n    }\n\n    setAudioElementImpl: ?AudioElement => void;\n\n    /**\n     * Set the (reference to the) {@link AudioElement} object which implements\n     * the audio playback functionality.\n     *\n     * @param {AudioElement} element - The {@link AudioElement} instance\n     * which implements the audio playback functionality.\n     * @protected\n     * @returns {void}\n     */\n    setAudioElementImpl(element: ?AudioElement): void {\n        this._audioElementImpl = element;\n\n        // setRef\n        const { setRef } = this.props;\n\n        // $FlowFixMe\n        typeof setRef === 'function' && setRef(element ? this : null);\n    }\n\n    /**\n     * Sets the sink ID (output device ID) on the underlying audio element.\n     * NOTE: Currently, implemented only on Web.\n     *\n     * @param {string} sinkId - The sink ID (output device ID).\n     * @returns {void}\n     */\n    setSinkId(sinkId: string): void {\n        this._audioElementImpl\n            && typeof this._audioElementImpl.setSinkId === 'function'\n            && this._audioElementImpl.setSinkId(sinkId)\n                .catch(error => logger.error('Error setting sink', error));\n    }\n\n    /**\n     * Attempts to stop the playback of the media.\n     *\n     * @public\n     * @returns {void}\n     */\n    stop(): void {\n        this._audioElementImpl && this._audioElementImpl.stop();\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport AbstractAudio from '../AbstractAudio';\nimport type { AudioElement } from '../AbstractAudio';\n\n/**\n * The React/Web {@link Component} which is similar to and wraps around\n * {@code HTMLAudioElement} in order to facilitate cross-platform source code.\n */\nexport default class Audio extends AbstractAudio {\n    /**\n     * Set to <code>true</code> when the whole file is loaded.\n     */\n    _audioFileLoaded: boolean;\n\n    /**\n     * Reference to the HTML audio element, stored until the file is ready.\n     */\n    _ref: ?AudioElement;\n\n    /**\n     * Creates new <code>Audio</code> element instance with given props.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Object) {\n        super(props);\n\n        // Bind event handlers so they are only bound once for every instance.\n        this._onCanPlayThrough = this._onCanPlayThrough.bind(this);\n        this._setRef = this._setRef.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <audio\n                loop = { Boolean(this.props.loop) }\n                onCanPlayThrough = { this._onCanPlayThrough }\n                preload = 'auto'\n\n                // $FlowFixMe\n                ref = { this._setRef }\n                src = { this.props.src } />\n        );\n    }\n\n    /**\n     * Stops the audio HTML element.\n     *\n     * @returns {void}\n     */\n    stop() {\n        if (this._ref) {\n            this._ref.pause();\n\n            // $FlowFixMe\n            this._ref.currentTime = 0;\n        }\n    }\n\n    /**\n     * If audio element reference has been set and the file has been\n     * loaded then {@link setAudioElementImpl} will be called to eventually add\n     * the audio to the Redux store.\n     *\n     * @private\n     * @returns {void}\n     */\n    _maybeSetAudioElementImpl() {\n        if (this._ref && this._audioFileLoaded) {\n            this.setAudioElementImpl(this._ref);\n        }\n    }\n\n    _onCanPlayThrough: () => void;\n\n    /**\n     * Called when 'canplaythrough' event is triggered on the audio element,\n     * which means that the whole file has been loaded.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onCanPlayThrough() {\n        this._audioFileLoaded = true;\n        this._maybeSetAudioElementImpl();\n    }\n\n    _setRef: (?AudioElement) => void;\n\n    /**\n     * Sets the reference to the HTML audio element.\n     *\n     * @param {HTMLAudioElement} audioElement - The HTML audio element instance.\n     * @private\n     * @returns {void}\n     */\n    _setRef(audioElement: ?AudioElement) {\n        this._ref = audioElement;\n\n        if (audioElement) {\n            this._maybeSetAudioElementImpl();\n        } else {\n            // AbstractAudioElement is supposed to trigger \"removeAudio\" only if\n            // it was previously added, so it's safe to just call it.\n            this.setAudioElementImpl(null);\n\n            // Reset the loaded flag, as the audio element is being removed from\n            // the DOM tree.\n            this._audioFileLoaded = false;\n        }\n    }\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i=r(18),n=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,i){void 0===i&&(i=!1);var n=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(n,s),a=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),i=t+new Array(r+1).join(\".0\");return e.map(i.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(i&&(a=o-Math.min(n,s)),o-=1;o>=a;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===a)return 0;o-=1}else if(u[0][o]<u[1][o])return-1}},e.map=function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i},e.getBrowserAlias=function(e){return i.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return i.BROWSER_MAP[e]||\"\"},e}();t.default=n,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(91))&&i.__esModule?i:{default:i},s=r(18);function o(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var a=function(){function e(){}var t,r,i;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new n.default(e,t)},e.parse=function(e){return new n.default(e).getResult()},t=e,i=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&o(t.prototype,r),i&&o(t,i),e}();t.default=a,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i=u(r(92)),n=u(r(93)),s=u(r(94)),o=u(r(95)),a=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=i.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=n.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=s.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find((function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return Object.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},i=0,n={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];\"string\"==typeof o?(n[t]=o,s+=1):\"object\"==typeof o&&(r[t]=o,i+=1)})),i>0){var o=Object.keys(r),a=o.find((function(e){return t.isOS(e)}));if(a){var u=this.satisfies(r[a]);if(void 0!==u)return u}var d=o.find((function(e){return t.isPlatform(e)}));if(d){var c=this.satisfies(r[d]);if(void 0!==c)return c}}if(s>0){var f=Object.keys(n).find((function(e){return t.isBrowser(e,!0)}));if(void 0!==f)return this.compareVersion(n[f])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),n=a.default.getBrowserTypeByAlias(i);return t&&n&&(i=n.toLowerCase()),i===r},t.compareVersion=function(e){var t=[0],r=e,i=!1,n=this.getBrowserVersion();if(\"string\"==typeof n)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(i=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(a.default.compareVersions(n,r,i))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e){return this.isBrowser(e)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,o=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=n.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=n.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=n.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=n.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=n.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=n.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=n.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=n.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=n.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=n.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=n.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=n.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=n.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=n.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=n.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=n.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=n.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=n.default.getFirstMatch(s,e)||n.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=n.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=n.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=n.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=n.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=n.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=n.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=n.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=n.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:n.default.getFirstMatch(t,e),version:n.default.getSecondMatch(t,e)}}}];t.default=o,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:[/Roku\\/DVP/],describe:function(e){var t=n.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=n.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows/i],describe:function(e){var t=n.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=n.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/macintosh/i],describe:function(e){var t=n.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=n.default.getMacOSVersionName(t),i={name:s.OS_MAP.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=n.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=n.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=n.default.getAndroidVersionName(t),i={name:s.OS_MAP.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=n.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=n.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||n.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||n.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=n.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=n.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=n.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=o,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=n.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=n.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=o,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},s=r(18);var o=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=n.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=n.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=n.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=n.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=n.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=o,e.exports=t.default}})}));","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.6.1\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw ERROR;\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw ERROR;\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw ERROR;\n          }\n        }\n      } else {\n        throw ERROR;\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >> 12);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >> 18);\n              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n","import arrayLikeToArray from \"./arrayLikeToArray\";\nexport default function _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(n);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","/**\n * Use for any programatic motions needed at runtime.\n * Will return `true` if the current user prefers reduced motion.\n * This is generally set through OS preferences/settings.\n */\nexport var isReducedMotion = function isReducedMotion() {\n  if (typeof window === 'undefined' || !('matchMedia' in window)) {\n    return false;\n  }\n\n  var _window$matchMedia = window.matchMedia('(prefers-reduced-motion: reduce)'),\n      matches = _window$matchMedia.matches;\n\n  return matches;\n};\n/**\n * Use for any CSS based motion (animation or transition).\n * Always put at the end of your declaration for correct use of the cascade.\n * Reduced motion preference is generally set through OS preferences/settings.\n */\n\nexport var prefersReducedMotion = function prefersReducedMotion() {\n  return {\n    '@media (prefers-reduced-motion: reduce)': {\n      animation: 'none',\n      transition: 'none'\n    }\n  };\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useCallback } from 'react';\nimport { useAnalyticsEvents } from './useAnalyticsEvents';\nimport { useTrackedRef } from './useTrackedRef';\n// WARNING: This hook will only function correctly for leaf node components - as in\n// no children inside the component will require analytics themselves.\n// Ignoring this warning will mean the analytics context of child components will not\n// include the context of this component, .e.g, lost data.\n// If you are going to have child components that require analytics use withAnalytics\n// or AnalyticsContext component instead.\nexport function usePlatformLeafEventHandler(_ref) {\n  var fn = _ref.fn,\n      action = _ref.action,\n      componentName = _ref.componentName,\n      actionSubject = _ref.actionSubject,\n      packageName = _ref.packageName,\n      packageVersion = _ref.packageVersion,\n      analyticsData = _ref.analyticsData;\n\n  var _useAnalyticsEvents = useAnalyticsEvents(),\n      createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent; // We put analyticsData and fn in a ref so that we don't need to break\n  // memoization.\n  // Generally these could be defined by consumers inline\n  // and so we do this to avoid breaking memoization of useCallback\n\n\n  var dataRef = useTrackedRef(analyticsData);\n  var fnRef = useTrackedRef(fn);\n  var handler = useCallback(function (value) {\n    var analyticsEvent = createAnalyticsEvent({\n      action: action,\n      actionSubject: actionSubject || componentName,\n      attributes: {\n        componentName: componentName,\n        packageName: packageName,\n        packageVersion: packageVersion\n      }\n    }); // To avoid wrapping this component in AnalyticsContext we manually\n    // push the parent context's meta data into the context.\n    // Note: this new 'context'\n\n    var context = _objectSpread({\n      componentName: componentName,\n      packageName: packageName,\n      packageVersion: packageVersion\n    }, dataRef.current);\n\n    analyticsEvent.context.push(context); // fire an event on the atlaskit channel\n\n    var clone = analyticsEvent.clone();\n\n    if (clone) {\n      clone.fire('atlaskit');\n    }\n\n    fnRef.current(value, analyticsEvent);\n  }, [// These are strings and won't change\n  action, componentName, actionSubject, packageName, packageVersion, // This function is memoized in the context\n  createAnalyticsEvent, // these are a stable ref because of the useTrackedRef hook\n  dataRef, fnRef]);\n  return handler;\n}","import { useContext } from 'react';\nimport { default as AnalyticsReactContext } from '@atlaskit/analytics-next-stable-react-context';\nexport var useAnalyticsContext = function useAnalyticsContext() {\n  return useContext(AnalyticsReactContext);\n};","export default function getIsOnlySingleIcon(_ref) {\n  var children = _ref.children,\n      iconBefore = _ref.iconBefore,\n      iconAfter = _ref.iconAfter;\n\n  if (children) {\n    return false;\n  }\n\n  if (iconBefore && !iconAfter) {\n    return true;\n  }\n\n  if (!iconBefore && iconAfter) {\n    return true;\n  }\n\n  return false;\n}","// @flow\n\nimport { getParticipantById } from '../base/participants';\n\n/**\n * Selector for the participant currently displaying on the large video.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nexport function getLargeVideoParticipant(state: Object) {\n    const { participantId } = state['features/large-video'];\n\n    return getParticipantById(state, participantId);\n}\n","import * as React from 'react';\nexport var ManagerReferenceNodeContext = React.createContext();\nexport var ManagerReferenceNodeSetterContext = React.createContext();\nexport function Manager(_ref) {\n  var children = _ref.children;\n\n  var _React$useState = React.useState(null),\n      referenceNode = _React$useState[0],\n      setReferenceNode = _React$useState[1];\n\n  var hasUnmounted = React.useRef(false);\n  React.useEffect(function () {\n    return function () {\n      hasUnmounted.current = true;\n    };\n  }, []);\n  var handleSetReferenceNode = React.useCallback(function (node) {\n    if (!hasUnmounted.current) {\n      setReferenceNode(node);\n    }\n  }, []);\n  return /*#__PURE__*/React.createElement(ManagerReferenceNodeContext.Provider, {\n    value: referenceNode\n  }, /*#__PURE__*/React.createElement(ManagerReferenceNodeSetterContext.Provider, {\n    value: handleSetReferenceNode\n  }, children));\n}","\n\nexport default (function (fn) {\n  var lastArgs = [];\n  var frameId = null;\n\n  var wrapperFn = function wrapperFn() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    lastArgs = args;\n\n    if (frameId) {\n      return frameId;\n    }\n\n    frameId = requestAnimationFrame(function () {\n      frameId = null;\n      fn.apply(undefined, lastArgs);\n    });\n\n    return frameId;\n  };\n\n  wrapperFn.cancel = function () {\n    if (!frameId) {\n      return;\n    }\n\n    cancelAnimationFrame(frameId);\n    frameId = null;\n  };\n\n  var resultFn = wrapperFn;\n\n  return resultFn;\n});","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/jaas');\n","// @flow\n\n/**\n * The type of (redux) action to update the dropbox access token.\n *\n * {\n *     type: UPDATE_DROPBOX_TOKEN,\n *     token: string\n * }\n */\nexport const UPDATE_DROPBOX_TOKEN = 'UPDATE_DROPBOX_TOKEN';\n","// @flow\n\n/**\n * Downloads a JSON object.\n *\n * @param {Object} json - The JSON object to download.\n * @param {string} filename - The filename to give to the downloaded file.\n * @returns {void}\n */\nexport function downloadJSON(json: Object, filename: string) {\n    const data = encodeURIComponent(JSON.stringify(json, null, '  '));\n\n    const elem = document.createElement('a');\n\n    elem.download = filename;\n    elem.href = `data:application/json;charset=utf-8,\\n${data}`;\n    elem.dataset.downloadurl = [ 'text/json', elem.download, elem.href ].join(':');\n    elem.dispatchEvent(new MouseEvent('click', {\n        view: window,\n        bubbles: true,\n        cancelable: false\n    }));\n}\n","import React from 'react';\nvar ThemeContext = React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n  ThemeContext.displayName = 'ThemeContext';\n}\n\nexport default ThemeContext;","var hasSymbol = typeof Symbol === 'function' && Symbol.for;\nexport default hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__';","import createMuiTheme from './createMuiTheme';\nvar defaultTheme = createMuiTheme();\nexport default defaultTheme;","// @flow\n\nimport React, { useState } from 'react';\n\nimport { Icon, IconCheck, IconCopy } from '../../base/icons';\nimport { copyText } from '../util';\n\n\ntype Props = {\n\n    /**\n     * Css class to apply on container\n     */\n    className: string,\n\n    /**\n     * The displayed text\n     */\n    displayedText: string,\n\n    /**\n     * The text that needs to be copied (might differ from the displayedText)\n     */\n    textToCopy: string,\n\n    /**\n     * The text displayed on mouse hover\n     */\n    textOnHover: string,\n\n    /**\n     * The text displayed on copy success\n     */\n    textOnCopySuccess: string,\n\n    /**\n     * The id of the button\n     */\n    id?: string,\n};\n\n/**\n * Component meant to enable users to copy the conference URL.\n *\n * @returns {React$Element<any>}\n */\nfunction CopyButton({ className, displayedText, textToCopy, textOnHover, textOnCopySuccess, id }: Props) {\n    const [ isClicked, setIsClicked ] = useState(false);\n    const [ isHovered, setIsHovered ] = useState(false);\n\n    /**\n     * Click handler for the element.\n     *\n     * @returns {void}\n     */\n    async function onClick() {\n        setIsHovered(false);\n\n        const isCopied = await copyText(textToCopy);\n\n        if (isCopied) {\n            setIsClicked(true);\n\n            setTimeout(() => {\n                setIsClicked(false);\n            }, 2500);\n        }\n    }\n\n    /**\n     * Hover handler for the element.\n     *\n     * @returns {void}\n     */\n    function onHoverIn() {\n        if (!isClicked) {\n            setIsHovered(true);\n        }\n    }\n\n    /**\n     * Hover handler for the element.\n     *\n     * @returns {void}\n     */\n    function onHoverOut() {\n        setIsHovered(false);\n    }\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {React.KeyboardEventHandler<HTMLDivElement>} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    function onKeyPress(e) {\n        if (onClick && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            onClick();\n        }\n    }\n\n    /**\n     * Renders the content of the link based on the state.\n     *\n     * @returns {React$Element<any>}\n     */\n    function renderContent() {\n        if (isClicked) {\n            return (\n                <>\n                    <div className = 'copy-button-content selected'>\n                        <span role = { 'alert' }>{ textOnCopySuccess }</span>\n                    </div>\n                    <Icon src = { IconCheck } />\n                </>\n            );\n        }\n\n        return (\n            <>\n                <div className = 'copy-button-content'>\n                    {isHovered ? textOnHover : displayedText}\n                </div>\n                <Icon src = { IconCopy } />\n            </>\n        );\n    }\n\n    return (\n        <div\n            aria-label = { textOnHover }\n            className = { `${className} copy-button${isClicked ? ' clicked' : ''}` }\n            id = { id }\n            onBlur = { onHoverOut }\n            onClick = { onClick }\n            onFocus = { onHoverIn }\n            onKeyPress = { onKeyPress }\n            onMouseOut = { onHoverOut }\n            onMouseOver = { onHoverIn }\n            role = 'button'\n            tabIndex = { 0 }>\n            { renderContent() }\n        </div>\n    );\n}\n\nCopyButton.defaultProps = {\n    className: ''\n};\n\nexport default CopyButton;\n","// @flow\n\nimport React from 'react';\n\nimport CopyButton from '../../../../base/buttons/CopyButton';\nimport { translate } from '../../../../base/i18n';\nimport { getDecodedURI } from '../../../../base/util';\n\n\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The URL of the conference.\n     */\n    url: string\n};\n\n/**\n * Component meant to enable users to copy the conference URL.\n *\n * @returns {React$Element<any>}\n */\nfunction CopyMeetingLinkSection({ t, url }: Props) {\n    return (\n        <>\n            <label htmlFor = { 'copy-button-id' }>{t('addPeople.shareLink')}</label>\n            <CopyButton\n                aria-label = { t('addPeople.copyLink') }\n                className = 'invite-more-dialog-conference-url'\n                displayedText = { getDecodedURI(url) }\n                id = 'copy-button-id'\n                textOnCopySuccess = { t('addPeople.linkCopied') }\n                textOnHover = { t('addPeople.copyLink') }\n                textToCopy = { url } />\n        </>\n    );\n}\n\nexport default translate(CopyMeetingLinkSection);\n","/**\n * The type of the action which signals the keyboard shortcuts dialog should\n * be displayed.\n *\n * {\n *     type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n * }\n */\nexport const OPEN_KEYBOARD_SHORTCUTS_DIALOG\n    = 'OPEN_KEYBOARD_SHORTCUTS_DIALOG';\n","// @flow\n\nimport { Component } from 'react';\n\nimport { MEDIA_TYPE } from '../../base/media';\nimport { muteRemote } from '../actions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractMuteRemoteParticipantDialog}.\n */\nexport type Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be muted.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm a remote participant mute action.\n *\n * @extends Component\n */\nexport default class AbstractMuteRemoteParticipantDialog<P:Props = Props>\n    extends Component<P> {\n    /**\n     * Initializes a new {@code AbstractMuteRemoteParticipantDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Handles the submit button action.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        dispatch(muteRemote(participantID, MEDIA_TYPE.AUDIO));\n\n        return true;\n    }\n}\n","// @flow\n\nimport { Component } from 'react';\n\nimport { MEDIA_TYPE } from '../../base/media';\nimport { muteRemote } from '../actions';\n\n/**\n * The type of the React {@code Component} props of\n * {@link AbstractMuteRemoteParticipantsVideoDialog}.\n */\nexport type Props = {\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The ID of the remote participant to be muted.\n     */\n    participantID: string,\n\n    /**\n     * Function to translate i18n labels.\n     */\n    t: Function\n};\n\n/**\n * Abstract dialog to confirm a remote participant video ute action.\n *\n * @extends Component\n */\nexport default class AbstractMuteRemoteParticipantsVideoDialog<P:Props = Props>\n    extends Component<P> {\n    /**\n     * Initializes a new {@code AbstractMuteRemoteParticipantsVideoDialog} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onSubmit = this._onSubmit.bind(this);\n    }\n\n    _onSubmit: () => boolean;\n\n    /**\n     * Handles the submit button action.\n     *\n     * @private\n     * @returns {boolean} - True (to note that the modal should be closed).\n     */\n    _onSubmit() {\n        const { dispatch, participantID } = this.props;\n\n        dispatch(muteRemote(participantID, MEDIA_TYPE.VIDEO));\n\n        return true;\n    }\n}\n","\n/**\n * Base class for all Large containers which we can show.\n */\nexport default class LargeContainer {\n    /* eslint-disable no-unused-vars, no-empty-function */\n    /**\n     * Show this container.\n     * @returns Promise\n     */\n    show() {\n    }\n\n    /**\n     * Hide this container.\n     * @returns Promise\n     */\n    hide() {\n    }\n\n    /**\n     * Resize this container.\n     * @param {number} containerWidth available width\n     * @param {number} containerHeight available height\n     * @param {boolean} animate if container should animate it's resize process\n     */\n    resize(containerWidth, containerHeight, animate) {\n    }\n\n    /**\n     * Handler for \"hover in\" events.\n     */\n    onHoverIn(e) {\n    }\n\n    /**\n     * Handler for \"hover out\" events.\n     */\n    onHoverOut(e) {\n    }\n\n    /**\n     * Update video stream.\n     * @param {string} userID\n     * @param {JitsiTrack?} stream new stream\n     * @param {string} videoType video type\n     */\n    setStream(userID, stream, videoType) {\n    }\n\n    /**\n     * Show or hide user avatar.\n     * @param {boolean} show\n     */\n    showAvatar(show) {\n    }\n\n    /**\n     * Whether current container needs to be switched on dominant speaker event\n     * when the container is on stage.\n     * @return {boolean}\n     */\n    stayOnStage() {\n    }\n\n    /* eslint-enable no-unused-vars, no-empty-function */\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.toArray = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _renderer = require(\"./renderer\");\n\nObject.defineProperty(exports, \"toArray\", {\n  enumerable: true,\n  get: function get() {\n    return _renderer.toArray;\n  }\n});\nexports.Twemoji = Twemoji;\nexports.Emojione = Emojione;\nexports.EmojioneV4 = EmojioneV4;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _renderer2 = _interopRequireDefault(_renderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar protocol = \"https\";\n\nif (typeof location !== \"undefined\" && location.protocol === \"http:\") {\n  protocol = \"http\";\n}\n\nexports.default = _renderer2.default;\nfunction Twemoji(_ref) {\n  var svg = _ref.svg,\n      options = _ref.options,\n      rest = _objectWithoutProperties(_ref, [\"svg\", \"options\"]);\n\n  var size = svg ? \"\" : \"72x72\";\n  var ext = svg ? \"svg\" : \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//twemoji.maxcdn.com/2/\" + (svg ? \"svg/\" : \"\"),\n    size: size,\n    ext: ext\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nTwemoji.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  svg: _propTypes2.default.bool\n};\n\nfunction Emojione(_ref2) {\n  var svg = _ref2.svg,\n      options = _ref2.options,\n      rest = _objectWithoutProperties(_ref2, [\"svg\", \"options\"]);\n\n  var ext = svg ? \"svg\" : \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/\" + ext + \"/\",\n    size: \"\",\n    ext: ext,\n    emojione: true\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nEmojione.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  svg: _propTypes2.default.bool\n};\n\nfunction EmojioneV4(_ref3) {\n  var size = _ref3.size,\n      options = _ref3.options,\n      rest = _objectWithoutProperties(_ref3, [\"size\", \"options\"]);\n\n  var ext = \"png\";\n\n  options = _extends({\n    protocol: protocol,\n    baseUrl: \"//cdn.jsdelivr.net/emojione/assets/4.0/\" + ext + \"/\",\n    size: size,\n    ext: ext,\n    emojione: true\n  }, options);\n\n  return _react2.default.createElement(_renderer2.default, _extends({ options: options }, rest));\n}\n\nEmojioneV4.propTypes = {\n  text: _propTypes2.default.string,\n  options: _propTypes2.default.object,\n  size: _propTypes2.default.oneOf([32, 64, 128])\n};\nEmojioneV4.defaultProps = {\n  size: 64\n};","// @flow\n\nimport aliases from 'react-emoji-render/data/aliases';\nimport emojiAsciiAliases from 'react-emoji-render/data/asciiAliases';\n\nimport { escapeRegexp } from '../base/util';\n\n/**\n * An ASCII emoticon regexp array to find and replace old-style ASCII\n * emoticons (such as :O) to new Unicode representation, so then devices\n * and browsers that support them can render these natively without\n * a 3rd party component.\n *\n * NOTE: this is currently only used on mobile, but it can be used\n * on web too once we drop support for browsers that don't support\n * unicode emoji rendering.\n */\nconst EMOTICON_REGEXP_ARRAY: Array<Array<Object>> = [];\n\n(function() {\n    for (const [ key, value ] of Object.entries(aliases)) {\n        let escapedValues;\n        const asciiEmojies = emojiAsciiAliases[key];\n\n        // Adding ascii emoticons\n        if (asciiEmojies) {\n            escapedValues = asciiEmojies.map(v => escapeRegexp(v));\n        } else {\n            escapedValues = [];\n        }\n\n        // Adding slack-type emoji format\n        escapedValues.push(escapeRegexp(`:${key}:`));\n\n        const regexp = `\\\\B(${escapedValues.join('|')})\\\\B`;\n\n        EMOTICON_REGEXP_ARRAY.push([ new RegExp(regexp, 'g'), value ]);\n    }\n})();\n\n/**\n * Replaces ascii and other non-unicode emoticons with unicode emojis to let the emojis be rendered\n * by the platform native renderer.\n *\n * @param {string} message - The message to parse and replace.\n * @returns {string}\n */\nexport function replaceNonUnicodeEmojis(message: string) {\n    let replacedMessage = message;\n\n    for (const [ regexp, replaceValue ] of EMOTICON_REGEXP_ARRAY) {\n        replacedMessage = replacedMessage.replace(regexp, replaceValue);\n    }\n\n    return replacedMessage;\n}\n\n/**\n * Selector for calculating the number of unread chat messages.\n *\n * @param {Object} state - The redux state.\n * @returns {number} The number of unread messages.\n */\nexport function getUnreadCount(state: Object) {\n    const { lastReadMessage, messages } = state['features/chat'];\n    const messagesCount = messages.length;\n\n    if (!messagesCount) {\n        return 0;\n    }\n\n    if (navigator.product === 'ReactNative') {\n        // React native stores the messages in a reversed order.\n        return messages.indexOf(lastReadMessage);\n    }\n\n    const lastReadIndex = messages.lastIndexOf(lastReadMessage);\n\n    return messagesCount - (lastReadIndex + 1);\n}\n","export * from './actions';\nexport * from './actionTypes';\nexport * from './components';\nexport * from './controller';\n","// @flow\n\n/**\n * Selector to return lobby state.\n *\n * @param {any} state - State object.\n * @returns {any}\n */\nexport function getLobbyState(state: any) {\n    return state['features/lobby'];\n}\n\n\n/**\n * Selector to return array with knocking participant ids.\n *\n * @param {any} state - State object.\n * @returns {Array}\n */\nexport function getKnockingParticipantsById(state: any) {\n    const { knockingParticipants } = state['features/lobby'];\n\n    return knockingParticipants.map(participant => participant.id);\n}\n","// @flow\n\n/**\n * Redux action type dispatched in order to toggle screenshot captures.\n *\n * {\n *      type: SET_SCREENSHOT_CAPTURE\n * }\n */\n\nexport const SET_SCREENSHOT_CAPTURE = 'SET_SCREENSHOT_CAPTURE';\n","// @flow\n\nimport { createToolbarEvent, sendAnalytics } from '../../analytics';\nimport { translate } from '../../base/i18n';\nimport { IconDeviceDocument } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton, type AbstractButtonProps } from '../../base/toolbox/components';\nimport { openKeyboardShortcutsDialog } from '../actions';\n\n/**\n * The type of the React {@code Component} props of {@link KeyboardShortcutsButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * Implementation of a button for opening keyboard shortcuts dialog.\n */\nclass KeyboardShortcutsButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.shortcuts';\n    icon = IconDeviceDocument;\n    label = 'toolbar.shortcuts';\n    tooltip = 'toolbar.shortcuts';\n\n    /**\n     * Handles clicking / pressing the button, and opens the appropriate dialog.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch } = this.props;\n\n        sendAnalytics(createToolbarEvent('shortcuts'));\n        dispatch(openKeyboardShortcutsDialog());\n    }\n}\n\nexport default translate(connect()(KeyboardShortcutsButton));\n","import { OPEN_KEYBOARD_SHORTCUTS_DIALOG } from './actionTypes';\n\n/**\n * Opens the dialog showing available keyboard shortcuts.\n *\n * @returns {{\n *     type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n * }}\n */\nexport function openKeyboardShortcutsDialog() {\n    return {\n        type: OPEN_KEYBOARD_SHORTCUTS_DIALOG\n    };\n}\n","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport * as colors from '@atlaskit/theme/colors';\nimport { createTheme } from '@atlaskit/theme/components';\n/** Note:\n * Lozenge does not support dark mode at the moment.\n * Hence, color values are the same.\n */\n\nexport var defaultBackgroundColor = {\n  default: {\n    light: colors.N40,\n    dark: colors.N40\n  },\n  inprogress: {\n    light: colors.B50,\n    dark: colors.B50\n  },\n  moved: {\n    light: colors.Y75,\n    dark: colors.Y75\n  },\n  new: {\n    light: colors.P50,\n    dark: colors.P50\n  },\n  removed: {\n    light: colors.R50,\n    dark: colors.R50\n  },\n  success: {\n    light: colors.G50,\n    dark: colors.G50\n  }\n};\nexport var defaultTextColor = {\n  default: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  inprogress: {\n    light: colors.B500,\n    dark: colors.B500\n  },\n  moved: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  new: {\n    light: colors.P500,\n    dark: colors.P500\n  },\n  removed: {\n    light: colors.R500,\n    dark: colors.R500\n  },\n  success: {\n    light: colors.G500,\n    dark: colors.G500\n  }\n};\nexport var boldBackgroundColor = {\n  default: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  inprogress: {\n    light: colors.B400,\n    dark: colors.B400\n  },\n  moved: {\n    light: colors.Y500,\n    dark: colors.Y500\n  },\n  new: {\n    light: colors.P400,\n    dark: colors.P400\n  },\n  removed: {\n    light: colors.R400,\n    dark: colors.R400\n  },\n  success: {\n    light: colors.G400,\n    dark: colors.G400\n  }\n};\nexport var boldTextColor = {\n  default: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  inprogress: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  moved: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  new: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  removed: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  success: {\n    light: colors.N0,\n    dark: colors.N0\n  }\n};\nexport var Theme = createTheme(function (_ref) {\n  var appearance = _ref.appearance,\n      isBold = _ref.isBold,\n      maxWidth = _ref.maxWidth;\n  return _objectSpread(_objectSpread({}, _typeof(appearance) === 'object' ? _objectSpread({\n    backgroundColor: (isBold ? boldBackgroundColor : defaultBackgroundColor).default.light,\n    textColor: (isBold ? boldTextColor : defaultTextColor).default.light\n  }, appearance) : {\n    backgroundColor: (isBold ? boldBackgroundColor[appearance] : defaultBackgroundColor[appearance]).light,\n    textColor: (isBold ? boldTextColor[appearance] : defaultTextColor[appearance]).light\n  }), {}, {\n    maxWidth: maxWidth\n  });\n});","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { isNodeEnvironment } from './is-node';\n/**\n * Cache to hold already used styles.\n * React Context on the server - singleton object on the client.\n */\nvar Cache = false ? createContext(null) : {};\nif (!false) {\n    /**\n     * Iterates through all found style elements generated when server side rendering.\n     *\n     * @param cb\n     */\n    var ssrStyles = document.querySelectorAll('style[data-cmpld]');\n    for (var i = 0; i < ssrStyles.length; i++) {\n        // Move all found server-side rendered style elements to the head before React hydration happens.\n        document.head.appendChild(ssrStyles[i]);\n    }\n}\n/**\n * Hook using the cache created on the server or client.\n */\nexport var useCache = function () {\n    if (false) {\n        // On the server we use React Context to we don't leak the cache between SSR calls.\n        // During runtime this hook isn't conditionally called - it is at build time that the flow gets decided.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        return useContext(Cache) || {};\n    }\n    // On the client we use the object singleton.\n    return Cache;\n};\n/**\n * On the server this ensures the minimal amount of styles will be rendered\n * safely using React Context.\n *\n * On the browser this turns into a fragment with no React Context.\n */\nvar StyleCacheProvider = function (props) {\n    if (false) {\n        // This code path isn't conditionally called at build time - safe to ignore.\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        var inserted = useCache();\n        return React.createElement(Cache.Provider, { value: inserted }, props.children);\n    }\n    return props.children;\n};\nexport default StyleCacheProvider;\n//# sourceMappingURL=style-cache.js.map","/**\n * Ordered style buckets using their short psuedo name.\n * If changes are needed make sure that it aligns with the definition in `sort-at-rule-pseudos.tsx`.\n */\nexport var styleBucketOrdering = [\n    // catch-all\n    '',\n    // link\n    'l',\n    // visited\n    'v',\n    // focus-within\n    'w',\n    // focus\n    'f',\n    // focus-visible\n    'i',\n    // hover\n    'h',\n    // active\n    'a',\n    // at-rules\n    'm',\n];\n/**\n * Holds all style buckets in memory that have been added to the head.\n */\nvar styleBucketsInHead = {};\n/**\n * Maps the long pseudo name to the short pseudo name.\n * Pseudos that match here will be ordered,\n * everythin else will make their way to the catch all style bucket.\n * We reduce the pseduo name to save bundlesize.\n * Thankfully there aren't any overlaps, see: https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes.\n */\nvar pseudosMap = {\n    // link\n    k: 'l',\n    // visited\n    ited: 'v',\n    // focus-within\n    'us-within': 'w',\n    // focus\n    us: 'f',\n    // focus-visible\n    'us-visible': 'i',\n    // hover\n    er: 'h',\n    // active\n    ive: 'a',\n};\n/**\n * Lazily adds a `<style>` bucket to the `<head>`.\n * This will ensure that the style buckets are ordered.\n *\n * @param bucket Bucket to insert in the head.\n */\nfunction lazyAddStyleBucketToHead(bucketName, opts) {\n    if (!styleBucketsInHead[bucketName]) {\n        var currentBucketIndex = styleBucketOrdering.indexOf(bucketName) + 1;\n        var nextBucketFromCache = null;\n        // Find the next bucket which we will add our new style bucket before.\n        for (; currentBucketIndex < styleBucketOrdering.length; currentBucketIndex++) {\n            var nextBucket = styleBucketsInHead[styleBucketOrdering[currentBucketIndex]];\n            if (nextBucket) {\n                nextBucketFromCache = nextBucket;\n                break;\n            }\n        }\n        var tag = document.createElement('style');\n        opts.nonce && tag.setAttribute('nonce', opts.nonce);\n        tag.appendChild(document.createTextNode(''));\n        styleBucketsInHead[bucketName] = tag;\n        document.head.insertBefore(tag, nextBucketFromCache);\n    }\n    return styleBucketsInHead[bucketName];\n}\n/**\n * Gets the bucket depending on the sheet.\n * This function makes assumptions as to the form of the input class name.\n *\n * Input:\n *\n * ```\n * \"._a1234567:hover{ color: red; }\"\n * ```\n *\n * Output:\n *\n * ```\n * \"h\"\n * ```\n *\n * @param sheet styles for which we are getting the bucket\n */\nexport var getStyleBucketName = function (sheet) {\n    // We are grouping all the at-rules like @media, @supports etc under `m` bucket.\n    if (sheet.charCodeAt(0) === 64 /* \"@\" */) {\n        return 'm';\n    }\n    /**\n     * We assume that classname will always be 9 character long,\n     * using this the 10th character could be a pseudo declaration.\n     */\n    if (sheet.charCodeAt(10) === 58 /* \":\" */) {\n        // We send through a subset of the string instead of the full pseudo name.\n        // For example `\"focus-visible\"` name would instead of `\"us-visible\"`.\n        // Return a mapped pseudo else the default catch all bucket.\n        return pseudosMap[sheet.slice(14, sheet.indexOf('{'))] || '';\n    }\n    // Return default catch all bucket\n    return '';\n};\n/**\n * Used to move styles to the head of the application during runtime.\n *\n * @param css string\n * @param opts StyleSheetOpts\n */\nexport default function insertRule(css, opts) {\n    var bucketName = getStyleBucketName(css);\n    var style = lazyAddStyleBucketToHead(bucketName, opts);\n    if (process.env.NODE_ENV === 'production') {\n        var sheet = style.sheet;\n        sheet.insertRule(css, sheet.cssRules.length);\n    }\n    else {\n        style.appendChild(document.createTextNode(css));\n    }\n}\n//# sourceMappingURL=sheet.js.map","import React, { memo } from 'react';\nimport insertRule, { getStyleBucketName, styleBucketOrdering } from './sheet';\nimport { analyzeCssInDev } from './dev-warnings';\nimport { useCache } from './style-cache';\nimport { isNodeEnvironment } from './is-node';\nfunction Style(props) {\n    var inserted = useCache();\n    if (process.env.NODE_ENV === 'development') {\n        props.children.forEach(analyzeCssInDev);\n    }\n    if (props.children.length) {\n        if (false) {\n            var bucketedSheets_1 = {};\n            var hasSheets = false;\n            for (var i = 0; i < props.children.length; i++) {\n                var sheet = props.children[i];\n                if (inserted[sheet]) {\n                    continue;\n                }\n                else {\n                    inserted[sheet] = true;\n                    hasSheets = true;\n                }\n                var bucketName = getStyleBucketName(sheet);\n                bucketedSheets_1[bucketName] = (bucketedSheets_1[bucketName] || '') + sheet;\n            }\n            if (!hasSheets) {\n                return null;\n            }\n            return (React.createElement(\"style\", { \"data-cmpld\": true, nonce: props.nonce }, styleBucketOrdering.map(function (bucket) { return bucketedSheets_1[bucket]; }).join('')));\n        }\n        else {\n            for (var i = 0; i < props.children.length; i++) {\n                var sheet = props.children[i];\n                if (inserted[sheet]) {\n                    continue;\n                }\n                inserted[sheet] = true;\n                insertRule(sheet, props);\n            }\n        }\n    }\n    return null;\n}\nexport default memo(Style, function () { return true; });\n//# sourceMappingURL=style.js.map","var UNDERSCORE_UNICODE = 95;\n/**\n * This length includes the underscore,\n * e.g. `\"_1s4A\"` would be a valid atomic group hash.\n */\nvar ATOMIC_GROUP_LENGTH = 5;\n/**\n * Joins classes together and ensures atomic declarations of a single group exist.\n * Atomic declarations take the form of `_{group}{value}` (always prefixed with an underscore),\n * where both `group` and `value` are hashes **four characters long**.\n * Class names can be of any length,\n * this function can take both atomic declarations and class names.\n *\n * Input:\n *\n * ```\n * ax(['_aaaabbbb', '_aaaacccc'])\n * ```\n *\n * Output:\n *\n * ```\n * '_aaaacccc'\n * ```\n *\n * @param classes\n */\nexport default function ax(classNames) {\n    if (classNames.length <= 1) {\n        // short circuit if theres no custom class names.\n        return classNames[0] || undefined;\n    }\n    var atomicGroups = {};\n    for (var i = 0; i < classNames.length; i++) {\n        var cls = classNames[i];\n        if (!cls) {\n            continue;\n        }\n        var groups = cls.split(' ');\n        for (var x = 0; x < groups.length; x++) {\n            var atomic = groups[x];\n            var atomicGroupName = atomic.slice(0, atomic.charCodeAt(0) === UNDERSCORE_UNICODE ? ATOMIC_GROUP_LENGTH : undefined);\n            atomicGroups[atomicGroupName] = atomic;\n        }\n    }\n    var str = '';\n    for (var key in atomicGroups) {\n        var value = atomicGroups[key];\n        str += value + ' ';\n    }\n    return str.slice(0, -1);\n}\n//# sourceMappingURL=ax.js.map","/**\n * Returns a CSS custom property value with an optional suffix & prefix.\n * Prefix will only be added if there is a suffix.\n * If the value is undefined a fallback value will be returned to prevent children inheriting parent values.\n *\n * @param value\n * @param suffix\n * @param prefix\n */\nexport default function cssCustomPropertyValue(value, suffix, prefix) {\n    if (value != undefined) {\n        if (suffix) {\n            if (prefix) {\n                return prefix + value + suffix;\n            }\n            return value + suffix;\n        }\n        return value;\n    }\n    // Currently React trims these values so we can't use a space \" \" to block the value.\n    // Instead we use a CSS variable that doesn't exist which falls back to \" \".\n    // Bug raised here: https://github.com/facebook/react/issues/20497\n    return 'var(--, )';\n}\n//# sourceMappingURL=css-custom-property.js.map","/* Container.tsx generated by @compiled/babel-plugin v0.5.2 */\n\nimport React from 'react';\nimport { ax, ix, CC, CS } from \"@compiled/react/runtime\";\nimport { borderRadius } from '@atlaskit/theme/constants';\nvar _15 = \"._s7n41q9y{vertical-align:baseline}\";\nvar _14 = \"._1p1dangw{text-transform:uppercase}\";\nvar _13 = \"._19bvidpf{padding-left:0}\";\nvar _12 = \"._n3td1l7b{padding-bottom:3px}\";\nvar _11 = \"._u5f3idpf{padding-right:0}\";\nvar _10 = \"._ca0qyh40{padding-top:2px}\";\nvar _9 = \"._p12f1osq{max-width:100%}\";\nvar _8 = \"._vwz4kb7n{line-height:1}\";\nvar _7 = \"._k48p1fw0{font-weight:700}\";\nvar _6 = \"._1wyb1skh{font-size:11px}\";\nvar _5 = \"._1e0c1o8l{display:inline-block}\";\nvar _4 = \"._syaz1u00{color:var(--_srel9g)}\";\nvar _3 = \"._vchhusvi{box-sizing:border-box}\";\nvar _2 = \"._2rko1nwa{border-radius:var(--_fer9fa)}\";\nvar _ = \"._bfhkaxbu{background-color:var(--_1ly4823)}\";\nvar BORDER_RADIUS = \"\".concat(borderRadius(), \"px\");\nexport default (function (_ref) {\n  var backgroundColor = _ref.backgroundColor,\n      textColor = _ref.textColor,\n      children = _ref.children,\n      testId = _ref.testId;\n  return /*#__PURE__*/React.createElement(CC, null, /*#__PURE__*/React.createElement(CS, null, [_, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15]), /*#__PURE__*/React.createElement(\"span\", {\n    \"data-testid\": testId,\n    className: ax([\"_bfhkaxbu _2rko1nwa _vchhusvi _syaz1u00 _1e0c1o8l _1wyb1skh _k48p1fw0 _vwz4kb7n _p12f1osq _ca0qyh40 _u5f3idpf _n3td1l7b _19bvidpf _1p1dangw _s7n41q9y\"]),\n    style: {\n      \"--_1ly4823\": ix(backgroundColor),\n      \"--_fer9fa\": ix(BORDER_RADIUS),\n      \"--_srel9g\": ix(textColor)\n    }\n  }, children));\n});","/* Content.tsx generated by @compiled/babel-plugin v0.5.2 */\n\nimport React from 'react';\nimport { ax, ix, CC, CS } from \"@compiled/react/runtime\";\nimport { gridSize } from '@atlaskit/theme/constants';\nvar _13 = \"._1bsb1osq{width:100%}\";\nvar _12 = \"._p12fvyns{max-width:var(--_1w406pq)}\";\nvar _11 = \"._19bv70xm{padding-left:var(--_1xlms2h)}\";\nvar _10 = \"._n3tdidpf{padding-bottom:0}\";\nvar _9 = \"._u5f370xm{padding-right:var(--_1xlms2h)}\";\nvar _8 = \"._ca0qidpf{padding-top:0}\";\nvar _7 = \"._vchhusvi{box-sizing:border-box}\";\nvar _6 = \"._o5721q9c{white-space:nowrap}\";\nvar _5 = \"._1bto1l2s{text-overflow:ellipsis}\";\nvar _4 = \"._18m915vq{overflow-y:hidden}\";\nvar _3 = \"._1reo15vq{overflow-x:hidden}\";\nvar _2 = \"._s7n4jp4b{vertical-align:top}\";\nvar _ = \"._1e0c1o8l{display:inline-block}\";\nvar HORIZONTAL_SPACING = \"\".concat(gridSize() / 2, \"px\");\nexport default (function (_ref) {\n  var maxWidth = _ref.maxWidth,\n      children = _ref.children;\n  return /*#__PURE__*/React.createElement(CC, null, /*#__PURE__*/React.createElement(CS, null, [_, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13]), /*#__PURE__*/React.createElement(\"span\", {\n    className: ax([\"_1e0c1o8l _s7n4jp4b _1reo15vq _18m915vq _1bto1l2s _o5721q9c _vchhusvi _ca0qidpf _u5f370xm _n3tdidpf _19bv70xm _p12fvyns _1bsb1osq\"]),\n    style: {\n      \"--_1xlms2h\": ix(HORIZONTAL_SPACING),\n      \"--_1w406pq\": ix(typeof maxWidth === 'number' ? \"\".concat(maxWidth, \"px\") : maxWidth)\n    }\n  }, children));\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { PureComponent } from 'react';\nimport { Theme } from '../theme';\nimport Container from './Container';\nimport Content from './Content';\n\nvar Lozenge = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Lozenge, _PureComponent);\n\n  var _super = _createSuper(Lozenge);\n\n  function Lozenge() {\n    _classCallCheck(this, Lozenge);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Lozenge, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          theme = _this$props.theme,\n          children = _this$props.children,\n          testId = _this$props.testId;\n      return /*#__PURE__*/React.createElement(Theme.Provider, {\n        value: theme\n      }, /*#__PURE__*/React.createElement(Theme.Consumer, this.props, function (themeTokens) {\n        return /*#__PURE__*/React.createElement(Container, _extends({\n          testId: testId\n        }, themeTokens), /*#__PURE__*/React.createElement(Content, themeTokens, children));\n      }));\n    }\n  }]);\n\n  return Lozenge;\n}(PureComponent);\n\n_defineProperty(Lozenge, \"defaultProps\", {\n  isBold: false,\n  appearance: 'default',\n  maxWidth: 200\n});\n\nexport { Lozenge as default };","/* @flow */\n\nimport Lozenge from '@atlaskit/lozenge';\nimport React, { Component } from 'react';\n\nimport { Dialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of\n * {@link KeyboardShortcutsDialog}.\n */\ntype Props = {\n\n    /**\n     * A Map with keyboard keys as keys and translation keys as values.\n     */\n    shortcutDescriptions: Object,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Implements a React {@link Component} which displays a dialog describing\n * registered keyboard shortcuts.\n *\n * @extends Component\n */\nclass KeyboardShortcutsDialog extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const shortcuts = Array.from(this.props.shortcutDescriptions)\n            .map(description => this._renderShortcutsListItem(...description));\n\n        return (\n            <Dialog\n                cancelKey = { 'dialog.close' }\n                submitDisabled = { true }\n                titleKey = 'keyboardShortcuts.keyboardShortcuts'\n                width = 'small'>\n                <div\n                    id = 'keyboard-shortcuts'>\n                    <ul\n                        className = 'shortcuts-list'\n                        id = 'keyboard-shortcuts-list'>\n                        { shortcuts }\n                    </ul>\n                </div>\n            </Dialog>\n        );\n    }\n\n    /**\n     * Creates a {@code ReactElement} for describing a single keyboard shortcut.\n     *\n     * @param {string} keyboardKey - The keyboard key that triggers an action.\n     * @param {string} translationKey - A description of what the action does.\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderShortcutsListItem(keyboardKey, translationKey) {\n        let modifierKey = 'Alt';\n\n        if (window.navigator?.platform) {\n            if (window.navigator.platform.indexOf('Mac') !== -1) {\n                modifierKey = '⌥';\n            }\n        }\n\n        return (\n            <li\n                className = 'shortcuts-list__item'\n                key = { keyboardKey }>\n                <span\n                    aria-label = { this.props.t(translationKey) }\n                    className = 'shortcuts-list__description'>\n                    { this.props.t(translationKey) }\n                </span>\n                <span className = 'item-action'>\n                    <Lozenge isBold = { true }>\n                        { keyboardKey.startsWith(':')\n                            ? `${modifierKey} + ${keyboardKey.slice(1)}`\n                            : keyboardKey }\n                    </Lozenge>\n                </span>\n            </li>\n        );\n    }\n}\n\nexport default translate(KeyboardShortcutsDialog);\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { LOCKED_LOCALLY } from '../../../../room-lock';\n\n/**\n * The type of the React {@code Component} props of {@link PasswordForm}.\n */\ntype Props = {\n\n    /**\n     * Whether or not to show the password editing field.\n     */\n    editEnabled: boolean,\n\n    /**\n     * The value for how the conference is locked (or undefined if not locked)\n     * as defined by room-lock constants.\n     */\n    locked: string,\n\n    /**\n     * Callback to invoke when the local participant is submitting a password\n     * set request.\n     */\n    onSubmit: Function,\n\n    /**\n     * The current known password for the JitsiConference.\n     */\n    password: string,\n\n    /**\n     * The number of digits to be used in the password.\n     */\n    passwordNumberOfDigits: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link PasswordForm}.\n */\ntype State = {\n\n    /**\n     * The value of the password being entered by the local participant.\n     */\n    enteredPassword: string\n};\n\n/**\n * React {@code Component} for displaying and editing the conference password.\n *\n * @extends Component\n */\nclass PasswordForm extends Component<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props, state) {\n        return {\n            enteredPassword: props.editEnabled ? state.enteredPassword : ''\n        };\n    }\n\n    state = {\n        enteredPassword: ''\n    };\n\n    /**\n     * Initializes a new {@code PasswordForm} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code PasswordForm} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onEnteredPasswordChange\n            = this._onEnteredPasswordChange.bind(this);\n        this._onPasswordSubmit = this._onPasswordSubmit.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div className = 'info-password'>\n                <span className = 'info-label'>\n                    { t('info.password') }\n                </span>\n                <span className = 'spacer'>&nbsp;</span>\n                <span className = 'info-password-field info-value'>\n                    { this._renderPasswordField() }\n                </span>\n            </div>\n        );\n    }\n\n    /**\n     * Returns a ReactElement for showing the current state of the password or\n     * for editing the current password.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderPasswordField() {\n        if (this.props.editEnabled) {\n            let digitPattern, placeHolderText;\n\n            if (this.props.passwordNumberOfDigits) {\n                placeHolderText = this.props.t('passwordDigitsOnly', {\n                    number: this.props.passwordNumberOfDigits });\n                digitPattern = '\\\\d*';\n            }\n\n            return (\n                <form\n                    className = 'info-password-form'\n                    onKeyPress = { this._onKeyPress }\n                    onSubmit = { this._onPasswordSubmit }>\n                    <input\n                        aria-label = { this.props.t('info.addPassword') }\n                        autoFocus = { true }\n                        className = 'info-password-input'\n                        maxLength = { this.props.passwordNumberOfDigits }\n                        onChange = { this._onEnteredPasswordChange }\n                        pattern = { digitPattern }\n                        placeholder = { placeHolderText }\n                        spellCheck = { 'false' }\n                        type = 'text'\n                        value = { this.state.enteredPassword } />\n                </form>\n            );\n        } else if (this.props.locked === LOCKED_LOCALLY) {\n            return (\n                <div className = 'info-password-local'>\n                    { this.props.password }\n                </div>\n            );\n        } else if (this.props.locked) {\n            return (\n                <div className = 'info-password-remote'>\n                    { this.props.t('passwordSetRemotely') }\n                </div>\n            );\n        }\n\n        return (\n            <div className = 'info-password-none'>\n                { this.props.t('info.noPassword') }\n            </div>\n        );\n    }\n\n    _onEnteredPasswordChange: (Object) => void;\n\n    /**\n     * Updates the internal state of entered password.\n     *\n     * @param {Object} event - DOM Event for value change.\n     * @private\n     * @returns {void}\n     */\n    _onEnteredPasswordChange(event) {\n        this.setState({ enteredPassword: event.target.value });\n    }\n\n    _onPasswordSubmit: (Object) => void;\n\n    /**\n     * Invokes the passed in onSubmit callback to notify the parent that a\n     * password submission has been attempted.\n     *\n     * @param {Object} event - DOM Event for form submission.\n     * @private\n     * @returns {void}\n     */\n    _onPasswordSubmit(event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.props.onSubmit(this.state.enteredPassword);\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * Stops the the EnterKey for propagation in order to prevent the dialog\n     * to close.\n     *\n     * @param {Object} event - The key event.\n     * @private\n     * @returns {void}\n     */\n    _onKeyPress(event) {\n        if (event.key === 'Enter') {\n            event.stopPropagation();\n        }\n    }\n}\n\nexport default translate(PasswordForm);\n","/* eslint-disable react/no-multi-comp */\n// @flow\n\nimport React, { useRef } from 'react';\n\nimport { translate } from '../../../../base/i18n';\nimport { copyText } from '../../../../base/util';\n\nimport PasswordForm from './PasswordForm';\n\ntype Props = {\n\n    /**\n     * Whether or not the current user can modify the current password.\n     */\n    canEditPassword: boolean,\n\n    /**\n     * The JitsiConference for which to display a lock state and change the\n     * password.\n     */\n    conference: Object,\n\n    /**\n     * The value for how the conference is locked (or undefined if not locked)\n     * as defined by room-lock constants.\n     */\n    locked: string,\n\n    /**\n     * The current known password for the JitsiConference.\n     */\n    password: string,\n\n    /**\n     * Whether or not to show the password in editing mode.\n     */\n    passwordEditEnabled: boolean,\n\n    /**\n     * The number of digits to be used in the password.\n     */\n    passwordNumberOfDigits: ?number,\n\n    /**\n     * Action that sets the conference password.\n     */\n    setPassword: Function,\n\n    /**\n     * Method that sets whether the password editing is enabled or not.\n     */\n    setPasswordEditEnabled: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Component that handles the password manipulation from the invite dialog.\n *\n * @returns {React$Element<any>}\n */\nfunction PasswordSection({\n    canEditPassword,\n    conference,\n    locked,\n    password,\n    passwordEditEnabled,\n    passwordNumberOfDigits,\n    setPassword,\n    setPasswordEditEnabled,\n    t }: Props) {\n\n    const formRef: Object = useRef(null);\n\n    /**\n     * Callback invoked to set a password on the current JitsiConference.\n     *\n     * @param {string} enteredPassword - The new password to be used to lock the\n     * current JitsiConference.\n     * @private\n     * @returns {void}\n     */\n    function onPasswordSubmit(enteredPassword) {\n        setPassword(conference, conference.lock, enteredPassword);\n    }\n\n    /**\n     * Toggles whether or not the password should currently be shown as being\n     * edited locally.\n     *\n     * @private\n     * @returns {void}\n     */\n    function onTogglePasswordEditState() {\n        setPasswordEditEnabled(!passwordEditEnabled);\n    }\n\n    /**\n     * Method to remotely submit the password from outside of the password form.\n     *\n     * @returns {void}\n     */\n    function onPasswordSave() {\n        if (formRef.current) {\n            const { value } = formRef.current.querySelector('form > input');\n\n            if (value) {\n                onPasswordSubmit(value);\n            }\n        }\n    }\n\n    /**\n     * Callback invoked to unlock the current JitsiConference.\n     *\n     * @returns {void}\n     */\n    function onPasswordRemove() {\n        onPasswordSubmit('');\n    }\n\n    /**\n     * Copies the password to the clipboard.\n     *\n     * @returns {void}\n     */\n    function onPasswordCopy() {\n        copyText(password);\n    }\n\n    /**\n     * Toggles whether or not the password should currently be shown as being\n     * edited locally.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    function onTogglePasswordEditStateKeyPressHandler(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            onTogglePasswordEditState();\n        }\n    }\n\n    /**\n     * Method to remotely submit the password from outside of the password form.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    function onPasswordSaveKeyPressHandler(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            onPasswordSave();\n        }\n    }\n\n    /**\n     * Callback invoked to unlock the current JitsiConference.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    function onPasswordRemoveKeyPressHandler(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            onPasswordRemove();\n        }\n    }\n\n    /**\n     * Copies the password to the clipboard.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @private\n     * @returns {void}\n     */\n    function onPasswordCopyKeyPressHandler(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            onPasswordCopy();\n        }\n    }\n\n    /**\n     * Method that renders the password action(s) based on the current\n     * locked-status of the conference.\n     *\n     * @returns {React$Element<any>}\n     */\n    function renderPasswordActions() {\n        if (!canEditPassword) {\n            return null;\n        }\n\n        if (passwordEditEnabled) {\n            return (\n                <>\n                    <a\n                        aria-label = { t('dialog.Cancel') }\n                        onClick = { onTogglePasswordEditState }\n                        onKeyPress = { onTogglePasswordEditStateKeyPressHandler }\n                        role = 'button'\n                        tabIndex = { 0 }>{ t('dialog.Cancel') }</a>\n                    <a\n                        aria-label = { t('dialog.add') }\n                        onClick = { onPasswordSave }\n                        onKeyPress = { onPasswordSaveKeyPressHandler }\n                        role = 'button'\n                        tabIndex = { 0 }>{ t('dialog.add') }</a>\n                </>\n            );\n        }\n\n        if (locked) {\n            return (\n                <>\n                    <a\n                        aria-label = { t('dialog.Remove') }\n                        className = 'remove-password'\n                        onClick = { onPasswordRemove }\n                        onKeyPress = { onPasswordRemoveKeyPressHandler }\n                        role = 'button'\n                        tabIndex = { 0 }>{ t('dialog.Remove') }</a>\n                    {\n\n                        // There are cases like lobby and grant moderator when password is not available\n                        password ? <>\n                            <a\n                                aria-label = { t('dialog.copy') }\n                                className = 'copy-password'\n                                onClick = { onPasswordCopy }\n                                onKeyPress = { onPasswordCopyKeyPressHandler }\n                                role = 'button'\n                                tabIndex = { 0 }>{ t('dialog.copy') }</a>\n                        </> : null\n                    }\n                </>\n            );\n        }\n\n        return (\n            <a\n                aria-label = { t('info.addPassword') }\n                className = 'add-password'\n                onClick = { onTogglePasswordEditState }\n                onKeyPress = { onTogglePasswordEditStateKeyPressHandler }\n                role = 'button'\n                tabIndex = { 0 }>{ t('info.addPassword') }</a>\n        );\n    }\n\n    return (\n        <div className = 'security-dialog password-section'>\n            <p className = 'description'>\n                { t(canEditPassword ? 'security.about' : 'security.aboutReadOnly') }\n            </p>\n            <div className = 'security-dialog password'>\n                <div\n                    className = 'info-dialog info-dialog-column info-dialog-password'\n                    ref = { formRef }>\n                    <PasswordForm\n                        editEnabled = { passwordEditEnabled }\n                        locked = { locked }\n                        onSubmit = { onPasswordSubmit }\n                        password = { password }\n                        passwordNumberOfDigits = { passwordNumberOfDigits } />\n                </div>\n                <div className = 'security-dialog password-actions'>\n                    { renderPasswordActions() }\n                </div>\n            </div>\n        </div>\n    );\n}\n\nexport default translate(PasswordSection);\n","// @flow\n\nimport React, { useState, useEffect } from 'react';\n\nimport { setPassword as setPass } from '../../../../base/conference';\nimport { Dialog } from '../../../../base/dialog';\nimport { isLocalParticipantModerator } from '../../../../base/participants';\nimport { connect } from '../../../../base/redux';\nimport { E2EESection } from '../../../../e2ee/components';\nimport { LobbySection } from '../../../../lobby';\n\nimport PasswordSection from './PasswordSection';\n\ntype Props = {\n\n    /**\n     * Whether or not the current user can modify the current password.\n     */\n    _canEditPassword: boolean,\n\n    /**\n     * The JitsiConference for which to display a lock state and change the\n     * password.\n     */\n    _conference: Object,\n\n    /**\n     * The value for how the conference is locked (or undefined if not locked)\n     * as defined by room-lock constants.\n     */\n    _locked: string,\n\n    /**\n     * The current known password for the JitsiConference.\n     */\n    _password: string,\n\n    /**\n     * The number of digits to be used in the password.\n     */\n    _passwordNumberOfDigits: ?number,\n\n    /**\n     * Indicates whether e2ee will be displayed or not.\n     */\n    _showE2ee: boolean,\n\n    /**\n     * Action that sets the conference password.\n     */\n    setPassword: Function\n};\n\n/**\n * Component that renders the security options dialog.\n *\n * @returns {React$Element<any>}\n */\nfunction SecurityDialog({\n    _canEditPassword,\n    _conference,\n    _locked,\n    _password,\n    _passwordNumberOfDigits,\n    _showE2ee,\n    setPassword\n}: Props) {\n    const [ passwordEditEnabled, setPasswordEditEnabled ] = useState(false);\n\n    useEffect(() => {\n        if (passwordEditEnabled && _password) {\n            setPasswordEditEnabled(false);\n        }\n    }, [ _password ]);\n\n    return (\n        <Dialog\n            hideCancelButton = { true }\n            submitDisabled = { true }\n            titleKey = 'security.securityOptions'\n            width = { 'small' }>\n            <div className = 'security-dialog'>\n                <LobbySection />\n                <PasswordSection\n                    canEditPassword = { _canEditPassword }\n                    conference = { _conference }\n                    locked = { _locked }\n                    password = { _password }\n                    passwordEditEnabled = { passwordEditEnabled }\n                    passwordNumberOfDigits = { _passwordNumberOfDigits }\n                    setPassword = { setPassword }\n                    setPasswordEditEnabled = { setPasswordEditEnabled } />\n                {\n                    _showE2ee ? <>\n                        <div className = 'separator-line' />\n                        <E2EESection />\n                    </> : null\n                }\n\n            </div>\n        </Dialog>\n    );\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code SecurityDialog} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const {\n        conference,\n        e2eeSupported,\n        locked,\n        password\n    } = state['features/base/conference'];\n    const { roomPasswordNumberOfDigits } = state['features/base/config'];\n\n    const showE2ee = Boolean(e2eeSupported) && isLocalParticipantModerator(state);\n\n    return {\n        _canEditPassword: isLocalParticipantModerator(state),\n        _conference: conference,\n        _dialIn: state['features/invite'],\n        _locked: locked,\n        _password: password,\n        _passwordNumberOfDigits: roomPasswordNumberOfDigits,\n        _showE2ee: showE2ee\n    };\n}\n\nconst mapDispatchToProps = { setPassword: setPass };\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SecurityDialog);\n","// @flow\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    SET_INTERVAL\n} from './constants';\n\nconst code = `\n    var timer;\n\n    onmessage = function(request) {\n        switch (request.data.id) {\n        case ${SET_INTERVAL}: {\n            timer = setInterval(() => {\n                postMessage({ id: ${INTERVAL_TIMEOUT} });\n            }, request.data.timeMs);\n            break;\n        }\n        case ${CLEAR_INTERVAL}: {\n            if (timer) {\n                clearInterval(timer);\n            }\n            break;\n        }\n        }\n    };\n`;\n\nexport const timerWorkerScript = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));\n","// @flow\n\nimport pixelmatch from 'pixelmatch';\n\nimport { getCurrentConference } from '../../base/conference';\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    PIXEL_LOWER_BOUND,\n    POLL_INTERVAL,\n    SET_INTERVAL\n} from './constants';\nimport { processScreenshot } from './processScreenshot';\nimport { timerWorkerScript } from './worker';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Effect that wraps {@code MediaStream} adding periodic screenshot captures.\n * Manipulates the original desktop stream and performs custom processing operations, if implemented.\n */\nexport default class ScreenshotCaptureEffect {\n    _state: Object;\n    _currentCanvas: HTMLCanvasElement;\n    _currentCanvasContext: CanvasRenderingContext2D;\n    _videoElement: HTMLVideoElement;\n    _handleWorkerAction: Function;\n    _initScreenshotCapture: Function;\n    _streamWorker: Worker;\n    _streamHeight: any;\n    _streamWidth: any;\n    _storedImageData: Uint8ClampedArray;\n\n    /**\n     * Initializes a new {@code ScreenshotCaptureEffect} instance.\n     *\n     * @param {Object} state - The redux state.\n     */\n    constructor(state: Object) {\n        this._state = state;\n        this._currentCanvas = document.createElement('canvas');\n        this._currentCanvasContext = this._currentCanvas.getContext('2d');\n        this._videoElement = document.createElement('video');\n\n        // Bind handlers such that they access the same instance.\n        this._handleWorkerAction = this._handleWorkerAction.bind(this);\n        this._initScreenshotCapture = this._initScreenshotCapture.bind(this);\n        this._streamWorker = new Worker(timerWorkerScript, { name: 'Screenshot capture worker' });\n        this._streamWorker.onmessage = this._handleWorkerAction;\n    }\n\n    /**\n     * Starts the screenshot capture event on a loop.\n     *\n     * @param {MediaStream} stream - The desktop stream from which screenshots are to be sent.\n     * @param {string} videoType - The type of the media stream.\n     * @returns {Promise} - Promise that resolves once effect has started or rejects if the\n     * videoType parameter is not desktop.\n     */\n    startEffect(stream: MediaStream, videoType: string) {\n        return new Promise<void>((resolve, reject) => {\n            if (videoType !== 'desktop') {\n                reject();\n            }\n            const desktopTrack = stream.getVideoTracks()[0];\n            const { height, width }\n                = desktopTrack.getSettings() ?? desktopTrack.getConstraints();\n\n            this._streamHeight = height;\n            this._streamWidth = width;\n            this._currentCanvas.height = parseInt(height, 10);\n            this._currentCanvas.width = parseInt(width, 10);\n            this._videoElement.height = parseInt(height, 10);\n            this._videoElement.width = parseInt(width, 10);\n            this._videoElement.srcObject = stream;\n            this._videoElement.play();\n\n            // Store first capture for comparisons in {@code this._handleScreenshot}.\n            this._videoElement.addEventListener('loadeddata', this._initScreenshotCapture);\n            resolve();\n        });\n    }\n\n    /**\n     * Stops the ongoing {@code ScreenshotCaptureEffect} by clearing the {@code Worker} interval.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._streamWorker.postMessage({ id: CLEAR_INTERVAL });\n        this._videoElement.removeEventListener('loadeddata', this._initScreenshotCapture);\n    }\n\n    /**\n     * Method that is called as soon as the first frame of the video loads from stream.\n     * The method is used to store the {@code ImageData} object from the first frames\n     * in order to use it for future comparisons based on which we can process only certain\n     * screenshots.\n     *\n     * @private\n     * @returns {void}\n     */\n    _initScreenshotCapture() {\n        const storedCanvas = document.createElement('canvas');\n        const storedCanvasContext = storedCanvas.getContext('2d');\n\n        storedCanvasContext.drawImage(this._videoElement, 0, 0, this._streamWidth, this._streamHeight);\n        const { data } = storedCanvasContext.getImageData(0, 0, this._streamWidth, this._streamHeight);\n\n        this._storedImageData = data;\n        this._streamWorker.postMessage({\n            id: SET_INTERVAL,\n            timeMs: POLL_INTERVAL\n        });\n    }\n\n    /**\n     * Handler of the {@code EventHandler} message that calls the appropriate method based on the parameter's id.\n     *\n     * @private\n     * @param {EventHandler} message - Message received from the Worker.\n     * @returns {void}\n     */\n    _handleWorkerAction(message: Object) {\n        return message.data.id === INTERVAL_TIMEOUT && this._handleScreenshot();\n    }\n\n    /**\n     * Method that decides whether an image should be processed based on a preset pixel lower bound.\n     *\n     * @private\n     * @param {integer} nbPixels - The number of pixels of the candidate image.\n     * @returns {boolean} - Whether the image should be processed or not.\n     */\n    _shouldProcessScreenshot(nbPixels: number) {\n        return nbPixels >= PIXEL_LOWER_BOUND;\n    }\n\n    /**\n     * Screenshot handler.\n     *\n     * @private\n     * @returns {void}\n     */\n    _handleScreenshot() {\n        this._currentCanvasContext.drawImage(this._videoElement, 0, 0, this._streamWidth, this._streamHeight);\n        const { data } = this._currentCanvasContext.getImageData(0, 0, this._streamWidth, this._streamHeight);\n        const diffPixels = pixelmatch(data, this._storedImageData, null, this._streamWidth, this._streamHeight);\n\n        if (this._shouldProcessScreenshot(diffPixels)) {\n            const conference = getCurrentConference(this._state);\n            const sessionId = conference.getMeetingUniqueId();\n            const { connection, timeEstablished } = this._state['features/base/connection'];\n            const jid = connection.getJid();\n            const timeLapseSeconds = timeEstablished && Math.floor((Date.now() - timeEstablished) / 1000);\n            const { jwt } = this._state['features/base/jwt'];\n\n            this._storedImageData = data;\n            processScreenshot(this._currentCanvas, {\n                jid,\n                jwt,\n                sessionId,\n                timeLapseSeconds\n            });\n        }\n    }\n}\n","// @flow\n\n/**\n * Number of pixels that signal if two images should be considered different.\n */\nexport const PIXEL_LOWER_BOUND = 100000;\n\n/**\n * Number of milliseconds that represent how often screenshots should be taken.\n */\nexport const POLL_INTERVAL = 30000;\n\n/**\n * SET_INTERVAL constant is used to set interval and it is set in\n * the id property of the request.data property. timeMs property must\n * also be set. request.data example:\n *\n * {\n *      id: SET_INTERVAL,\n *      timeMs: 33\n * }\n */\nexport const SET_INTERVAL = 1;\n\n/**\n * CLEAR_INTERVAL constant is used to clear the interval and it is set in\n * the id property of the request.data property.\n *\n * {\n *      id: CLEAR_INTERVAL\n * }\n */\nexport const CLEAR_INTERVAL = 2;\n\n/**\n * INTERVAL_TIMEOUT constant is used as response and it is set in the id property.\n *\n * {\n *      id: INTERVAL_TIMEOUT\n * }\n */\nexport const INTERVAL_TIMEOUT = 3;\n","// @flow\n\nimport { toState } from '../../base/redux';\n\nimport ScreenshotCaptureEffect from './ScreenshotCaptureEffect';\n\n/**\n * Creates a new instance of ScreenshotCaptureEffect.\n *\n * @param {Object | Function} stateful - The redux store, state, or\n * {@code getState} function.\n * @returns {Promise<ScreenshotCaptureEffect>}\n */\nexport function createScreenshotCaptureEffect(stateful: Object | Function) {\n    if (!MediaStreamTrack.prototype.getSettings && !MediaStreamTrack.prototype.getConstraints) {\n        return Promise.reject(new Error('ScreenshotCaptureEffect not supported!'));\n    }\n\n    return Promise.resolve(new ScreenshotCaptureEffect(toState(stateful)));\n}\n","// @flow\n\nimport { ColorPalette, getRGBAFormat } from '../styles';\n\n/**\n * The default color scheme of the application.\n */\nexport default {\n    '_defaultTheme': {\n        // Generic app theme colors that are used across the entire app.\n        // All scheme definitions below inherit these values.\n        background: 'rgb(255, 255, 255)',\n        errorText: ColorPalette.red,\n        icon: 'rgb(28, 32, 37)',\n        text: 'rgb(28, 32, 37)'\n    },\n    'Chat': {\n        displayName: 'rgb(94, 109, 121)',\n        localMsgBackground: 'rgb(215, 230, 249)',\n        privateMsgBackground: 'rgb(250, 219, 219)',\n        privateMsgNotice: 'rgb(186, 39, 58)',\n        remoteMsgBackground: 'rgb(241, 242, 246)',\n        replyBorder: 'rgb(219, 197, 200)',\n        replyIcon: 'rgb(94, 109, 121)'\n    },\n    'Conference': {\n        inviteButtonBackground: 'rgb(0, 119, 225)',\n        onVideoText: 'white'\n    },\n    'Dialog': {\n        border: 'rgba(0, 3, 6, 0.6)',\n        buttonBackground: ColorPalette.blue,\n        buttonLabel: ColorPalette.white\n    },\n    'Header': {\n        background: ColorPalette.blue,\n        icon: ColorPalette.white,\n        statusBar: ColorPalette.blueHighlight,\n        statusBarContent: ColorPalette.white,\n        text: ColorPalette.white\n    },\n    'Modal': {},\n    'LargeVideo': {\n        background: '#040404'\n    },\n    'LoadConfigOverlay': {\n        background: 'rgb(249, 249, 249)'\n    },\n    'Thumbnail': {\n        activeParticipantHighlight: 'rgb(81, 214, 170)',\n        activeParticipantTint: 'rgba(49, 183, 106, 0.3)',\n        background: '#36383C'\n    },\n    'Toolbox': {\n        button: 'rgb(255, 255, 255)',\n        buttonToggled: 'rgb(38, 58, 76)',\n        buttonToggledBorder: getRGBAFormat('#a4b8d1', 0.6),\n        hangup: 'rgb(227,79,86)'\n    }\n};\n","// @flow\n\nimport { toState } from '../redux';\nimport { StyleType } from '../styles';\n\nimport defaultScheme from './defaultScheme';\n\n/**\n * A registry class to register styles that need to be color-schemed.\n *\n * This class uses lazy initialization for scheme-ified style definitions on\n * request.\n */\nclass ColorSchemeRegistry {\n    /**\n     * A map of already scheme-ified style definitions.\n     */\n    _schemedStyles = new Map();\n\n    /**\n     * A map of registered style templates.\n     */\n    _styleTemplates = new Map();\n\n    /**\n     * Clears the already scheme-ified style definitions. This is useful when\n     * the {@code SET_COLOR_SCHEME} action is dispatched (again).\n     *\n     * @returns {void}\n     */\n    clear() {\n        this._schemedStyles.clear();\n    }\n\n    /**\n     * Retrieves the color-scheme applied style definition of a component.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component whose style we\n     * want to retrieve.\n     * @returns {StyleType}\n     */\n    get(stateful: Object | Function, componentName: string): StyleType {\n        let schemedStyle = this._schemedStyles.get(componentName);\n\n        if (!schemedStyle) {\n            schemedStyle\n                = this._applyColorScheme(\n                    stateful,\n                    componentName,\n                    this._styleTemplates.get(componentName));\n            this._schemedStyles.set(componentName, schemedStyle);\n        }\n\n        return schemedStyle;\n    }\n\n    /**\n     * Registers a style definition to the registry for color-scheming.\n     *\n     * NOTE: It's suggested to only use this registry on styles where color\n     * scheming is needed, otherwise just use a static style object as before.\n     *\n     * @param {string} componentName - The name of the component to register the\n     * style to (e.g. {@code 'Toolbox'}).\n     * @param {StyleType} style - The style definition to register.\n     * @returns {void}\n     */\n    register(componentName: string, style: StyleType): void {\n        this._styleTemplates.set(componentName, style);\n\n        // If this is a style overwrite, we need to delete the processed version\n        // of the style from the other map\n        this._schemedStyles.delete(componentName);\n    }\n\n    /**\n     * Creates a color schemed style object applying the color scheme to every\n     * colors in the style object prepared in a special way.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component to apply the\n     * color scheme to.\n     * @param {StyleType} style - The style definition to apply the color scheme\n     * to.\n     * @returns {StyleType}\n     */\n    _applyColorScheme(\n            stateful: Object | Function,\n            componentName: string,\n            style: StyleType): StyleType {\n        let schemedStyle;\n\n        if (Array.isArray(style)) {\n            // The style is an array of styles, we apply the same transformation\n            // to each, recursively.\n            schemedStyle = [];\n\n            for (const entry of style) {\n                schemedStyle.push(this._applyColorScheme(\n                    stateful, componentName, entry));\n            }\n        } else {\n            // The style is an object, we create a copy of it to avoid in-place\n            // modification.\n            schemedStyle = {\n                ...style\n            };\n\n            for (const [\n                styleName,\n                styleValue\n            ] of Object.entries(schemedStyle)) {\n                if (typeof styleValue === 'object') {\n                    // The value is another style object, we apply the same\n                    // transformation recursively.\n                    schemedStyle[styleName]\n                        = this._applyColorScheme(\n                            stateful, componentName, styleValue);\n                } else if (typeof styleValue === 'function') {\n                    // The value is a function, which indicates that it's a\n                    // dynamic, schemed color we need to resolve.\n                    // $FlowExpectedError\n                    const value = styleValue();\n\n                    schemedStyle[styleName]\n                        = this._getColor(stateful, componentName, value);\n                }\n\n            }\n        }\n\n        return schemedStyle;\n    }\n\n    /**\n     * Function to get the color value for the provided identifier.\n     *\n     * @param {Object | Function} stateful - An object or function that can be\n     * resolved to Redux state using the {@code toState} function.\n     * @param {string} componentName - The name of the component to get the\n     * color value for.\n     * @param {string} colorDefinition - The string identifier of the color,\n     * e.g. {@code appBackground}.\n     * @returns {string}\n     */\n    _getColor(\n            stateful: Object | Function,\n            componentName: string,\n            colorDefinition: string): string {\n        const colorScheme = toState(stateful)['features/base/color-scheme'];\n\n        return {\n            ...defaultScheme._defaultTheme,\n            ...colorScheme._defaultTheme,\n            ...defaultScheme[componentName],\n            ...colorScheme[componentName]\n        }[colorDefinition];\n    }\n\n}\n\nexport default new ColorSchemeRegistry();\n","import { useCallback, useEffect, useRef } from 'react';\n\nvar getHookDeps = function getHookDeps(opts) {\n  switch (opts.cleanup) {\n    case 'next-effect':\n      return undefined;\n\n    case 'unmount':\n    default:\n      return [];\n  }\n};\n/**\n * Will return request animation frame as a function which will clean itself up.\n */\n\n\nexport var useRequestAnimationFrame = function useRequestAnimationFrame() {\n  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    cleanup: 'unmount'\n  };\n  var frames = useRef([]);\n  useEffect(function () {\n    return function () {\n      if (frames.current.length) {\n        frames.current.forEach(function (id) {\n          return cancelAnimationFrame(id);\n        });\n        frames.current = [];\n      }\n    }; // We dynamically set this so we either clean up on the next effect - or on unmount.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, getHookDeps(opts));\n  return useCallback(function (handler) {\n    var id = requestAnimationFrame(function (time) {\n      frames.current = frames.current.filter(function (frameId) {\n        return frameId !== id;\n      });\n      handler(time);\n    });\n    frames.current.push(id);\n  }, []);\n};\n/**\n * Will return set  timeout as a function which will clean itself up.\n */\n\nexport var useSetTimeout = function useSetTimeout() {\n  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    cleanup: 'unmount'\n  };\n  var timeouts = useRef([]);\n  useEffect(function () {\n    return function () {\n      if (timeouts.current.length) {\n        timeouts.current.forEach(function (id) {\n          return clearTimeout(id);\n        });\n        timeouts.current = [];\n      }\n    }; // We dynamically set this so we either clean up on the next effect - or on unmount.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, getHookDeps(opts));\n  return useCallback(function (handler, timeout) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    var id = setTimeout.apply(void 0, [function () {\n      timeouts.current = timeouts.current.filter(function (timeoutId) {\n        return timeoutId !== id;\n      });\n      handler();\n    }, timeout].concat(args));\n    timeouts.current.push(id);\n  }, []);\n};","import { useEffect, useLayoutEffect as useRealLayoutEffect } from 'react';\n/**\n * Needed to supress the SSR warning when running use layout effect on the server.\n */\n\nexport var useLayoutEffect = typeof window === 'undefined' ? useEffect : useRealLayoutEffect;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport React, { createContext, useContext, useRef, useState } from 'react';\nimport { useLayoutEffect } from '../utils/use-layout-effect';\nimport { useUniqueId } from '../utils/use-unique-id';\nvar StaggeredEntranceContext = /*#__PURE__*/createContext(function () {\n  return {\n    isReady: true,\n    delay: 0,\n    ref: function ref() {}\n  };\n});\nexport var useStaggeredEntrance = function useStaggeredEntrance() {\n  var indentifier = useUniqueId();\n  var context = useContext(StaggeredEntranceContext);\n  return context(indentifier);\n};\n/**\n * For a list of elements that need to animate in,\n * this should be used in conjunction with entering components.\n * This does not need Javascript to execute so it will run immediately for any SSR rendered React apps before the JS has executed.\n *\n * Will dynamically add delay to each child entering component.\n * Unfortunately all entering components _NEED_ to be a direct descendant.\n */\n\nvar StaggeredEntrance = function StaggeredEntrance(_ref) {\n  var children = _ref.children,\n      column = _ref.column,\n      _ref$columns = _ref.columns,\n      columns = _ref$columns === void 0 ? 'responsive' : _ref$columns,\n      _ref$delayStep = _ref.delayStep,\n      delayStep = _ref$delayStep === void 0 ? 50 : _ref$delayStep;\n  var elementRefs = useRef([]);\n  var indexes = [];\n\n  var _useState = useState(function () {\n    if (typeof columns === 'number') {\n      // A hardcoded columns is set so bail out and set it to that!\n      return columns;\n    }\n\n    if (typeof column === 'number') {\n      // A hardcoded column is set so we will set actualColumns to be 1.\n      return 1;\n    } // We are in \"responsive\" mode.\n    // So we will be calculating when the Javascript executes on the client how many columns there will be.\n\n\n    // We are in \"responsive\" mode.\n    // So we will be calculating when the Javascript executes on the client how many columns there will be.\n    return 0;\n  }),\n      _useState2 = _slicedToArray(_useState, 2),\n      actualColumns = _useState2[0],\n      setActualColumns = _useState2[1];\n\n  useLayoutEffect(function () {\n    // We want to only run this code when we are in \"responsive\" mode.\n    // It is assumed we are in responsive mode if `columns` is \"responsive\",\n    // we have children element refs ready to be read (i.e. if there are no children this won't run as well)\n    // and finally that `actualColumns` is `0` - this is because for the first render cycle `actualColumns` will be `0` (set above)\n    // and then after this layout effect runs the value for `actualColumns` will then be calculated and set.\n    if (columns === 'responsive' && elementRefs.current.length && actualColumns === 0) {\n      var currentTop = 0;\n      var numberColumns = 0;\n\n      if (elementRefs.current.length <= 1) {\n        setActualColumns(1);\n        return;\n      } // We set the current top to the first elements.\n      // We will be comparing this and incrementing the column count\n      // until we hit an element that has a different offset top (or we run out of elements).\n\n\n      currentTop = elementRefs.current[0] ? elementRefs.current[0].offsetTop : 0;\n\n      for (var i = 0; i < elementRefs.current.length; i++) {\n        var child = elementRefs.current[i];\n\n        if (!child) {\n          break;\n        }\n\n        if (currentTop === child.offsetTop) {\n          numberColumns += 1;\n\n          if (elementRefs.current.length - 1 === i) {\n            setActualColumns(numberColumns);\n          }\n\n          continue;\n        }\n\n        setActualColumns(numberColumns);\n        break;\n      }\n    } // We only want this effect to run once - on initial mount.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n\n  }, []);\n  return /*#__PURE__*/React.createElement(StaggeredEntranceContext.Provider, {\n    value: function value(id) {\n      if (!indexes.includes(id)) {\n        indexes.push(id);\n      }\n\n      var isReady = actualColumns > 0;\n      var index = indexes.indexOf(id);\n      var currentColumn = column || index % actualColumns;\n      var currentRow = Math.floor(index / actualColumns);\n      var distanceFromTopLeftElement = currentRow + currentColumn; // We don't want loads of elements to have the same staggered delay as it ends up looking slow for users.\n      // To get around that we calculate the logarithm using `distanceFromTopLeftElement` which ends making\n      // elements appear faster the further away from the top left element.\n\n      var delay = Math.ceil(Math.log(distanceFromTopLeftElement + 1) * delayStep * 1.5) || 0;\n      return {\n        delay: delay,\n        isReady: isReady,\n        ref: function ref(element) {\n          return elementRefs.current[index] = element;\n        }\n      };\n    }\n  }, children);\n};\n\nexport default StaggeredEntrance;","import { useRef } from 'react';\n/**\n * Will return a unique id that does not change between renders.\n * Try not use this to render DOM markup (attributes or otherwise)\n * as you will probably not get the same result on the Server vs. Client.\n */\n\nexport function useUniqueId() {\n  var identifier = useRef('');\n\n  if (!identifier.current) {\n    identifier.current = '_' + (Number(String(Math.random()).slice(2)) + Date.now() + Math.round(performance.now())).toString(36);\n  }\n\n  return identifier.current;\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React, { useEffect, useState } from 'react';\nimport { ClassNames, keyframes } from '@emotion/core';\nimport { prefersReducedMotion } from '../utils/accessibility';\nimport { largeDurationMs } from '../utils/durations';\nimport { useSetTimeout } from '../utils/timer-hooks';\nimport { useExitingPersistence } from './exiting-persistence';\nimport { useStaggeredEntrance } from './staggered-entrance';\n\n/**\n * Used to multiply the initial duration for exiting motions.\n */\nvar EXITING_MOTION_MULTIPLIER = 0.5;\n/**\n * This is the base INTERNAL component used for all other entering motions.\n * This does not need Javascript to execute on the client so it will run immediately\n * for any SSR rendered React apps before the JS has executed.\n */\n\nvar EnteringMotion = function EnteringMotion(_ref) {\n  var children = _ref.children,\n      animationTimingFunction = _ref.animationTimingFunction,\n      enteringAnimation = _ref.enteringAnimation,\n      exitingAnimation = _ref.exitingAnimation,\n      isPaused = _ref.isPaused,\n      onFinishMotion = _ref.onFinish,\n      _ref$duration = _ref.duration,\n      duration = _ref$duration === void 0 ? largeDurationMs : _ref$duration;\n  var staggered = useStaggeredEntrance();\n\n  var _useExitingPersistenc = useExitingPersistence(),\n      isExiting = _useExitingPersistenc.isExiting,\n      onExitFinished = _useExitingPersistenc.onFinish,\n      appear = _useExitingPersistenc.appear;\n\n  var setTimeout = useSetTimeout();\n  var paused = isPaused || !staggered.isReady;\n  var delay = isExiting ? 0 : staggered.delay;\n  var state = isExiting ? 'exiting' : 'entering';\n\n  var _useState = useState(appear),\n      _useState2 = _slicedToArray(_useState, 2),\n      hasAnimationStyles = _useState2[0],\n      setHasAnimationStyles = _useState2[1];\n\n  useEffect(function () {\n    // Tracking this to prevent changing state on an unmounted component\n    var isCancelled = false;\n\n    if (paused) {\n      return;\n    } // On initial mount if elements aren't set to animate on appear, we return early and callback\n\n\n    if (!appear) {\n      onFinishMotion && onFinishMotion(state);\n      return;\n    } // Elements may need animation styles back after initial mount (they could animate out)\n\n\n    setHasAnimationStyles(true);\n    setTimeout(function () {\n      if (state === 'exiting') {\n        onExitFinished && onExitFinished();\n      }\n\n      if (!isCancelled) {\n        setHasAnimationStyles(false);\n      }\n\n      onFinishMotion && onFinishMotion(state);\n    }, isExiting ? duration * EXITING_MOTION_MULTIPLIER : duration + delay);\n    return function () {\n      isCancelled = true;\n    }; // We ignore this for onFinishMotion as consumers could potentially inline the function\n    // which would then trigger this effect every re-render.\n    // We want to make it easier for consumers so we go down this path unfortunately.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [onExitFinished, state, isExiting, duration, delay, paused, setTimeout]);\n  return /*#__PURE__*/React.createElement(ClassNames, null, function (_ref2) {\n    var css = _ref2.css;\n    return children({\n      ref: staggered.ref,\n      className: hasAnimationStyles ? css(_objectSpread({\n        animationName: \"\".concat(keyframes(isExiting ? exitingAnimation || enteringAnimation : enteringAnimation)),\n        animationTimingFunction: animationTimingFunction(state),\n        animationDelay: \"\".concat(delay, \"ms\"),\n        animationFillMode: isExiting ? 'forwards' : 'backwards',\n        animationDuration: \"\".concat(isExiting ? duration * EXITING_MOTION_MULTIPLIER : duration, \"ms\"),\n        animationPlayState: paused ? 'paused' : 'running'\n      }, prefersReducedMotion())) : ''\n    }, state);\n  });\n};\n\nexport default EnteringMotion;","\n/**\n * SET_TIMEOUT constant is used to set interval and it is set in\n * the id property of the request.data property. timeMs property must\n * also be set. request.data example:\n *\n * {\n *      id: SET_TIMEOUT,\n *      timeMs: 33\n * }\n */\nexport const SET_TIMEOUT = 1;\n\n/**\n * CLEAR_TIMEOUT constant is used to clear the interval and it is set in\n * the id property of the request.data property.\n *\n * {\n *      id: CLEAR_TIMEOUT\n * }\n */\nexport const CLEAR_TIMEOUT = 2;\n\n/**\n * TIMEOUT_TICK constant is used as response and it is set in the id property.\n *\n * {\n *      id: TIMEOUT_TICK\n * }\n */\nexport const TIMEOUT_TICK = 3;\n\n/**\n * The following code is needed as string to create a URL from a Blob.\n * The URL is then passed to a WebWorker. Reason for this is to enable\n * use of setInterval that is not throttled when tab is inactive.\n */\nconst code = `\n    var timer;\n\n    onmessage = function(request) {\n        switch (request.data.id) {\n        case ${SET_TIMEOUT}: {\n            timer = setTimeout(() => {\n                postMessage({ id: ${TIMEOUT_TICK} });\n            }, request.data.timeMs);\n            break;\n        }\n        case ${CLEAR_TIMEOUT}: {\n            if (timer) {\n                clearTimeout(timer);\n            }\n            break;\n        }\n        }\n    };\n`;\n\nexport const timerWorkerScript = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));\n","// @flow\n\nimport { VIRTUAL_BACKGROUND_TYPE } from '../../virtual-background/constants';\n\nimport {\n    CLEAR_TIMEOUT,\n    TIMEOUT_TICK,\n    SET_TIMEOUT,\n    timerWorkerScript\n} from './TimerWorker';\n\n/**\n * Represents a modified MediaStream that adds effects to video background.\n * <tt>JitsiStreamBackgroundEffect</tt> does the processing of the original\n * video stream.\n */\nexport default class JitsiStreamBackgroundEffect {\n    _model: Object;\n    _options: Object;\n    _stream: Object;\n    _segmentationPixelCount: number;\n    _inputVideoElement: HTMLVideoElement;\n    _onMaskFrameTimer: Function;\n    _maskFrameTimerWorker: Worker;\n    _outputCanvasElement: HTMLCanvasElement;\n    _outputCanvasCtx: Object;\n    _segmentationMaskCtx: Object;\n    _segmentationMask: Object;\n    _segmentationMaskCanvas: Object;\n    _renderMask: Function;\n    _virtualImage: HTMLImageElement;\n    _virtualVideo: HTMLVideoElement;\n    isEnabled: Function;\n    startEffect: Function;\n    stopEffect: Function;\n\n    /**\n     * Represents a modified video MediaStream track.\n     *\n     * @class\n     * @param {Object} model - Meet model.\n     * @param {Object} options - Segmentation dimensions.\n     */\n    constructor(model: Object, options: Object) {\n        this._options = options;\n\n        if (this._options.virtualBackground.backgroundType === VIRTUAL_BACKGROUND_TYPE.IMAGE) {\n            this._virtualImage = document.createElement('img');\n            this._virtualImage.crossOrigin = 'anonymous';\n            this._virtualImage.src = this._options.virtualBackground.virtualSource;\n        }\n        if (this._options.virtualBackground.backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            this._virtualVideo = document.createElement('video');\n            this._virtualVideo.autoplay = true;\n            this._virtualVideo.srcObject = this._options?.virtualBackground?.virtualSource?.stream;\n        }\n        this._model = model;\n        this._segmentationPixelCount = this._options.width * this._options.height;\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onMaskFrameTimer = this._onMaskFrameTimer.bind(this);\n\n        // Workaround for FF issue https://bugzilla.mozilla.org/show_bug.cgi?id=1388974\n        this._outputCanvasElement = document.createElement('canvas');\n        this._outputCanvasElement.getContext('2d');\n        this._inputVideoElement = document.createElement('video');\n    }\n\n    /**\n     * EventHandler onmessage for the maskFrameTimerWorker WebWorker.\n     *\n     * @private\n     * @param {EventHandler} response - The onmessage EventHandler parameter.\n     * @returns {void}\n     */\n    _onMaskFrameTimer(response: Object) {\n        if (response.data.id === TIMEOUT_TICK) {\n            this._renderMask();\n        }\n    }\n\n    /**\n     * Represents the run post processing.\n     *\n     * @returns {void}\n     */\n    runPostProcessing() {\n\n        const track = this._stream.getVideoTracks()[0];\n        const { height, width } = track.getSettings() ?? track.getConstraints();\n        const { backgroundType } = this._options.virtualBackground;\n\n        this._outputCanvasElement.height = height;\n        this._outputCanvasElement.width = width;\n        this._outputCanvasCtx.globalCompositeOperation = 'copy';\n\n        // Draw segmentation mask.\n\n        // Smooth out the edges.\n        this._outputCanvasCtx.filter = backgroundType === VIRTUAL_BACKGROUND_TYPE.IMAGE ? 'blur(4px)' : 'blur(8px)';\n        if (backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            // Save current context before applying transformations.\n            this._outputCanvasCtx.save();\n\n            // Flip the canvas and prevent mirror behaviour.\n            this._outputCanvasCtx.scale(-1, 1);\n            this._outputCanvasCtx.translate(-this._outputCanvasElement.width, 0);\n        }\n        this._outputCanvasCtx.drawImage(\n            this._segmentationMaskCanvas,\n            0,\n            0,\n            this._options.width,\n            this._options.height,\n            0,\n            0,\n            this._inputVideoElement.width,\n            this._inputVideoElement.height\n        );\n        if (backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            this._outputCanvasCtx.restore();\n        }\n        this._outputCanvasCtx.globalCompositeOperation = 'source-in';\n        this._outputCanvasCtx.filter = 'none';\n\n        // Draw the foreground video.\n        if (backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            // Save current context before applying transformations.\n            this._outputCanvasCtx.save();\n\n            // Flip the canvas and prevent mirror behaviour.\n            this._outputCanvasCtx.scale(-1, 1);\n            this._outputCanvasCtx.translate(-this._outputCanvasElement.width, 0);\n        }\n        this._outputCanvasCtx.drawImage(this._inputVideoElement, 0, 0);\n        if (backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            this._outputCanvasCtx.restore();\n        }\n\n        // Draw the background.\n\n        this._outputCanvasCtx.globalCompositeOperation = 'destination-over';\n        if (backgroundType === VIRTUAL_BACKGROUND_TYPE.IMAGE\n            || backgroundType === VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE) {\n            this._outputCanvasCtx.drawImage(\n                backgroundType === VIRTUAL_BACKGROUND_TYPE.IMAGE\n                    ? this._virtualImage : this._virtualVideo,\n                0,\n                0,\n                this._outputCanvasElement.width,\n                this._outputCanvasElement.height\n            );\n        } else {\n            this._outputCanvasCtx.filter = `blur(${this._options.virtualBackground.blurValue}px)`;\n            this._outputCanvasCtx.drawImage(this._inputVideoElement, 0, 0);\n        }\n    }\n\n    /**\n     * Represents the run Tensorflow Interference.\n     *\n     * @returns {void}\n     */\n    runInference() {\n        this._model._runInference();\n        const outputMemoryOffset = this._model._getOutputMemoryOffset() / 4;\n\n        for (let i = 0; i < this._segmentationPixelCount; i++) {\n            const background = this._model.HEAPF32[outputMemoryOffset + (i * 2)];\n            const person = this._model.HEAPF32[outputMemoryOffset + (i * 2) + 1];\n            const shift = Math.max(background, person);\n            const backgroundExp = Math.exp(background - shift);\n            const personExp = Math.exp(person - shift);\n\n            // Sets only the alpha component of each pixel.\n            this._segmentationMask.data[(i * 4) + 3] = (255 * personExp) / (backgroundExp + personExp);\n        }\n        this._segmentationMaskCtx.putImageData(this._segmentationMask, 0, 0);\n    }\n\n    /**\n     * Loop function to render the background mask.\n     *\n     * @private\n     * @returns {void}\n     */\n    _renderMask() {\n        this.resizeSource();\n        this.runInference();\n        this.runPostProcessing();\n\n        this._maskFrameTimerWorker.postMessage({\n            id: SET_TIMEOUT,\n            timeMs: 1000 / 30\n        });\n    }\n\n    /**\n     * Represents the resize source process.\n     *\n     * @returns {void}\n     */\n    resizeSource() {\n        this._segmentationMaskCtx.drawImage(\n            this._inputVideoElement,\n            0,\n            0,\n            this._inputVideoElement.width,\n            this._inputVideoElement.height,\n            0,\n            0,\n            this._options.width,\n            this._options.height\n        );\n\n        const imageData = this._segmentationMaskCtx.getImageData(\n            0,\n            0,\n            this._options.width,\n            this._options.height\n        );\n        const inputMemoryOffset = this._model._getInputMemoryOffset() / 4;\n\n        for (let i = 0; i < this._segmentationPixelCount; i++) {\n            this._model.HEAPF32[inputMemoryOffset + (i * 3)] = imageData.data[i * 4] / 255;\n            this._model.HEAPF32[inputMemoryOffset + (i * 3) + 1] = imageData.data[(i * 4) + 1] / 255;\n            this._model.HEAPF32[inputMemoryOffset + (i * 3) + 2] = imageData.data[(i * 4) + 2] / 255;\n        }\n    }\n\n    /**\n     * Checks if the local track supports this effect.\n     *\n     * @param {JitsiLocalTrack} jitsiLocalTrack - Track to apply effect.\n     * @returns {boolean} - Returns true if this effect can run on the specified track\n     * false otherwise.\n     */\n    isEnabled(jitsiLocalTrack: Object) {\n        return jitsiLocalTrack.isVideoTrack() && jitsiLocalTrack.videoType === 'camera';\n    }\n\n    /**\n     * Starts loop to capture video frame and render the segmentation mask.\n     *\n     * @param {MediaStream} stream - Stream to be used for processing.\n     * @returns {MediaStream} - The stream with the applied effect.\n     */\n    startEffect(stream: MediaStream) {\n        this._stream = stream;\n        this._maskFrameTimerWorker = new Worker(timerWorkerScript, { name: 'Blur effect worker' });\n        this._maskFrameTimerWorker.onmessage = this._onMaskFrameTimer;\n        const firstVideoTrack = this._stream.getVideoTracks()[0];\n        const { height, frameRate, width }\n            = firstVideoTrack.getSettings ? firstVideoTrack.getSettings() : firstVideoTrack.getConstraints();\n\n        this._segmentationMask = new ImageData(this._options.width, this._options.height);\n        this._segmentationMaskCanvas = document.createElement('canvas');\n        this._segmentationMaskCanvas.width = this._options.width;\n        this._segmentationMaskCanvas.height = this._options.height;\n        this._segmentationMaskCtx = this._segmentationMaskCanvas.getContext('2d');\n\n        this._outputCanvasElement.width = parseInt(width, 10);\n        this._outputCanvasElement.height = parseInt(height, 10);\n        this._outputCanvasCtx = this._outputCanvasElement.getContext('2d');\n        this._inputVideoElement.width = parseInt(width, 10);\n        this._inputVideoElement.height = parseInt(height, 10);\n        this._inputVideoElement.autoplay = true;\n        this._inputVideoElement.srcObject = this._stream;\n        this._inputVideoElement.onloadeddata = () => {\n            this._maskFrameTimerWorker.postMessage({\n                id: SET_TIMEOUT,\n                timeMs: 1000 / 30\n            });\n        };\n\n        return this._outputCanvasElement.captureStream(parseInt(frameRate, 10));\n    }\n\n    /**\n     * Stops the capture and render loop.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._maskFrameTimerWorker.postMessage({\n            id: CLEAR_TIMEOUT\n        });\n\n        this._maskFrameTimerWorker.terminate();\n    }\n}\n","// @flow\n\nimport { showWarningNotification } from '../../notifications/actions';\nimport logger from '../../virtual-background/logger';\n\nimport JitsiStreamBackgroundEffect from './JitsiStreamBackgroundEffect';\nimport createTFLiteModule from './vendor/tflite/tflite';\nimport createTFLiteSIMDModule from './vendor/tflite/tflite-simd';\nconst models = {\n    model96: 'libs/segm_lite_v681.tflite',\n    model144: 'libs/segm_full_v679.tflite'\n};\n\nconst segmentationDimensions = {\n    model96: {\n        height: 96,\n        width: 160\n    },\n    model144: {\n        height: 144,\n        width: 256\n    }\n};\n\n/**\n * Creates a new instance of JitsiStreamBackgroundEffect. This loads the Meet background model that is used to\n * extract person segmentation.\n *\n * @param {Object} virtualBackground - The virtual object that contains the background image source and\n * the isVirtualBackground flag that indicates if virtual image is activated.\n * @param {Function} dispatch - The Redux dispatch function.\n * @returns {Promise<JitsiStreamBackgroundEffect>}\n */\nexport async function createVirtualBackgroundEffect(virtualBackground: Object, dispatch: Function) {\n    if (!MediaStreamTrack.prototype.getSettings && !MediaStreamTrack.prototype.getConstraints) {\n        throw new Error('JitsiStreamBackgroundEffect not supported!');\n    }\n    let tflite;\n    let wasmCheck;\n\n    // Checks if WebAssembly feature is supported or enabled by/in the browser.\n    // Conditional import of wasm-check package is done to prevent\n    // the browser from crashing when the user opens the app.\n\n    try {\n        wasmCheck = require('wasm-check');\n        if (wasmCheck?.feature?.simd) {\n            tflite = await createTFLiteSIMDModule();\n        } else {\n            tflite = await createTFLiteModule();\n        }\n    } catch (err) {\n        logger.error('Looks like WebAssembly is disabled or not supported on this browser');\n        dispatch(showWarningNotification({\n            titleKey: 'virtualBackground.webAssemblyWarning',\n            description: 'WebAssembly disabled or not supported by this browser'\n        }));\n\n        return;\n\n    }\n\n    const modelBufferOffset = tflite._getModelBufferMemoryOffset();\n    const modelResponse = await fetch(wasmCheck.feature.simd ? models.model144 : models.model96);\n\n    if (!modelResponse.ok) {\n        throw new Error('Failed to download tflite model!');\n    }\n\n    const model = await modelResponse.arrayBuffer();\n\n    tflite.HEAPU8.set(new Uint8Array(model), modelBufferOffset);\n\n    tflite._loadModel(model.byteLength);\n\n    const options = {\n        ...wasmCheck.feature.simd ? segmentationDimensions.model144 : segmentationDimensions.model96,\n        virtualBackground\n    };\n\n    return new JitsiStreamBackgroundEffect(tflite, options);\n}\n","/**\n * Hide these emails when trying to join a lobby\n */\nexport const HIDDEN_EMAILS = [ 'inbound-sip-jibri@jitsi.net', 'outbound-sip-jibri@jitsi.net' ];\n","// @flow\n\nimport React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\ntype Props = {\n\n    /**\n     * Action to be dispatched on click.\n     */\n    action: Function,\n\n    /**\n     * The text of the button.\n     */\n    children: React$Node,\n\n    /**\n     * CSS class of the button.\n     */\n    className: string,\n\n    /**\n     * The `data-testid` used for the button.\n     */\n    testId: string,\n\n    /**\n     * The participant.\n     */\n    participant: Object\n}\n\n/**\n * Component used to display an approve/reject button.\n *\n * @returns {React$Element<'button'>}\n */\nexport default function({ action, children, className, testId, participant }: Props) {\n    const dispatch = useDispatch();\n    const onClick = useCallback(() => dispatch(action(participant.id)), [ dispatch, participant ]);\n\n    return (\n        <button\n            className = { className }\n            data-testid = { testId }\n            onClick = { onClick }\n            type = 'button'>\n            { children }\n        </button>\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport { HIDDEN_EMAILS } from '../../../lobby/constants';\n\nimport NotificationButton from './NotificationButton';\n\ntype Props = {\n\n    /**\n     * Text used for button which triggeres `onApprove` action.\n     */\n    approveButtonText: string,\n\n    /**\n     * Callback used when clicking the ok/approve button.\n     */\n    onApprove: Function,\n\n    /**\n     * Callback used when clicking the reject button.\n     */\n    onReject: Function,\n\n    /**\n     * Array of participants to be displayed.\n     */\n    participants: Array<Object>,\n\n    /**\n     * Text for button which triggeres the `reject` action.\n     */\n    rejectButtonText: string,\n\n\n    /**\n     * String prefix used for button `test-id`.\n     */\n     testIdPrefix: string\n}\n\n/**\n * Component used to display a list of notifications based on a list of participants.\n * This is visible only to moderators.\n *\n * @returns {React$Element<'div'> | null}\n */\nexport default function({\n    approveButtonText,\n    onApprove,\n    onReject,\n    participants,\n    testIdPrefix,\n    rejectButtonText\n}: Props): React$Element<'ul'> {\n    return (\n        <ul className = 'knocking-participants-container'>\n            { participants.map(p => (\n                <li\n                    className = 'knocking-participant'\n                    key = { p.id }>\n                    <Avatar\n                        displayName = { p.name }\n                        size = { 48 }\n                        testId = { `${testIdPrefix}.avatar` }\n                        url = { p.loadableAvatarUrl } />\n\n                    <div className = 'details'>\n                        <span data-testid = { `${testIdPrefix}.name` }>\n                            { p.name }\n                        </span>\n                        { p.email && !HIDDEN_EMAILS.includes(p.email) && (\n                            <span data-testid = { `${testIdPrefix}.email` }>\n                                { p.email }\n                            </span>\n                        ) }\n                    </div>\n                    { <NotificationButton\n                        action = { onApprove }\n                        className = 'primary'\n                        participant = { p }\n                        testId = { `${testIdPrefix}.allow` }>\n                        { approveButtonText }\n                    </NotificationButton> }\n                    { <NotificationButton\n                        action = { onReject }\n                        className = 'borderLess'\n                        participant = { p }\n                        testId = { `${testIdPrefix}.reject` }>\n                        { rejectButtonText }\n                    </NotificationButton>}\n                </li>\n            )) }\n        </ul>);\n}\n","// @flow\n\nimport { openDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { IconVirtualBackground } from '../../base/icons';\nimport { connect } from '../../base/redux';\nimport { AbstractButton } from '../../base/toolbox/components';\nimport type { AbstractButtonProps } from '../../base/toolbox/components';\n\nimport { VirtualBackgroundDialog } from './index';\n\n/**\n * The type of the React {@code Component} props of {@link VideoBackgroundButton}.\n */\ntype Props = AbstractButtonProps & {\n\n    /**\n     * True if the video background is blurred or false if it is not.\n     */\n    _isBackgroundEnabled: boolean,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * An abstract implementation of a button that toggles the video background dialog.\n */\nclass VideoBackgroundButton extends AbstractButton<Props, *> {\n    accessibilityLabel = 'toolbar.accessibilityLabel.selectBackground';\n    icon = IconVirtualBackground;\n    label = 'toolbar.selectBackground';\n    tooltip = 'toolbar.selectBackground';\n\n    /**\n     * Handles clicking / pressing the button, and toggles the virtual background dialog\n     * state accordingly.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _handleClick() {\n        const { dispatch } = this.props;\n\n        dispatch(openDialog(VirtualBackgroundDialog));\n    }\n\n    /**\n     * Returns {@code boolean} value indicating if the background effect is\n     * enabled or not.\n     *\n     * @protected\n     * @returns {boolean}\n     */\n    _isToggled() {\n        return this.props._isBackgroundEnabled;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for the\n * {@code VideoBackgroundButton} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _isBackgroundEnabled: boolean\n * }}\n */\nfunction _mapStateToProps(state): Object {\n\n    return {\n        _isBackgroundEnabled: Boolean(state['features/virtual-background'].backgroundEffectEnabled)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(VideoBackgroundButton));\n","function abort(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\n\nvar tabKeyCode = 9;\n\nfunction onKey(event) {\n  // Allowing tab so that a user can move focus away\n  if (event.keyCode === tabKeyCode) {\n    return;\n  }\n\n  abort(event);\n}\n\nvar block = {\n  onMouseDownCapture: abort,\n  onMouseUpCapture: abort,\n  // because we have tabIndex = -1 when disabled,\n  // keyboard events can only occur when there is an overlay\n  onKeyDownCapture: onKey,\n  onKeyUpCapture: onKey,\n  onTouchStartCapture: abort,\n  onTouchEndCapture: abort,\n  onPointerDownCapture: abort,\n  onPointerUpCapture: abort,\n  onClickCapture: abort,\n  // Just smashing the existing onClick for good measure\n  onClick: abort\n};\nvar doNotBlock = {};\nexport default function blockEvents(_ref) {\n  var isInteractive = _ref.isInteractive;\n  return isInteractive ? doNotBlock : block;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\n/** @jsx jsx */\nimport React, { useCallback, useEffect, useRef } from 'react';\nimport { jsx } from '@emotion/core';\nimport { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport blockEvents from './block-events';\nimport { getContentStyle, getFadingCss, getIconStyle, overlayCss } from './css';\nimport useAutoFocus from './use-auto-focus';\n\nfunction noop() {} // Disabled buttons will still publish events for nested elements in webkit.\n// We are disabling pointer events on child elements so that\n// the button will always be the target of events\n// Note: firefox does not have this behaviour for child elements\n\n\nvar noPointerEventsOnChildrenCss = {\n  '> *': {\n    pointerEvents: 'none'\n  }\n};\nexport default /*#__PURE__*/React.forwardRef(function ButtonBase(props, ref) {\n  var _props$appearance = props.appearance,\n      appearance = _props$appearance === void 0 ? 'default' : _props$appearance,\n      buttonCss = props.buttonCss,\n      _props$spacing = props.spacing,\n      spacing = _props$spacing === void 0 ? 'default' : _props$spacing,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$isDisabled = props.isDisabled,\n      isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled,\n      _props$shouldFitConta = props.shouldFitContainer,\n      shouldFitContainer = _props$shouldFitConta === void 0 ? false : _props$shouldFitConta,\n      _props$isSelected = props.isSelected,\n      isSelected = _props$isSelected === void 0 ? false : _props$isSelected,\n      iconBefore = props.iconBefore,\n      iconAfter = props.iconAfter,\n      children = props.children,\n      className = props.className,\n      href = props.href,\n      overlay = props.overlay,\n      _props$tabIndex = props.tabIndex,\n      tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex,\n      _props$type = props.type,\n      type = _props$type === void 0 ? !href ? 'button' : undefined : _props$type,\n      _props$onMouseDown = props.onMouseDown,\n      providedOnMouseDown = _props$onMouseDown === void 0 ? noop : _props$onMouseDown,\n      _props$onClick = props.onClick,\n      providedOnClick = _props$onClick === void 0 ? noop : _props$onClick,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? href ? 'a' : 'button' : _props$component,\n      testId = props.testId,\n      analyticsContext = props.analyticsContext,\n      rest = _objectWithoutProperties(props, [\"appearance\", \"buttonCss\", \"spacing\", \"autoFocus\", \"isDisabled\", \"shouldFitContainer\", \"isSelected\", \"iconBefore\", \"iconAfter\", \"children\", \"className\", \"href\", \"overlay\", \"tabIndex\", \"type\", \"onMouseDown\", \"onClick\", \"component\", \"testId\", \"analyticsContext\"]);\n\n  var ourRef = useRef();\n  var setRef = useCallback(function (node) {\n    ourRef.current = node;\n\n    if (ref == null) {\n      return;\n    }\n\n    if (typeof ref === 'function') {\n      ref(node);\n      return;\n    } // @ts-ignore\n\n\n    ref.current = node;\n  }, [ourRef, ref]); // Cross browser auto focusing is pretty broken, so we are doing it ourselves\n\n  useAutoFocus(ourRef, autoFocus);\n  var onClick = usePlatformLeafEventHandler({\n    fn: providedOnClick,\n    action: 'clicked',\n    componentName: 'button',\n    packageName: packageName,\n    packageVersion: packageVersion,\n    analyticsData: analyticsContext\n  }); // Button currently calls preventDefault, which is not standard button behaviour\n\n  var onMouseDown = useCallback(function (event) {\n    event.preventDefault();\n    providedOnMouseDown(event);\n  }, [providedOnMouseDown]); // Lose focus when becoming disabled (standard button behaviour)\n\n  useEffect(function () {\n    var el = ourRef.current;\n\n    if (isDisabled && el && el === document.activeElement) {\n      el.blur();\n    }\n  }, [isDisabled]); // we are 'disabling' input with a button when there is an overlay\n\n  var hasOverlay = Boolean(overlay);\n  var fadeCss = getFadingCss({\n    hasOverlay: hasOverlay\n  });\n  var isInteractive = !isDisabled && !hasOverlay;\n  return jsx(Component, _extends({}, rest, {\n    css: [buttonCss, isInteractive ? null : noPointerEventsOnChildrenCss],\n    className: className,\n    ref: setRef,\n    onClick: onClick,\n    onMouseDown: onMouseDown,\n    disabled: isDisabled,\n    href: isInteractive ? href : undefined // using undefined so that the property doesn't exist when false\n    ,\n    \"data-has-overlay\": hasOverlay ? true : undefined,\n    \"data-testid\": testId,\n    type: type // Adding a tab index so element is always focusable, even when not a <button> or <a>\n    // Disabling focus via keyboard navigation when disabled\n    // as this is standard button behaviour\n    ,\n    tabIndex: isDisabled ? -1 : tabIndex\n  }, blockEvents({\n    isInteractive: isInteractive\n  })), iconBefore ? jsx(\"span\", {\n    css: [fadeCss, getIconStyle({\n      spacing: spacing\n    })]\n  }, iconBefore) : null, children ? jsx(\"span\", {\n    css: [fadeCss, getContentStyle({\n      spacing: spacing\n    })]\n  }, children) : null, iconAfter ? jsx(\"span\", {\n    css: [fadeCss, getIconStyle({\n      spacing: spacing\n    })]\n  }, iconAfter) : null, overlay ? jsx(\"span\", {\n    css: overlayCss\n  }, overlay) : null);\n});","import { useEffect, useState } from 'react'; // Autofocus is only applicable to initial load\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/autofocus\n\nexport default function useAutoFocus(ref, autoFocus) {\n  var initialAutoFocus = useState(autoFocus)[0];\n  useEffect(function onMount() {\n    if (initialAutoFocus && ref.current) {\n      ref.current.focus();\n    }\n  }, [initialAutoFocus, ref]);\n}","import { SET_CONFIG } from '../base/config';\nimport { PersistenceRegistry, ReducerRegistry, set } from '../base/redux';\n\nimport { SET_MAX_RECEIVER_VIDEO_QUALITY, SET_PREFERRED_VIDEO_QUALITY } from './actionTypes';\nimport { VIDEO_QUALITY_LEVELS } from './constants';\nimport { validateMinHeightForQualityLvl } from './functions';\nimport logger from './logger';\n\nconst DEFAULT_STATE = {\n    maxReceiverVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA,\n    minHeightForQualityLvl: new Map(),\n    preferredVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA\n};\n\nDEFAULT_STATE.minHeightForQualityLvl.set(360, VIDEO_QUALITY_LEVELS.STANDARD);\nDEFAULT_STATE.minHeightForQualityLvl.set(720, VIDEO_QUALITY_LEVELS.HIGH);\n\n\n// When the persisted state is initialized the current state (for example the default state) is erased.\n// In order to workaround this issue we need additional state for the persisted properties.\nPersistenceRegistry.register('features/video-quality-persistent-storage');\n\nReducerRegistry.register('features/video-quality-persistent-storage', (state = {}, action) => {\n    switch (action.type) {\n    case SET_PREFERRED_VIDEO_QUALITY: {\n        const { preferredVideoQuality } = action;\n\n        return {\n            ...state,\n            persistedPrefferedVideoQuality: preferredVideoQuality\n        };\n    }\n    }\n\n    return state;\n});\n\nReducerRegistry.register('features/video-quality', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_CONFIG:\n        return _setConfig(state, action);\n    case SET_MAX_RECEIVER_VIDEO_QUALITY:\n        return set(\n            state,\n            'maxReceiverVideoQuality',\n            action.maxReceiverVideoQuality);\n    case SET_PREFERRED_VIDEO_QUALITY: {\n        const { preferredVideoQuality } = action;\n\n        return {\n            ...state,\n            preferredVideoQuality\n        };\n    }\n    }\n\n    return state;\n});\n\n/**\n * Extracts the height to quality level mapping from the new config.\n *\n * @param {Object} state - The Redux state of feature base/lastn.\n * @param {Action} action - The Redux action SET_CONFIG to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _setConfig(state, { config }) {\n    const configuredMap = config?.videoQuality?.minHeightForQualityLvl;\n    const convertedMap = validateMinHeightForQualityLvl(configuredMap);\n\n    if (configuredMap && !convertedMap) {\n        logger.error('Invalid config value videoQuality.minHeightForQualityLvl');\n    }\n\n    return convertedMap ? set(state, 'minHeightForQualityLvl', convertedMap) : state;\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.Dropbox=t()}(this,function(){\"use strict\";function e(){return\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope||\"undefined\"==typeof module||\"undefined\"!=typeof window}function t(e){return\"https://\"+e+\".dropboxapi.com/2/\"}function r(e){return JSON.stringify(e).replace(/[\\u007f-\\uffff]/g,function(e){return\"\\\\u\"+(\"000\"+e.charCodeAt(0).toString(16)).slice(-4)})}function n(e){var t=e.length;if(t%4>0)throw Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===e[t-2]?2:\"=\"===e[t-1]?1:0}var i={};i.authTokenFromOauth1=function(e){return this.request(\"auth/token/from_oauth1\",e,\"app\",\"api\",\"rpc\")},i.authTokenRevoke=function(e){return this.request(\"auth/token/revoke\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesAdd=function(e){return this.request(\"file_properties/properties/add\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesOverwrite=function(e){return this.request(\"file_properties/properties/overwrite\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesRemove=function(e){return this.request(\"file_properties/properties/remove\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesSearch=function(e){return this.request(\"file_properties/properties/search\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesSearchContinue=function(e){return this.request(\"file_properties/properties/search/continue\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesPropertiesUpdate=function(e){return this.request(\"file_properties/properties/update\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesAddForTeam=function(e){return this.request(\"file_properties/templates/add_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesAddForUser=function(e){return this.request(\"file_properties/templates/add_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesGetForTeam=function(e){return this.request(\"file_properties/templates/get_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesGetForUser=function(e){return this.request(\"file_properties/templates/get_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesListForTeam=function(e){return this.request(\"file_properties/templates/list_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesListForUser=function(e){return this.request(\"file_properties/templates/list_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesRemoveForTeam=function(e){return this.request(\"file_properties/templates/remove_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesRemoveForUser=function(e){return this.request(\"file_properties/templates/remove_for_user\",e,\"user\",\"api\",\"rpc\")},i.filePropertiesTemplatesUpdateForTeam=function(e){return this.request(\"file_properties/templates/update_for_team\",e,\"team\",\"api\",\"rpc\")},i.filePropertiesTemplatesUpdateForUser=function(e){return this.request(\"file_properties/templates/update_for_user\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsCreate=function(e){return this.request(\"file_requests/create\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsGet=function(e){return this.request(\"file_requests/get\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsList=function(e){return this.request(\"file_requests/list\",e,\"user\",\"api\",\"rpc\")},i.fileRequestsUpdate=function(e){return this.request(\"file_requests/update\",e,\"user\",\"api\",\"rpc\")},i.filesAlphaGetMetadata=function(e){return this.request(\"files/alpha/get_metadata\",e,\"user\",\"api\",\"rpc\")},i.filesAlphaUpload=function(e){return this.request(\"files/alpha/upload\",e,\"user\",\"content\",\"upload\")},i.filesCopy=function(e){return this.request(\"files/copy\",e,\"user\",\"api\",\"rpc\")},i.filesCopyBatch=function(e){return this.request(\"files/copy_batch\",e,\"user\",\"api\",\"rpc\")},i.filesCopyBatchCheck=function(e){return this.request(\"files/copy_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesCopyReferenceGet=function(e){return this.request(\"files/copy_reference/get\",e,\"user\",\"api\",\"rpc\")},i.filesCopyReferenceSave=function(e){return this.request(\"files/copy_reference/save\",e,\"user\",\"api\",\"rpc\")},i.filesCopyV2=function(e){return this.request(\"files/copy_v2\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolder=function(e){return this.request(\"files/create_folder\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderBatch=function(e){return this.request(\"files/create_folder_batch\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderBatchCheck=function(e){return this.request(\"files/create_folder_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesCreateFolderV2=function(e){return this.request(\"files/create_folder_v2\",e,\"user\",\"api\",\"rpc\")},i.filesDelete=function(e){return this.request(\"files/delete\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteBatch=function(e){return this.request(\"files/delete_batch\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteBatchCheck=function(e){return this.request(\"files/delete_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesDeleteV2=function(e){return this.request(\"files/delete_v2\",e,\"user\",\"api\",\"rpc\")},i.filesDownload=function(e){return this.request(\"files/download\",e,\"user\",\"content\",\"download\")},i.filesDownloadZip=function(e){return this.request(\"files/download_zip\",e,\"user\",\"content\",\"download\")},i.filesGetMetadata=function(e){return this.request(\"files/get_metadata\",e,\"user\",\"api\",\"rpc\")},i.filesGetPreview=function(e){return this.request(\"files/get_preview\",e,\"user\",\"content\",\"download\")},i.filesGetTemporaryLink=function(e){return this.request(\"files/get_temporary_link\",e,\"user\",\"api\",\"rpc\")},i.filesGetThumbnail=function(e){return this.request(\"files/get_thumbnail\",e,\"user\",\"content\",\"download\")},i.filesGetThumbnailBatch=function(e){return this.request(\"files/get_thumbnail_batch\",e,\"user\",\"content\",\"rpc\")},i.filesListFolder=function(e){return this.request(\"files/list_folder\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderContinue=function(e){return this.request(\"files/list_folder/continue\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderGetLatestCursor=function(e){return this.request(\"files/list_folder/get_latest_cursor\",e,\"user\",\"api\",\"rpc\")},i.filesListFolderLongpoll=function(e){return this.request(\"files/list_folder/longpoll\",e,\"noauth\",\"notify\",\"rpc\")},i.filesListRevisions=function(e){return this.request(\"files/list_revisions\",e,\"user\",\"api\",\"rpc\")},i.filesMove=function(e){return this.request(\"files/move\",e,\"user\",\"api\",\"rpc\")},i.filesMoveBatch=function(e){return this.request(\"files/move_batch\",e,\"user\",\"api\",\"rpc\")},i.filesMoveBatchCheck=function(e){return this.request(\"files/move_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesMoveV2=function(e){return this.request(\"files/move_v2\",e,\"user\",\"api\",\"rpc\")},i.filesPermanentlyDelete=function(e){return this.request(\"files/permanently_delete\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesAdd=function(e){return this.request(\"files/properties/add\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesOverwrite=function(e){return this.request(\"files/properties/overwrite\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesRemove=function(e){return this.request(\"files/properties/remove\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesTemplateGet=function(e){return this.request(\"files/properties/template/get\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesTemplateList=function(e){return this.request(\"files/properties/template/list\",e,\"user\",\"api\",\"rpc\")},i.filesPropertiesUpdate=function(e){return this.request(\"files/properties/update\",e,\"user\",\"api\",\"rpc\")},i.filesRestore=function(e){return this.request(\"files/restore\",e,\"user\",\"api\",\"rpc\")},i.filesSaveUrl=function(e){return this.request(\"files/save_url\",e,\"user\",\"api\",\"rpc\")},i.filesSaveUrlCheckJobStatus=function(e){return this.request(\"files/save_url/check_job_status\",e,\"user\",\"api\",\"rpc\")},i.filesSearch=function(e){return this.request(\"files/search\",e,\"user\",\"api\",\"rpc\")},i.filesUpload=function(e){return this.request(\"files/upload\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionAppend=function(e){return this.request(\"files/upload_session/append\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionAppendV2=function(e){return this.request(\"files/upload_session/append_v2\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionFinish=function(e){return this.request(\"files/upload_session/finish\",e,\"user\",\"content\",\"upload\")},i.filesUploadSessionFinishBatch=function(e){return this.request(\"files/upload_session/finish_batch\",e,\"user\",\"api\",\"rpc\")},i.filesUploadSessionFinishBatchCheck=function(e){return this.request(\"files/upload_session/finish_batch/check\",e,\"user\",\"api\",\"rpc\")},i.filesUploadSessionStart=function(e){return this.request(\"files/upload_session/start\",e,\"user\",\"content\",\"upload\")},i.paperDocsArchive=function(e){return this.request(\"paper/docs/archive\",e,\"user\",\"api\",\"rpc\")},i.paperDocsCreate=function(e){return this.request(\"paper/docs/create\",e,\"user\",\"api\",\"upload\")},i.paperDocsDownload=function(e){return this.request(\"paper/docs/download\",e,\"user\",\"api\",\"download\")},i.paperDocsFolderUsersList=function(e){return this.request(\"paper/docs/folder_users/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsFolderUsersListContinue=function(e){return this.request(\"paper/docs/folder_users/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsGetFolderInfo=function(e){return this.request(\"paper/docs/get_folder_info\",e,\"user\",\"api\",\"rpc\")},i.paperDocsList=function(e){return this.request(\"paper/docs/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsListContinue=function(e){return this.request(\"paper/docs/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsPermanentlyDelete=function(e){return this.request(\"paper/docs/permanently_delete\",e,\"user\",\"api\",\"rpc\")},i.paperDocsSharingPolicyGet=function(e){return this.request(\"paper/docs/sharing_policy/get\",e,\"user\",\"api\",\"rpc\")},i.paperDocsSharingPolicySet=function(e){return this.request(\"paper/docs/sharing_policy/set\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUpdate=function(e){return this.request(\"paper/docs/update\",e,\"user\",\"api\",\"upload\")},i.paperDocsUsersAdd=function(e){return this.request(\"paper/docs/users/add\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersList=function(e){return this.request(\"paper/docs/users/list\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersListContinue=function(e){return this.request(\"paper/docs/users/list/continue\",e,\"user\",\"api\",\"rpc\")},i.paperDocsUsersRemove=function(e){return this.request(\"paper/docs/users/remove\",e,\"user\",\"api\",\"rpc\")},i.sharingAddFileMember=function(e){return this.request(\"sharing/add_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingAddFolderMember=function(e){return this.request(\"sharing/add_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingChangeFileMemberAccess=function(e){return this.request(\"sharing/change_file_member_access\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckJobStatus=function(e){return this.request(\"sharing/check_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckRemoveMemberJobStatus=function(e){return this.request(\"sharing/check_remove_member_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCheckShareJobStatus=function(e){return this.request(\"sharing/check_share_job_status\",e,\"user\",\"api\",\"rpc\")},i.sharingCreateSharedLink=function(e){return this.request(\"sharing/create_shared_link\",e,\"user\",\"api\",\"rpc\")},i.sharingCreateSharedLinkWithSettings=function(e){return this.request(\"sharing/create_shared_link_with_settings\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFileMetadata=function(e){return this.request(\"sharing/get_file_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFileMetadataBatch=function(e){return this.request(\"sharing/get_file_metadata/batch\",e,\"user\",\"api\",\"rpc\")},i.sharingGetFolderMetadata=function(e){return this.request(\"sharing/get_folder_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetSharedLinkFile=function(e){return this.request(\"sharing/get_shared_link_file\",e,\"user\",\"content\",\"download\")},i.sharingGetSharedLinkMetadata=function(e){return this.request(\"sharing/get_shared_link_metadata\",e,\"user\",\"api\",\"rpc\")},i.sharingGetSharedLinks=function(e){return this.request(\"sharing/get_shared_links\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembers=function(e){return this.request(\"sharing/list_file_members\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembersBatch=function(e){return this.request(\"sharing/list_file_members/batch\",e,\"user\",\"api\",\"rpc\")},i.sharingListFileMembersContinue=function(e){return this.request(\"sharing/list_file_members/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolderMembers=function(e){return this.request(\"sharing/list_folder_members\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolderMembersContinue=function(e){return this.request(\"sharing/list_folder_members/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListFolders=function(e){return this.request(\"sharing/list_folders\",e,\"user\",\"api\",\"rpc\")},i.sharingListFoldersContinue=function(e){return this.request(\"sharing/list_folders/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListMountableFolders=function(e){return this.request(\"sharing/list_mountable_folders\",e,\"user\",\"api\",\"rpc\")},i.sharingListMountableFoldersContinue=function(e){return this.request(\"sharing/list_mountable_folders/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListReceivedFiles=function(e){return this.request(\"sharing/list_received_files\",e,\"user\",\"api\",\"rpc\")},i.sharingListReceivedFilesContinue=function(e){return this.request(\"sharing/list_received_files/continue\",e,\"user\",\"api\",\"rpc\")},i.sharingListSharedLinks=function(e){return this.request(\"sharing/list_shared_links\",e,\"user\",\"api\",\"rpc\")},i.sharingModifySharedLinkSettings=function(e){return this.request(\"sharing/modify_shared_link_settings\",e,\"user\",\"api\",\"rpc\")},i.sharingMountFolder=function(e){return this.request(\"sharing/mount_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingRelinquishFileMembership=function(e){return this.request(\"sharing/relinquish_file_membership\",e,\"user\",\"api\",\"rpc\")},i.sharingRelinquishFolderMembership=function(e){return this.request(\"sharing/relinquish_folder_membership\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFileMember=function(e){return this.request(\"sharing/remove_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFileMember2=function(e){return this.request(\"sharing/remove_file_member_2\",e,\"user\",\"api\",\"rpc\")},i.sharingRemoveFolderMember=function(e){return this.request(\"sharing/remove_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingRevokeSharedLink=function(e){return this.request(\"sharing/revoke_shared_link\",e,\"user\",\"api\",\"rpc\")},i.sharingSetAccessInheritance=function(e){return this.request(\"sharing/set_access_inheritance\",e,\"user\",\"api\",\"rpc\")},i.sharingShareFolder=function(e){return this.request(\"sharing/share_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingTransferFolder=function(e){return this.request(\"sharing/transfer_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUnmountFolder=function(e){return this.request(\"sharing/unmount_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUnshareFile=function(e){return this.request(\"sharing/unshare_file\",e,\"user\",\"api\",\"rpc\")},i.sharingUnshareFolder=function(e){return this.request(\"sharing/unshare_folder\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFileMember=function(e){return this.request(\"sharing/update_file_member\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFolderMember=function(e){return this.request(\"sharing/update_folder_member\",e,\"user\",\"api\",\"rpc\")},i.sharingUpdateFolderPolicy=function(e){return this.request(\"sharing/update_folder_policy\",e,\"user\",\"api\",\"rpc\")},i.teamLogGetEvents=function(e){return this.request(\"team_log/get_events\",e,\"team\",\"api\",\"rpc\")},i.teamLogGetEventsContinue=function(e){return this.request(\"team_log/get_events/continue\",e,\"team\",\"api\",\"rpc\")},i.usersGetAccount=function(e){return this.request(\"users/get_account\",e,\"user\",\"api\",\"rpc\")},i.usersGetAccountBatch=function(e){return this.request(\"users/get_account_batch\",e,\"user\",\"api\",\"rpc\")},i.usersGetCurrentAccount=function(e){return this.request(\"users/get_current_account\",e,\"user\",\"api\",\"rpc\")},i.usersGetSpaceUsage=function(e){return this.request(\"users/get_space_usage\",e,\"user\",\"api\",\"rpc\")};for(var s=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},o=function(){function e(e,t){for(var r=0;t.length>r;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),u=function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},a=function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,i=!1,s=void 0;try{for(var o,u=e[Symbol.iterator]();!(n=(o=u.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{!n&&u.return&&u.return()}finally{if(i)throw s}}return r}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),p=function(e){return 3*e.length/4-n(e)},f=function(e){var t,r,i,s,o,u=e.length;s=n(e),o=new d(3*u/4-s),r=s>0?u-4:u;var a=0;for(t=0;r>t;t+=4)i=m[e.charCodeAt(t)]<<18|m[e.charCodeAt(t+1)]<<12|m[e.charCodeAt(t+2)]<<6|m[e.charCodeAt(t+3)],o[a++]=i>>16&255,o[a++]=i>>8&255,o[a++]=255&i;return 2===s?(i=m[e.charCodeAt(t)]<<2|m[e.charCodeAt(t+1)]>>4,o[a++]=255&i):1===s&&(i=m[e.charCodeAt(t)]<<10|m[e.charCodeAt(t+1)]<<4|m[e.charCodeAt(t+2)]>>2,o[a++]=i>>8&255,o[a++]=255&i),o},h=function(e){for(var t,r=e.length,n=r%3,i=\"\",s=[],o=0,u=r-n;u>o;o+=16383)s.push(function(e,t,r){for(var n=[],i=t;r>i;i+=3)n.push(function(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[63&e]}((e[i]<<16)+(e[i+1]<<8)+e[i+2]));return n.join(\"\")}(e,o,o+16383>u?u:o+16383));return 1===n?(i+=l[(t=e[r-1])>>2],i+=l[t<<4&63],i+=\"==\"):2===n&&(i+=l[(t=(e[r-2]<<8)+e[r-1])>>10],i+=l[t>>4&63],i+=l[t<<2&63],i+=\"=\"),s.push(i),s.join(\"\")},l=[],m=[],d=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",_=0;64>_;++_)l[_]=g[_],m[g.charCodeAt(_)]=_;m[45]=62,m[95]=63;var v={byteLength:p,toByteArray:f,fromByteArray:h},b={read:function(e,t,r,n,i){var s,o,u=8*i-n-1,a=(1<<u)-1,c=a>>1,p=-7,f=r?i-1:0,h=r?-1:1,l=e[t+f];for(f+=h,s=l&(1<<-p)-1,l>>=-p,p+=u;p>0;s=256*s+e[t+f],f+=h,p-=8);for(o=s&(1<<-p)-1,s>>=-p,p+=n;p>0;o=256*o+e[t+f],f+=h,p-=8);if(0===s)s=1-c;else{if(s===a)return o?NaN:1/0*(l?-1:1);o+=Math.pow(2,n),s-=c}return(l?-1:1)*o*Math.pow(2,s-n)},write:function(e,t,r,n,i,s){var o,u,a,c=8*s-i-1,p=(1<<c)-1,f=p>>1,h=23===i?5.960464477539062e-8:0,l=n?0:s-1,m=n?1:-1,d=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,o=p):(o=Math.floor(Math.log(t)/Math.LN2),1>t*(a=Math.pow(2,-o))&&(o--,a*=2),2>(t+=1>o+f?h*Math.pow(2,1-f):h/a)*a||(o++,a/=2),p>o+f?1>o+f?(u=t*Math.pow(2,f-1)*Math.pow(2,i),o=0):(u=(t*a-1)*Math.pow(2,i),o+=f):(u=0,o=p));i>=8;e[r+l]=255&u,l+=m,u/=256,i-=8);for(o=o<<i|u,c+=i;c>0;e[r+l]=255&o,l+=m,o/=256,c-=8);e[r+l-m]|=128*d}},y=function(e,t){return t={exports:{}},e(t,t.exports),t.exports}(function(e,t){function r(e){if(e>U)throw new RangeError(\"Invalid typed array length\");var t=new Uint8Array(e);return t.__proto__=n.prototype,t}function n(e,t,r){if(\"number\"==typeof e){if(\"string\"==typeof t)throw Error(\"If encoding is specified then the first argument must be a string\");return o(e)}return i(e,t,r)}function i(e,t,i){if(\"number\"==typeof e)throw new TypeError('\"value\" argument must not be a number');return S(e)?function(e,t,r){if(0>t||t>e.byteLength)throw new RangeError(\"'offset' is out of bounds\");if(t+(r||0)>e.byteLength)throw new RangeError(\"'length' is out of bounds\");var i;i=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r);return i.__proto__=n.prototype,i}(e,t,i):\"string\"==typeof e?function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!n.isEncoding(t))throw new TypeError('\"encoding\" must be a valid string encoding');var i=0|c(e,t),s=r(i),o=s.write(e,t);o!==i&&(s=s.slice(0,o));return s}(e,t):function(e){if(n.isBuffer(e)){var t=0|a(e.length),i=r(t);return 0===i.length?i:(e.copy(i,0,0,t),i)}if(e){if(L(e)||\"length\"in e)return\"number\"!=typeof e.length||E(e.length)?r(0):u(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return u(e.data)}throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}(e)}function s(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be a number');if(0>e)throw new RangeError('\"size\" argument must not be negative')}function o(e){return s(e),r(0>e?0:0|a(e))}function u(e){for(var t=0>e.length?0:0|a(e.length),n=r(t),i=0;t>i;i+=1)n[i]=255&e[i];return n}function a(e){if(e>=U)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+U.toString(16)+\" bytes\");return 0|e}function c(e,t){if(n.isBuffer(e))return e.length;if(L(e)||S(e))return e.byteLength;\"string\"!=typeof e&&(e=\"\"+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":case void 0:return w(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return k(e).length;default:if(i)return w(e).length;t=(\"\"+t).toLowerCase(),i=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function f(e,t,r,i,s){if(0===e.length)return-1;if(\"string\"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:-2147483648>r&&(r=-2147483648),r=+r,E(r)&&(r=s?0:e.length-1),0>r&&(r=e.length+r),e.length>r){if(0>r){if(!s)return-1;r=0}}else{if(s)return-1;r=e.length-1}if(\"string\"==typeof t&&(t=n.from(t,i)),n.isBuffer(t))return 0===t.length?-1:h(e,t,r,i,s);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):h(e,[t],r,i,s);throw new TypeError(\"val must be string, number or Buffer\")}function h(e,t,r,n,i){function s(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}var o=1,u=e.length,a=t.length;if(void 0!==n&&(\"ucs2\"===(n=(n+\"\").toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(2>e.length||2>t.length)return-1;o=2,u/=2,a/=2,r/=2}var c;if(i){var p=-1;for(c=r;u>c;c++)if(s(e,c)===s(t,-1===p?0:c-p)){if(-1===p&&(p=c),c-p+1===a)return p*o}else-1!==p&&(c-=c-p),p=-1}else for(r+a>u&&(r=u-a),c=r;c>=0;c--){for(var f=!0,h=0;a>h;h++)if(s(e,c+h)!==s(t,h)){f=!1;break}if(f)return c}return-1}function l(e,t,r,n){return A(function(e){for(var t=[],r=0;e.length>r;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function m(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;r>i;){var s=e[i],o=null,u=s>239?4:s>223?3:s>191?2:1;if(r>=i+u){var a,c,p,f;switch(u){case 1:128>s&&(o=s);break;case 2:128==(192&(a=e[i+1]))&&(f=(31&s)<<6|63&a)>127&&(o=f);break;case 3:c=e[i+2],128==(192&(a=e[i+1]))&&128==(192&c)&&(f=(15&s)<<12|(63&a)<<6|63&c)>2047&&(55296>f||f>57343)&&(o=f);break;case 4:c=e[i+2],p=e[i+3],128==(192&(a=e[i+1]))&&128==(192&c)&&128==(192&p)&&(f=(15&s)<<18|(63&a)<<12|(63&c)<<6|63&p)>65535&&1114112>f&&(o=f)}}null===o?(o=65533,u=1):o>65535&&(n.push((o-=65536)>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=u}return function(e){var t=e.length;if(C>=t)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;t>n;)r+=String.fromCharCode.apply(String,e.slice(n,n+=C));return r}(n)}function d(e,t,r){if(e%1!=0||0>e)throw new RangeError(\"offset is not uint\");if(e+t>r)throw new RangeError(\"Trying to access beyond buffer length\")}function g(e,t,r,i,s,o){if(!n.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>s||o>t)throw new RangeError('\"value\" argument is out of bounds');if(r+i>e.length)throw new RangeError(\"Index out of range\")}function _(e,t,r,n,i,s){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(0>r)throw new RangeError(\"Index out of range\")}function y(e,t,r,n,i){return t=+t,r>>>=0,i||_(e,0,r,4),b.write(e,t,r,n,23,4),r+4}function q(e,t,r,n,i){return t=+t,r>>>=0,i||_(e,0,r,8),b.write(e,t,r,n,52,8),r+8}function w(e,t){t=t||1/0;for(var r,n=e.length,i=null,s=[],o=0;n>o;++o){if((r=e.charCodeAt(o))>55295&&57344>r){if(!i){if(r>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}i=r;continue}if(56320>r){(t-=3)>-1&&s.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&s.push(239,191,189);if(i=null,128>r){if(0>(t-=1))break;s.push(r)}else if(2048>r){if(0>(t-=2))break;s.push(r>>6|192,63&r|128)}else if(65536>r){if(0>(t-=3))break;s.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(r>=1114112)throw Error(\"Invalid code point\");if(0>(t-=4))break;s.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return s}function k(e){return v.toByteArray(function(e){if(2>(e=e.trim().replace(T,\"\")).length)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function A(e,t,r,n){for(var i=0;n>i&&(i+r<t.length&&i<e.length);++i)t[i+r]=e[i];return i}function S(e){return e instanceof ArrayBuffer||null!=e&&null!=e.constructor&&\"ArrayBuffer\"===e.constructor.name&&\"number\"==typeof e.byteLength}function L(e){return\"function\"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(e)}function E(e){return e!=e}t.Buffer=n,t.SlowBuffer=function(e){return+e!=e&&(e=0),n.alloc(+e)},t.INSPECT_MAX_BYTES=50;var U=2147483647;t.kMaxLength=U,(n.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}())||void 0===console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),\"undefined\"!=typeof Symbol&&Symbol.species&&n[Symbol.species]===n&&Object.defineProperty(n,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),n.poolSize=8192,n.from=function(e,t,r){return i(e,t,r)},n.prototype.__proto__=Uint8Array.prototype,n.__proto__=Uint8Array,n.alloc=function(e,t,n){return function(e,t,n){return s(e),e>0&&void 0!==t?\"string\"==typeof n?r(e).fill(t,n):r(e).fill(t):r(e)}(e,t,n)},n.allocUnsafe=function(e){return o(e)},n.allocUnsafeSlow=function(e){return o(e)},n.isBuffer=function(e){return null!=e&&!0===e._isBuffer},n.compare=function(e,t){if(!n.isBuffer(e)||!n.isBuffer(t))throw new TypeError(\"Arguments must be Buffers\");if(e===t)return 0;for(var r=e.length,i=t.length,s=0,o=Math.min(r,i);o>s;++s)if(e[s]!==t[s]){r=e[s],i=t[s];break}return i>r?-1:r>i?1:0},n.isEncoding=function(e){switch((e+\"\").toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},n.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return n.alloc(0);var r;if(void 0===t)for(t=0,r=0;e.length>r;++r)t+=e[r].length;var i=n.allocUnsafe(t),s=0;for(r=0;e.length>r;++r){var o=e[r];if(!n.isBuffer(o))throw new TypeError('\"list\" argument must be an Array of Buffers');o.copy(i,s),s+=o.length}return i},n.byteLength=c,n.prototype._isBuffer=!0,n.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var t=0;e>t;t+=2)p(this,t,t+1);return this},n.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var t=0;e>t;t+=4)p(this,t,t+3),p(this,t+1,t+2);return this},n.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var t=0;e>t;t+=8)p(this,t,t+7),p(this,t+1,t+6),p(this,t+2,t+5),p(this,t+3,t+4);return this},n.prototype.toString=function(){var e=this.length;return 0===e?\"\":0===arguments.length?m(this,0,e):function(e,t,r){var n=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),0>=r)return\"\";if(r>>>=0,(t>>>=0)>=r)return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return function(e,t,r){var n=e.length;t&&t>=0||(t=0),(!r||0>r||r>n)&&(r=n);for(var i=\"\",s=t;r>s;++s)i+=function(e){return 16>e?\"0\"+e.toString(16):e.toString(16)}(e[s]);return i}(this,t,r);case\"utf8\":case\"utf-8\":return m(this,t,r);case\"ascii\":return function(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;r>i;++i)n+=String.fromCharCode(127&e[i]);return n}(this,t,r);case\"latin1\":case\"binary\":return function(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var i=t;r>i;++i)n+=String.fromCharCode(e[i]);return n}(this,t,r);case\"base64\":return function(e,t,r){return v.fromByteArray(0===t&&r===e.length?e:e.slice(t,r))}(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return function(e,t,r){for(var n=e.slice(t,r),i=\"\",s=0;n.length>s;s+=2)i+=String.fromCharCode(n[s]+256*n[s+1]);return i}(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}.apply(this,arguments)},n.prototype.equals=function(e){if(!n.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===n.compare(this,e)},n.prototype.inspect=function(){var e=\"\",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString(\"hex\",0,r).match(/.{2}/g).join(\" \"),this.length>r&&(e+=\" ... \")),\"<Buffer \"+e+\">\"},n.prototype.compare=function(e,t,r,i,s){if(!n.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===s&&(s=this.length),0>t||r>e.length||0>i||s>this.length)throw new RangeError(\"out of range index\");if(i>=s&&t>=r)return 0;if(i>=s)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,i>>>=0,s>>>=0,this===e)return 0;for(var o=s-i,u=r-t,a=Math.min(o,u),c=this.slice(i,s),p=e.slice(t,r),f=0;a>f;++f)if(c[f]!==p[f]){o=c[f],u=p[f];break}return u>o?-1:o>u?1:0},n.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},n.prototype.indexOf=function(e,t,r){return f(this,e,t,r,!0)},n.prototype.lastIndexOf=function(e,t,r){return f(this,e,t,r,!1)},n.prototype.write=function(e,t,r,n){if(void 0===t)n=\"utf8\",r=this.length,t=0;else if(void 0===r&&\"string\"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(0>r||0>t)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var s=!1;;)switch(n){case\"hex\":return function(e,t,r,n){var i=e.length-(r=+r||0);n?(n=+n)>i&&(n=i):n=i;var s=t.length;if(s%2!=0)throw new TypeError(\"Invalid hex string\");n>s/2&&(n=s/2);for(var o=0;n>o;++o){var u=parseInt(t.substr(2*o,2),16);if(E(u))return o;e[r+o]=u}return o}(this,e,t,r);case\"utf8\":case\"utf-8\":return function(e,t,r,n){return A(w(t,e.length-r),e,r,n)}(this,e,t,r);case\"ascii\":return l(this,e,t,r);case\"latin1\":case\"binary\":return function(e,t,r,n){return l(e,t,r,n)}(this,e,t,r);case\"base64\":return function(e,t,r,n){return A(k(t),e,r,n)}(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return function(e,t,r,n){return A(function(e,t){for(var r,n,i=[],s=0;e.length>s&&(t-=2)>=0;++s)r=e.charCodeAt(s),n=r>>8,i.push(r%256),i.push(n);return i}(t,e.length-r),e,r,n)}(this,e,t,r);default:if(s)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),s=!0}},n.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var C=4096;n.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,0>e?0>(e+=r)&&(e=0):e>r&&(e=r),0>t?0>(t+=r)&&(t=0):t>r&&(t=r),e>t&&(t=e);var i=this.subarray(e,t);return i.__proto__=n.prototype,i},n.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return n},n.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e+--t],i=1;t>0&&(i*=256);)n+=this[e+--t]*i;return n},n.prototype.readUInt8=function(e,t){return e>>>=0,t||d(e,1,this.length),this[e]},n.prototype.readUInt16LE=function(e,t){return e>>>=0,t||d(e,2,this.length),this[e]|this[e+1]<<8},n.prototype.readUInt16BE=function(e,t){return e>>>=0,t||d(e,2,this.length),this[e]<<8|this[e+1]},n.prototype.readUInt32LE=function(e,t){return e>>>=0,t||d(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},n.prototype.readUInt32BE=function(e,t){return e>>>=0,t||d(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},n.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=this[e],i=1,s=0;++s<t&&(i*=256);)n+=this[e+s]*i;return(i*=128)>n||(n-=Math.pow(2,8*t)),n},n.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||d(e,t,this.length);for(var n=t,i=1,s=this[e+--n];n>0&&(i*=256);)s+=this[e+--n]*i;return(i*=128)>s||(s-=Math.pow(2,8*t)),s},n.prototype.readInt8=function(e,t){return e>>>=0,t||d(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},n.prototype.readInt16LE=function(e,t){e>>>=0,t||d(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt16BE=function(e,t){e>>>=0,t||d(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},n.prototype.readInt32LE=function(e,t){return e>>>=0,t||d(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},n.prototype.readInt32BE=function(e,t){return e>>>=0,t||d(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},n.prototype.readFloatLE=function(e,t){return e>>>=0,t||d(e,4,this.length),b.read(this,e,!0,23,4)},n.prototype.readFloatBE=function(e,t){return e>>>=0,t||d(e,4,this.length),b.read(this,e,!1,23,4)},n.prototype.readDoubleLE=function(e,t){return e>>>=0,t||d(e,8,this.length),b.read(this,e,!0,52,8)},n.prototype.readDoubleBE=function(e,t){return e>>>=0,t||d(e,8,this.length),b.read(this,e,!1,52,8)},n.prototype.writeUIntLE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){g(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=1,s=0;for(this[t]=255&e;++s<r&&(i*=256);)this[t+s]=e/i&255;return t+r},n.prototype.writeUIntBE=function(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){g(this,e,t,r,Math.pow(2,8*r)-1,0)}var i=r-1,s=1;for(this[t+i]=255&e;--i>=0&&(s*=256);)this[t+i]=e/s&255;return t+r},n.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,1,255,0),this[t]=255&e,t+1},n.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},n.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);g(this,e,t,r,i-1,-i)}var s=0,o=1,u=0;for(this[t]=255&e;++s<r&&(o*=256);)0>e&&0===u&&0!==this[t+s-1]&&(u=1),this[t+s]=(e/o>>0)-u&255;return t+r},n.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var i=Math.pow(2,8*r-1);g(this,e,t,r,i-1,-i)}var s=r-1,o=1,u=0;for(this[t+s]=255&e;--s>=0&&(o*=256);)0>e&&0===u&&0!==this[t+s+1]&&(u=1),this[t+s]=(e/o>>0)-u&255;return t+r},n.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,1,127,-128),0>e&&(e=255+e+1),this[t]=255&e,t+1},n.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},n.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},n.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},n.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||g(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},n.prototype.writeFloatLE=function(e,t,r){return y(this,e,t,!0,r)},n.prototype.writeFloatBE=function(e,t,r){return y(this,e,t,!1,r)},n.prototype.writeDoubleLE=function(e,t,r){return q(this,e,t,!0,r)},n.prototype.writeDoubleBE=function(e,t,r){return q(this,e,t,!1,r)},n.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),e.length>t||(t=e.length),t||(t=0),n>0&&r>n&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError(\"targetStart out of bounds\");if(0>r||r>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(0>n)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),n-r>e.length-t&&(n=e.length-t+r);var i,s=n-r;if(this===e&&t>r&&n>t)for(i=s-1;i>=0;--i)e[i+t]=this[i+r];else if(1e3>s)for(i=0;s>i;++i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,r+s),t);return s},n.prototype.fill=function(e,t,r,i){if(\"string\"==typeof e){if(\"string\"==typeof t?(i=t,t=0,r=this.length):\"string\"==typeof r&&(i=r,r=this.length),1===e.length){var s=e.charCodeAt(0);256>s&&(e=s)}if(void 0!==i&&\"string\"!=typeof i)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof i&&!n.isEncoding(i))throw new TypeError(\"Unknown encoding: \"+i)}else\"number\"==typeof e&&(e&=255);if(0>t||t>this.length||r>this.length)throw new RangeError(\"Out of range index\");if(t>=r)return this;t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var o;if(\"number\"==typeof e)for(o=t;r>o;++o)this[o]=e;else{var u=n.isBuffer(e)?e:new n(e,i),a=u.length;for(o=0;r-t>o;++o)this[o+t]=u[o%a]}return this};var T=/[^+/0-9A-Za-z-_]/g}).Buffer;\"function\"!=typeof Object.assign&&(Object.assign=function(e){var t,r,n,i;if(void 0===e||null===e)throw new TypeError(\"Cannot convert undefined or null to object\");for(t=Object(e),r=1;arguments.length>r;r++)if(void 0!==(n=arguments[r])&&null!==n)for(i in n)n.hasOwnProperty(i)&&(t[i]=n[i]);return t}),Array.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{value:function(e,t){if(null==this)throw new TypeError('\"this\" is null or not defined');var r=Object(this),n=r.length>>>0;if(0===n)return!1;for(var i=0|t,s=Math.max(0>i?n-Math.abs(i):i,0);n>s;){if(function(e,t){return e===t||\"number\"==typeof e&&\"number\"==typeof t&&isNaN(e)&&isNaN(t)}(r[s],e))return!0;s++}return!1}});var q=function(){function n(e){s(this,n),this.accessToken=(e=e||{}).accessToken,this.clientId=e.clientId,this.clientSecret=e.clientSecret,this.selectUser=e.selectUser,this.selectAdmin=e.selectAdmin}return o(n,[{key:\"setAccessToken\",value:function(e){this.accessToken=e}},{key:\"getAccessToken\",value:function(){return this.accessToken}},{key:\"setClientId\",value:function(e){this.clientId=e}},{key:\"getClientId\",value:function(){return this.clientId}},{key:\"setClientSecret\",value:function(e){this.clientSecret=e}},{key:\"getClientSecret\",value:function(){return this.clientSecret}},{key:\"getAuthenticationUrl\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"token\",n=this.getClientId(),i=\"https://www.dropbox.com/oauth2/authorize\";if(!n)throw Error(\"A client id is required. You can set the client id using .setClientId().\");if(\"code\"!==r&&!e)throw Error(\"A redirect uri is required.\");if(![\"code\",\"token\"].includes(r))throw Error(\"Authorization type must be code or token\");var s=void 0;return s=\"code\"===r?i+\"?response_type=code&client_id=\"+n:i+\"?response_type=token&client_id=\"+n,e&&(s+=\"&redirect_uri=\"+e),t&&(s+=\"&state=\"+t),s}},{key:\"getAccessTokenFromCode\",value:function(e,t){var r=this.getClientId(),n=this.getClientSecret();if(!r)throw Error(\"A client id is required. You can set the client id using .setClientId().\");if(!n)throw Error(\"A client secret is required. You can set the client id using .setClientSecret().\");var i=\"https://api.dropboxapi.com/oauth2/token?code=\"+t+\"&grant_type=authorization_code&redirect_uri=\"+e+\"&client_id=\"+r+\"&client_secret=\"+n;return fetch(i,{method:\"POST\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\"}}).then(function(e){return function(e){var t=e.clone();return new Promise(function(r){e.json().then(function(e){return r(e)}).catch(function(){return t.text().then(function(e){return r(e)})})}).then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n.access_token})}},{key:\"authenticateWithCordova\",value:function(e,t){function r(){window.setTimeout(function(){u.close()},10),t()}function n(r){if(r.url.indexOf(\"&error=\")>-1)window.setTimeout(function(){u.close()},10),t();else{var n=r.url.indexOf(\"#access_token=\"),i=r.url.indexOf(\"&token_type=\");if(n>-1){n+=14,window.setTimeout(function(){u.close()},10);var s=r.url.substring(n,i);e(s)}}}function i(){o||(u.removeEventListener(\"loaderror\",r),u.removeEventListener(\"loadstop\",n),u.removeEventListener(\"exit\",i),o=!0)}var s=this.getAuthenticationUrl(\"https://www.dropbox.com/1/oauth2/redirect_receiver\"),o=!1,u=window.open(s,\"_blank\");u.addEventListener(\"loaderror\",r),u.addEventListener(\"loadstop\",n),u.addEventListener(\"exit\",i)}},{key:\"request\",value:function(e,t,r,n,i){var s=null;switch(i){case\"rpc\":s=this.getRpcRequest();break;case\"download\":s=this.getDownloadRequest();break;case\"upload\":s=this.getUploadRequest();break;default:throw Error(\"Invalid request style: \"+i)}var o={selectUser:this.selectUser,selectAdmin:this.selectAdmin,clientId:this.getClientId(),clientSecret:this.getClientSecret()};return s(e,t,r,n,this.getAccessToken(),o)}},{key:\"setRpcRequest\",value:function(e){this.rpcRequest=e}},{key:\"getRpcRequest\",value:function(){return void 0===this.rpcRequest&&(this.rpcRequest=function(e,r,n,i,s,o){var u={method:\"POST\",body:r?JSON.stringify(r):null},a={};r&&(a[\"Content-Type\"]=\"application/json\");var p=\"\";switch(n){case\"app\":if(!o.clientId||!o.clientSecret)throw Error(\"A client id and secret is required for this function\");p=new y(o.clientId+\":\"+o.clientSecret).toString(\"base64\"),a.Authorization=\"Basic \"+p;break;case\"team\":case\"user\":a.Authorization=\"Bearer \"+s;break;case\"noauth\":break;default:throw Error(\"Unhandled auth type: \"+n)}return o&&(o.selectUser&&(a[\"Dropbox-API-Select-User\"]=o.selectUser),o.selectAdmin&&(a[\"Dropbox-API-Select-Admin\"]=o.selectAdmin)),u.headers=a,fetch(t(i)+e,u).then(function(e){return function(e){return\"application/json\"===e.headers.get(\"Content-Type\")?e.json().then(function(t){return[e,t]}):e.text().then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n})}),this.rpcRequest}},{key:\"setDownloadRequest\",value:function(e){this.downloadRequest=e}},{key:\"getDownloadRequest\",value:function(){return void 0===this.downloadRequest&&(this.downloadRequest=function(n,i,s,o,u,a){if(\"user\"!==s)throw Error(\"Unexpected auth type: \"+s);var p={method:\"POST\",headers:{Authorization:\"Bearer \"+u,\"Dropbox-API-Arg\":r(i)}};return a&&(a.selectUser&&(p.headers[\"Dropbox-API-Select-User\"]=a.selectUser),a.selectAdmin&&(p.headers[\"Dropbox-API-Select-Admin\"]=a.selectAdmin)),fetch(t(o)+n,p).then(function(t){return function(t){return t.ok?e()?t.blob():t.buffer():t.text()}(t).then(function(e){return[t,e]})}).then(function(t){var r=c(t,2);return function(t,r){if(!t.ok)throw{error:r,response:t,status:t.status};var n=JSON.parse(t.headers.get(\"dropbox-api-result\"));return e()?n.fileBlob=r:n.fileBinary=r,n}(r[0],r[1])})}),this.downloadRequest}},{key:\"setUploadRequest\",value:function(e){this.uploadRequest=e}},{key:\"getUploadRequest\",value:function(){return void 0===this.uploadRequest&&(this.uploadRequest=function(e,n,i,s,o,u){if(\"user\"!==i)throw Error(\"Unexpected auth type: \"+i);var a=n.contents;delete n.contents;var p={body:a,method:\"POST\",headers:{Authorization:\"Bearer \"+o,\"Content-Type\":\"application/octet-stream\",\"Dropbox-API-Arg\":r(n)}};return u&&(u.selectUser&&(p.headers[\"Dropbox-API-Select-User\"]=u.selectUser),u.selectAdmin&&(p.headers[\"Dropbox-API-Select-Admin\"]=u.selectAdmin)),fetch(t(s)+e,p).then(function(e){return function(e){var t=e.clone();return new Promise(function(r){e.json().then(function(e){return r(e)}).catch(function(){return t.text().then(function(e){return r(e)})})}).then(function(t){return[e,t]})}(e)}).then(function(e){var t=c(e,2),r=t[0],n=t[1];if(!r.ok)throw{error:n,response:r,status:r.status};return n})}),this.uploadRequest}}]),n}(),w=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return Object.assign(r,i),r}return u(t,q),o(t,[{key:\"filesGetSharedLinkFile\",value:function(e){return this.request(\"sharing/get_shared_link_file\",e,\"api\",\"download\")}}]),t}(),k=Object.freeze({Dropbox:w}),A={};A.teamDevicesListMemberDevices=function(e){return this.request(\"team/devices/list_member_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesListMembersDevices=function(e){return this.request(\"team/devices/list_members_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesListTeamDevices=function(e){return this.request(\"team/devices/list_team_devices\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesRevokeDeviceSession=function(e){return this.request(\"team/devices/revoke_device_session\",e,\"team\",\"api\",\"rpc\")},A.teamDevicesRevokeDeviceSessionBatch=function(e){return this.request(\"team/devices/revoke_device_session_batch\",e,\"team\",\"api\",\"rpc\")},A.teamFeaturesGetValues=function(e){return this.request(\"team/features/get_values\",e,\"team\",\"api\",\"rpc\")},A.teamGetInfo=function(e){return this.request(\"team/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsCreate=function(e){return this.request(\"team/groups/create\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsDelete=function(e){return this.request(\"team/groups/delete\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsGetInfo=function(e){return this.request(\"team/groups/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsJobStatusGet=function(e){return this.request(\"team/groups/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsList=function(e){return this.request(\"team/groups/list\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsListContinue=function(e){return this.request(\"team/groups/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersAdd=function(e){return this.request(\"team/groups/members/add\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersList=function(e){return this.request(\"team/groups/members/list\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersListContinue=function(e){return this.request(\"team/groups/members/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersRemove=function(e){return this.request(\"team/groups/members/remove\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsMembersSetAccessType=function(e){return this.request(\"team/groups/members/set_access_type\",e,\"team\",\"api\",\"rpc\")},A.teamGroupsUpdate=function(e){return this.request(\"team/groups/update\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListMemberLinkedApps=function(e){return this.request(\"team/linked_apps/list_member_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListMembersLinkedApps=function(e){return this.request(\"team/linked_apps/list_members_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsListTeamLinkedApps=function(e){return this.request(\"team/linked_apps/list_team_linked_apps\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsRevokeLinkedApp=function(e){return this.request(\"team/linked_apps/revoke_linked_app\",e,\"team\",\"api\",\"rpc\")},A.teamLinkedAppsRevokeLinkedAppBatch=function(e){return this.request(\"team/linked_apps/revoke_linked_app_batch\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersAdd=function(e){return this.request(\"team/member_space_limits/excluded_users/add\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersList=function(e){return this.request(\"team/member_space_limits/excluded_users/list\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersListContinue=function(e){return this.request(\"team/member_space_limits/excluded_users/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsExcludedUsersRemove=function(e){return this.request(\"team/member_space_limits/excluded_users/remove\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsGetCustomQuota=function(e){return this.request(\"team/member_space_limits/get_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsRemoveCustomQuota=function(e){return this.request(\"team/member_space_limits/remove_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMemberSpaceLimitsSetCustomQuota=function(e){return this.request(\"team/member_space_limits/set_custom_quota\",e,\"team\",\"api\",\"rpc\")},A.teamMembersAdd=function(e){return this.request(\"team/members/add\",e,\"team\",\"api\",\"rpc\")},A.teamMembersAddJobStatusGet=function(e){return this.request(\"team/members/add/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamMembersGetInfo=function(e){return this.request(\"team/members/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamMembersList=function(e){return this.request(\"team/members/list\",e,\"team\",\"api\",\"rpc\")},A.teamMembersListContinue=function(e){return this.request(\"team/members/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRecover=function(e){return this.request(\"team/members/recover\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRemove=function(e){return this.request(\"team/members/remove\",e,\"team\",\"api\",\"rpc\")},A.teamMembersRemoveJobStatusGet=function(e){return this.request(\"team/members/remove/job_status/get\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSendWelcomeEmail=function(e){return this.request(\"team/members/send_welcome_email\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSetAdminPermissions=function(e){return this.request(\"team/members/set_admin_permissions\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSetProfile=function(e){return this.request(\"team/members/set_profile\",e,\"team\",\"api\",\"rpc\")},A.teamMembersSuspend=function(e){return this.request(\"team/members/suspend\",e,\"team\",\"api\",\"rpc\")},A.teamMembersUnsuspend=function(e){return this.request(\"team/members/unsuspend\",e,\"team\",\"api\",\"rpc\")},A.teamNamespacesList=function(e){return this.request(\"team/namespaces/list\",e,\"team\",\"api\",\"rpc\")},A.teamNamespacesListContinue=function(e){return this.request(\"team/namespaces/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateAdd=function(e){return this.request(\"team/properties/template/add\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateGet=function(e){return this.request(\"team/properties/template/get\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateList=function(e){return this.request(\"team/properties/template/list\",e,\"team\",\"api\",\"rpc\")},A.teamPropertiesTemplateUpdate=function(e){return this.request(\"team/properties/template/update\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetActivity=function(e){return this.request(\"team/reports/get_activity\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetDevices=function(e){return this.request(\"team/reports/get_devices\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetMembership=function(e){return this.request(\"team/reports/get_membership\",e,\"team\",\"api\",\"rpc\")},A.teamReportsGetStorage=function(e){return this.request(\"team/reports/get_storage\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderActivate=function(e){return this.request(\"team/team_folder/activate\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderArchive=function(e){return this.request(\"team/team_folder/archive\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderArchiveCheck=function(e){return this.request(\"team/team_folder/archive/check\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderCreate=function(e){return this.request(\"team/team_folder/create\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderGetInfo=function(e){return this.request(\"team/team_folder/get_info\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderList=function(e){return this.request(\"team/team_folder/list\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderListContinue=function(e){return this.request(\"team/team_folder/list/continue\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderPermanentlyDelete=function(e){return this.request(\"team/team_folder/permanently_delete\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderRename=function(e){return this.request(\"team/team_folder/rename\",e,\"team\",\"api\",\"rpc\")},A.teamTeamFolderUpdateSyncSettings=function(e){return this.request(\"team/team_folder/update_sync_settings\",e,\"team\",\"api\",\"rpc\")},A.teamTokenGetAuthenticatedAdmin=function(e){return this.request(\"team/token/get_authenticated_admin\",e,\"team\",\"api\",\"rpc\")};var S=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return Object.assign(r,A),r}return u(t,q),o(t,[{key:\"actAsUser\",value:function(e){return new w({accessToken:this.accessToken,clientId:this.clientId,selectUser:e})}}]),t}(),L=Object.freeze({DropboxTeam:S});return{Dropbox:k.Dropbox,DropboxTeam:L.DropboxTeam}});\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.oDataQueryNames = [\"select\", \"expand\", \"orderby\", \"filter\", \"top\", \"skip\", \"skipToken\", \"count\"];\r\nexports.DEFAULT_VERSION = \"v1.0\";\r\nexports.GRAPH_BASE_URL = \"https://graph.microsoft.com/\";\r\nexports.PACKAGE_VERSION = \"1.0.0\";\r\nexports.oDataQueryNames = exports.oDataQueryNames.concat(exports.oDataQueryNames.map(function (s) { return \"$\" + s; }));\r\n//# sourceMappingURL=common.js.map","// Generated by CoffeeScript 1.10.0\nvar BRUTEFORCE_CARDINALITY, MIN_GUESSES_BEFORE_GROWING_SEQUENCE, MIN_SUBMATCH_GUESSES_MULTI_CHAR, MIN_SUBMATCH_GUESSES_SINGLE_CHAR, adjacency_graphs, calc_average_degree, k, scoring, v;\n\nadjacency_graphs = require('./adjacency_graphs');\n\ncalc_average_degree = function(graph) {\n  var average, k, key, n, neighbors, v;\n  average = 0;\n  for (key in graph) {\n    neighbors = graph[key];\n    average += ((function() {\n      var len, o, results;\n      results = [];\n      for (o = 0, len = neighbors.length; o < len; o++) {\n        n = neighbors[o];\n        if (n) {\n          results.push(n);\n        }\n      }\n      return results;\n    })()).length;\n  }\n  average /= ((function() {\n    var results;\n    results = [];\n    for (k in graph) {\n      v = graph[k];\n      results.push(k);\n    }\n    return results;\n  })()).length;\n  return average;\n};\n\nBRUTEFORCE_CARDINALITY = 10;\n\nMIN_GUESSES_BEFORE_GROWING_SEQUENCE = 10000;\n\nMIN_SUBMATCH_GUESSES_SINGLE_CHAR = 10;\n\nMIN_SUBMATCH_GUESSES_MULTI_CHAR = 50;\n\nscoring = {\n  nCk: function(n, k) {\n    var d, o, r, ref;\n    if (k > n) {\n      return 0;\n    }\n    if (k === 0) {\n      return 1;\n    }\n    r = 1;\n    for (d = o = 1, ref = k; 1 <= ref ? o <= ref : o >= ref; d = 1 <= ref ? ++o : --o) {\n      r *= n;\n      r /= d;\n      n -= 1;\n    }\n    return r;\n  },\n  log10: function(n) {\n    return Math.log(n) / Math.log(10);\n  },\n  log2: function(n) {\n    return Math.log(n) / Math.log(2);\n  },\n  factorial: function(n) {\n    var f, i, o, ref;\n    if (n < 2) {\n      return 1;\n    }\n    f = 1;\n    for (i = o = 2, ref = n; 2 <= ref ? o <= ref : o >= ref; i = 2 <= ref ? ++o : --o) {\n      f *= i;\n    }\n    return f;\n  },\n  most_guessable_match_sequence: function(password, matches, _exclude_additive) {\n    var _, bruteforce_update, guesses, k, l, len, len1, len2, lst, m, make_bruteforce_match, matches_by_j, n, o, optimal, optimal_l, optimal_match_sequence, q, ref, ref1, u, unwind, update, w;\n    if (_exclude_additive == null) {\n      _exclude_additive = false;\n    }\n    n = password.length;\n    matches_by_j = (function() {\n      var o, ref, results;\n      results = [];\n      for (_ = o = 0, ref = n; 0 <= ref ? o < ref : o > ref; _ = 0 <= ref ? ++o : --o) {\n        results.push([]);\n      }\n      return results;\n    })();\n    for (o = 0, len = matches.length; o < len; o++) {\n      m = matches[o];\n      matches_by_j[m.j].push(m);\n    }\n    for (q = 0, len1 = matches_by_j.length; q < len1; q++) {\n      lst = matches_by_j[q];\n      lst.sort(function(m1, m2) {\n        return m1.i - m2.i;\n      });\n    }\n    optimal = {\n      m: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })(),\n      pi: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })(),\n      g: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })()\n    };\n    update = (function(_this) {\n      return function(m, l) {\n        var competing_g, competing_l, g, k, pi, ref;\n        k = m.j;\n        pi = _this.estimate_guesses(m, password);\n        if (l > 1) {\n          pi *= optimal.pi[m.i - 1][l - 1];\n        }\n        g = _this.factorial(l) * pi;\n        if (!_exclude_additive) {\n          g += Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE, l - 1);\n        }\n        ref = optimal.g[k];\n        for (competing_l in ref) {\n          competing_g = ref[competing_l];\n          if (competing_l > l) {\n            continue;\n          }\n          if (competing_g <= g) {\n            return;\n          }\n        }\n        optimal.g[k][l] = g;\n        optimal.m[k][l] = m;\n        return optimal.pi[k][l] = pi;\n      };\n    })(this);\n    bruteforce_update = (function(_this) {\n      return function(k) {\n        var i, l, last_m, ref, results, u;\n        m = make_bruteforce_match(0, k);\n        update(m, 1);\n        results = [];\n        for (i = u = 1, ref = k; 1 <= ref ? u <= ref : u >= ref; i = 1 <= ref ? ++u : --u) {\n          m = make_bruteforce_match(i, k);\n          results.push((function() {\n            var ref1, results1;\n            ref1 = optimal.m[i - 1];\n            results1 = [];\n            for (l in ref1) {\n              last_m = ref1[l];\n              l = parseInt(l);\n              if (last_m.pattern === 'bruteforce') {\n                continue;\n              }\n              results1.push(update(m, l + 1));\n            }\n            return results1;\n          })());\n        }\n        return results;\n      };\n    })(this);\n    make_bruteforce_match = (function(_this) {\n      return function(i, j) {\n        return {\n          pattern: 'bruteforce',\n          token: password.slice(i, +j + 1 || 9e9),\n          i: i,\n          j: j\n        };\n      };\n    })(this);\n    unwind = (function(_this) {\n      return function(n) {\n        var candidate_g, candidate_l, g, k, l, optimal_match_sequence, ref;\n        optimal_match_sequence = [];\n        k = n - 1;\n        l = void 0;\n        g = Infinity;\n        ref = optimal.g[k];\n        for (candidate_l in ref) {\n          candidate_g = ref[candidate_l];\n          if (candidate_g < g) {\n            l = candidate_l;\n            g = candidate_g;\n          }\n        }\n        while (k >= 0) {\n          m = optimal.m[k][l];\n          optimal_match_sequence.unshift(m);\n          k = m.i - 1;\n          l--;\n        }\n        return optimal_match_sequence;\n      };\n    })(this);\n    for (k = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; k = 0 <= ref ? ++u : --u) {\n      ref1 = matches_by_j[k];\n      for (w = 0, len2 = ref1.length; w < len2; w++) {\n        m = ref1[w];\n        if (m.i > 0) {\n          for (l in optimal.m[m.i - 1]) {\n            l = parseInt(l);\n            update(m, l + 1);\n          }\n        } else {\n          update(m, 1);\n        }\n      }\n      bruteforce_update(k);\n    }\n    optimal_match_sequence = unwind(n);\n    optimal_l = optimal_match_sequence.length;\n    if (password.length === 0) {\n      guesses = 1;\n    } else {\n      guesses = optimal.g[n - 1][optimal_l];\n    }\n    return {\n      password: password,\n      guesses: guesses,\n      guesses_log10: this.log10(guesses),\n      sequence: optimal_match_sequence\n    };\n  },\n  estimate_guesses: function(match, password) {\n    var estimation_functions, guesses, min_guesses;\n    if (match.guesses != null) {\n      return match.guesses;\n    }\n    min_guesses = 1;\n    if (match.token.length < password.length) {\n      min_guesses = match.token.length === 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR : MIN_SUBMATCH_GUESSES_MULTI_CHAR;\n    }\n    estimation_functions = {\n      bruteforce: this.bruteforce_guesses,\n      dictionary: this.dictionary_guesses,\n      spatial: this.spatial_guesses,\n      repeat: this.repeat_guesses,\n      sequence: this.sequence_guesses,\n      regex: this.regex_guesses,\n      date: this.date_guesses\n    };\n    guesses = estimation_functions[match.pattern].call(this, match);\n    match.guesses = Math.max(guesses, min_guesses);\n    match.guesses_log10 = this.log10(match.guesses);\n    return match.guesses;\n  },\n  bruteforce_guesses: function(match) {\n    var guesses, min_guesses;\n    guesses = Math.pow(BRUTEFORCE_CARDINALITY, match.token.length);\n    if (guesses === Number.POSITIVE_INFINITY) {\n      guesses = Number.MAX_VALUE;\n    }\n    min_guesses = match.token.length === 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR + 1 : MIN_SUBMATCH_GUESSES_MULTI_CHAR + 1;\n    return Math.max(guesses, min_guesses);\n  },\n  repeat_guesses: function(match) {\n    return match.base_guesses * match.repeat_count;\n  },\n  sequence_guesses: function(match) {\n    var base_guesses, first_chr;\n    first_chr = match.token.charAt(0);\n    if (first_chr === 'a' || first_chr === 'A' || first_chr === 'z' || first_chr === 'Z' || first_chr === '0' || first_chr === '1' || first_chr === '9') {\n      base_guesses = 4;\n    } else {\n      if (first_chr.match(/\\d/)) {\n        base_guesses = 10;\n      } else {\n        base_guesses = 26;\n      }\n    }\n    if (!match.ascending) {\n      base_guesses *= 2;\n    }\n    return base_guesses * match.token.length;\n  },\n  MIN_YEAR_SPACE: 20,\n  REFERENCE_YEAR: new Date().getFullYear(),\n  regex_guesses: function(match) {\n    var char_class_bases, year_space;\n    char_class_bases = {\n      alpha_lower: 26,\n      alpha_upper: 26,\n      alpha: 52,\n      alphanumeric: 62,\n      digits: 10,\n      symbols: 33\n    };\n    if (match.regex_name in char_class_bases) {\n      return Math.pow(char_class_bases[match.regex_name], match.token.length);\n    } else {\n      switch (match.regex_name) {\n        case 'recent_year':\n          year_space = Math.abs(parseInt(match.regex_match[0]) - this.REFERENCE_YEAR);\n          year_space = Math.max(year_space, this.MIN_YEAR_SPACE);\n          return year_space;\n      }\n    }\n  },\n  date_guesses: function(match) {\n    var guesses, year_space;\n    year_space = Math.max(Math.abs(match.year - this.REFERENCE_YEAR), this.MIN_YEAR_SPACE);\n    guesses = year_space * 365;\n    if (match.separator) {\n      guesses *= 4;\n    }\n    return guesses;\n  },\n  KEYBOARD_AVERAGE_DEGREE: calc_average_degree(adjacency_graphs.qwerty),\n  KEYPAD_AVERAGE_DEGREE: calc_average_degree(adjacency_graphs.keypad),\n  KEYBOARD_STARTING_POSITIONS: ((function() {\n    var ref, results;\n    ref = adjacency_graphs.qwerty;\n    results = [];\n    for (k in ref) {\n      v = ref[k];\n      results.push(k);\n    }\n    return results;\n  })()).length,\n  KEYPAD_STARTING_POSITIONS: ((function() {\n    var ref, results;\n    ref = adjacency_graphs.keypad;\n    results = [];\n    for (k in ref) {\n      v = ref[k];\n      results.push(k);\n    }\n    return results;\n  })()).length,\n  spatial_guesses: function(match) {\n    var L, S, U, d, guesses, i, j, o, possible_turns, q, ref, ref1, ref2, ref3, s, shifted_variations, t, u;\n    if ((ref = match.graph) === 'qwerty' || ref === 'dvorak') {\n      s = this.KEYBOARD_STARTING_POSITIONS;\n      d = this.KEYBOARD_AVERAGE_DEGREE;\n    } else {\n      s = this.KEYPAD_STARTING_POSITIONS;\n      d = this.KEYPAD_AVERAGE_DEGREE;\n    }\n    guesses = 0;\n    L = match.token.length;\n    t = match.turns;\n    for (i = o = 2, ref1 = L; 2 <= ref1 ? o <= ref1 : o >= ref1; i = 2 <= ref1 ? ++o : --o) {\n      possible_turns = Math.min(t, i - 1);\n      for (j = q = 1, ref2 = possible_turns; 1 <= ref2 ? q <= ref2 : q >= ref2; j = 1 <= ref2 ? ++q : --q) {\n        guesses += this.nCk(i - 1, j - 1) * s * Math.pow(d, j);\n      }\n    }\n    if (match.shifted_count) {\n      S = match.shifted_count;\n      U = match.token.length - match.shifted_count;\n      if (S === 0 || U === 0) {\n        guesses *= 2;\n      } else {\n        shifted_variations = 0;\n        for (i = u = 1, ref3 = Math.min(S, U); 1 <= ref3 ? u <= ref3 : u >= ref3; i = 1 <= ref3 ? ++u : --u) {\n          shifted_variations += this.nCk(S + U, i);\n        }\n        guesses *= shifted_variations;\n      }\n    }\n    return guesses;\n  },\n  dictionary_guesses: function(match) {\n    var reversed_variations;\n    match.base_guesses = match.rank;\n    match.uppercase_variations = this.uppercase_variations(match);\n    match.l33t_variations = this.l33t_variations(match);\n    reversed_variations = match.reversed && 2 || 1;\n    return match.base_guesses * match.uppercase_variations * match.l33t_variations * reversed_variations;\n  },\n  START_UPPER: /^[A-Z][^A-Z]+$/,\n  END_UPPER: /^[^A-Z]+[A-Z]$/,\n  ALL_UPPER: /^[^a-z]+$/,\n  ALL_LOWER: /^[^A-Z]+$/,\n  uppercase_variations: function(match) {\n    var L, U, chr, i, len, o, q, ref, ref1, regex, variations, word;\n    word = match.token;\n    if (word.match(this.ALL_LOWER) || word.toLowerCase() === word) {\n      return 1;\n    }\n    ref = [this.START_UPPER, this.END_UPPER, this.ALL_UPPER];\n    for (o = 0, len = ref.length; o < len; o++) {\n      regex = ref[o];\n      if (word.match(regex)) {\n        return 2;\n      }\n    }\n    U = ((function() {\n      var len1, q, ref1, results;\n      ref1 = word.split('');\n      results = [];\n      for (q = 0, len1 = ref1.length; q < len1; q++) {\n        chr = ref1[q];\n        if (chr.match(/[A-Z]/)) {\n          results.push(chr);\n        }\n      }\n      return results;\n    })()).length;\n    L = ((function() {\n      var len1, q, ref1, results;\n      ref1 = word.split('');\n      results = [];\n      for (q = 0, len1 = ref1.length; q < len1; q++) {\n        chr = ref1[q];\n        if (chr.match(/[a-z]/)) {\n          results.push(chr);\n        }\n      }\n      return results;\n    })()).length;\n    variations = 0;\n    for (i = q = 1, ref1 = Math.min(U, L); 1 <= ref1 ? q <= ref1 : q >= ref1; i = 1 <= ref1 ? ++q : --q) {\n      variations += this.nCk(U + L, i);\n    }\n    return variations;\n  },\n  l33t_variations: function(match) {\n    var S, U, chr, chrs, i, o, p, possibilities, ref, ref1, subbed, unsubbed, variations;\n    if (!match.l33t) {\n      return 1;\n    }\n    variations = 1;\n    ref = match.sub;\n    for (subbed in ref) {\n      unsubbed = ref[subbed];\n      chrs = match.token.toLowerCase().split('');\n      S = ((function() {\n        var len, o, results;\n        results = [];\n        for (o = 0, len = chrs.length; o < len; o++) {\n          chr = chrs[o];\n          if (chr === subbed) {\n            results.push(chr);\n          }\n        }\n        return results;\n      })()).length;\n      U = ((function() {\n        var len, o, results;\n        results = [];\n        for (o = 0, len = chrs.length; o < len; o++) {\n          chr = chrs[o];\n          if (chr === unsubbed) {\n            results.push(chr);\n          }\n        }\n        return results;\n      })()).length;\n      if (S === 0 || U === 0) {\n        variations *= 2;\n      } else {\n        p = Math.min(U, S);\n        possibilities = 0;\n        for (i = o = 1, ref1 = p; 1 <= ref1 ? o <= ref1 : o >= ref1; i = 1 <= ref1 ? ++o : --o) {\n          possibilities += this.nCk(U + S, i);\n        }\n        variations *= possibilities;\n      }\n    }\n    return variations;\n  }\n};\n\nmodule.exports = scoring;\n\n//# sourceMappingURL=scoring.js.map\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","module.exports = {\n  \"0\": \"0️⃣\",\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  \"10\": \"🔟\",\n  \"100\": \"💯\",\n  \"1234\": \"🔢\",\n  grinning_face: \"😀\",\n  grinning_face_with_big_eyes: \"😃\",\n  grinning_face_with_smiling_eyes: \"😁\",\n  beaming_face_with_smiling_eyes: \"😁\",\n  grinning_squinting_face: \"😆\",\n  grinning_face_with_sweat: \"😅\",\n  rolling_on_the_floor_laughing: \"🤣\",\n  face_with_tears_of_joy: \"😂\",\n  slightly_smiling_face: \"🙂\",\n  upside_down_face: \"🙃\",\n  winking_face: \"😉\",\n  smiling_face_with_smiling_eyes: \"😊\",\n  smiling_face_with_halo: \"😇\",\n  smiling_face_with_hearts: \"🥰\",\n  smiling_face_with_heart_eyes: \"😍\",\n  star_struck: \"🤩\",\n  face_blowing_a_kiss: \"😘\",\n  kissing_face: \"😗\",\n  smiling_face: \"☺️\",\n  kissing_face_with_closed_eyes: \"😚\",\n  kissing_face_with_smiling_eyes: \"😙\",\n  face_savoring_food: \"😋\",\n  face_with_tongue: \"😛\",\n  winking_face_with_tongue: \"😜\",\n  zany_face: \"🤪\",\n  squinting_face_with_tongue: \"😝\",\n  money_mouth_face: \"🤑\",\n  hugging_face: \"🤗\",\n  face_with_hand_over_mouth: \"🤭\",\n  shushing_face: \"🤫\",\n  thinking_face: \"🤔\",\n  zipper_mouth_face: \"🤐\",\n  face_with_raised_eyebrow: \"🤨\",\n  neutral_face: \"😐\",\n  expressionless_face: \"😑\",\n  face_without_mouth: \"😶\",\n  smirking_face: \"😏\",\n  unamused_face: \"😒\",\n  face_with_rolling_eyes: \"🙄\",\n  grimacing_face: \"😬\",\n  lying_face: \"🤥\",\n  relieved_face: \"😌\",\n  pensive_face: \"😔\",\n  sleepy_face: \"😪\",\n  drooling_face: \"🤤\",\n  sleeping_face: \"😴\",\n  face_with_medical_mask: \"😷\",\n  face_with_thermometer: \"🤒\",\n  face_with_head_bandage: \"🤕\",\n  nauseated_face: \"🤢\",\n  face_vomiting: \"🤮\",\n  sneezing_face: \"🤧\",\n  hot_face: \"🥵\",\n  cold_face: \"🥶\",\n  woozy_face: \"🥴\",\n  dizzy_face: \"😵\",\n  exploding_head: \"🤯\",\n  cowboy_hat_face: \"🤠\",\n  partying_face: \"🥳\",\n  smiling_face_with_sunglasses: \"😎\",\n  nerd_face: \"🤓\",\n  face_with_monocle: \"🧐\",\n  confused_face: \"😕\",\n  worried_face: \"😟\",\n  slightly_frowning_face: \"🙁\",\n  frowning_face: \"☹\",\n  face_with_open_mouth: \"😮\",\n  hushed_face: \"😯\",\n  astonished_face: \"😲\",\n  flushed_face: \"😳\",\n  pleading_face: \"🥺\",\n  frowning_face_with_open_mouth: \"😦\",\n  anguished_face: \"😧\",\n  fearful_face: \"😨\",\n  anxious_face_with_sweat: \"😰\",\n  sad_but_relieved_face: \"😥\",\n  crying_face: \"😢\",\n  loudly_crying_face: \"😭\",\n  face_screaming_in_fear: \"😱\",\n  confounded_face: \"😖\",\n  persevering_face: \"😣\",\n  disappointed_face: \"😞\",\n  downcast_face_with_sweat: \"😓\",\n  weary_face: \"😩\",\n  tired_face: \"😫\",\n  yawning_face: \"🥱\",\n  face_with_steam_from_nose: \"😤\",\n  pouting_face: \"😡\",\n  angry_face: \"😠\",\n  face_with_symbols_on_mouth: \"🤬\",\n  smiling_face_with_horns: \"😈\",\n  angry_face_with_horns: \"👿\",\n  skull: \"💀\",\n  skull_and_crossbones: \"☠️\",\n  pile_of_poo: \"💩\",\n  clown_face: \"🤡\",\n  ogre: \"👹\",\n  goblin: \"👺\",\n  ghost: \"👻\",\n  alien: \"👽\",\n  alien_monster: \"👾\",\n  robot: \"🤖\",\n  grinning_cat: \"😺\",\n  grinning_cat_with_smiling_eyes: \"😸\",\n  cat_with_tears_of_joy: \"😹\",\n  smiling_cat_with_heart_eyes: \"😻\",\n  cat_with_wry_smile: \"😼\",\n  kissing_cat: \"😽\",\n  weary_cat: \"🙀\",\n  crying_cat: \"😿\",\n  pouting_cat: \"😾\",\n  see_no_evil_monkey: \"🙈\",\n  hear_no_evil_monkey: \"🙉\",\n  speak_no_evil_monkey: \"🙊\",\n  kiss_mark: \"💋\",\n  love_letter: \"💌\",\n  heart_with_arrow: \"💘\",\n  heart_with_ribbon: \"💝\",\n  sparkling_heart: \"💖\",\n  growing_heart: \"💗\",\n  beating_heart: \"💓\",\n  revolving_hearts: \"💞\",\n  two_hearts: \"💕\",\n  heart_decoration: \"💟\",\n  heart_exclamation: \"❣️\",\n  broken_heart: \"💔\",\n  red_heart: \"❤️\",\n  orange_heart: \"🧡\",\n  yellow_heart: \"💛\",\n  green_heart: \"💚\",\n  blue_heart: \"💙\",\n  purple_heart: \"💜\",\n  brown_heart: \"🤎\",\n  black_heart: \"🖤\",\n  white_heart: \"🤍\",\n  hundred_points: \"💯\",\n  anger_symbol: \"💢\",\n  collision: \"💥\",\n  dizzy: \"💫\",\n  sweat_droplets: \"💦\",\n  dashing_away: \"💨\",\n  hole: \"🕳️\",\n  bomb: \"💣\",\n  speech_balloon: \"💬\",\n  eye_in_speech_bubble: \"👁‍🗨\",\n  left_speech_bubble: \"🗨️\",\n  right_anger_bubble: \"🗯️\",\n  thought_balloon: \"💭\",\n  zzz: \"💤\",\n  waving_hand: \"👋\",\n  raised_back_of_hand: \"🤚\",\n  hand_with_fingers_splayed: \"🖐\",\n  raised_hand: \"✋\",\n  vulcan_salute: \"🖖\",\n  ok_hand: \"👌\",\n  pinching_hand: \"🤏\",\n  victory_hand: \"✌\",\n  crossed_fingers: \"🤞\",\n  love_you_gesture: \"🤟\",\n  sign_of_the_horns: \"🤘\",\n  call_me_hand: \"🤙\",\n  backhand_index_pointing_left: \"👈\",\n  backhand_index_pointing_right: \"👉\",\n  backhand_index_pointing_up: \"👆\",\n  middle_finger: \"🖕\",\n  backhand_index_pointing_down: \"👇\",\n  index_pointing_up: \"☝️\",\n  thumbs_up: \"👍\",\n  thumbs_down: \"👎\",\n  raised_fist: \"✊\",\n  oncoming_fist: \"👊\",\n  left_facing_fist: \"🤛\",\n  right_facing_fist: \"🤜\",\n  clapping_hands: \"👏\",\n  raising_hands: \"🙌\",\n  open_hands: \"👐\",\n  palms_up_together: \"🤲\",\n  handshake: \"🤝\",\n  folded_hands: \"🙏\",\n  writing_hand: \"✍️\",\n  nail_polish: \"💅\",\n  selfie: \"🤳\",\n  flexed_biceps: \"💪\",\n  mechanical_arm: \"🦾\",\n  mechanical_leg: \"🦿\",\n  leg: \"🦵\",\n  foot: \"🦶\",\n  ear: \"👂\",\n  ear_with_hearing_aid: \"🦻\",\n  nose: \"👃\",\n  brain: \"🧠\",\n  tooth: \"🦷\",\n  bone: \"🦴\",\n  eyes: \"👀\",\n  eye: \"👁️\",\n  tongue: \"👅\",\n  mouth: \"👄\",\n  baby: \"👶\",\n  child: \"🧒\",\n  boy: \"👦\",\n  girl: \"👧\",\n  person: \"🧑\",\n  person_blond_hair: \"👱\",\n  man: \"👨\",\n  man_beard: \"🧔\",\n  man_red_hair: \"👨‍🦰\",\n  man_curly_hair: \"👨‍🦱\",\n  man_white_hair: \"👨‍🦳\",\n  man_bald: \"👨‍🦲\",\n  woman: \"👩\",\n  woman_red_hair: \"👩‍🦰\",\n  person_red_hair: \"🧑‍🦰\",\n  woman_curly_hair: \"👩‍🦱\",\n  person_curly_hair: \"🧑‍🦱\",\n  woman_white_hair: \"👩‍🦳\",\n  person_white_hair: \"🧑‍🦳\",\n  woman_bald: \"👩‍🦲\",\n  person_bald: \"🧑‍🦲\",\n  woman_blond_hair: \"👱‍♀️\",\n  man_blond_hair: \"👱‍♂️\",\n  older_person: \"🧓\",\n  old_man: \"👴\",\n  old_woman: \"👵\",\n  person_frowning: \"🙍\",\n  man_frowning: \"🙍‍♂\",\n  woman_frowning: \"🙍‍♀\",\n  person_pouting: \"🙎\",\n  man_pouting: \"🙎‍♂\",\n  woman_pouting: \"🙎‍♀\",\n  person_gesturing_no: \"🙅\",\n  man_gesturing_no: \"🙅‍♂\",\n  woman_gesturing_no: \"🙅‍♀\",\n  person_gesturing_ok: \"🙆\",\n  man_gesturing_ok: \"🙆‍♂\",\n  woman_gesturing_ok: \"🙆‍♀\",\n  person_tipping_hand: \"💁\",\n  man_tipping_hand: \"💁‍♂\",\n  woman_tipping_hand: \"💁‍♀\",\n  person_raising_hand: \"🙋\",\n  man_raising_hand: \"🙋‍♂\",\n  woman_raising_hand: \"🙋‍♀\",\n  deaf_person: \"🧏\",\n  deaf_man: \"🧏‍♂\",\n  deaf_woman: \"🧏‍♀\",\n  person_bowing: \"🙇\",\n  man_bowing: \"🙇‍♂\",\n  woman_bowing: \"🙇‍♀\",\n  person_facepalming: \"🤦\",\n  man_facepalming: \"🤦‍♂\",\n  woman_facepalming: \"🤦‍♀\",\n  person_shrugging: \"🤷\",\n  man_shrugging: \"🤷‍♂\",\n  woman_shrugging: \"🤷‍♀\",\n  health_worker: \"🧑‍⚕️\",\n  man_health_worker: \"👨‍⚕️\",\n  woman_health_worker: \"👩‍⚕️\",\n  student: \"🧑‍🎓\",\n  man_student: \"👨‍🎓\",\n  woman_student: \"👩‍🎓\",\n  teacher: \"🧑‍🏫\",\n  man_teacher: \"👨‍🏫\",\n  woman_teacher: \"👩‍🏫\",\n  judge: \"🧑‍⚖️\",\n  man_judge: \"👨‍⚖️\",\n  woman_judge: \"👩‍⚖️\",\n  farmer: \"🧑‍🌾\",\n  man_farmer: \"👨‍🌾\",\n  woman_farmer: \"👩‍🌾\",\n  cook: \"🧑‍🍳\",\n  man_cook: \"👨‍🍳\",\n  woman_cook: \"👩‍🍳\",\n  mechanic: \"🧑‍🔧\",\n  man_mechanic: \"👨‍🔧\",\n  woman_mechanic: \"👩‍🔧\",\n  factory_worker: \"🧑‍🏭\",\n  man_factory_worker: \"👨‍🏭\",\n  woman_factory_worker: \"👩‍🏭\",\n  office_worker: \"🧑‍💼\",\n  man_office_worker: \"👨‍💼\",\n  woman_office_worker: \"👩‍💼\",\n  scientist: \"🧑‍🔬\",\n  man_scientist: \"👨‍🔬\",\n  woman_scientist: \"👩‍🔬\",\n  technologist: \"🧑‍💻\",\n  man_technologist: \"👨‍💻\",\n  woman_technologist: \"👩‍💻\",\n  singer: \"🧑‍🎤\",\n  man_singer: \"👨‍🎤\",\n  woman_singer: \"👩‍🎤\",\n  artist: \"🧑‍🎨\",\n  man_artist: \"👨‍🎨\",\n  woman_artist: \"👩‍🎨\",\n  pilot: \"🧑‍✈️\",\n  man_pilot: \"👨‍✈️\",\n  woman_pilot: \"👩‍✈️\",\n  astronaut: \"🧑‍🚀\",\n  man_astronaut: \"👨‍🚀\",\n  woman_astronaut: \"👩‍🚀\",\n  firefighter: \"🧑‍🚒\",\n  man_firefighter: \"👨‍🚒\",\n  woman_firefighter: \"👩‍🚒\",\n  police_officer: \"👮\",\n  man_police_officer: \"👮‍♂\",\n  woman_police_officer: \"👮‍♀\",\n  detective: \"🕵\",\n  man_detective: \"🕵️‍♂️\",\n  woman_detective: \"🕵️‍♀️\",\n  guard: \"💂\",\n  man_guard: \"💂‍♂\",\n  woman_guard: \"💂‍♀\",\n  construction_worker: \"👷\",\n  man_construction_worker: \"👷‍♂\",\n  woman_construction_worker: \"👷‍♀\",\n  prince: \"🤴\",\n  princess: \"👸\",\n  person_wearing_turban: \"👳\",\n  man_wearing_turban: \"👳‍♂\",\n  woman_wearing_turban: \"👳‍♀\",\n  man_with_skullcap: \"👲\",\n  woman_with_headscarf: \"🧕\",\n  man_in_tuxedo: \"🤵\",\n  bride_with_veil: \"👰\",\n  pregnant_woman: \"🤰\",\n  breast_feeding: \"🤱\",\n  baby_angel: \"👼\",\n  santa_claus: \"🎅\",\n  mrs_claus: \"🤶\",\n  superhero: \"🦸\",\n  man_superhero: \"🦸‍♂\",\n  woman_superhero: \"🦸‍♀\",\n  supervillain: \"🦹\",\n  man_supervillain: \"🦹‍♂\",\n  woman_supervillain: \"🦹‍♀\",\n  mage: \"🧙\",\n  man_mage: \"🧙‍♂\",\n  woman_mage: \"🧙‍♀\",\n  fairy: \"🧚\",\n  man_fairy: \"🧚‍♂\",\n  woman_fairy: \"🧚‍♀\",\n  vampire: \"🧛\",\n  man_vampire: \"🧛‍♂\",\n  woman_vampire: \"🧛‍♀\",\n  merperson: \"🧜\",\n  merman: \"🧜‍♂️\",\n  mermaid: \"🧜‍♀️\",\n  elf: \"🧝\",\n  man_elf: \"🧝‍♂\",\n  woman_elf: \"🧝‍♀\",\n  genie: \"🧞\",\n  man_genie: \"🧞‍♂\",\n  woman_genie: \"🧞‍♀\",\n  zombie: \"🧟\",\n  man_zombie: \"🧟‍♂\",\n  woman_zombie: \"🧟‍♀\",\n  person_getting_massage: \"💆\",\n  man_getting_massage: \"💆‍♂\",\n  woman_getting_massage: \"💆‍♀\",\n  person_getting_haircut: \"💇\",\n  man_getting_haircut: \"💇‍♂\",\n  woman_getting_haircut: \"💇‍♀\",\n  person_walking: \"🚶\",\n  man_walking: \"🚶‍♂\",\n  woman_walking: \"🚶‍♀\",\n  person_standing: \"🧍\",\n  man_standing: \"🧍‍♂\",\n  woman_standing: \"🧍‍♀\",\n  person_kneeling: \"🧎\",\n  man_kneeling: \"🧎‍♂\",\n  woman_kneeling: \"🧎‍♀\",\n  person_with_probing_cane: \"🧑‍🦯\",\n  man_with_probing_cane: \"👨‍🦯\",\n  woman_with_probing_cane: \"👩‍🦯\",\n  person_in_motorized_wheelchair: \"🧑‍🦼\",\n  man_in_motorized_wheelchair: \"👨‍🦼\",\n  woman_in_motorized_wheelchair: \"👩‍🦼\",\n  person_in_manual_wheelchair: \"🧑‍🦽\",\n  man_in_manual_wheelchair: \"👨‍🦽\",\n  woman_in_manual_wheelchair: \"👩‍🦽\",\n  person_running: \"🏃\",\n  man_running: \"🏃‍♂\",\n  woman_running: \"🏃‍♀\",\n  woman_dancing: \"💃\",\n  man_dancing: \"🕺\",\n  man_in_suit_levitating: \"🕴\",\n  people_with_bunny_ears: \"👯\",\n  men_with_bunny_ears: \"👯‍♂\",\n  women_with_bunny_ears: \"👯‍♀\",\n  person_in_steamy_room: \"🧖\",\n  man_in_steamy_room: \"🧖‍♂️\",\n  woman_in_steamy_room: \"🧖‍♀️\",\n  person_climbing: \"🧗\",\n  man_climbing: \"🧗‍♂️\",\n  woman_climbing: \"🧗‍♀️\",\n  person_fencing: \"🤺\",\n  horse_racing: \"🏇\",\n  skier: \"⛷️\",\n  snowboarder: \"🏂\",\n  person_golfing: \"🏌\",\n  man_golfing: \"🏌♂️\",\n  woman_golfing: \"🏌‍♀️\",\n  person_surfing: \"🏄\",\n  man_surfing: \"🏄‍♂\",\n  woman_surfing: \"🏄‍♀\",\n  person_rowing_boat: \"🚣\",\n  man_rowing_boat: \"🚣‍♂\",\n  woman_rowing_boat: \"🚣‍♀\",\n  person_swimming: \"🏊\",\n  man_swimming: \"🏊‍♂\",\n  woman_swimming: \"🏊‍♀\",\n  person_bouncing_ball: \"⛹\",\n  man_bouncing_ball: \"⛹️‍♂️\",\n  woman_bouncing_ball: \"⛹️‍♀️\",\n  person_lifting_weights: \"🏋\",\n  man_lifting_weights: \"🏋️‍♂️\",\n  woman_lifting_weights: \"🏋️‍♀️\",\n  person_biking: \"🚴\",\n  man_biking: \"🚴‍♂\",\n  woman_biking: \"🚴‍♀\",\n  person_mountain_biking: \"🚵\",\n  man_mountain_biking: \"🚵‍♂\",\n  woman_mountain_biking: \"🚵‍♀\",\n  person_cartwheeling: \"🤸\",\n  man_cartwheeling: \"🤸‍♂\",\n  woman_cartwheeling: \"🤸‍♀\",\n  people_wrestling: \"🤼\",\n  men_wrestling: \"🤼‍♂\",\n  women_wrestling: \"🤼‍♀\",\n  person_playing_water_polo: \"🤽\",\n  man_playing_water_polo: \"🤽‍♂\",\n  woman_playing_water_polo: \"🤽‍♀\",\n  person_playing_handball: \"🤾\",\n  man_playing_handball: \"🤾‍♂\",\n  woman_playing_handball: \"🤾‍♀\",\n  person_juggling: \"🤹\",\n  man_juggling: \"🤹‍♂️\",\n  woman_juggling: \"🤹‍♀️\",\n  person_in_lotus_position: \"🧘\",\n  man_in_lotus_position: \"🧘‍♂️\",\n  woman_in_lotus_position: \"🧘‍♀️\",\n  person_taking_bath: \"🛀\",\n  person_in_bed: \"🛌\",\n  people_holding_hands: \"🧑‍🤝‍🧑\",\n  women_holding_hands: \"👭\",\n  woman_and_man_holding_hands: \"👫\",\n  men_holding_hands: \"👬\",\n  kiss: \"💋\",\n  kiss_woman_man: \"👩‍❤️‍💋‍👨\",\n  kiss_man_man: \"👨‍❤️‍💋‍👨\",\n  kiss_woman_woman: \"👩‍❤️‍💋‍👩\",\n  couple_with_heart: \"💑\",\n  couple_with_heart_woman_man: \"👩‍❤️‍👨\",\n  couple_with_heart_man_man: \"👨‍❤‍👨\",\n  couple_with_heart_woman_woman: \"👩‍❤‍👩\",\n  family: \"👪\",\n  family_man_woman_boy: \"👨‍👩‍👦\",\n  family_man_woman_girl: \"👨‍👩‍👧\",\n  family_man_woman_girl_boy: \"👨‍👩‍👧‍👦\",\n  family_man_woman_boy_boy: \"👨‍👩‍👦‍👦\",\n  family_man_woman_girl_girl: \"👨‍👩‍👧‍👧\",\n  family_man_man_boy: \"👨‍👨‍👦\",\n  family_man_man_girl: \"👨‍👨‍👧\",\n  family_man_man_girl_boy: \"👨‍👨‍👧‍👦\",\n  family_man_man_boy_boy: \"👨‍👨‍👦‍👦\",\n  family_man_man_girl_girl: \"👨‍👨‍👧‍👧\",\n  family_woman_woman_boy: \"👩‍👩‍👦\",\n  family_woman_woman_girl: \"👩‍👩‍👧\",\n  family_woman_woman_girl_boy: \"👩‍👩‍👧‍👦\",\n  family_woman_woman_boy_boy: \"👩‍👩‍👦‍👦\",\n  family_woman_woman_girl_girl: \"👩‍👩‍👧‍👧\",\n  family_man_boy: \"👨‍👦\",\n  family_man_boy_boy: \"👨‍👦‍👦\",\n  family_man_girl: \"👨‍👧\",\n  family_man_girl_boy: \"👨‍👧‍👦\",\n  family_man_girl_girl: \"👨‍👧‍👧\",\n  family_woman_boy: \"👩‍👦\",\n  family_woman_boy_boy: \"👩‍👦‍👦\",\n  family_woman_girl: \"👩‍👧\",\n  family_woman_girl_boy: \"👩‍👧‍👦\",\n  family_woman_girl_girl: \"👩‍👧‍👧\",\n  speaking_head: \"🗣\",\n  bust_in_silhouette: \"👤\",\n  busts_in_silhouette: \"👥\",\n  footprints: \"👣\",\n  monkey_face: \"🐵\",\n  monkey: \"🐒\",\n  gorilla: \"🦍\",\n  orangutan: \"🦧\",\n  dog_face: \"🐶\",\n  dog: \"🐶\",\n  guide_dog: \"🦮\",\n  service_dog: \"🐕‍🦺\",\n  poodle: \"🐩\",\n  wolf: \"🐺\",\n  fox: \"🦊\",\n  raccoon: \"🦝\",\n  cat_face: \"🐱\",\n  cat: \"🐱\",\n  lion: \"🦁\",\n  tiger_face: \"🐯\",\n  tiger: \"🐯\",\n  leopard: \"🐆\",\n  horse_face: \"🐴\",\n  horse: \"🐴\",\n  unicorn: \"🦄\",\n  zebra: \"🦓\",\n  deer: \"🦌\",\n  cow_face: \"🐮\",\n  ox: \"🐂\",\n  water_buffalo: \"🐃\",\n  cow: \"🐮\",\n  pig_face: \"🐷\",\n  pig: \"🐷\",\n  boar: \"🐗\",\n  pig_nose: \"🐽\",\n  ram: \"🐏\",\n  ewe: \"🐑\",\n  goat: \"🐐\",\n  camel: \"🐫\",\n  two_hump_camel: \"🐫\",\n  llama: \"🦙\",\n  giraffe: \"🦒\",\n  elephant: \"🐘\",\n  rhinoceros: \"🦏\",\n  hippopotamus: \"🦛\",\n  mouse_face: \"🐭\",\n  mouse: \"🐭\",\n  rat: \"🐀\",\n  hamster: \"🐹\",\n  rabbit_face: \"🐰\",\n  rabbit: \"🐰\",\n  chipmunk: \"🐿️\",\n  hedgehog: \"🦔\",\n  bat: \"🦇\",\n  bear: \"🐻\",\n  koala: \"🐨\",\n  panda: \"🐼\",\n  sloth: \"🦥\",\n  otter: \"🦦\",\n  skunk: \"🦨\",\n  kangaroo: \"🦘\",\n  badger: \"🦡\",\n  paw_prints: \"🐾\",\n  turkey: \"🦃\",\n  chicken: \"🐔\",\n  rooster: \"🐓\",\n  hatching_chick: \"🐣\",\n  baby_chick: \"🐤\",\n  front_facing_baby_chick: \"🐥\",\n  bird: \"🐦\",\n  penguin: \"🐧\",\n  dove: \"🕊\",\n  eagle: \"🦅\",\n  duck: \"🦆\",\n  swan: \"🦢\",\n  owl: \"🦉\",\n  flamingo: \"🦩\",\n  peacock: \"🦚\",\n  parrot: \"🦜\",\n  frog: \"🐸\",\n  crocodile: \"🐊\",\n  turtle: \"🐢\",\n  lizard: \"🦎\",\n  snake: \"🐍\",\n  dragon_face: \"🐲\",\n  dragon: \"🐉\",\n  sauropod: \"🦕\",\n  t_rex: \"🦖\",\n  spouting_whale: \"🐳\",\n  whale: \"🐳\",\n  dolphin: \"🐬\",\n  fish: \"🐟\",\n  tropical_fish: \"🐠\",\n  blowfish: \"🐡\",\n  shark: \"🦈\",\n  octopus: \"🐙\",\n  spiral_shell: \"🐚\",\n  snail: \"🐌\",\n  butterfly: \"🦋\",\n  bug: \"🐛\",\n  ant: \"🐜\",\n  honeybee: \"🐝\",\n  lady_beetle: \"🐞\",\n  cricket: \"🦗\",\n  spider: \"🕷️\",\n  spider_web: \"🕸️\",\n  scorpion: \"🦂\",\n  mosquito: \"🦟\",\n  microbe: \"🦠\",\n  bouquet: \"💐\",\n  cherry_blossom: \"🌸\",\n  white_flower: \"💮\",\n  rosette: \"🏵️\",\n  rose: \"🌹\",\n  wilted_flower: \"🥀\",\n  hibiscus: \"🌺\",\n  sunflower: \"🌻\",\n  blossom: \"🌼\",\n  tulip: \"🌷\",\n  seedling: \"🌱\",\n  evergreen_tree: \"🌲\",\n  deciduous_tree: \"🌳\",\n  palm_tree: \"🌴\",\n  cactus: \"🌵\",\n  sheaf_of_rice: \"🌾\",\n  herb: \"🌿\",\n  shamrock: \"☘️\",\n  four_leaf_clover: \"🍀\",\n  maple_leaf: \"🍁\",\n  fallen_leaf: \"🍂\",\n  leaf_fluttering_in_wind: \"🍃\",\n  grapes: \"🍇\",\n  melon: \"🍈\",\n  watermelon: \"🍉\",\n  tangerine: \"🍊\",\n  lemon: \"🍋\",\n  banana: \"🍌\",\n  pineapple: \"🍍\",\n  mango: \"🥭\",\n  red_apple: \"🍎\",\n  green_apple: \"🍏\",\n  pear: \"🍐\",\n  peach: \"🍑\",\n  cherries: \"🍒\",\n  strawberry: \"🍓\",\n  kiwi_fruit: \"🥝\",\n  tomato: \"🍅\",\n  coconut: \"🥥\",\n  avocado: \"🥑\",\n  eggplant: \"🍆\",\n  potato: \"🥔\",\n  carrot: \"🥕\",\n  ear_of_corn: \"🌽\",\n  hot_pepper: \"🌶️\",\n  cucumber: \"🥒\",\n  leafy_green: \"🥬\",\n  broccoli: \"🥦\",\n  garlic: \"🧄\",\n  onion: \"🧅\",\n  mushroom: \"🍄\",\n  peanuts: \"🥜\",\n  chestnut: \"🌰\",\n  bread: \"🍞\",\n  croissant: \"🥐\",\n  baguette_bread: \"🥖\",\n  pretzel: \"🥨\",\n  bagel: \"🥯\",\n  pancakes: \"🥞\",\n  waffle: \"🧇\",\n  cheese_wedge: \"🧀\",\n  meat_on_bone: \"🍖\",\n  poultry_leg: \"🍗\",\n  cut_of_meat: \"🥩\",\n  bacon: \"🥓\",\n  hamburger: \"🍔\",\n  french_fries: \"🍟\",\n  pizza: \"🍕\",\n  hot_dog: \"🌭\",\n  sandwich: \"🥪\",\n  taco: \"🌮\",\n  burrito: \"🌯\",\n  stuffed_flatbread: \"🥙\",\n  falafel: \"🧆\",\n  egg: \"🥚\",\n  cooking: \"🍳\",\n  shallow_pan_of_food: \"🥘\",\n  pot_of_food: \"🍲\",\n  bowl_with_spoon: \"🥣\",\n  green_salad: \"🥗\",\n  popcorn: \"🍿\",\n  butter: \"🧈\",\n  salt: \"🧂\",\n  canned_food: \"🥫\",\n  bento_box: \"🍱\",\n  rice_cracker: \"🍘\",\n  rice_ball: \"🍙\",\n  cooked_rice: \"🍚\",\n  curry_rice: \"🍛\",\n  steaming_bowl: \"🍜\",\n  spaghetti: \"🍝\",\n  roasted_sweet_potato: \"🍠\",\n  oden: \"🍢\",\n  sushi: \"🍣\",\n  fried_shrimp: \"🍤\",\n  fish_cake_with_swirl: \"🍥\",\n  moon_cake: \"🥮\",\n  dango: \"🍡\",\n  dumpling: \"🥟\",\n  fortune_cookie: \"🥠\",\n  takeout_box: \"🥡\",\n  crab: \"🦀\",\n  lobster: \"🦞\",\n  shrimp: \"🦐\",\n  squid: \"🦑\",\n  oyster: \"🦪\",\n  soft_ice_cream: \"🍦\",\n  shaved_ice: \"🍧\",\n  ice_cream: \"🍨\",\n  doughnut: \"🍩\",\n  cookie: \"🍪\",\n  birthday_cake: \"🎂\",\n  shortcake: \"🍰\",\n  cupcake: \"🧁\",\n  pie: \"🥧\",\n  chocolate_bar: \"🍫\",\n  candy: \"🍬\",\n  lollipop: \"🍭\",\n  custard: \"🍮\",\n  honey_pot: \"🍯\",\n  baby_bottle: \"🍼\",\n  glass_of_milk: \"🥛\",\n  hot_beverage: \"☕\",\n  teacup_without_handle: \"🍵\",\n  sake: \"🍶\",\n  bottle_with_popping_cork: \"🍾\",\n  wine_glass: \"🍷\",\n  cocktail_glass: \"🍸\",\n  tropical_drink: \"🍹\",\n  beer_mug: \"🍺\",\n  clinking_beer_mugs: \"🍻\",\n  clinking_glasses: \"🥂\",\n  tumbler_glass: \"🥃\",\n  cup_with_straw: \"🥤\",\n  beverage_box: \"🧃\",\n  mate: \"🧉\",\n  ice: \"🧊\",\n  chopsticks: \"🥢\",\n  fork_and_knife_with_plate: \"🍽\",\n  fork_and_knife: \"🍴\",\n  spoon: \"🥄\",\n  kitchen_knife: \"🔪\",\n  amphora: \"🏺\",\n  globe_showing_europe_africa: \"🌍\",\n  globe_showing_americas: \"🌎\",\n  globe_showing_asia_australia: \"🌏\",\n  globe_with_meridians: \"🌐\",\n  world_map: \"🗺️\",\n  map_of_japan: \"🗾\",\n  compass: \"🧭\",\n  snow_capped_mountain: \"🏔️\",\n  mountain: \"⛰️\",\n  volcano: \"🌋\",\n  mount_fuji: \"🗻\",\n  camping: \"🏕️\",\n  beach_with_umbrella: \"🏖️\",\n  desert: \"🏜️\",\n  desert_island: \"🏝️\",\n  national_park: \"🏞️\",\n  stadium: \"🏟️\",\n  classical_building: \"🏛️\",\n  building_construction: \"🏗️\",\n  brick: \"🧱\",\n  houses: \"🏘\",\n  derelict_house: \"🏚\",\n  house: \"🏠\",\n  house_with_garden: \"🏡\",\n  office_building: \"🏢\",\n  japanese_post_office: \"🏣\",\n  post_office: \"🏣\",\n  hospital: \"🏥\",\n  bank: \"🏦\",\n  hotel: \"🏨\",\n  love_hotel: \"🏩\",\n  convenience_store: \"🏪\",\n  school: \"🏫\",\n  department_store: \"🏬\",\n  factory: \"🏭\",\n  japanese_castle: \"🏯\",\n  castle: \"🏰\",\n  wedding: \"💒\",\n  tokyo_tower: \"🗼\",\n  statue_of_liberty: \"🗽\",\n  church: \"⛪\",\n  mosque: \"🕌\",\n  hindu_temple: \"🛕\",\n  synagogue: \"🕍\",\n  shinto_shrine: \"⛩️\",\n  kaaba: \"🕋\",\n  fountain: \"⛲\",\n  tent: \"⛺\",\n  foggy: \"🌁\",\n  night_with_stars: \"🌃\",\n  cityscape: \"🏙️\",\n  sunrise_over_mountains: \"🌄\",\n  sunrise: \"🌅\",\n  cityscape_at_dusk: \"🌆\",\n  sunset: \"🌇\",\n  bridge_at_night: \"🌉\",\n  hot_springs: \"♨\",\n  carousel_horse: \"🎠\",\n  ferris_wheel: \"🎡\",\n  roller_coaster: \"🎢\",\n  barber_pole: \"💈\",\n  circus_tent: \"🎪\",\n  locomotive: \"🚂\",\n  railway_car: \"🚃\",\n  high_speed_train: \"🚄\",\n  bullet_train: \"🚅\",\n  train: \"🚋\",\n  metro: \"🚇\",\n  light_rail: \"🚈\",\n  station: \"🚉\",\n  tram: \"🚊\",\n  monorail: \"🚝\",\n  mountain_railway: \"🚞\",\n  tram_car: \"🚋\",\n  bus: \"🚌\",\n  oncoming_bus: \"🚍\",\n  trolleybus: \"🚎\",\n  minibus: \"🚐\",\n  ambulance: \"🚑\",\n  fire_engine: \"🚒\",\n  police_car: \"🚓\",\n  oncoming_police_car: \"🚔\",\n  taxi: \"🚕\",\n  oncoming_taxi: \"🚖\",\n  automobile: \"🚗\",\n  oncoming_automobile: \"🚘\",\n  sport_utility_vehicle: \"🚙\",\n  delivery_truck: \"🚚\",\n  articulated_lorry: \"🚛\",\n  tractor: \"🚜\",\n  racing_car: \"🏎️\",\n  motorcycle: \"🏍\",\n  motor_scooter: \"🛵\",\n  manual_wheelchair: \"🦽\",\n  motorized_wheelchair: \"🦼\",\n  auto_rickshaw: \"🛺\",\n  bicycle: \"🚲\",\n  kick_scooter: \"🛴\",\n  skateboard: \"🛹\",\n  bus_stop: \"🚏\",\n  motorway: \"🛣️\",\n  railway_track: \"🛤️\",\n  oil_drum: \"🛢️\",\n  fuel_pump: \"⛽\",\n  police_car_light: \"🚨\",\n  horizontal_traffic_light: \"🚥\",\n  vertical_traffic_light: \"🚦\",\n  stop_sign: \"🛑\",\n  construction: \"🚧\",\n  anchor: \"⚓\",\n  sailboat: \"⛵\",\n  canoe: \"🛶\",\n  speedboat: \"🚤\",\n  passenger_ship: \"🛳️\",\n  ferry: \"⛴️\",\n  motor_boat: \"🛥️\",\n  ship: \"🚢\",\n  airplane: \"✈️\",\n  small_airplane: \"🛩️\",\n  airplane_departure: \"🛫\",\n  airplane_arrival: \"🛬\",\n  parachute: \"🪂\",\n  seat: \"💺\",\n  helicopter: \"🚁\",\n  suspension_railway: \"🚟\",\n  mountain_cableway: \"🚠\",\n  aerial_tramway: \"🚡\",\n  satellite: \"🛰️\",\n  rocket: \"🚀\",\n  flying_saucer: \"🛸\",\n  bellhop_bell: \"🛎️\",\n  luggage: \"🧳\",\n  hourglass_done: \"⌛\",\n  hourglass_not_done: \"⏳\",\n  watch: \"⌚\",\n  alarm_clock: \"⏰\",\n  stopwatch: \"⏱️\",\n  timer_clock: \"⏲️\",\n  mantelpiece_clock: \"🕰️\",\n  twelve_o_clock: \"🕛\",\n  twelve_thirty: \"🕧\",\n  one_o_clock: \"🕐\",\n  one_thirty: \"🕜\",\n  two_o_clock: \"🕑\",\n  two_thirty: \"🕝\",\n  three_o_clock: \"🕒\",\n  three_thirty: \"🕞\",\n  four_o_clock: \"🕓\",\n  four_thirty: \"🕟\",\n  five_o_clock: \"🕔\",\n  five_thirty: \"🕠\",\n  six_o_clock: \"🕕\",\n  six_thirty: \"🕡\",\n  seven_o_clock: \"🕖\",\n  seven_thirty: \"🕢\",\n  eight_o_clock: \"🕗\",\n  eight_thirty: \"🕣\",\n  nine_o_clock: \"🕘\",\n  nine_thirty: \"🕤\",\n  ten_o_clock: \"🕙\",\n  ten_thirty: \"🕥\",\n  eleven_o_clock: \"🕚\",\n  eleven_thirty: \"🕦\",\n  new_moon: \"🌑\",\n  waxing_crescent_moon: \"🌒\",\n  first_quarter_moon: \"🌓\",\n  waxing_gibbous_moon: \"🌔\",\n  full_moon: \"🌕\",\n  waning_gibbous_moon: \"🌖\",\n  last_quarter_moon: \"🌗\",\n  waning_crescent_moon: \"🌘\",\n  crescent_moon: \"🌙\",\n  new_moon_face: \"🌚\",\n  first_quarter_moon_face: \"🌛\",\n  last_quarter_moon_face: \"🌜\",\n  thermometer: \"🌡️\",\n  sun: \"☀️\",\n  full_moon_face: \"🌝\",\n  sun_with_face: \"🌞\",\n  ringed_planet: \"🪐\",\n  star: \"⭐\",\n  glowing_star: \"🌟\",\n  shooting_star: \"🌠\",\n  milky_way: \"🌌\",\n  cloud: \"☁️\",\n  sun_behind_cloud: \"⛅\",\n  cloud_with_lightning_and_rain: \"⛈\",\n  sun_behind_small_cloud: \"🌤\",\n  sun_behind_large_cloud: \"🌥\",\n  sun_behind_rain_cloud: \"🌦\",\n  cloud_with_rain: \"🌧\",\n  cloud_with_snow: \"🌨\",\n  cloud_with_lightning: \"🌩\",\n  tornado: \"🌪️\",\n  fog: \"🌫️\",\n  wind_face: \"🌬\",\n  cyclone: \"🌀\",\n  rainbow: \"🌈\",\n  closed_umbrella: \"🌂\",\n  umbrella: \"☂️\",\n  umbrella_with_rain_drops: \"☔\",\n  umbrella_on_ground: \"⛱️\",\n  high_voltage: \"⚡\",\n  snowflake: \"❄️\",\n  snowman: \"☃️\",\n  snowman_without_snow: \"⛄\",\n  comet: \"☄️\",\n  fire: \"🔥\",\n  droplet: \"💧\",\n  water_wave: \"🌊\",\n  jack_o_lantern: \"🎃\",\n  christmas_tree: \"🎄\",\n  fireworks: \"🎆\",\n  sparkler: \"🎇\",\n  firecracker: \"🧨\",\n  sparkles: \"✨\",\n  balloon: \"🎈\",\n  party_popper: \"🎉\",\n  confetti_ball: \"🎊\",\n  tanabata_tree: \"🎋\",\n  pine_decoration: \"🎍\",\n  japanese_dolls: \"🎎\",\n  carp_streamer: \"🎏\",\n  wind_chime: \"🎐\",\n  moon_viewing_ceremony: \"🎑\",\n  red_envelope: \"🧧\",\n  ribbon: \"🎀\",\n  wrapped_gift: \"🎁\",\n  reminder_ribbon: \"🎗️\",\n  admission_tickets: \"🎟️\",\n  ticket: \"🎫\",\n  military_medal: \"🎖\",\n  trophy: \"🏆\",\n  sports_medal: \"🏅\",\n  \"1st_place_medal\": \"🥇\",\n  \"2nd_place_medal\": \"🥈\",\n  \"3rd_place_medal\": \"🥉\",\n  soccer_ball: \"⚽\",\n  baseball: \"⚾\",\n  softball: \"🥎\",\n  basketball: \"🏀\",\n  volleyball: \"🏐\",\n  american_football: \"🏈\",\n  rugby_football: \"🏉\",\n  tennis: \"🎾\",\n  flying_disc: \"🥏\",\n  bowling: \"🎳\",\n  cricket_game: \"🏏\",\n  field_hockey: \"🏑\",\n  ice_hockey: \"🏒\",\n  lacrosse: \"🥍\",\n  ping_pong: \"🏓\",\n  badminton: \"🏸\",\n  boxing_glove: \"🥊\",\n  martial_arts_uniform: \"🥋\",\n  goal_net: \"🥅\",\n  flag_in_hole: \"⛳\",\n  ice_skate: \"⛸️\",\n  fishing_pole: \"🎣\",\n  diving_mask: \"🤿\",\n  running_shirt: \"🎽\",\n  skis: \"🎿\",\n  sled: \"🛷\",\n  curling_stone: \"🥌\",\n  direct_hit: \"🎯\",\n  yo_yo: \"🪀\",\n  kite: \"🪁\",\n  pool_8_ball: \"🎱\",\n  crystal_ball: \"🔮\",\n  nazar_amulet: \"🧿\",\n  video_game: \"🎮\",\n  joystick: \"🕹️\",\n  slot_machine: \"🎰\",\n  game_die: \"🎲\",\n  puzzle_piece: \"🧩\",\n  teddy_bear: \"🧸\",\n  spade_suit: \"♠️\",\n  heart_suit: \"♥️\",\n  diamond_suit: \"♦️\",\n  club_suit: \"♣️\",\n  chess_pawn: \"♟\",\n  joker: \"🃏\",\n  mahjong_red_dragon: \"🀄\",\n  flower_playing_cards: \"🎴\",\n  performing_arts: \"🎭\",\n  framed_picture: \"🖼\",\n  artist_palette: \"🎨\",\n  thread: \"🧵\",\n  yarn: \"🧶\",\n  glasses: \"👓\",\n  sunglasses: \"😎\",\n  goggles: \"🥽\",\n  lab_coat: \"🥼\",\n  safety_vest: \"🦺\",\n  necktie: \"👔\",\n  t_shirt: \"👕\",\n  jeans: \"👖\",\n  scarf: \"🧣\",\n  gloves: \"🧤\",\n  coat: \"🧥\",\n  socks: \"🧦\",\n  dress: \"👗\",\n  kimono: \"👘\",\n  sari: \"🥻\",\n  one_piece_swimsuit: \"🩱\",\n  briefs: \"🩲\",\n  shorts: \"🩳\",\n  bikini: \"👙\",\n  woman_s_clothes: \"👚\",\n  purse: \"👛\",\n  handbag: \"👜\",\n  clutch_bag: \"👝\",\n  shopping_bags: \"🛍️\",\n  backpack: \"🎒\",\n  man_s_shoe: \"👞\",\n  running_shoe: \"👟\",\n  hiking_boot: \"🥾\",\n  flat_shoe: \"🥿\",\n  high_heeled_shoe: \"👠\",\n  woman_s_sandal: \"👡\",\n  ballet_shoes: \"🩰\",\n  woman_s_boot: \"👢\",\n  crown: \"👑\",\n  woman_s_hat: \"👒\",\n  top_hat: \"🎩\",\n  graduation_cap: \"🎓\",\n  billed_cap: \"🧢\",\n  rescue_worker_s_helmet: \"⛑️\",\n  prayer_beads: \"📿\",\n  lipstick: \"💄\",\n  ring: \"💍\",\n  gem_stone: \"💎\",\n  muted_speaker: \"🔇\",\n  speaker_low_volume: \"🔈\",\n  speaker_medium_volume: \"🔉\",\n  speaker_high_volume: \"🔊\",\n  loudspeaker: \"📢\",\n  megaphone: \"📣\",\n  postal_horn: \"📯\",\n  bell: \"🔔\",\n  bell_with_slash: \"🔕\",\n  musical_score: \"🎼\",\n  musical_note: \"🎵\",\n  musical_notes: \"🎶\",\n  studio_microphone: \"🎙️\",\n  level_slider: \"🎚️\",\n  control_knobs: \"🎛️\",\n  microphone: \"🎤\",\n  headphone: \"🎧\",\n  radio: \"📻\",\n  saxophone: \"🎷\",\n  guitar: \"🎸\",\n  musical_keyboard: \"🎹\",\n  trumpet: \"🎺\",\n  violin: \"🎻\",\n  banjo: \"🪕\",\n  drum: \"🥁\",\n  mobile_phone: \"📱\",\n  mobile_phone_with_arrow: \"📲\",\n  telephone: \"☎\",\n  telephone_receiver: \"📞\",\n  pager: \"📟\",\n  fax_machine: \"📠\",\n  battery: \"🔋\",\n  electric_plug: \"🔌\",\n  laptop: \"💻\",\n  desktop_computer: \"🖥️\",\n  printer: \"🖨️\",\n  keyboard: \"⌨️\",\n  computer_mouse: \"🖱\",\n  trackball: \"🖲️\",\n  computer_disk: \"💽\",\n  floppy_disk: \"💾\",\n  optical_disk: \"💿\",\n  dvd: \"📀\",\n  abacus: \"🧮\",\n  movie_camera: \"🎥\",\n  film_frames: \"🎞️\",\n  film_projector: \"📽️\",\n  clapper_board: \"🎬\",\n  television: \"📺\",\n  camera: \"📷\",\n  camera_with_flash: \"📸\",\n  video_camera: \"📹\",\n  videocassette: \"📼\",\n  magnifying_glass_tilted_left: \"🔍\",\n  magnifying_glass_tilted_right: \"🔎\",\n  candle: \"🕯️\",\n  light_bulb: \"💡\",\n  flashlight: \"🔦\",\n  red_paper_lantern: \"🏮\",\n  diya_lamp: \"🪔\",\n  notebook_with_decorative_cover: \"📔\",\n  closed_book: \"📕\",\n  open_book: \"📖\",\n  green_book: \"📗\",\n  blue_book: \"📘\",\n  orange_book: \"📙\",\n  books: \"📚\",\n  notebook: \"📓\",\n  ledger: \"📒\",\n  page_with_curl: \"📃\",\n  scroll: \"📜\",\n  page_facing_up: \"📄\",\n  newspaper: \"📰\",\n  rolled_up_newspaper: \"🗞️\",\n  bookmark_tabs: \"📑\",\n  bookmark: \"🔖\",\n  label: \"🏷️\",\n  money_bag: \"💰\",\n  yen_banknote: \"💴\",\n  dollar_banknote: \"💵\",\n  euro_banknote: \"💶\",\n  pound_banknote: \"💷\",\n  money_with_wings: \"💸\",\n  credit_card: \"💳\",\n  receipt: \"🧾\",\n  chart_increasing_with_yen: \"💹\",\n  currency_exchange: \"💱\",\n  heavy_dollar_sign: \"💲\",\n  envelope: \"✉\",\n  e_mail: \"📧\",\n  incoming_envelope: \"📨\",\n  envelope_with_arrow: \"📩\",\n  outbox_tray: \"📤\",\n  inbox_tray: \"📥\",\n  package: \"📦\",\n  closed_mailbox_with_raised_flag: \"📫\",\n  closed_mailbox_with_lowered_flag: \"📪\",\n  open_mailbox_with_raised_flag: \"📬\",\n  open_mailbox_with_lowered_flag: \"📭\",\n  postbox: \"📮\",\n  ballot_box_with_ballot: \"🗳️\",\n  pencil: \"📝\",\n  black_nib: \"✒️\",\n  fountain_pen: \"🖋\",\n  pen: \"🖊\",\n  paintbrush: \"🖌\",\n  crayon: \"🖍\",\n  memo: \"📝\",\n  briefcase: \"💼\",\n  file_folder: \"📁\",\n  open_file_folder: \"📂\",\n  card_index_dividers: \"🗂️\",\n  calendar: \"📆\",\n  tear_off_calendar: \"📆\",\n  spiral_notepad: \"🗒\",\n  spiral_calendar: \"🗓\",\n  card_index: \"📇\",\n  chart_increasing: \"📈\",\n  chart_decreasing: \"📉\",\n  bar_chart: \"📊\",\n  clipboard: \"📋\",\n  pushpin: \"📌\",\n  round_pushpin: \"📍\",\n  paperclip: \"📎\",\n  linked_paperclips: \"🖇️\",\n  straight_ruler: \"📏\",\n  triangular_ruler: \"📐\",\n  scissors: \"✂️\",\n  card_file_box: \"🗃️\",\n  file_cabinet: \"🗄️\",\n  wastebasket: \"🗑️\",\n  locked: \"🔒\",\n  unlocked: \"🔓\",\n  locked_with_pen: \"🔏\",\n  locked_with_key: \"🔐\",\n  key: \"🔑\",\n  old_key: \"🗝️\",\n  hammer: \"🔨\",\n  axe: \"🪓\",\n  pick: \"⛏️\",\n  hammer_and_pick: \"⚒️\",\n  hammer_and_wrench: \"🛠️\",\n  dagger: \"🗡\",\n  crossed_swords: \"⚔️\",\n  pistol: \"🔫\",\n  bow_and_arrow: \"🏹\",\n  shield: \"🛡️\",\n  wrench: \"🔧\",\n  nut_and_bolt: \"🔩\",\n  gear: \"⚙️\",\n  clamp: \"🗜\",\n  balance_scale: \"⚖\",\n  probing_cane: \"🦯\",\n  link: \"🔗\",\n  chains: \"⛓️\",\n  toolbox: \"🧰\",\n  magnet: \"🧲\",\n  alembic: \"⚗️\",\n  test_tube: \"🧪\",\n  petri_dish: \"🧫\",\n  dna: \"🧬\",\n  microscope: \"🔬\",\n  telescope: \"🔭\",\n  satellite_antenna: \"📡\",\n  syringe: \"💉\",\n  drop_of_blood: \"🩸\",\n  pill: \"💊\",\n  adhesive_bandage: \"🩹\",\n  stethoscope: \"🩺\",\n  door: \"🚪\",\n  bed: \"🛏️\",\n  couch_and_lamp: \"🛋️\",\n  chair: \"🪑\",\n  toilet: \"🚽\",\n  shower: \"🚿\",\n  bathtub: \"🛁\",\n  razor: \"🪒\",\n  lotion_bottle: \"🧴\",\n  safety_pin: \"🧷\",\n  broom: \"🧹\",\n  basket: \"🧺\",\n  roll_of_paper: \"🧻\",\n  soap: \"🧼\",\n  sponge: \"🧽\",\n  fire_extinguisher: \"🧯\",\n  shopping_cart: \"🛒\",\n  cigarette: \"🚬\",\n  coffin: \"⚰️\",\n  funeral_urn: \"⚱️\",\n  moai: \"🗿\",\n  atm_sign: \"🏧\",\n  litter_in_bin_sign: \"🚮\",\n  potable_water: \"🚰\",\n  wheelchair_symbol: \"♿\",\n  men_s_room: \"🚹\",\n  women_s_room: \"🚺\",\n  restroom: \"🚻\",\n  baby_symbol: \"🚼\",\n  water_closet: \"🚾\",\n  passport_control: \"🛂\",\n  customs: \"🛃\",\n  baggage_claim: \"🛄\",\n  left_luggage: \"🛅\",\n  warning: \"⚠️\",\n  children_crossing: \"🚸\",\n  no_entry: \"⛔\",\n  prohibited: \"🚫\",\n  no_bicycles: \"🚳\",\n  no_smoking: \"🚭\",\n  no_littering: \"🚯\",\n  non_potable_water: \"🚱\",\n  no_pedestrians: \"🚷\",\n  no_mobile_phones: \"📵\",\n  no_one_under_eighteen: \"🔞\",\n  radioactive: \"☢\",\n  biohazard: \"☣\",\n  up_arrow: \"⬆️\",\n  up_right_arrow: \"↗️\",\n  right_arrow: \"➡️\",\n  down_right_arrow: \"↘️\",\n  down_arrow: \"⬇️\",\n  down_left_arrow: \"↙️\",\n  left_arrow: \"⬅️\",\n  up_left_arrow: \"↖️\",\n  up_down_arrow: \"↕\",\n  left_right_arrow: \"↔️\",\n  right_arrow_curving_left: \"↩️\",\n  left_arrow_curving_right: \"↪️\",\n  right_arrow_curving_up: \"⤴️\",\n  right_arrow_curving_down: \"⤵️\",\n  clockwise_vertical_arrows: \"🔃\",\n  counterclockwise_arrows_button: \"🔄\",\n  back_arrow: \"🔙\",\n  end_arrow: \"🔚\",\n  on_arrow: \"🔛\",\n  soon_arrow: \"🔜\",\n  top_arrow: \"🔝\",\n  place_of_worship: \"🛐\",\n  atom_symbol: \"⚛️\",\n  om: \"🇴🇲\",\n  star_of_david: \"✡️\",\n  wheel_of_dharma: \"☸️\",\n  yin_yang: \"☯️\",\n  latin_cross: \"✝️\",\n  orthodox_cross: \"☦️\",\n  star_and_crescent: \"☪️\",\n  peace_symbol: \"☮️\",\n  menorah: \"🕎\",\n  dotted_six_pointed_star: \"🔯\",\n  aries: \"♈\",\n  taurus: \"♉\",\n  gemini: \"♊\",\n  cancer: \"♋\",\n  leo: \"♌\",\n  virgo: \"♍\",\n  libra: \"♎\",\n  scorpio: \"♏\",\n  sagittarius: \"♐\",\n  capricorn: \"♑\",\n  aquarius: \"♒\",\n  pisces: \"♓\",\n  ophiuchus: \"⛎\",\n  shuffle_tracks_button: \"🔀\",\n  repeat_button: \"🔁\",\n  repeat_single_button: \"🔂\",\n  play_button: \"▶️\",\n  fast_forward_button: \"⏩\",\n  next_track_button: \"⏭\",\n  play_or_pause_button: \"⏯\",\n  reverse_button: \"◀️\",\n  fast_reverse_button: \"⏪\",\n  last_track_button: \"⏮\",\n  upwards_button: \"🔼\",\n  fast_up_button: \"⏫\",\n  downwards_button: \"🔽\",\n  fast_down_button: \"⏬\",\n  pause_button: \"⏸\",\n  stop_button: \"⏹\",\n  record_button: \"⏺\",\n  eject_button: \"⏏️\",\n  cinema: \"🎦\",\n  dim_button: \"🔅\",\n  bright_button: \"🔆\",\n  antenna_bars: \"📶\",\n  vibration_mode: \"📳\",\n  mobile_phone_off: \"📴\",\n  female_sign: \"♀️\",\n  male_sign: \"♂️\",\n  medical_symbol: \"⚕️\",\n  infinity: \"♾\",\n  recycling_symbol: \"♻️\",\n  fleur_de_lis: \"⚜️\",\n  trident_emblem: \"🔱\",\n  name_badge: \"📛\",\n  japanese_symbol_for_beginner: \"🔰\",\n  hollow_red_circle: \"⭕\",\n  check_mark_button: \"✅\",\n  check_box_with_check: \"☑️\",\n  check_mark: \"✔️\",\n  multiplication_sign: \"✖️\",\n  cross_mark: \"❌\",\n  cross_mark_button: \"❎\",\n  plus_sign: \"➕\",\n  minus_sign: \"➖\",\n  division_sign: \"➗\",\n  curly_loop: \"➰\",\n  double_curly_loop: \"➿\",\n  part_alternation_mark: \"〽️\",\n  eight_spoked_asterisk: \"✳️\",\n  eight_pointed_star: \"✴️\",\n  sparkle: \"❇️\",\n  double_exclamation_mark: \"‼\",\n  exclamation_question_mark: \"⁉\",\n  question_mark: \"❓\",\n  white_question_mark: \"❔\",\n  white_exclamation_mark: \"❕\",\n  exclamation_mark: \"❗\",\n  wavy_dash: \"〰️\",\n  copyright: \"©️\",\n  registered: \"®️\",\n  trade_mark: \"™️\",\n  keycap_: \"*️⃣\",\n  keycap_0: \"0️⃣\",\n  keycap_1: \"1️⃣\",\n  keycap_2: \"2️⃣\",\n  keycap_3: \"3️⃣\",\n  keycap_4: \"4️⃣\",\n  keycap_5: \"5️⃣\",\n  keycap_6: \"6️⃣\",\n  keycap_7: \"7️⃣\",\n  keycap_8: \"8️⃣\",\n  keycap_9: \"9️⃣\",\n  keycap_10: \"🔟\",\n  input_latin_uppercase: \"🔠\",\n  input_latin_lowercase: \"🔡\",\n  input_numbers: \"🔢\",\n  input_symbols: \"🔣\",\n  input_latin_letters: \"🔤\",\n  a_button: \"🅰️\",\n  ab_button: \"🆎\",\n  b_button: \"🅱️\",\n  cl_button: \"🆑\",\n  cool_button: \"🆒\",\n  free_button: \"🆓\",\n  information: \"ℹ️\",\n  id_button: \"🆔\",\n  circled_m: \"Ⓜ️\",\n  new_button: \"🆕\",\n  ng_button: \"🆖\",\n  o_button: \"🅾️\",\n  ok_button: \"🆗\",\n  p_button: \"🅿️\",\n  sos_button: \"🆘\",\n  up_button: \"🆙\",\n  vs_button: \"🆚\",\n  japanese_here_button: \"🈁\",\n  japanese_service_charge_button: \"🈂️\",\n  japanese_monthly_amount_button: \"🈷️\",\n  japanese_not_free_of_charge_button: \"🈶\",\n  japanese_reserved_button: \"🈯\",\n  japanese_bargain_button: \"🉐\",\n  japanese_discount_button: \"🈹\",\n  japanese_free_of_charge_button: \"🈚\",\n  japanese_prohibited_button: \"🈲\",\n  japanese_acceptable_button: \"🉑\",\n  japanese_application_button: \"🈸\",\n  japanese_passing_grade_button: \"🈴\",\n  japanese_vacancy_button: \"🈳\",\n  japanese_congratulations_button: \"㊗️\",\n  japanese_secret_button: \"㊙️\",\n  japanese_open_for_business_button: \"🈺\",\n  japanese_no_vacancy_button: \"🈵\",\n  red_circle: \"🔴\",\n  orange_circle: \"🟠\",\n  yellow_circle: \"🟡\",\n  green_circle: \"🟢\",\n  blue_circle: \"🔵\",\n  purple_circle: \"🟣\",\n  brown_circle: \"🟤\",\n  black_circle: \"⚫\",\n  white_circle: \"⚪\",\n  red_square: \"🟥\",\n  orange_square: \"🟧\",\n  yellow_square: \"🟨\",\n  green_square: \"🟩\",\n  blue_square: \"🟦\",\n  purple_square: \"🟪\",\n  brown_square: \"🟫\",\n  black_large_square: \"⬛\",\n  white_large_square: \"⬜\",\n  black_medium_square: \"◼️\",\n  white_medium_square: \"◻️\",\n  black_medium_small_square: \"◾\",\n  white_medium_small_square: \"◽\",\n  black_small_square: \"▪️\",\n  white_small_square: \"▫️\",\n  large_orange_diamond: \"🔶\",\n  large_blue_diamond: \"🔷\",\n  small_orange_diamond: \"🔸\",\n  small_blue_diamond: \"🔹\",\n  red_triangle_pointed_up: \"🔺\",\n  red_triangle_pointed_down: \"🔻\",\n  diamond_with_a_dot: \"💠\",\n  radio_button: \"🔘\",\n  white_square_button: \"🔳\",\n  black_square_button: \"🔲\",\n  chequered_flag: \"🏁\",\n  triangular_flag: \"🚩\",\n  crossed_flags: \"🎌\",\n  black_flag: \"🏴\",\n  white_flag: \"🏳\",\n  rainbow_flag: \"🏳️‍🌈\",\n  pirate_flag: \"🏴‍☠\",\n  flag_ascension_island: \"🇦🇨\",\n  flag_andorra: \"🇦🇩\",\n  flag_united_arab_emirates: \"🇦🇪\",\n  flag_afghanistan: \"🇦🇫\",\n  flag_antigua_barbuda: \"🇦🇬\",\n  flag_anguilla: \"🇦🇮\",\n  flag_albania: \"🇦🇱\",\n  flag_armenia: \"🇦🇲\",\n  flag_angola: \"🇦🇴\",\n  flag_antarctica: \"🇦🇶\",\n  flag_argentina: \"🇦🇷\",\n  flag_american_samoa: \"🇦🇸\",\n  flag_austria: \"🇦🇹\",\n  flag_australia: \"🇦🇺\",\n  flag_aruba: \"🇦🇼\",\n  flag_land_islands: \"🇦🇽\",\n  flag_azerbaijan: \"🇦🇿\",\n  flag_bosnia_herzegovina: \"🇧🇦\",\n  flag_barbados: \"🇧🇧\",\n  flag_bangladesh: \"🇧🇩\",\n  flag_belgium: \"🇧🇪\",\n  flag_burkina_faso: \"🇧🇫\",\n  flag_bulgaria: \"🇧🇬\",\n  flag_bahrain: \"🇧🇭\",\n  flag_burundi: \"🇧🇮\",\n  flag_benin: \"🇧🇯\",\n  flag_st_barth_lemy: \"🇧🇱\",\n  flag_bermuda: \"🇧🇲\",\n  flag_brunei: \"🇧🇳\",\n  flag_bolivia: \"🇧🇴\",\n  flag_caribbean_netherlands: \"🇧🇶\",\n  flag_brazil: \"🇧🇷\",\n  flag_bahamas: \"🇧🇸\",\n  flag_bhutan: \"🇧🇹\",\n  flag_bouvet_island: \"🇧🇻\",\n  flag_botswana: \"🇧🇼\",\n  flag_belarus: \"🇧🇾\",\n  flag_belize: \"🇧🇿\",\n  flag_canada: \"🇨🇦\",\n  flag_cocos_islands: \"🇨🇨\",\n  flag_congo_kinshasa: \"🇨🇩\",\n  flag_central_african_republic: \"🇨🇫\",\n  flag_congo_brazzaville: \"🇨🇬\",\n  flag_switzerland: \"🇨🇭\",\n  flag_c_te_d_ivoire: \"🇨🇮\",\n  flag_cook_islands: \"🇨🇰\",\n  flag_chile: \"🇨🇱\",\n  flag_cameroon: \"🇨🇲\",\n  flag_china: \"🇨🇳\",\n  flag_colombia: \"🇨🇴\",\n  flag_clipperton_island: \"🇨🇵\",\n  flag_costa_rica: \"🇨🇷\",\n  flag_cuba: \"🇨🇺\",\n  flag_cape_verde: \"🇨🇻\",\n  flag_cura_ao: \"🇨🇼\",\n  flag_christmas_island: \"🇨🇽\",\n  flag_cyprus: \"🇨🇾\",\n  flag_czechia: \"🇨🇿\",\n  flag_germany: \"🇩🇪\",\n  flag_diego_garcia: \"🇩🇬\",\n  flag_djibouti: \"🇩🇯\",\n  flag_denmark: \"🇩🇰\",\n  flag_dominica: \"🇩🇲\",\n  flag_dominican_republic: \"🇩🇴\",\n  flag_algeria: \"🇩🇿\",\n  flag_ceuta_melilla: \"🇪🇦\",\n  flag_ecuador: \"🇪🇨\",\n  flag_estonia: \"🇪🇪\",\n  flag_egypt: \"🇪🇬\",\n  flag_western_sahara: \"🇪🇭\",\n  flag_eritrea: \"🇪🇷\",\n  flag_spain: \"🇪🇸\",\n  flag_ethiopia: \"🇪🇹\",\n  flag_european_union: \"🇪🇺\",\n  flag_finland: \"🇫🇮\",\n  flag_fiji: \"🇫🇯\",\n  flag_falkland_islands: \"🇫🇰\",\n  flag_micronesia: \"🇫🇲\",\n  flag_faroe_islands: \"🇫🇴\",\n  flag_france: \"🇫🇷\",\n  flag_gabon: \"🇬🇦\",\n  flag_united_kingdom: \"🇬🇧\",\n  flag_grenada: \"🇬🇩\",\n  flag_georgia: \"🇬🇪\",\n  flag_french_guiana: \"🇬🇫\",\n  flag_guernsey: \"🇬🇬\",\n  flag_ghana: \"🇬🇭\",\n  flag_gibraltar: \"🇬🇮\",\n  flag_greenland: \"🇬🇱\",\n  flag_gambia: \"🇬🇲\",\n  flag_guinea: \"🇬🇳\",\n  flag_guadeloupe: \"🇬🇵\",\n  flag_equatorial_guinea: \"🇬🇶\",\n  flag_greece: \"🇬🇷\",\n  flag_south_georgia_south_sandwich_islands: \"🇬🇸\",\n  flag_guatemala: \"🇬🇹\",\n  flag_guam: \"🇬🇺\",\n  flag_guinea_bissau: \"🇬🇼\",\n  flag_guyana: \"🇬🇾\",\n  flag_hong_kong_sar_china: \"🇭🇰\",\n  flag_heard_mcdonald_islands: \"🇭🇲\",\n  flag_honduras: \"🇭🇳\",\n  flag_croatia: \"🇭🇷\",\n  flag_haiti: \"🇭🇹\",\n  flag_hungary: \"🇭🇺\",\n  flag_canary_islands: \"🇮🇨\",\n  flag_indonesia: \"🇮🇩\",\n  flag_ireland: \"🇮🇪\",\n  flag_israel: \"🇮🇱\",\n  flag_isle_of_man: \"🇮🇲\",\n  flag_india: \"🇮🇳\",\n  flag_british_indian_ocean_territory: \"🇮🇴\",\n  flag_iraq: \"🇮🇶\",\n  flag_iran: \"🇮🇷\",\n  flag_iceland: \"🇮🇸\",\n  flag_italy: \"🇮🇹\",\n  flag_jersey: \"🇯🇪\",\n  flag_jamaica: \"🇯🇲\",\n  flag_jordan: \"🇯🇴\",\n  flag_japan: \"🇯🇵\",\n  flag_kenya: \"🇰🇪\",\n  flag_kyrgyzstan: \"🇰🇬\",\n  flag_cambodia: \"🇰🇭\",\n  flag_kiribati: \"🇰🇮\",\n  flag_comoros: \"🇰🇲\",\n  flag_st_kitts_nevis: \"🇰🇳\",\n  flag_north_korea: \"🇰🇵\",\n  flag_south_korea: \"🇰🇷\",\n  flag_kuwait: \"🇰🇼\",\n  flag_cayman_islands: \"🇰🇾\",\n  flag_kazakhstan: \"🇰🇿\",\n  flag_laos: \"🇱🇦\",\n  flag_lebanon: \"🇱🇧\",\n  flag_st_lucia: \"🇱🇨\",\n  flag_liechtenstein: \"🇱🇮\",\n  flag_sri_lanka: \"🇱🇰\",\n  flag_liberia: \"🇱🇷\",\n  flag_lesotho: \"🇱🇸\",\n  flag_lithuania: \"🇱🇹\",\n  flag_luxembourg: \"🇱🇺\",\n  flag_latvia: \"🇱🇻\",\n  flag_libya: \"🇱🇾\",\n  flag_morocco: \"🇲🇦\",\n  flag_monaco: \"🇲🇨\",\n  flag_moldova: \"🇲🇩\",\n  flag_montenegro: \"🇲🇪\",\n  flag_st_martin: \"🇲🇫\",\n  flag_madagascar: \"🇲🇬\",\n  flag_marshall_islands: \"🇲🇭\",\n  flag_north_macedonia: \"🇲🇰\",\n  flag_mali: \"🇲🇱\",\n  flag_myanmar: \"🇲🇲\",\n  flag_mongolia: \"🇲🇳\",\n  flag_macao_sar_china: \"🇲🇴\",\n  flag_northern_mariana_islands: \"🇲🇵\",\n  flag_martinique: \"🇲🇶\",\n  flag_mauritania: \"🇲🇷\",\n  flag_montserrat: \"🇲🇸\",\n  flag_malta: \"🇲🇹\",\n  flag_mauritius: \"🇲🇺\",\n  flag_maldives: \"🇲🇻\",\n  flag_malawi: \"🇲🇼\",\n  flag_mexico: \"🇲🇽\",\n  flag_malaysia: \"🇲🇾\",\n  flag_mozambique: \"🇲🇿\",\n  flag_namibia: \"🇳🇦\",\n  flag_new_caledonia: \"🇳🇨\",\n  flag_niger: \"🇳🇪\",\n  flag_norfolk_island: \"🇳🇫\",\n  flag_nigeria: \"🇳🇬\",\n  flag_nicaragua: \"🇳🇮\",\n  flag_netherlands: \"🇳🇱\",\n  flag_norway: \"🇳🇴\",\n  flag_nepal: \"🇳🇵\",\n  flag_nauru: \"🇳🇷\",\n  flag_niue: \"🇳🇺\",\n  flag_new_zealand: \"🇳🇿\",\n  flag_oman: \"🇴🇲\",\n  flag_panama: \"🇵🇦\",\n  flag_peru: \"🇵🇪\",\n  flag_french_polynesia: \"🇵🇫\",\n  flag_papua_new_guinea: \"🇵🇬\",\n  flag_philippines: \"🇵🇭\",\n  flag_pakistan: \"🇵🇰\",\n  flag_poland: \"🇵🇱\",\n  flag_st_pierre_miquelon: \"🇵🇲\",\n  flag_pitcairn_islands: \"🇵🇳\",\n  flag_puerto_rico: \"🇵🇷\",\n  flag_palestinian_territories: \"🇵🇸\",\n  flag_portugal: \"🇵🇹\",\n  flag_palau: \"🇵🇼\",\n  flag_paraguay: \"🇵🇾\",\n  flag_qatar: \"🇶🇦\",\n  flag_r_union: \"🇷🇪\",\n  flag_romania: \"🇷🇴\",\n  flag_serbia: \"🇷🇸\",\n  flag_russia: \"🇷🇺\",\n  flag_rwanda: \"🇷🇼\",\n  flag_saudi_arabia: \"🇸🇦\",\n  flag_solomon_islands: \"🇸🇧\",\n  flag_seychelles: \"🇸🇨\",\n  flag_sudan: \"🇸🇩\",\n  flag_sweden: \"🇸🇪\",\n  flag_singapore: \"🇸🇬\",\n  flag_st_helena: \"🇸🇭\",\n  flag_slovenia: \"🇸🇮\",\n  flag_svalbard_jan_mayen: \"🇸🇯\",\n  flag_slovakia: \"🇸🇰\",\n  flag_sierra_leone: \"🇸🇱\",\n  flag_san_marino: \"🇸🇲\",\n  flag_senegal: \"🇸🇳\",\n  flag_somalia: \"🇸🇴\",\n  flag_suriname: \"🇸🇷\",\n  flag_south_sudan: \"🇸🇸\",\n  flag_s_o_tom_pr_ncipe: \"🇸🇹\",\n  flag_el_salvador: \"🇸🇻\",\n  flag_sint_maarten: \"🇸🇽\",\n  flag_syria: \"🇸🇾\",\n  flag_eswatini: \"🇸🇿\",\n  flag_tristan_da_cunha: \"🇹🇦\",\n  flag_turks_caicos_islands: \"🇹🇨\",\n  flag_chad: \"🇹🇩\",\n  flag_french_southern_territories: \"🇹🇫\",\n  flag_togo: \"🇹🇬\",\n  flag_thailand: \"🇹🇭\",\n  flag_tajikistan: \"🇹🇯\",\n  flag_tokelau: \"🇹🇰\",\n  flag_timor_leste: \"🇹🇱\",\n  flag_turkmenistan: \"🇹🇲\",\n  flag_tunisia: \"🇹🇳\",\n  flag_tonga: \"🇹🇴\",\n  flag_turkey: \"🇹🇷\",\n  flag_trinidad_tobago: \"🇹🇹\",\n  flag_tuvalu: \"🇹🇻\",\n  flag_taiwan: \"🇹🇼\",\n  flag_tanzania: \"🇹🇿\",\n  flag_ukraine: \"🇺🇦\",\n  flag_uganda: \"🇺🇬\",\n  flag_u_s_outlying_islands: \"🇺🇲\",\n  flag_united_nations: \"🇺🇳\",\n  flag_united_states: \"🇺🇸\",\n  flag_uruguay: \"🇺🇾\",\n  flag_uzbekistan: \"🇺🇿\",\n  flag_vatican_city: \"🇻🇦\",\n  flag_st_vincent_grenadines: \"🇻🇨\",\n  flag_venezuela: \"🇻🇪\",\n  flag_british_virgin_islands: \"🇻🇬\",\n  flag_u_s_virgin_islands: \"🇻🇮\",\n  flag_vietnam: \"🇻🇳\",\n  flag_vanuatu: \"🇻🇺\",\n  flag_wallis_futuna: \"🇼🇫\",\n  flag_samoa: \"🇼🇸\",\n  flag_kosovo: \"🇽🇰\",\n  flag_yemen: \"🇾🇪\",\n  flag_mayotte: \"🇾🇹\",\n  flag_south_africa: \"🇿🇦\",\n  flag_zambia: \"🇿🇲\",\n  flag_zimbabwe: \"🇿🇼\",\n  flag_england: \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n  flag_scotland: \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n  flag_wales: \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n  grinning: \"😀\",\n  smiley: \"😃\",\n  smile: \"😄\",\n  grin: \"😁\",\n  laughing: \"😆\",\n  satisfied: \"😆\",\n  sweat_smile: \"😅\",\n  rofl: \"🤣\",\n  joy: \"😂\",\n  wink: \"😉\",\n  blush: \"😊\",\n  innocent: \"😇\",\n  smiling_face_with_three_hearts: \"🥰\",\n  heart_eyes: \"😍\",\n  kissing_heart: \"😘\",\n  kissing: \"😗\",\n  relaxed: \"☺️\",\n  kissing_closed_eyes: \"😚\",\n  kissing_smiling_eyes: \"😙\",\n  yum: \"😋\",\n  stuck_out_tongue: \"😛\",\n  stuck_out_tongue_winking_eye: \"😜\",\n  stuck_out_tongue_closed_eyes: \"😝\",\n  hugs: \"🤗\",\n  hand_over_mouth: \"🤭\",\n  thinking: \"🤔\",\n  raised_eyebrow: \"🤨\",\n  expressionless: \"😑\",\n  no_mouth: \"😶\",\n  smirk: \"😏\",\n  unamused: \"😒\",\n  roll_eyes: \"🙄\",\n  grimacing: \"😬\",\n  relieved: \"😌\",\n  pensive: \"😔\",\n  sleepy: \"😪\",\n  sleeping: \"😴\",\n  mask: \"😷\",\n  vomiting_face: \"🤮\",\n  monocle_face: \"🧐\",\n  confused: \"😕\",\n  worried: \"😟\",\n  open_mouth: \"😮\",\n  hushed: \"😯\",\n  astonished: \"😲\",\n  flushed: \"😳\",\n  frowning: \"😦\",\n  anguished: \"😧\",\n  fearful: \"😨\",\n  cold_sweat: \"😰\",\n  disappointed_relieved: \"😥\",\n  cry: \"😢\",\n  sob: \"😭\",\n  scream: \"😱\",\n  confounded: \"😖\",\n  persevere: \"😣\",\n  disappointed: \"😞\",\n  sweat: \"😓\",\n  weary: \"😩\",\n  triumph: \"😤\",\n  rage: \"😡\",\n  pout: \"😡\",\n  angry: \"😠\",\n  cursing_face: \"🤬\",\n  smiling_imp: \"😈\",\n  imp: \"👿\",\n  hankey: \"💩\",\n  poop: \"💩\",\n  shit: \"💩\",\n  japanese_ogre: \"👹\",\n  japanese_goblin: \"👺\",\n  space_invader: \"👾\",\n  smiley_cat: \"😺\",\n  smile_cat: \"😸\",\n  joy_cat: \"😹\",\n  heart_eyes_cat: \"😻\",\n  smirk_cat: \"😼\",\n  scream_cat: \"🙀\",\n  crying_cat_face: \"😿\",\n  see_no_evil: \"🙈\",\n  hear_no_evil: \"🙉\",\n  speak_no_evil: \"🙊\",\n  cupid: \"💘\",\n  gift_heart: \"💝\",\n  heartpulse: \"💗\",\n  heartbeat: \"💓\",\n  heavy_heart_exclamation: \"❣️\",\n  heart: \"❤️\",\n  anger: \"💢\",\n  boom: \"💥\",\n  sweat_drops: \"💦\",\n  dash: \"💨\",\n  eye_speech_bubble: \"👁️‍🗨️\",\n  wave: \"👋\",\n  raised_hand_with_fingers_splayed: \"🖐️\",\n  hand: \"✋\",\n  v: \"✌️\",\n  metal: \"🤘\",\n  point_left: \"👈\",\n  point_right: \"👉\",\n  point_up_2: \"👆\",\n  fu: \"🖕\",\n  point_down: \"👇\",\n  point_up: \"☝️\",\n  \"+1\": \"👍\",\n  thumbsup: \"👍\",\n  \"-1\": \"👎\",\n  thumbsdown: \"👎\",\n  fist_raised: \"✊\",\n  fist: \"✊\",\n  fist_oncoming: \"👊\",\n  facepunch: \"👊\",\n  punch: \"👊\",\n  fist_left: \"🤛\",\n  fist_right: \"🤜\",\n  clap: \"👏\",\n  raised_hands: \"🙌\",\n  pray: \"🙏\",\n  nail_care: \"💅\",\n  muscle: \"💪\",\n  lips: \"👄\",\n  adult: \"🧑\",\n  blond_haired_person: \"👱\",\n  bearded_person: \"🧔\",\n  red_haired_man: \"👨‍🦰\",\n  curly_haired_man: \"👨‍🦱\",\n  white_haired_man: \"👨‍🦳\",\n  bald_man: \"👨‍🦲\",\n  red_haired_woman: \"👩‍🦰\",\n  curly_haired_woman: \"👩‍🦱\",\n  white_haired_woman: \"👩‍🦳\",\n  bald_woman: \"👩‍🦲\",\n  blond_haired_woman: \"👱‍♀\",\n  blonde_woman: \"👱‍♀\",\n  blond_haired_man: \"👱‍♂\",\n  older_adult: \"🧓\",\n  older_man: \"👴\",\n  older_woman: \"👵\",\n  frowning_person: \"🙍\",\n  frowning_man: \"🙍‍♂\",\n  frowning_woman: \"🙍‍♀\",\n  pouting_man: \"🙎‍♂\",\n  pouting_woman: \"🙎‍♀\",\n  no_good: \"🙅\",\n  no_good_man: \"🙅‍♂\",\n  ng_man: \"🙅‍♂\",\n  no_good_woman: \"🙅‍♀\",\n  ng_woman: \"🙅‍♀\",\n  ok_person: \"🙆\",\n  ok_man: \"🙆‍♂\",\n  ok_woman: \"🙆\",\n  tipping_hand_person: \"💁\",\n  information_desk_person: \"💁\",\n  tipping_hand_man: \"💁‍♂\",\n  sassy_man: \"💁‍♂\",\n  tipping_hand_woman: \"💁‍♀\",\n  sassy_woman: \"💁‍♀\",\n  raising_hand: \"🙋\",\n  raising_hand_man: \"🙋‍♂\",\n  raising_hand_woman: \"🙋‍♀\",\n  bow: \"🙇\",\n  bowing_man: \"🙇‍♂\",\n  bowing_woman: \"🙇‍♀\",\n  facepalm: \"🤦\",\n  shrug: \"🤷\",\n  cop: \"👮\",\n  policeman: \"👮‍♂\",\n  policewoman: \"👮‍♀\",\n  male_detective: \"🕵️‍♂️\",\n  female_detective: \"🕵️‍♀️\",\n  guardsman: \"💂\",\n  guardswoman: \"💂‍♀\",\n  construction_worker_man: \"👷‍♂\",\n  construction_worker_woman: \"👷‍♀\",\n  person_with_turban: \"👳\",\n  man_with_turban: \"👳\",\n  woman_with_turban: \"👳‍♀\",\n  man_with_gua_pi_mao: \"👲\",\n  angel: \"👼\",\n  santa: \"🎅\",\n  superhero_man: \"🦸‍♂\",\n  superhero_woman: \"🦸‍♀\",\n  supervillain_man: \"🦹‍♂\",\n  supervillain_woman: \"🦹‍♀\",\n  mage_man: \"🧙‍♂\",\n  mage_woman: \"🧙‍♀\",\n  fairy_man: \"🧚‍♂\",\n  fairy_woman: \"🧚‍♀\",\n  vampire_man: \"🧛‍♂\",\n  vampire_woman: \"🧛‍♀\",\n  elf_man: \"🧝‍♂\",\n  elf_woman: \"🧝‍♀\",\n  genie_man: \"🧞‍♂\",\n  genie_woman: \"🧞‍♀\",\n  zombie_man: \"🧟‍♂\",\n  zombie_woman: \"🧟‍♀\",\n  massage: \"💆\",\n  massage_man: \"💆‍♂\",\n  massage_woman: \"💆‍♀\",\n  haircut: \"💇\",\n  haircut_man: \"💇‍♂\",\n  haircut_woman: \"💇‍♀\",\n  walking: \"🚶\",\n  walking_man: \"🚶‍♂\",\n  walking_woman: \"🚶‍♀\",\n  standing_person: \"🧍\",\n  standing_man: \"🧍‍♂\",\n  standing_woman: \"🧍‍♀\",\n  kneeling_person: \"🧎\",\n  kneeling_man: \"🧎‍♂\",\n  kneeling_woman: \"🧎‍♀\",\n  runner: \"🏃\",\n  running: \"🏃\",\n  running_man: \"🏃‍♂\",\n  running_woman: \"🏃‍♀\",\n  dancer: \"💃\",\n  business_suit_levitating: \"🕴\",\n  dancers: \"👯\",\n  dancing_men: \"👯‍♂\",\n  dancing_women: \"👯‍♀\",\n  sauna_person: \"🧖\",\n  sauna_man: \"🧖‍♂\",\n  sauna_woman: \"🧖‍♀\",\n  climbing: \"🧗\",\n  climbing_man: \"🧗‍♂\",\n  climbing_woman: \"🧗‍♀\",\n  golfing: \"🏌\",\n  golfing_man: \"🏌️‍♂️\",\n  golfing_woman: \"🏌️‍♀️\",\n  surfer: \"🏄\",\n  surfing_man: \"🏄‍♂\",\n  surfing_woman: \"🏄‍♀\",\n  rowboat: \"🚣\",\n  rowing_man: \"🚣‍♂\",\n  rowing_woman: \"🚣‍♀\",\n  swimmer: \"🏊\",\n  swimming_man: \"🏊‍♂\",\n  swimming_woman: \"🏊‍♀\",\n  bouncing_ball_person: \"⛹\",\n  bouncing_ball_man: \"⛹️‍♂️\",\n  basketball_man: \"⛹️‍♂️\",\n  bouncing_ball_woman: \"⛹️‍♀️\",\n  basketball_woman: \"⛹️‍♀️\",\n  weight_lifting: \"🏋\",\n  weight_lifting_man: \"🏋️‍♂️\",\n  weight_lifting_woman: \"🏋️‍♀️\",\n  bicyclist: \"🚴\",\n  biking_man: \"🚴‍♂\",\n  biking_woman: \"🚴‍♀\",\n  mountain_bicyclist: \"🚵\",\n  mountain_biking_man: \"🚵‍♂\",\n  mountain_biking_woman: \"🚵‍♀\",\n  cartwheeling: \"🤸\",\n  wrestling: \"🤼\",\n  water_polo: \"🤽\",\n  handball_person: \"🤾\",\n  juggling_person: \"🤹\",\n  lotus_position: \"🧘\",\n  lotus_position_man: \"🧘‍♂\",\n  lotus_position_woman: \"🧘‍♀\",\n  bath: \"🛀\",\n  sleeping_bed: \"🛌\",\n  two_women_holding_hands: \"👭\",\n  couple: \"👫\",\n  two_men_holding_hands: \"👬\",\n  couplekiss: \"💏\",\n  couplekiss_man_woman: \"👩‍❤️‍💋‍👨\",\n  couplekiss_man_man: \"‍👨❤️💋‍👨\",\n  couplekiss_woman_woman: \"👩‍❤️‍💋‍👩\",\n  dog2: \"🐕\",\n  fox_face: \"🦊\",\n  cat2: \"🐈\",\n  tiger2: \"🐅\",\n  racehorse: \"🐎\",\n  cow2: \"🐄\",\n  pig2: \"🐖\",\n  sheep: \"🐑\",\n  dromedary_camel: \"🐪\",\n  mouse2: \"🐁\",\n  rabbit2: \"🐇\",\n  panda_face: \"🐼\",\n  feet: \"🐾\",\n  hatched_chick: \"🐥\",\n  \"t-rex\": \"🦖\",\n  whale2: \"🐋\",\n  flipper: \"🐬\",\n  shell: \"🐚\",\n  bee: \"🐝\",\n  beetle: \"🐞\",\n  ear_of_rice: \"🌾\",\n  leaves: \"🍃\",\n  orange: \"🍊\",\n  mandarin: \"🍊\",\n  apple: \"🍎\",\n  corn: \"🌽\",\n  cheese: \"🧀\",\n  fries: \"🍟\",\n  hotdog: \"🌭\",\n  fried_egg: \"🍳\",\n  stew: \"🍲\",\n  bento: \"🍱\",\n  rice: \"🍚\",\n  curry: \"🍛\",\n  ramen: \"🍜\",\n  sweet_potato: \"🍠\",\n  fish_cake: \"🍥\",\n  icecream: \"🍦\",\n  birthday: \"🎂\",\n  cake: \"🍰\",\n  milk_glass: \"🥛\",\n  coffee: \"☕\",\n  tea: \"🍵\",\n  champagne: \"🍾\",\n  cocktail: \"🍸\",\n  beer: \"🍺\",\n  beers: \"🍻\",\n  ice_cube: \"🧊\",\n  plate_with_cutlery: \"🍽\",\n  hocho: \"🔪\",\n  knife: \"🔪\",\n  earth_africa: \"🌍\",\n  earth_americas: \"🌎\",\n  earth_asia: \"🌏\",\n  japan: \"🗾\",\n  mountain_snow: \"🏔\",\n  beach_umbrella: \"🏖\",\n  bricks: \"🧱\",\n  office: \"🏢\",\n  european_post_office: \"🏤\",\n  european_castle: \"🏰\",\n  city_sunset: \"🌆\",\n  city_sunrise: \"🌇\",\n  hotsprings: \"♨️\",\n  barber: \"💈\",\n  steam_locomotive: \"🚂\",\n  bullettrain_side: \"🚄\",\n  bullettrain_front: \"🚅\",\n  train2: \"🚆\",\n  car: \"🚗\",\n  red_car: \"🚗\",\n  blue_car: \"🚙\",\n  truck: \"🚚\",\n  bike: \"🚲\",\n  busstop: \"🚏\",\n  fuelpump: \"⛽\",\n  rotating_light: \"🚨\",\n  traffic_light: \"🚥\",\n  boat: \"⛵\",\n  flight_departure: \"🛫\",\n  flight_arrival: \"🛬\",\n  artificial_satellite: \"🛰\",\n  hourglass: \"⌛\",\n  hourglass_flowing_sand: \"⏳\",\n  clock12: \"🕛\",\n  clock1230: \"🕧\",\n  clock1: \"🕐\",\n  clock130: \"🕜\",\n  clock2: \"🕑\",\n  clock230: \"🕝\",\n  clock3: \"🕒\",\n  clock330: \"🕞\",\n  clock4: \"🕓\",\n  clock430: \"🕟\",\n  clock5: \"🕔\",\n  clock530: \"🕠\",\n  clock6: \"🕕\",\n  clock630: \"🕡\",\n  clock7: \"🕖\",\n  clock730: \"🕢\",\n  clock8: \"🕗\",\n  clock830: \"🕣\",\n  clock9: \"🕘\",\n  clock930: \"🕤\",\n  clock10: \"🕙\",\n  clock1030: \"🕥\",\n  clock11: \"🕚\",\n  clock1130: \"🕦\",\n  moon: \"🌔\",\n  new_moon_with_face: \"🌚\",\n  first_quarter_moon_with_face: \"🌛\",\n  last_quarter_moon_with_face: \"🌜\",\n  sunny: \"☀️\",\n  full_moon_with_face: \"🌝\",\n  star2: \"🌟\",\n  stars: \"🌠\",\n  partly_sunny: \"⛅\",\n  open_umbrella: \"☂\",\n  parasol_on_ground: \"⛱\",\n  zap: \"⚡\",\n  snowman_with_snow: \"☃\",\n  ocean: \"🌊\",\n  tada: \"🎉\",\n  bamboo: \"🎍\",\n  dolls: \"🎎\",\n  flags: \"🎏\",\n  rice_scene: \"🎑\",\n  gift: \"🎁\",\n  tickets: \"🎟\",\n  medal_military: \"🎖\",\n  medal_sports: \"🏅\",\n  soccer: \"⚽\",\n  football: \"🏈\",\n  golf: \"⛳\",\n  fishing_pole_and_fish: \"🎣\",\n  running_shirt_with_sash: \"🎽\",\n  ski: \"🎿\",\n  dart: \"🎯\",\n  \"8ball\": \"🎱\",\n  jigsaw: \"🧩\",\n  spades: \"♠️\",\n  hearts: \"♥️\",\n  diamonds: \"♦️\",\n  clubs: \"♣️\",\n  black_joker: \"🃏\",\n  mahjong: \"🀄\",\n  art: \"🎨\",\n  eyeglasses: \"👓\",\n  dark_sunglasses: \"🕶️\",\n  shirt: \"👕\",\n  tshirt: \"👕\",\n  swim_brief: \"🩲\",\n  womans_clothes: \"👚\",\n  pouch: \"👝\",\n  shopping: \"🛍\",\n  school_satchel: \"🎒\",\n  mans_shoe: \"👞\",\n  shoe: \"👞\",\n  athletic_shoe: \"👟\",\n  high_heel: \"👠\",\n  sandal: \"👡\",\n  boot: \"👢\",\n  womans_hat: \"👒\",\n  tophat: \"🎩\",\n  mortar_board: \"🎓\",\n  rescue_worker_helmet: \"⛑\",\n  gem: \"💎\",\n  mute: \"🔇\",\n  speaker: \"🔈\",\n  sound: \"🔉\",\n  loud_sound: \"🔊\",\n  mega: \"📣\",\n  no_bell: \"🔕\",\n  notes: \"🎶\",\n  headphones: \"🎧\",\n  iphone: \"📱\",\n  calling: \"📲\",\n  phone: \"☎️\",\n  fax: \"📠\",\n  computer: \"💻\",\n  minidisc: \"💽\",\n  cd: \"💿\",\n  film_strip: \"🎞\",\n  clapper: \"🎬\",\n  tv: \"📺\",\n  camera_flash: \"📸\",\n  vhs: \"📼\",\n  mag: \"🔍\",\n  mag_right: \"🔎\",\n  bulb: \"💡\",\n  izakaya_lantern: \"🏮\",\n  lantern: \"🏮\",\n  book: \"📖\",\n  newspaper_roll: \"🗞\",\n  moneybag: \"💰\",\n  yen: \"💴\",\n  dollar: \"💵\",\n  euro: \"💶\",\n  pound: \"💷\",\n  chart: \"💹\",\n  email: \"✉️\",\n  \"e-mail\": \"📧\",\n  mailbox: \"📫\",\n  mailbox_closed: \"📪\",\n  mailbox_with_mail: \"📬\",\n  mailbox_with_no_mail: \"📭\",\n  ballot_box: \"🗳\",\n  pencil2: \"✏️\",\n  date: \"📅\",\n  chart_with_upwards_trend: \"📈\",\n  chart_with_downwards_trend: \"📉\",\n  paperclips: \"🖇\",\n  lock: \"🔒\",\n  unlock: \"🔓\",\n  lock_with_ink_pen: \"🔏\",\n  closed_lock_with_key: \"🔐\",\n  gun: \"🔫\",\n  smoking: \"🚬\",\n  moyai: \"🗿\",\n  atm: \"🏧\",\n  put_litter_in_its_place: \"🚮\",\n  wheelchair: \"♿\",\n  mens: \"🚹\",\n  womens: \"🚺\",\n  wc: \"🚾\",\n  no_entry_sign: \"🚫\",\n  do_not_litter: \"🚯\",\n  \"non-potable_water\": \"🚱\",\n  underage: \"🔞\",\n  arrow_up: \"⬆️\",\n  arrow_upper_right: \"↗️\",\n  arrow_right: \"➡️\",\n  arrow_lower_right: \"↘️\",\n  arrow_down: \"⬇️\",\n  arrow_lower_left: \"↙️\",\n  arrow_left: \"⬅️\",\n  arrow_upper_left: \"↖️\",\n  arrow_up_down: \"↕️\",\n  leftwards_arrow_with_hook: \"↩️\",\n  arrow_right_hook: \"↪️\",\n  arrow_heading_up: \"⤴️\",\n  arrow_heading_down: \"⤵️\",\n  arrows_clockwise: \"🔃\",\n  arrows_counterclockwise: \"🔄\",\n  back: \"🔙\",\n  end: \"🔚\",\n  on: \"🔛\",\n  soon: \"🔜\",\n  top: \"🔝\",\n  six_pointed_star: \"🔯\",\n  scorpius: \"♏\",\n  twisted_rightwards_arrows: \"🔀\",\n  repeat: \"🔁\",\n  repeat_one: \"🔂\",\n  arrow_forward: \"▶️\",\n  fast_forward: \"⏩\",\n  arrow_backward: \"◀️\",\n  rewind: \"⏪\",\n  previous_track_button: \"⏮\",\n  arrow_up_small: \"🔼\",\n  arrow_double_up: \"⏫\",\n  arrow_down_small: \"🔽\",\n  arrow_double_down: \"⏬\",\n  low_brightness: \"🔅\",\n  high_brightness: \"🔆\",\n  signal_strength: \"📶\",\n  recycle: \"♻️\",\n  trident: \"🔱\",\n  beginner: \"🔰\",\n  o: \"⭕\",\n  white_check_mark: \"✅\",\n  ballot_box_with_check: \"☑️\",\n  heavy_check_mark: \"✔️\",\n  heavy_multiplication_x: \"✖️\",\n  x: \"❌\",\n  negative_squared_cross_mark: \"❎\",\n  heavy_plus_sign: \"➕\",\n  heavy_minus_sign: \"➖\",\n  heavy_division_sign: \"➗\",\n  loop: \"➿\",\n  eight_pointed_black_star: \"✴️\",\n  bangbang: \"‼️\",\n  interrobang: \"⁉️\",\n  question: \"❓\",\n  grey_question: \"❔\",\n  grey_exclamation: \"❕\",\n  exclamation: \"❗\",\n  heavy_exclamation_mark: \"❗\",\n  tm: \"™️\",\n  hash: \"#️⃣\",\n  asterisk: \"*️⃣\",\n  zero: \"0️⃣\",\n  one: \"1️⃣\",\n  two: \"2️⃣\",\n  three: \"3️⃣\",\n  four: \"4️⃣\",\n  five: \"5️⃣\",\n  six: \"6️⃣\",\n  seven: \"7️⃣\",\n  eight: \"8️⃣\",\n  nine: \"9️⃣\",\n  keycap_ten: \"🔟\",\n  capital_abcd: \"🔠\",\n  abcd: \"🔡\",\n  symbols: \"🔣\",\n  abc: \"🔤\",\n  a: \"🅰️\",\n  ab: \"🆎\",\n  b: \"🅱️\",\n  cl: \"🆑\",\n  cool: \"🆒\",\n  free: \"🆓\",\n  information_source: \"ℹ️\",\n  id: \"🆔\",\n  m: \"Ⓜ️\",\n  new: \"🆕\",\n  ng: \"🆖\",\n  o2: \"🅾️\",\n  ok: \"🆗\",\n  parking: \"🅿️\",\n  sos: \"🆘\",\n  up: \"🆙\",\n  vs: \"🆚\",\n  koko: \"🈁\",\n  sa: \"🈂️\",\n  u6708: \"🈷️\",\n  u6709: \"🈶\",\n  u6307: \"🈯\",\n  ideograph_advantage: \"🉐\",\n  u5272: \"🈹\",\n  u7121: \"🈚\",\n  u7981: \"🈲\",\n  accept: \"🉑\",\n  u7533: \"🈸\",\n  u5408: \"🈴\",\n  u7a7a: \"🈳\",\n  congratulations: \"㊗️\",\n  secret: \"㊙️\",\n  u55b6: \"🈺\",\n  u6e80: \"🈵\",\n  large_blue_circle: \"🔵\",\n  small_red_triangle: \"🔺\",\n  small_red_triangle_down: \"🔻\",\n  diamond_shape_with_a_dot_inside: \"💠\",\n  checkered_flag: \"🏁\",\n  triangular_flag_on_post: \"🚩\",\n  ascension_island: \"🇦🇨\",\n  andorra: \"🇦🇩\",\n  united_arab_emirates: \"🇦🇪\",\n  afghanistan: \"🇦🇫\",\n  antigua_barbuda: \"🇦🇬\",\n  anguilla: \"🇦🇮\",\n  albania: \"🇦🇱\",\n  armenia: \"🇦🇲\",\n  angola: \"🇦🇴\",\n  antarctica: \"🇦🇶\",\n  argentina: \"🇦🇷\",\n  american_samoa: \"🇦🇸\",\n  austria: \"🇦🇹\",\n  australia: \"🇦🇺\",\n  aruba: \"🇦🇼\",\n  aland_islands: \"🇦🇽\",\n  azerbaijan: \"🇦🇿\",\n  bosnia_herzegovina: \"🇧🇦\",\n  barbados: \"🇧🇧\",\n  bangladesh: \"🇧🇩\",\n  belgium: \"🇧🇪\",\n  burkina_faso: \"🇧🇫\",\n  bulgaria: \"🇧🇬\",\n  bahrain: \"🇧🇭\",\n  burundi: \"🇧🇮\",\n  benin: \"🇧🇯\",\n  st_barthelemy: \"🇧🇱\",\n  bermuda: \"🇧🇲\",\n  brunei: \"🇧🇳\",\n  bolivia: \"🇧🇴\",\n  caribbean_netherlands: \"🇧🇶\",\n  brazil: \"🇧🇷\",\n  bahamas: \"🇧🇸\",\n  bhutan: \"🇧🇹\",\n  bouvet_island: \"🇧🇻\",\n  botswana: \"🇧🇼\",\n  belarus: \"🇧🇾\",\n  belize: \"🇧🇿\",\n  canada: \"🇨🇦\",\n  cocos_islands: \"🇨🇨\",\n  congo_kinshasa: \"🇨🇩\",\n  central_african_republic: \"🇨🇫\",\n  congo_brazzaville: \"🇨🇬\",\n  switzerland: \"🇨🇭\",\n  cote_divoire: \"🇨🇮\",\n  cook_islands: \"🇨🇰\",\n  chile: \"🇨🇱\",\n  cameroon: \"🇨🇲\",\n  cn: \"🇨🇳\",\n  colombia: \"🇨🇴\",\n  clipperton_island: \"🇨🇵\",\n  costa_rica: \"🇨🇷\",\n  cuba: \"🇨🇺\",\n  cape_verde: \"🇨🇻\",\n  curacao: \"🇨🇼\",\n  christmas_island: \"🇨🇽\",\n  cyprus: \"🇨🇾\",\n  czech_republic: \"🇨🇿\",\n  de: \"🇩🇪\",\n  diego_garcia: \"🇩🇬\",\n  djibouti: \"🇩🇯\",\n  denmark: \"🇩🇰\",\n  dominica: \"🇩🇲\",\n  dominican_republic: \"🇩🇴\",\n  algeria: \"🇩🇿\",\n  ceuta_melilla: \"🇪🇦\",\n  ecuador: \"🇪🇨\",\n  estonia: \"🇪🇪\",\n  egypt: \"🇪🇬\",\n  western_sahara: \"🇪🇭\",\n  eritrea: \"🇪🇷\",\n  es: \"🇪🇸\",\n  ethiopia: \"🇪🇹\",\n  eu: \"🇪🇺\",\n  european_union: \"🇪🇺\",\n  finland: \"🇫🇮\",\n  fiji: \"🇫🇯\",\n  falkland_islands: \"🇫🇰\",\n  micronesia: \"🇫🇲\",\n  faroe_islands: \"🇫🇴\",\n  fr: \"🇫🇷\",\n  gabon: \"🇬🇦\",\n  gb: \"🇬🇧\",\n  uk: \"🇬🇧\",\n  grenada: \"🇬🇩\",\n  georgia: \"🇬🇪\",\n  french_guiana: \"🇬🇫\",\n  guernsey: \"🇬🇬\",\n  ghana: \"🇬🇭\",\n  gibraltar: \"🇬🇮\",\n  greenland: \"🇬🇱\",\n  gambia: \"🇬🇲\",\n  guinea: \"🇬🇳\",\n  guadeloupe: \"🇬🇵\",\n  equatorial_guinea: \"🇬🇶\",\n  greece: \"🇬🇷\",\n  south_georgia_south_sandwich_islands: \"🇬🇸\",\n  guatemala: \"🇬🇹\",\n  guam: \"🇬🇺\",\n  guinea_bissau: \"🇬🇼\",\n  guyana: \"🇬🇾\",\n  hong_kong: \"🇭🇰\",\n  heard_mcdonald_islands: \"🇭🇲\",\n  honduras: \"🇭🇳\",\n  croatia: \"🇭🇷\",\n  haiti: \"🇭🇹\",\n  hungary: \"🇭🇺\",\n  canary_islands: \"🇮🇨\",\n  indonesia: \"🇮🇩\",\n  ireland: \"🇮🇪\",\n  israel: \"🇮🇱\",\n  isle_of_man: \"🇮🇲\",\n  india: \"🇮🇳\",\n  british_indian_ocean_territory: \"🇮🇴\",\n  iraq: \"🇮🇶\",\n  iran: \"🇮🇷\",\n  iceland: \"🇮🇸\",\n  it: \"🇮🇹\",\n  jersey: \"🇯🇪\",\n  jamaica: \"🇯🇲\",\n  jordan: \"🇯🇴\",\n  jp: \"🇯🇵\",\n  kenya: \"🇰🇪\",\n  kyrgyzstan: \"🇰🇬\",\n  cambodia: \"🇰🇭\",\n  kiribati: \"🇰🇮\",\n  comoros: \"🇰🇲\",\n  st_kitts_nevis: \"🇰🇳\",\n  north_korea: \"🇰🇵\",\n  kr: \"🇰🇷\",\n  kuwait: \"🇰🇼\",\n  cayman_islands: \"🇰🇾\",\n  kazakhstan: \"🇰🇿\",\n  laos: \"🇱🇦\",\n  lebanon: \"🇱🇧\",\n  st_lucia: \"🇱🇨\",\n  liechtenstein: \"🇱🇮\",\n  sri_lanka: \"🇱🇰\",\n  liberia: \"🇱🇷\",\n  lesotho: \"🇱🇸\",\n  lithuania: \"🇱🇹\",\n  luxembourg: \"🇱🇺\",\n  latvia: \"🇱🇻\",\n  libya: \"🇱🇾\",\n  morocco: \"🇲🇦\",\n  monaco: \"🇲🇨\",\n  moldova: \"🇲🇩\",\n  montenegro: \"🇲🇪\",\n  st_martin: \"🇲🇫\",\n  madagascar: \"🇲🇬\",\n  marshall_islands: \"🇲🇭\",\n  macedonia: \"🇲🇰\",\n  mali: \"🇲🇱\",\n  myanmar: \"🇲🇲\",\n  mongolia: \"🇲🇳\",\n  macau: \"🇲🇴\",\n  northern_mariana_islands: \"🇲🇵\",\n  martinique: \"🇲🇶\",\n  mauritania: \"🇲🇷\",\n  montserrat: \"🇲🇸\",\n  malta: \"🇲🇹\",\n  mauritius: \"🇲🇺\",\n  maldives: \"🇲🇻\",\n  malawi: \"🇲🇼\",\n  mexico: \"🇲🇽\",\n  malaysia: \"🇲🇾\",\n  mozambique: \"🇲🇿\",\n  namibia: \"🇳🇦\",\n  new_caledonia: \"🇳🇨\",\n  niger: \"🇳🇪\",\n  norfolk_island: \"🇳🇫\",\n  nigeria: \"🇳🇬\",\n  nicaragua: \"🇳🇮\",\n  netherlands: \"🇳🇱\",\n  norway: \"🇳🇴\",\n  nepal: \"🇳🇵\",\n  nauru: \"🇳🇷\",\n  niue: \"🇳🇺\",\n  new_zealand: \"🇳🇿\",\n  oman: \"🇴🇲\",\n  panama: \"🇵🇦\",\n  peru: \"🇵🇪\",\n  french_polynesia: \"🇵🇫\",\n  papua_new_guinea: \"🇵🇬\",\n  philippines: \"🇵🇭\",\n  pakistan: \"🇵🇰\",\n  poland: \"🇵🇱\",\n  st_pierre_miquelon: \"🇵🇲\",\n  pitcairn_islands: \"🇵🇳\",\n  puerto_rico: \"🇵🇷\",\n  palestinian_territories: \"🇵🇸\",\n  portugal: \"🇵🇹\",\n  palau: \"🇵🇼\",\n  paraguay: \"🇵🇾\",\n  qatar: \"🇶🇦\",\n  reunion: \"🇷🇪\",\n  romania: \"🇷🇴\",\n  serbia: \"🇷🇸\",\n  ru: \"🇷🇺\",\n  rwanda: \"🇷🇼\",\n  saudi_arabia: \"🇸🇦\",\n  solomon_islands: \"🇸🇧\",\n  seychelles: \"🇸🇨\",\n  sudan: \"🇸🇩\",\n  sweden: \"🇸🇪\",\n  singapore: \"🇸🇬\",\n  st_helena: \"🇸🇭\",\n  slovenia: \"🇸🇮\",\n  svalbard_jan_mayen: \"🇸🇯\",\n  slovakia: \"🇸🇰\",\n  sierra_leone: \"🇸🇱\",\n  san_marino: \"🇸🇲\",\n  senegal: \"🇸🇳\",\n  somalia: \"🇸🇴\",\n  suriname: \"🇸🇷\",\n  south_sudan: \"🇸🇸\",\n  sao_tome_principe: \"🇸🇹\",\n  el_salvador: \"🇸🇻\",\n  sint_maarten: \"🇸🇽\",\n  syria: \"🇸🇾\",\n  swaziland: \"🇸🇿\",\n  tristan_da_cunha: \"🇹🇦\",\n  turks_caicos_islands: \"🇹🇨\",\n  chad: \"🇹🇩\",\n  french_southern_territories: \"🇹🇫\",\n  togo: \"🇹🇬\",\n  thailand: \"🇹🇭\",\n  tajikistan: \"🇹🇯\",\n  tokelau: \"🇹🇰\",\n  timor_leste: \"🇹🇱\",\n  turkmenistan: \"🇹🇲\",\n  tunisia: \"🇹🇳\",\n  tonga: \"🇹🇴\",\n  tr: \"🇹🇷\",\n  trinidad_tobago: \"🇹🇹\",\n  tuvalu: \"🇹🇻\",\n  taiwan: \"🇹🇼\",\n  tanzania: \"🇹🇿\",\n  ukraine: \"🇺🇦\",\n  uganda: \"🇺🇬\",\n  us_outlying_islands: \"🇺🇲\",\n  united_nations: \"🇺🇳\",\n  us: \"🇺🇸\",\n  uruguay: \"🇺🇾\",\n  uzbekistan: \"🇺🇿\",\n  vatican_city: \"🇻🇦\",\n  st_vincent_grenadines: \"🇻🇨\",\n  venezuela: \"🇻🇪\",\n  british_virgin_islands: \"🇻🇬\",\n  us_virgin_islands: \"🇻🇮\",\n  vietnam: \"🇻🇳\",\n  vanuatu: \"🇻🇺\",\n  wallis_futuna: \"🇼🇫\",\n  samoa: \"🇼🇸\",\n  kosovo: \"🇽🇰\",\n  yemen: \"🇾🇪\",\n  mayotte: \"🇾🇹\",\n  south_africa: \"🇿🇦\",\n  zambia: \"🇿🇲\",\n  zimbabwe: \"🇿🇼\",\n  england: \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n  scotland: \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n  wales: \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n  hundred_points_symbol: \"💯\",\n  input_symbol_for_numbers: \"🔢\",\n  \"#\": \"#️⃣\",\n  keycap_star: \"*️⃣\",\n  \"*\": \"*️⃣\",\n  mahjong_tile_red_dragon: \"🀄\",\n  playing_card_black_joker: \"🃏\",\n  \"a_button_(blood_type)\": \"🅰️\",\n  \"b_button_(blood_type)\": \"🅱️\",\n  \"o_button_(blood_type)\": \"🅾️\",\n  negative_squared_ab: \"🆎\",\n  \"ab_button_(blood_type)\": \"🆎\",\n  squared_cl: \"🆑\",\n  squared_cool: \"🆒\",\n  squared_free: \"🆓\",\n  squared_id: \"🆔\",\n  squared_new: \"🆕\",\n  squared_ng: \"🆖\",\n  squared_ok: \"🆗\",\n  squared_sos: \"🆘\",\n  squared_up_with_exclamation_mark: \"🆙\",\n  \"up!_button\": \"🆙\",\n  squared_vs: \"🆚\",\n  \"flag-ac\": \"🇦🇨\",\n  \"flag-ad\": \"🇦🇩\",\n  ad: \"🇦🇩\",\n  \"flag-ae\": \"🇦🇪\",\n  ae: \"🇦🇪\",\n  \"flag-af\": \"🇦🇫\",\n  af: \"🇦🇫\",\n  \"flag-ag\": \"🇦🇬\",\n  ag: \"🇦🇬\",\n  \"antigua_&_barbuda\": \"🇦🇬\",\n  \"flag-ai\": \"🇦🇮\",\n  ai: \"🇦🇮\",\n  \"flag-al\": \"🇦🇱\",\n  al: \"🇦🇱\",\n  \"flag-am\": \"🇦🇲\",\n  am: \"🇦🇲\",\n  \"flag-ao\": \"🇦🇴\",\n  ao: \"🇦🇴\",\n  \"flag-aq\": \"🇦🇶\",\n  \"flag-ar\": \"🇦🇷\",\n  ar: \"🇦🇷\",\n  \"flag-as\": \"🇦🇸\",\n  as: \"🇦🇸\",\n  \"flag-at\": \"🇦🇹\",\n  at: \"🇦🇹\",\n  \"flag-au\": \"🇦🇺\",\n  au: \"🇦🇺\",\n  \"flag-aw\": \"🇦🇼\",\n  aw: \"🇦🇼\",\n  \"flag-ax\": \"🇦🇽\",\n  åland_islands: \"🇦🇽\",\n  \"flag-az\": \"🇦🇿\",\n  az: \"🇦🇿\",\n  \"flag-ba\": \"🇧🇦\",\n  ba: \"🇧🇦\",\n  \"bosnia_&_herzegovina\": \"🇧🇦\",\n  \"flag-bb\": \"🇧🇧\",\n  bb: \"🇧🇧\",\n  \"flag-bd\": \"🇧🇩\",\n  bd: \"🇧🇩\",\n  \"flag-be\": \"🇧🇪\",\n  be: \"🇧🇪\",\n  \"flag-bf\": \"🇧🇫\",\n  bf: \"🇧🇫\",\n  \"flag-bg\": \"🇧🇬\",\n  bg: \"🇧🇬\",\n  \"flag-bh\": \"🇧🇭\",\n  bh: \"🇧🇭\",\n  \"flag-bi\": \"🇧🇮\",\n  bi: \"🇧🇮\",\n  \"flag-bj\": \"🇧🇯\",\n  bj: \"🇧🇯\",\n  \"flag-bl\": \"🇧🇱\",\n  \"flag-bm\": \"🇧🇲\",\n  bm: \"🇧🇲\",\n  \"flag-bn\": \"🇧🇳\",\n  bn: \"🇧🇳\",\n  \"flag-bo\": \"🇧🇴\",\n  bo: \"🇧🇴\",\n  \"flag-bq\": \"🇧🇶\",\n  \"flag-br\": \"🇧🇷\",\n  br: \"🇧🇷\",\n  \"flag-bs\": \"🇧🇸\",\n  bs: \"🇧🇸\",\n  \"flag-bt\": \"🇧🇹\",\n  bt: \"🇧🇹\",\n  \"flag-bv\": \"🇧🇻\",\n  \"flag-bw\": \"🇧🇼\",\n  bw: \"🇧🇼\",\n  \"flag-by\": \"🇧🇾\",\n  by: \"🇧🇾\",\n  \"flag-bz\": \"🇧🇿\",\n  bz: \"🇧🇿\",\n  \"flag-ca\": \"🇨🇦\",\n  ca: \"🇨🇦\",\n  \"flag-cc\": \"🇨🇨\",\n  \"cocos_(keeling)_islands\": \"🇨🇨\",\n  \"flag-cd\": \"🇨🇩\",\n  cd_flag: \"🇨🇩\",\n  \"congo_-_kinshasa\": \"🇨🇩\",\n  \"flag-cf\": \"🇨🇫\",\n  cf: \"🇨🇫\",\n  \"flag-cg\": \"🇨🇬\",\n  cg: \"🇨🇬\",\n  \"congo_-_brazzaville\": \"🇨🇬\",\n  \"flag-ch\": \"🇨🇭\",\n  ch: \"🇨🇭\",\n  \"flag-ci\": \"🇨🇮\",\n  ci: \"🇨🇮\",\n  \"côte_d’ivoire\": \"🇨🇮\",\n  \"flag-ck\": \"🇨🇰\",\n  ck: \"🇨🇰\",\n  \"flag-cl\": \"🇨🇱\",\n  cl_flag: \"🇨🇱\",\n  \"flag-cm\": \"🇨🇲\",\n  cm: \"🇨🇲\",\n  \"flag-cn\": \"🇨🇳\",\n  china: \"🇨🇳\",\n  \"flag-co\": \"🇨🇴\",\n  co: \"🇨🇴\",\n  \"flag-cp\": \"🇨🇵\",\n  \"flag-cr\": \"🇨🇷\",\n  cr: \"🇨🇷\",\n  \"flag-cu\": \"🇨🇺\",\n  cu: \"🇨🇺\",\n  \"flag-cv\": \"🇨🇻\",\n  cv: \"🇨🇻\",\n  \"flag-cw\": \"🇨🇼\",\n  cw: \"🇨🇼\",\n  curaçao: \"🇨🇼\",\n  \"flag-cx\": \"🇨🇽\",\n  \"flag-cy\": \"🇨🇾\",\n  cy: \"🇨🇾\",\n  \"flag-cz\": \"🇨🇿\",\n  cz: \"🇨🇿\",\n  czechia: \"🇨🇿\",\n  \"flag-de\": \"🇩🇪\",\n  germany: \"🇩🇪\",\n  \"flag-dg\": \"🇩🇬\",\n  \"flag-dj\": \"🇩🇯\",\n  dj: \"🇩🇯\",\n  \"flag-dk\": \"🇩🇰\",\n  dk: \"🇩🇰\",\n  \"flag-dm\": \"🇩🇲\",\n  dm: \"🇩🇲\",\n  \"flag-do\": \"🇩🇴\",\n  do: \"🇩🇴\",\n  \"flag-dz\": \"🇩🇿\",\n  dz: \"🇩🇿\",\n  \"flag-ea\": \"🇪🇦\",\n  \"ceuta_&_melilla\": \"🇪🇦\",\n  \"flag-ec\": \"🇪🇨\",\n  ec: \"🇪🇨\",\n  \"flag-ee\": \"🇪🇪\",\n  ee: \"🇪🇪\",\n  \"flag-eg\": \"🇪🇬\",\n  eg: \"🇪🇬\",\n  \"flag-eh\": \"🇪🇭\",\n  \"flag-er\": \"🇪🇷\",\n  er: \"🇪🇷\",\n  \"flag-es\": \"🇪🇸\",\n  spain: \"🇪🇸\",\n  \"flag-et\": \"🇪🇹\",\n  et: \"🇪🇹\",\n  \"flag-eu\": \"🇪🇺\",\n  \"flag-fi\": \"🇫🇮\",\n  fi: \"🇫🇮\",\n  \"flag-fj\": \"🇫🇯\",\n  fj: \"🇫🇯\",\n  \"flag-fk\": \"🇫🇰\",\n  \"flag-fm\": \"🇫🇲\",\n  \"flag-fo\": \"🇫🇴\",\n  fo: \"🇫🇴\",\n  \"flag-fr\": \"🇫🇷\",\n  france: \"🇫🇷\",\n  \"flag-ga\": \"🇬🇦\",\n  ga: \"🇬🇦\",\n  \"flag-gb\": \"🇬🇧\",\n  united_kingdom: \"🇬🇧\",\n  \"flag-gd\": \"🇬🇩\",\n  gd: \"🇬🇩\",\n  \"flag-ge\": \"🇬🇪\",\n  ge: \"🇬🇪\",\n  \"flag-gf\": \"🇬🇫\",\n  gf: \"🇬🇫\",\n  \"flag-gg\": \"🇬🇬\",\n  \"flag-gh\": \"🇬🇭\",\n  gh: \"🇬🇭\",\n  \"flag-gi\": \"🇬🇮\",\n  gi: \"🇬🇮\",\n  \"flag-gl\": \"🇬🇱\",\n  \"flag-gm\": \"🇬🇲\",\n  gm: \"🇬🇲\",\n  \"flag-gn\": \"🇬🇳\",\n  gn: \"🇬🇳\",\n  \"flag-gp\": \"🇬🇵\",\n  gp: \"🇬🇵\",\n  \"flag-gq\": \"🇬🇶\",\n  gq: \"🇬🇶\",\n  \"flag-gr\": \"🇬🇷\",\n  gr: \"🇬🇷\",\n  \"flag-gs\": \"🇬🇸\",\n  \"south_georgia_&_south_sandwich_islands\": \"🇬🇸\",\n  \"flag-gt\": \"🇬🇹\",\n  gt: \"🇬🇹\",\n  \"flag-gu\": \"🇬🇺\",\n  gu: \"🇬🇺\",\n  \"flag-gw\": \"🇬🇼\",\n  gw: \"🇬🇼\",\n  \"guinea-bissau\": \"🇬🇼\",\n  \"flag-gy\": \"🇬🇾\",\n  gy: \"🇬🇾\",\n  \"flag-hk\": \"🇭🇰\",\n  hk: \"🇭🇰\",\n  hong_kong_sar_china: \"🇭🇰\",\n  \"flag-hm\": \"🇭🇲\",\n  \"heard_&_mcdonald_islands\": \"🇭🇲\",\n  \"flag-hn\": \"🇭🇳\",\n  hn: \"🇭🇳\",\n  \"flag-hr\": \"🇭🇷\",\n  hr: \"🇭🇷\",\n  \"flag-ht\": \"🇭🇹\",\n  ht: \"🇭🇹\",\n  \"flag-hu\": \"🇭🇺\",\n  hu: \"🇭🇺\",\n  \"flag-ic\": \"🇮🇨\",\n  \"flag-id\": \"🇮🇩\",\n  id_flag: \"🇮🇩\",\n  \"flag-ie\": \"🇮🇪\",\n  ie: \"🇮🇪\",\n  \"flag-il\": \"🇮🇱\",\n  il: \"🇮🇱\",\n  \"flag-im\": \"🇮🇲\",\n  \"flag-in\": \"🇮🇳\",\n  in: \"🇮🇳\",\n  \"flag-io\": \"🇮🇴\",\n  \"flag-iq\": \"🇮🇶\",\n  iq: \"🇮🇶\",\n  \"flag-ir\": \"🇮🇷\",\n  ir: \"🇮🇷\",\n  \"flag-is\": \"🇮🇸\",\n  is: \"🇮🇸\",\n  \"flag-it\": \"🇮🇹\",\n  italy: \"🇮🇹\",\n  \"flag-je\": \"🇯🇪\",\n  \"flag-jm\": \"🇯🇲\",\n  jm: \"🇯🇲\",\n  \"flag-jo\": \"🇯🇴\",\n  jo: \"🇯🇴\",\n  \"flag-jp\": \"🇯🇵\",\n  \"flag-ke\": \"🇰🇪\",\n  ke: \"🇰🇪\",\n  \"flag-kg\": \"🇰🇬\",\n  kg: \"🇰🇬\",\n  \"flag-kh\": \"🇰🇭\",\n  kh: \"🇰🇭\",\n  \"flag-ki\": \"🇰🇮\",\n  ki: \"🇰🇮\",\n  \"flag-km\": \"🇰🇲\",\n  km: \"🇰🇲\",\n  \"flag-kn\": \"🇰🇳\",\n  \"flag-kp\": \"🇰🇵\",\n  kp: \"🇰🇵\",\n  \"flag-kr\": \"🇰🇷\",\n  south_korea: \"🇰🇷\",\n  \"flag-kw\": \"🇰🇼\",\n  kw: \"🇰🇼\",\n  \"flag-ky\": \"🇰🇾\",\n  ky: \"🇰🇾\",\n  \"flag-kz\": \"🇰🇿\",\n  kz: \"🇰🇿\",\n  \"flag-la\": \"🇱🇦\",\n  la: \"🇱🇦\",\n  \"flag-lb\": \"🇱🇧\",\n  lb: \"🇱🇧\",\n  \"flag-lc\": \"🇱🇨\",\n  \"flag-li\": \"🇱🇮\",\n  li: \"🇱🇮\",\n  \"flag-lk\": \"🇱🇰\",\n  lk: \"🇱🇰\",\n  \"flag-lr\": \"🇱🇷\",\n  lr: \"🇱🇷\",\n  \"flag-ls\": \"🇱🇸\",\n  ls: \"🇱🇸\",\n  \"flag-lt\": \"🇱🇹\",\n  lt: \"🇱🇹\",\n  \"flag-lu\": \"🇱🇺\",\n  lu: \"🇱🇺\",\n  \"flag-lv\": \"🇱🇻\",\n  lv: \"🇱🇻\",\n  \"flag-ly\": \"🇱🇾\",\n  ly: \"🇱🇾\",\n  \"flag-ma\": \"🇲🇦\",\n  ma: \"🇲🇦\",\n  \"flag-mc\": \"🇲🇨\",\n  \"flag-md\": \"🇲🇩\",\n  md: \"🇲🇩\",\n  \"flag-me\": \"🇲🇪\",\n  me: \"🇲🇪\",\n  \"flag-mf\": \"🇲🇫\",\n  \"flag-mg\": \"🇲🇬\",\n  mg: \"🇲🇬\",\n  \"flag-mh\": \"🇲🇭\",\n  \"flag-mk\": \"🇲🇰\",\n  mk: \"🇲🇰\",\n  \"flag-ml\": \"🇲🇱\",\n  ml: \"🇲🇱\",\n  \"flag-mm\": \"🇲🇲\",\n  mm: \"🇲🇲\",\n  \"myanmar_(burma)\": \"🇲🇲\",\n  \"flag-mn\": \"🇲🇳\",\n  mn: \"🇲🇳\",\n  \"flag-mo\": \"🇲🇴\",\n  mo: \"🇲🇴\",\n  macao_sar_china: \"🇲🇴\",\n  \"flag-mp\": \"🇲🇵\",\n  mp: \"🇲🇵\",\n  \"flag-mq\": \"🇲🇶\",\n  mq: \"🇲🇶\",\n  \"flag-mr\": \"🇲🇷\",\n  mr: \"🇲🇷\",\n  \"flag-ms\": \"🇲🇸\",\n  ms: \"🇲🇸\",\n  \"flag-mt\": \"🇲🇹\",\n  mt: \"🇲🇹\",\n  \"flag-mu\": \"🇲🇺\",\n  \"flag-mv\": \"🇲🇻\",\n  mv: \"🇲🇻\",\n  \"flag-mw\": \"🇲🇼\",\n  mw: \"🇲🇼\",\n  \"flag-mx\": \"🇲🇽\",\n  mx: \"🇲🇽\",\n  \"flag-my\": \"🇲🇾\",\n  my: \"🇲🇾\",\n  \"flag-mz\": \"🇲🇿\",\n  mz: \"🇲🇿\",\n  \"flag-na\": \"🇳🇦\",\n  na: \"🇳🇦\",\n  \"flag-nc\": \"🇳🇨\",\n  nc: \"🇳🇨\",\n  \"flag-ne\": \"🇳🇪\",\n  ne: \"🇳🇪\",\n  \"flag-nf\": \"🇳🇫\",\n  \"flag-ng\": \"🇳🇬\",\n  \"flag-ni\": \"🇳🇮\",\n  ni: \"🇳🇮\",\n  \"flag-nl\": \"🇳🇱\",\n  nl: \"🇳🇱\",\n  \"flag-no\": \"🇳🇴\",\n  no: \"🇳🇴\",\n  \"flag-np\": \"🇳🇵\",\n  np: \"🇳🇵\",\n  \"flag-nr\": \"🇳🇷\",\n  \"flag-nu\": \"🇳🇺\",\n  nu: \"🇳🇺\",\n  \"flag-nz\": \"🇳🇿\",\n  nz: \"🇳🇿\",\n  \"flag-om\": \"🇴🇲\",\n  \"flag-pa\": \"🇵🇦\",\n  pa: \"🇵🇦\",\n  \"flag-pe\": \"🇵🇪\",\n  pe: \"🇵🇪\",\n  \"flag-pf\": \"🇵🇫\",\n  \"flag-pg\": \"🇵🇬\",\n  pg: \"🇵🇬\",\n  \"flag-ph\": \"🇵🇭\",\n  ph: \"🇵🇭\",\n  \"flag-pk\": \"🇵🇰\",\n  pk: \"🇵🇰\",\n  \"flag-pl\": \"🇵🇱\",\n  pl: \"🇵🇱\",\n  \"flag-pm\": \"🇵🇲\",\n  \"flag-pn\": \"🇵🇳\",\n  \"flag-pr\": \"🇵🇷\",\n  pr: \"🇵🇷\",\n  \"flag-ps\": \"🇵🇸\",\n  ps: \"🇵🇸\",\n  \"flag-pt\": \"🇵🇹\",\n  pt: \"🇵🇹\",\n  \"flag-pw\": \"🇵🇼\",\n  pw: \"🇵🇼\",\n  \"flag-py\": \"🇵🇾\",\n  py: \"🇵🇾\",\n  \"flag-qa\": \"🇶🇦\",\n  qa: \"🇶🇦\",\n  \"flag-re\": \"🇷🇪\",\n  re: \"🇷🇪\",\n  réunion: \"🇷🇪\",\n  \"flag-ro\": \"🇷🇴\",\n  ro: \"🇷🇴\",\n  \"flag-rs\": \"🇷🇸\",\n  rs: \"🇷🇸\",\n  \"flag-ru\": \"🇷🇺\",\n  russia: \"🇷🇺\",\n  \"flag-rw\": \"🇷🇼\",\n  rw: \"🇷🇼\",\n  \"flag-sa\": \"🇸🇦\",\n  sa_flag: \"🇸🇦\",\n  \"flag-sb\": \"🇸🇧\",\n  sb: \"🇸🇧\",\n  \"flag-sc\": \"🇸🇨\",\n  sc: \"🇸🇨\",\n  \"flag-sd\": \"🇸🇩\",\n  sd: \"🇸🇩\",\n  \"flag-se\": \"🇸🇪\",\n  se: \"🇸🇪\",\n  \"flag-sg\": \"🇸🇬\",\n  sg: \"🇸🇬\",\n  \"flag-sh\": \"🇸🇭\",\n  \"flag-si\": \"🇸🇮\",\n  si: \"🇸🇮\",\n  \"flag-sj\": \"🇸🇯\",\n  \"svalbard_&_jan_mayen\": \"🇸🇯\",\n  \"flag-sk\": \"🇸🇰\",\n  sk: \"🇸🇰\",\n  \"flag-sl\": \"🇸🇱\",\n  sl: \"🇸🇱\",\n  \"flag-sm\": \"🇸🇲\",\n  sm: \"🇸🇲\",\n  \"flag-sn\": \"🇸🇳\",\n  sn: \"🇸🇳\",\n  \"flag-so\": \"🇸🇴\",\n  so: \"🇸🇴\",\n  \"flag-sr\": \"🇸🇷\",\n  sr: \"🇸🇷\",\n  \"flag-ss\": \"🇸🇸\",\n  ss: \"🇸🇸\",\n  \"flag-st\": \"🇸🇹\",\n  st: \"🇸🇹\",\n  \"são_tomé_&_príncipe\": \"🇸🇹\",\n  \"flag-sv\": \"🇸🇻\",\n  sv: \"🇸🇻\",\n  \"flag-sx\": \"🇸🇽\",\n  \"flag-sy\": \"🇸🇾\",\n  sy: \"🇸🇾\",\n  \"flag-sz\": \"🇸🇿\",\n  sz: \"🇸🇿\",\n  eswatini: \"🇸🇿\",\n  \"flag-ta\": \"🇹🇦\",\n  \"flag-tc\": \"🇹🇨\",\n  tc: \"🇹🇨\",\n  \"turks_&_caicos_islands\": \"🇹🇨\",\n  \"flag-td\": \"🇹🇩\",\n  \"flag-tf\": \"🇹🇫\",\n  tf: \"🇹🇫\",\n  \"flag-tg\": \"🇹🇬\",\n  tg: \"🇹🇬\",\n  \"flag-th\": \"🇹🇭\",\n  th: \"🇹🇭\",\n  \"flag-tj\": \"🇹🇯\",\n  tj: \"🇹🇯\",\n  \"flag-tk\": \"🇹🇰\",\n  \"flag-tl\": \"🇹🇱\",\n  tl: \"🇹🇱\",\n  \"timor-leste\": \"🇹🇱\",\n  \"flag-tm\": \"🇹🇲\",\n  tm_flag: \"🇹🇲\",\n  \"flag-tn\": \"🇹🇳\",\n  tn: \"🇹🇳\",\n  \"flag-to\": \"🇹🇴\",\n  to: \"🇹🇴\",\n  \"flag-tr\": \"🇹🇷\",\n  \"flag-tt\": \"🇹🇹\",\n  tt: \"🇹🇹\",\n  \"trinidad_&_tobago\": \"🇹🇹\",\n  \"flag-tv\": \"🇹🇻\",\n  tv_flag: \"🇹🇻\",\n  \"flag-tw\": \"🇹🇼\",\n  \"flag-tz\": \"🇹🇿\",\n  tz: \"🇹🇿\",\n  \"flag-ua\": \"🇺🇦\",\n  ua: \"🇺🇦\",\n  \"flag-ug\": \"🇺🇬\",\n  ug: \"🇺🇬\",\n  \"flag-um\": \"🇺🇲\",\n  \"flag-un\": \"🇺🇳\",\n  \"flag-us\": \"🇺🇸\",\n  united_states: \"🇺🇸\",\n  \"flag-uy\": \"🇺🇾\",\n  uy: \"🇺🇾\",\n  \"flag-uz\": \"🇺🇿\",\n  uz: \"🇺🇿\",\n  \"flag-va\": \"🇻🇦\",\n  \"flag-vc\": \"🇻🇨\",\n  vc: \"🇻🇨\",\n  \"flag-ve\": \"🇻🇪\",\n  ve: \"🇻🇪\",\n  \"flag-vg\": \"🇻🇬\",\n  vg: \"🇻🇬\",\n  \"flag-vi\": \"🇻🇮\",\n  vi: \"🇻🇮\",\n  \"flag-vn\": \"🇻🇳\",\n  vn: \"🇻🇳\",\n  \"flag-vu\": \"🇻🇺\",\n  vu: \"🇻🇺\",\n  \"flag-wf\": \"🇼🇫\",\n  \"wallis_&_futuna\": \"🇼🇫\",\n  \"flag-ws\": \"🇼🇸\",\n  ws: \"🇼🇸\",\n  \"flag-xk\": \"🇽🇰\",\n  \"flag-ye\": \"🇾🇪\",\n  ye: \"🇾🇪\",\n  \"flag-yt\": \"🇾🇹\",\n  \"flag-za\": \"🇿🇦\",\n  za: \"🇿🇦\",\n  \"flag-zm\": \"🇿🇲\",\n  zm: \"🇿🇲\",\n  \"flag-zw\": \"🇿🇼\",\n  zw: \"🇿🇼\",\n  squared_katakana_koko: \"🈁\",\n  \"japanese_“here”_button\": \"🈁\",\n  \"japanese_“service_charge”_button\": \"🈂️\",\n  \"squared_cjk_unified_ideograph-7121\": \"🈚\",\n  \"japanese_“free_of_charge”_button\": \"🈚\",\n  \"squared_cjk_unified_ideograph-6307\": \"🈯\",\n  \"japanese_“reserved”_button\": \"🈯\",\n  \"squared_cjk_unified_ideograph-7981\": \"🈲\",\n  \"japanese_“prohibited”_button\": \"🈲\",\n  \"squared_cjk_unified_ideograph-7a7a\": \"🈳\",\n  \"japanese_“vacancy”_button\": \"🈳\",\n  \"squared_cjk_unified_ideograph-5408\": \"🈴\",\n  \"japanese_“passing_grade”_button\": \"🈴\",\n  \"squared_cjk_unified_ideograph-6e80\": \"🈵\",\n  \"japanese_“no_vacancy”_button\": \"🈵\",\n  \"squared_cjk_unified_ideograph-6709\": \"🈶\",\n  \"japanese_“not_free_of_charge”_button\": \"🈶\",\n  \"japanese_“monthly_amount”_button\": \"🈷️\",\n  \"squared_cjk_unified_ideograph-7533\": \"🈸\",\n  \"japanese_“application”_button\": \"🈸\",\n  \"squared_cjk_unified_ideograph-5272\": \"🈹\",\n  \"japanese_“discount”_button\": \"🈹\",\n  \"squared_cjk_unified_ideograph-55b6\": \"🈺\",\n  \"japanese_“open_for_business”_button\": \"🈺\",\n  circled_ideograph_advantage: \"🉐\",\n  \"japanese_“bargain”_button\": \"🉐\",\n  circled_ideograph_accept: \"🉑\",\n  \"japanese_“acceptable”_button\": \"🉑\",\n  sunset_over_buildings: \"🌇\",\n  \"earth_globe_europe-africa\": \"🌍\",\n  \"globe_showing_europe-africa\": \"🌍\",\n  earth_globe_americas: \"🌎\",\n  \"earth_globe_asia-australia\": \"🌏\",\n  \"globe_showing_asia-australia\": \"🌏\",\n  new_moon_symbol: \"🌑\",\n  waxing_crescent_moon_symbol: \"🌒\",\n  first_quarter_moon_symbol: \"🌓\",\n  waxing_gibbous_moon_symbol: \"🌔\",\n  full_moon_symbol: \"🌕\",\n  waning_gibbous_moon_symbol: \"🌖\",\n  last_quarter_moon_symbol: \"🌗\",\n  waning_crescent_moon_symbol: \"🌘\",\n  mostly_sunny: \"🌤️\",\n  barely_sunny: \"🌥️\",\n  partly_sunny_rain: \"🌦️\",\n  rain_cloud: \"🌧️\",\n  snow_cloud: \"🌨️\",\n  lightning: \"🌩️\",\n  wind_blowing_face: \"🌬️\",\n  wrap: \"🌯\",\n  ear_of_maize: \"🌽\",\n  aubergine: \"🍆\",\n  slice_of_pizza: \"🍕\",\n  curry_and_rice: \"🍛\",\n  fish_cake_with_swirl_design: \"🍥\",\n  sake_bottle_and_cup: \"🍶\",\n  knife_fork_plate: \"🍽️\",\n  sparkling_wine: \"🍾\",\n  wrapped_present: \"🎁\",\n  \"jack-o-lantern\": \"🎃\",\n  father_christmas: \"🎅\",\n  firework_sparkler: \"🎇\",\n  medal: \"🎖️\",\n  billiards: \"🎱\",\n  multiple_musical_notes: \"🎶\",\n  tennis_racquet_and_ball: \"🎾\",\n  ski_and_ski_boot: \"🎿\",\n  basketball_and_hoop: \"🏀\",\n  \"woman-running\": \"🏃‍♀️\",\n  \"man-running\": \"🏃‍♂️\",\n  \"woman-surfing\": \"🏄‍♀️\",\n  \"man-surfing\": \"🏄‍♂️\",\n  sports_decoration: \"🏅\",\n  \"woman-swimming\": \"🏊‍♀️\",\n  \"man-swimming\": \"🏊‍♂️\",\n  \"woman-lifting-weights\": \"🏋️‍♀️\",\n  \"man-lifting-weights\": \"🏋️‍♂️\",\n  weight_lifter: \"🏋️\",\n  \"woman-golfing\": \"🏌️‍♀️\",\n  \"man-golfing\": \"🏌️‍♂️\",\n  golfer: \"🏌️\",\n  racing_motorcycle: \"🏍️\",\n  cricket_bat_and_ball: \"🏏\",\n  field_hockey_stick_and_ball: \"🏑\",\n  ice_hockey_stick_and_puck: \"🏒\",\n  table_tennis_paddle_and_ball: \"🏓\",\n  table_tennis: \"🏓\",\n  house_buildings: \"🏘️\",\n  derelict_house_building: \"🏚️\",\n  house_building: \"🏠\",\n  automated_teller_machine: \"🏧\",\n  \"rainbow-flag\": \"🏳️‍🌈\",\n  waving_white_flag: \"🏳️\",\n  \"flag-england\": \"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\n  \"flag-scotland\": \"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\n  \"flag-wales\": \"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\n  waving_black_flag: \"🏴\",\n  badminton_racquet_and_shuttlecock: \"🏸\",\n  badminton_racket_and_shuttlecock: \"🏸\",\n  bow_arrow: \"🏹\",\n  archery: \"🏹\",\n  jar: \"🏺\",\n  vase: \"🏺\",\n  \"skin-tone-2\": \"🏻\",\n  \"skin-tone-3\": \"🏼\",\n  \"skin-tone-4\": \"🏽\",\n  \"skin-tone-5\": \"🏾\",\n  \"skin-tone-6\": \"🏿\",\n  \"front-facing_baby_chick\": \"🐥\",\n  bactrian_camel: \"🐫\",\n  \"two-hump_camel\": \"🐫\",\n  frog_face: \"🐸\",\n  hamster_face: \"🐹\",\n  wolf_face: \"🐺\",\n  bear_face: \"🐻\",\n  \"eye-in-speech-bubble\": \"👁️‍🗨️\",\n  white_up_pointing_backhand_index: \"👆\",\n  white_down_pointing_backhand_index: \"👇\",\n  white_left_pointing_backhand_index: \"👈\",\n  white_right_pointing_backhand_index: \"👉\",\n  fisted_hand_sign: \"👊\",\n  waving_hand_sign: \"👋\",\n  ok_hand_sign: \"👌\",\n  thumbs_up_sign: \"👍\",\n  thumbs_down_sign: \"👎\",\n  clapping_hands_sign: \"👏\",\n  open_hands_sign: \"👐\",\n  \"woman’s_hat\": \"👒\",\n  \"t-shirt\": \"👕\",\n  \"woman’s_clothes\": \"👚\",\n  \"man’s_shoe\": \"👞\",\n  \"high-heeled_shoe\": \"👠\",\n  womans_sandal: \"👡\",\n  \"woman’s_sandal\": \"👡\",\n  womans_boots: \"👢\",\n  \"woman’s_boot\": \"👢\",\n  \"male-farmer\": \"👨‍🌾\",\n  male_farmer: \"👨‍🌾\",\n  \"male-cook\": \"👨‍🍳\",\n  male_cook: \"👨‍🍳\",\n  \"male-student\": \"👨‍🎓\",\n  male_student: \"👨‍🎓\",\n  \"male-singer\": \"👨‍🎤\",\n  male_singer: \"👨‍🎤\",\n  \"male-artist\": \"👨‍🎨\",\n  male_artist: \"👨‍🎨\",\n  \"male-teacher\": \"👨‍🏫\",\n  male_teacher: \"👨‍🏫\",\n  \"male-factory-worker\": \"👨‍🏭\",\n  male_factory_worker: \"👨‍🏭\",\n  \"man-boy-boy\": \"👨‍👦‍👦\",\n  \"man,_boy,_boy\": \"👨‍👦‍👦\",\n  \"man-boy\": \"👨‍👦\",\n  \"man,_boy\": \"👨‍👦\",\n  \"man-girl-boy\": \"👨‍👧‍👦\",\n  \"man,_girl,_boy\": \"👨‍👧‍👦\",\n  \"man-girl-girl\": \"👨‍👧‍👧\",\n  \"man,_girl,_girl\": \"👨‍👧‍👧\",\n  \"man-girl\": \"👨‍👧\",\n  \"man,_girl\": \"👨‍👧\",\n  \"man-man-boy\": \"👨‍👨‍👦\",\n  \"family_(man,_man,_boy)\": \"👨‍👨‍👦\",\n  \"man,_man,_boy\": \"👨‍👨‍👦\",\n  \"man-man-boy-boy\": \"👨‍👨‍👦‍👦\",\n  \"family_(man,_man,_boy,_boy)\": \"👨‍👨‍👦‍👦\",\n  \"man,_man,_boy,_boy\": \"👨‍👨‍👦‍👦\",\n  \"man-man-girl\": \"👨‍👨‍👧\",\n  \"family_(man,_man,_girl)\": \"👨‍👨‍👧\",\n  \"man,_man,_girl\": \"👨‍👨‍👧\",\n  \"man-man-girl-boy\": \"👨‍👨‍👧‍👦\",\n  \"family_(man,_man,_girl,_boy)\": \"👨‍👨‍👧‍👦\",\n  \"man,_man,_girl,_boy\": \"👨‍👨‍👧‍👦\",\n  \"man-man-girl-girl\": \"👨‍👨‍👧‍👧\",\n  \"family_(man,_man,_girl,_girl)\": \"👨‍👨‍👧‍👧\",\n  \"man,_man,_girl,_girl\": \"👨‍👨‍👧‍👧\",\n  \"man-woman-boy\": \"👨‍👩‍👦\",\n  \"family_(man,_woman,_boy)\": \"👨‍👩‍👦\",\n  \"man,_woman,_boy\": \"👨‍👩‍👦\",\n  \"man-woman-boy-boy\": \"👨‍👩‍👦‍👦\",\n  \"family_(man,_woman,_boy,_boy)\": \"👨‍👩‍👦‍👦\",\n  \"man,_woman,_boy,_boy\": \"👨‍👩‍👦‍👦\",\n  \"man-woman-girl\": \"👨‍👩‍👧\",\n  \"family_(man,_woman,_girl)\": \"👨‍👩‍👧\",\n  \"man,_woman,_girl\": \"👨‍👩‍👧\",\n  \"man-woman-girl-boy\": \"👨‍👩‍👧‍👦\",\n  \"family_(man,_woman,_girl,_boy)\": \"👨‍👩‍👧‍👦\",\n  \"man,_woman,_girl,_boy\": \"👨‍👩‍👧‍👦\",\n  \"man-woman-girl-girl\": \"👨‍👩‍👧‍👧\",\n  \"family_(man,_woman,_girl,_girl)\": \"👨‍👩‍👧‍👧\",\n  \"man,_woman,_girl,_girl\": \"👨‍👩‍👧‍👧\",\n  \"male-technologist\": \"👨‍💻\",\n  male_technologist: \"👨‍💻\",\n  \"male-office-worker\": \"👨‍💼\",\n  male_office_worker: \"👨‍💼\",\n  \"male-mechanic\": \"👨‍🔧\",\n  male_mechanic: \"👨‍🔧\",\n  \"male-scientist\": \"👨‍🔬\",\n  male_scientist: \"👨‍🔬\",\n  \"male-astronaut\": \"👨‍🚀\",\n  male_astronaut: \"👨‍🚀\",\n  \"male-firefighter\": \"👨‍🚒\",\n  male_firefighter: \"👨‍🚒\",\n  \"male-doctor\": \"👨‍⚕️\",\n  male_health_worker: \"👨‍⚕️\",\n  \"male-judge\": \"👨‍⚖️\",\n  male_judge: \"👨‍⚖️\",\n  \"male-pilot\": \"👨‍✈️\",\n  male_pilot: \"👨‍✈️\",\n  \"man-heart-man\": \"👨‍❤️‍👨\",\n  \"man-kiss-man\": \"👨‍❤️‍💋‍👨\",\n  \"man,_man\": \"👨‍❤️‍💋‍👨\",\n  \"female-farmer\": \"👩‍🌾\",\n  female_farmer: \"👩‍🌾\",\n  woman_famer: \"👩‍🌾\",\n  \"female-cook\": \"👩‍🍳\",\n  female_cook: \"👩‍🍳\",\n  \"female-student\": \"👩‍🎓\",\n  female_student: \"👩‍🎓\",\n  \"female-singer\": \"👩‍🎤\",\n  female_singer: \"👩‍🎤\",\n  \"female-artist\": \"👩‍🎨\",\n  female_artist: \"👩‍🎨\",\n  \"female-teacher\": \"👩‍🏫\",\n  female_teacher: \"👩‍🏫\",\n  \"female-factory-worker\": \"👩‍🏭\",\n  female_factory_worker: \"👩‍🏭\",\n  \"woman-boy-boy\": \"👩‍👦‍👦\",\n  \"woman,_boy,_boy\": \"👩‍👦‍👦\",\n  \"woman-boy\": \"👩‍👦\",\n  \"woman,_boy\": \"👩‍👦\",\n  \"woman-girl-boy\": \"👩‍👧‍👦\",\n  \"woman,_girl,_boy\": \"👩‍👧‍👦\",\n  \"woman-girl-girl\": \"👩‍👧‍👧\",\n  \"woman,_girl,_girl\": \"👩‍👧‍👧\",\n  \"woman-girl\": \"👩‍👧\",\n  \"woman,_girl\": \"👩‍👧\",\n  \"woman-woman-boy\": \"👩‍👩‍👦\",\n  \"family_(woman,_woman,_boy)\": \"👩‍👩‍👦\",\n  \"woman,_woman,_boy\": \"👩‍👩‍👦\",\n  \"woman-woman-boy-boy\": \"👩‍👩‍👦‍👦\",\n  \"family_(woman,_woman,_boy,_boy)\": \"👩‍👩‍👦‍👦\",\n  \"woman,_woman,_boy,_boy\": \"👩‍👩‍👦‍👦\",\n  \"woman-woman-girl\": \"👩‍👩‍👧\",\n  \"family_(woman,_woman,_girl)\": \"👩‍👩‍👧\",\n  \"woman,_woman,_girl\": \"👩‍👩‍👧\",\n  \"woman-woman-girl-boy\": \"👩‍👩‍👧‍👦\",\n  \"family_(woman,_woman,_girl,_boy)\": \"👩‍👩‍👧‍👦\",\n  \"woman,_woman,_girl,_boy\": \"👩‍👩‍👧‍👦\",\n  \"woman-woman-girl-girl\": \"👩‍👩‍👧‍👧\",\n  \"family_(woman,_woman,_girl,_girl)\": \"👩‍👩‍👧‍👧\",\n  \"woman,_woman,_girl,_girl\": \"👩‍👩‍👧‍👧\",\n  \"female-technologist\": \"👩‍💻\",\n  female_technologist: \"👩‍💻\",\n  \"female-office-worker\": \"👩‍💼\",\n  female_office_worker: \"👩‍💼\",\n  \"female-mechanic\": \"👩‍🔧\",\n  female_mechanic: \"👩‍🔧\",\n  \"female-scientist\": \"👩‍🔬\",\n  female_scientist: \"👩‍🔬\",\n  \"female-astronaut\": \"👩‍🚀\",\n  female_astronaut: \"👩‍🚀\",\n  \"female-firefighter\": \"👩‍🚒\",\n  female_firefighter: \"👩‍🚒\",\n  \"female-doctor\": \"👩‍⚕️\",\n  female_health_worker: \"👩‍⚕️\",\n  \"female-judge\": \"👩‍⚖️\",\n  female_judge: \"👩‍⚖️\",\n  \"female-pilot\": \"👩‍✈️\",\n  female_pilot: \"👩‍✈️\",\n  \"woman-heart-man\": \"👩‍❤️‍👨\",\n  \"woman-heart-woman\": \"👩‍❤️‍👩\",\n  \"woman-kiss-man\": \"👩‍❤️‍💋‍👨\",\n  \"woman,_man\": \"👩‍❤️‍💋‍👨\",\n  \"woman-kiss-woman\": \"👩‍❤️‍💋‍👩\",\n  \"kiss_(woman,_woman)\": \"👩‍❤️‍💋‍👩\",\n  \"woman,_woman\": \"👩‍❤️‍💋‍👩\",\n  man_and_woman_holding_hands: \"👫\",\n  \"female-police-officer\": \"👮‍♀️\",\n  \"male-police-officer\": \"👮‍♂️\",\n  \"woman-with-bunny-ears-partying\": \"👯‍♀️\",\n  \"man-with-bunny-ears-partying\": \"👯‍♂️\",\n  woman_with_bunny_ears: \"👯\",\n  \"blond-haired-woman\": \"👱‍♀️\",\n  \"blond-haired-man\": \"👱‍♂️\",\n  person_with_blond_hair: \"👱\",\n  blond_hair: \"👱\",\n  man_with_chinese_cap: \"👲\",\n  \"woman-wearing-turban\": \"👳‍♀️\",\n  \"man-wearing-turban\": \"👳‍♂️\",\n  \"female-construction-worker\": \"👷‍♀️\",\n  \"male-construction-worker\": \"👷‍♂️\",\n  extraterrestrial_alien: \"👽\",\n  \"woman-tipping-hand\": \"💁‍♀️\",\n  \"man-tipping-hand\": \"💁‍♂️\",\n  \"female-guard\": \"💂‍♀️\",\n  \"male-guard\": \"💂‍♂️\",\n  \"woman-getting-massage\": \"💆‍♀️\",\n  \"man-getting-massage\": \"💆‍♂️\",\n  face_massage: \"💆\",\n  \"woman-getting-haircut\": \"💇‍♀️\",\n  \"man-getting-haircut\": \"💇‍♂️\",\n  electric_light_bulb: \"💡\",\n  sleeping_symbol: \"💤\",\n  collision_symbol: \"💥\",\n  splashing_sweat_symbol: \"💦\",\n  dash_symbol: \"💨\",\n  dizzy_symbol: \"💫\",\n  banknote_with_yen_sign: \"💴\",\n  banknote_with_dollar_sign: \"💵\",\n  banknote_with_euro_sign: \"💶\",\n  banknote_with_pound_sign: \"💷\",\n  chart_with_upwards_trend_and_yen_sign: \"💹\",\n  personal_computer: \"💻\",\n  laptop_computer: \"💻\",\n  optical_disc: \"💿\",\n  \"tear-off_calendar\": \"📆\",\n  public_address_loudspeaker: \"📢\",\n  cheering_megaphone: \"📣\",\n  \"e-mail_symbol\": \"📧\",\n  envelope_with_downwards_arrow_above: \"📩\",\n  mobile_phone_with_rightwards_arrow_at_left: \"📲\",\n  antenna_with_bars: \"📶\",\n  dhikr_beads: \"📿\",\n  rosary_beads: \"📿\",\n  clockwise_rightwards_and_leftwards_open_circle_arrows: \"🔁\",\n  clockwise_rightwards_and_leftwards_open_circle_arrows_with_circled_one_overlay:\n    \"🔂\",\n  clockwise_downwards_and_upwards_open_circle_arrows: \"🔃\",\n  anticlockwise_downwards_and_upwards_open_circle_arrows: \"🔄\",\n  low_brightness_symbol: \"🔅\",\n  high_brightness_symbol: \"🔆\",\n  speaker_with_cancellation_stroke: \"🔇\",\n  speaker_with_one_sound_wave: \"🔉\",\n  speaker_with_three_sound_waves: \"🔊\",\n  \"left-pointing_magnifying_glass\": \"🔍\",\n  \"right-pointing_magnifying_glass\": \"🔎\",\n  open_lock: \"🔓\",\n  bell_with_cancellation_stroke: \"🔕\",\n  link_symbol: \"🔗\",\n  back_with_leftwards_arrow_above: \"🔙\",\n  end_with_leftwards_arrow_above: \"🔚\",\n  on_with_exclamation_mark_with_left_right_arrow_above: \"🔛\",\n  \"on!_arrow\": \"🔛\",\n  soon_with_rightwards_arrow_above: \"🔜\",\n  top_with_upwards_arrow_above: \"🔝\",\n  no_one_under_eighteen_symbol: \"🔞\",\n  input_symbol_for_latin_capital_letters: \"🔠\",\n  input_symbol_for_latin_small_letters: \"🔡\",\n  input_symbol_for_symbols: \"🔣\",\n  input_symbol_for_latin_letters: \"🔤\",\n  electric_torch: \"🔦\",\n  six_pointed_star_with_middle_dot: \"🔯\",\n  \"dotted_six-pointed_star\": \"🔯\",\n  large_red_circle: \"🔴\",\n  \"up-pointing_red_triangle\": \"🔺\",\n  \"down-pointing_red_triangle\": \"🔻\",\n  \"up-pointing_small_red_triangle\": \"🔼\",\n  \"down-pointing_small_red_triangle\": \"🔽\",\n  om_symbol: \"🕉️\",\n  dove_of_peace: \"🕊️\",\n  mecca: \"🕋\",\n  minaret: \"🕌\",\n  domed_roof: \"🕌\",\n  mosque_with_domed_roof_and_minaret: \"🕌\",\n  temple: \"🕍\",\n  jewish: \"🕍\",\n  synagogue_with_star_of_david: \"🕍\",\n  menorah_with_nine_branches: \"🕎\",\n  candelabrum: \"🕎\",\n  chanukiah: \"🕎\",\n  clock_face_one_oclock: \"🕐\",\n  \"one_o’clock\": \"🕐\",\n  clock_face_two_oclock: \"🕑\",\n  \"two_o’clock\": \"🕑\",\n  clock_face_three_oclock: \"🕒\",\n  \"three_o’clock\": \"🕒\",\n  clock_face_four_oclock: \"🕓\",\n  \"four_o’clock\": \"🕓\",\n  clock_face_five_oclock: \"🕔\",\n  \"five_o’clock\": \"🕔\",\n  clock_face_six_oclock: \"🕕\",\n  \"six_o’clock\": \"🕕\",\n  clock_face_seven_oclock: \"🕖\",\n  \"seven_o’clock\": \"🕖\",\n  clock_face_eight_oclock: \"🕗\",\n  \"eight_o’clock\": \"🕗\",\n  clock_face_nine_oclock: \"🕘\",\n  \"nine_o’clock\": \"🕘\",\n  clock_face_ten_oclock: \"🕙\",\n  \"ten_o’clock\": \"🕙\",\n  clock_face_eleven_oclock: \"🕚\",\n  \"eleven_o’clock\": \"🕚\",\n  clock_face_twelve_oclock: \"🕛\",\n  \"twelve_o’clock\": \"🕛\",\n  \"clock_face_one-thirty\": \"🕜\",\n  \"one-thirty\": \"🕜\",\n  \"clock_face_two-thirty\": \"🕝\",\n  \"two-thirty\": \"🕝\",\n  \"clock_face_three-thirty\": \"🕞\",\n  \"three-thirty\": \"🕞\",\n  \"clock_face_four-thirty\": \"🕟\",\n  \"four-thirty\": \"🕟\",\n  \"clock_face_five-thirty\": \"🕠\",\n  \"five-thirty\": \"🕠\",\n  \"clock_face_six-thirty\": \"🕡\",\n  \"six-thirty\": \"🕡\",\n  \"clock_face_seven-thirty\": \"🕢\",\n  \"seven-thirty\": \"🕢\",\n  \"clock_face_eight-thirty\": \"🕣\",\n  \"eight-thirty\": \"🕣\",\n  \"clock_face_nine-thirty\": \"🕤\",\n  \"nine-thirty\": \"🕤\",\n  \"clock_face_ten-thirty\": \"🕥\",\n  \"ten-thirty\": \"🕥\",\n  \"clock_face_eleven-thirty\": \"🕦\",\n  \"eleven-thirty\": \"🕦\",\n  \"clock_face_twelve-thirty\": \"🕧\",\n  \"twelve-thirty\": \"🕧\",\n  man_in_business_suit_levitating: \"🕴️\",\n  \"female-detective\": \"🕵️‍♀️\",\n  \"male-detective\": \"🕵️‍♂️\",\n  sleuth_or_spy: \"🕵️\",\n  lower_left_ballpoint_pen: \"🖊️\",\n  lower_left_fountain_pen: \"🖋️\",\n  lower_left_paintbrush: \"🖌️\",\n  lower_left_crayon: \"🖍️\",\n  reversed_hand_with_middle_finger_extended: \"🖕\",\n  \"spock-hand\": \"🖖\",\n  raised_hand_with_part_between_middle_and_ring_fingers: \"🖖\",\n  three_button_mouse: \"🖱️\",\n  frame_with_picture: \"🖼️\",\n  spiral_note_pad: \"🗒️\",\n  spiral_calendar_pad: \"🗓️\",\n  compression: \"🗜️\",\n  dagger_knife: \"🗡️\",\n  speaking_head_in_silhouette: \"🗣️\",\n  silhouette_of_japan: \"🗾\",\n  smiling_face_with_open_mouth: \"😃\",\n  smiling_face_with_open_mouth_and_smiling_eyes: \"😄\",\n  smiling_face_with_open_mouth_and_cold_sweat: \"😅\",\n  \"smiling_face_with_open_mouth_and_tightly-closed_eyes\": \"😆\",\n  face_savouring_delicious_food: \"😋\",\n  \"smiling_face_with_heart-shaped_eyes\": \"😍\",\n  \"smiling_face_with_heart-eyes\": \"😍\",\n  face_with_cold_sweat: \"😓\",\n  face_throwing_a_kiss: \"😘\",\n  \"face_with_stuck-out_tongue\": \"😛\",\n  \"face_with_stuck-out_tongue_and_winking_eye\": \"😜\",\n  \"face_with_stuck-out_tongue_and_tightly-closed_eyes\": \"😝\",\n  face_with_look_of_triumph: \"😤\",\n  disappointed_but_relieved_face: \"😥\",\n  face_with_open_mouth_and_cold_sweat: \"😰\",\n  grinning_cat_face_with_smiling_eyes: \"😸\",\n  cat_face_with_tears_of_joy: \"😹\",\n  smiling_cat_face_with_open_mouth: \"😺\",\n  \"smiling_cat_face_with_heart-shaped_eyes\": \"😻\",\n  \"smiling_cat_with_heart-eyes\": \"😻\",\n  cat_face_with_wry_smile: \"😼\",\n  kissing_cat_face_with_closed_eyes: \"😽\",\n  pouting_cat_face: \"😾\",\n  weary_cat_face: \"🙀\",\n  slightly_frowning: \"🙁\",\n  slightly_smiling: \"🙂\",\n  slight_smile: \"🙂\",\n  upside_down: \"🙃\",\n  flipped_face: \"🙃\",\n  \"upside-down_face\": \"🙃\",\n  eye_roll: \"🙄\",\n  rolling_eyes: \"🙄\",\n  \"woman-gesturing-no\": \"🙅‍♀️\",\n  \"man-gesturing-no\": \"🙅‍♂️\",\n  face_with_no_good_gesture: \"🙅\",\n  \"woman-gesturing-ok\": \"🙆‍♀️\",\n  \"man-gesturing-ok\": \"🙆‍♂️\",\n  face_with_ok_gesture: \"🙆\",\n  \"woman-bowing\": \"🙇‍♀️\",\n  woman_bow: \"🙇‍♀️\",\n  female_bow: \"🙇‍♀️\",\n  woman_bowing_deeply: \"🙇‍♀️\",\n  \"man-bowing\": \"🙇‍♂️\",\n  man_bow: \"🙇‍♂️\",\n  male_bow: \"🙇‍♂️\",\n  man_bowing_deeply: \"🙇‍♂️\",\n  person_bowing_deeply: \"🙇\",\n  \"see-no-evil_monkey\": \"🙈\",\n  \"hear-no-evil_monkey\": \"🙉\",\n  \"speak-no-evil_monkey\": \"🙊\",\n  \"woman-raising-hand\": \"🙋‍♀️\",\n  \"man-raising-hand\": \"🙋‍♂️\",\n  happy_person_raising_one_hand: \"🙋\",\n  person_raising_both_hands_in_celebration: \"🙌\",\n  \"woman-frowning\": \"🙍‍♀️\",\n  \"man-frowning\": \"🙍‍♂️\",\n  \"woman-pouting\": \"🙎‍♀️\",\n  \"man-pouting\": \"🙎‍♂️\",\n  person_with_pouting_face: \"🙎\",\n  person_with_folded_hands: \"🙏\",\n  \"high-speed_train\": \"🚄\",\n  \"high-speed_train_with_bullet_nose\": \"🚅\",\n  recreational_vehicle: \"🚙\",\n  \"woman-rowing-boat\": \"🚣‍♀️\",\n  \"man-rowing-boat\": \"🚣‍♂️\",\n  construction_sign: \"🚧\",\n  police_cars_revolving_light: \"🚨\",\n  smoking_symbol: \"🚬\",\n  no_smoking_symbol: \"🚭\",\n  put_litter_in_its_place_symbol: \"🚮\",\n  do_not_litter_symbol: \"🚯\",\n  potable_water_symbol: \"🚰\",\n  \"non-potable_water_symbol\": \"🚱\",\n  \"woman-biking\": \"🚴‍♀️\",\n  \"man-biking\": \"🚴‍♂️\",\n  \"woman-mountain-biking\": \"🚵‍♀️\",\n  \"man-mountain-biking\": \"🚵‍♂️\",\n  \"woman-walking\": \"🚶‍♀️\",\n  \"man-walking\": \"🚶‍♂️\",\n  pedestrian: \"🚶\",\n  mens_symbol: \"🚹\",\n  \"men’s_room\": \"🚹\",\n  womens_symbol: \"🚺\",\n  \"women’s_room\": \"🚺\",\n  sleeping_accommodation: \"🛌\",\n  worship_building: \"🛐\",\n  worship_place: \"🛐\",\n  religious_building: \"🛐\",\n  religious_place: \"🛐\",\n  octagonal_sign: \"🛑\",\n  shopping_trolley: \"🛒\",\n  take_off: \"🛫\",\n  airplane_arriving: \"🛬\",\n  landing: \"🛬\",\n  scooter: \"🛴\",\n  zipper_mouth: \"🤐\",\n  zip_it: \"🤐\",\n  sealed_lips: \"🤐\",\n  lips_sealed: \"🤐\",\n  \"zipper-mouth_face\": \"🤐\",\n  money_mouth: \"🤑\",\n  money_face: \"🤑\",\n  \"money-mouth_face\": \"🤑\",\n  sick: \"🤒\",\n  ill: \"🤒\",\n  thermometer_face: \"🤒\",\n  nerd: \"🤓\",\n  nerdy: \"🤓\",\n  think: \"🤔\",\n  thinker: \"🤔\",\n  injured: \"🤕\",\n  head_bandage: \"🤕\",\n  head_bandaged: \"🤕\",\n  bandaged: \"🤕\",\n  \"face_with_head-bandage\": \"🤕\",\n  robot_face: \"🤖\",\n  bot_face: \"🤖\",\n  hugging: \"🤗\",\n  hug: \"🤗\",\n  the_horns: \"🤘\",\n  horns_sign: \"🤘\",\n  rock_on: \"🤘\",\n  heavy_metal: \"🤘\",\n  devil_fingers: \"🤘\",\n  \"left-facing_fist\": \"🤛\",\n  \"right-facing_fist\": \"🤜\",\n  hand_with_index_and_middle_fingers_crossed: \"🤞\",\n  i_love_you_hand_sign: \"🤟\",\n  \"love-you_gesture\": \"🤟\",\n  face_with_cowboy_hat: \"🤠\",\n  cowboy: \"🤠\",\n  clown: \"🤡\",\n  \"woman-facepalming\": \"🤦‍♀️\",\n  female_facepalm: \"🤦‍♀️\",\n  woman_facepalm: \"🤦‍♀️\",\n  \"man-facepalming\": \"🤦‍♂️\",\n  face_palm: \"🤦\",\n  \"star-struck\": \"🤩\",\n  \"breast-feeding\": \"🤱\",\n  mother_christmas: \"🤶\",\n  \"woman-shrugging\": \"🤷‍♀️\",\n  female_shrug: \"🤷‍♀️\",\n  woman_shrug: \"🤷‍♀️\",\n  \"man-shrugging\": \"🤷‍♂️\",\n  male_shrug: \"🤷‍♂️\",\n  man_shrug: \"🤷‍♂️\",\n  \"woman-cartwheeling\": \"🤸‍♀️\",\n  woman_doing_cartwheel: \"🤸‍♀️\",\n  female_doing_cartwheel: \"🤸‍♀️\",\n  \"man-cartwheeling\": \"🤸‍♂️\",\n  man_doing_cartwheel: \"🤸‍♂️\",\n  male_doing_cartwheel: \"🤸‍♂️\",\n  person_doing_cartwheel: \"🤸\",\n  \"woman-juggling\": \"🤹‍♀️\",\n  female_juggling: \"🤹‍♀️\",\n  \"man-juggling\": \"🤹‍♂️\",\n  male_juggling: \"🤹‍♂️\",\n  juggling: \"🤹\",\n  fencer: \"🤺\",\n  \"woman-wrestling\": \"🤼‍♀️\",\n  woman_wrestlers: \"🤼‍♀️\",\n  female_wrestlers: \"🤼‍♀️\",\n  \"man-wrestling\": \"🤼‍♂️\",\n  man_wrestlers: \"🤼‍♂️\",\n  male_wrestlers: \"🤼‍♂️\",\n  wrestlers: \"🤼\",\n  \"woman-playing-water-polo\": \"🤽‍♀️\",\n  woman_water_polo: \"🤽‍♀️\",\n  female_water_polo: \"🤽‍♀️\",\n  \"man-playing-water-polo\": \"🤽‍♂️\",\n  man_water_polo: \"🤽‍♂️\",\n  male_water_polo: \"🤽‍♂️\",\n  \"woman-playing-handball\": \"🤾‍♀️\",\n  woman_handball: \"🤾‍♀️\",\n  female_handball: \"🤾‍♀️\",\n  \"man-playing-handball\": \"🤾‍♂️\",\n  man_handball: \"🤾‍♂️\",\n  male_handball: \"🤾‍♂️\",\n  handball: \"🤾\",\n  drum_with_drumsticks: \"🥁\",\n  first_place_medal: \"🥇\",\n  second_place_medal: \"🥈\",\n  third_place_medal: \"🥉\",\n  kiwifruit: \"🥝\",\n  red_crab: \"🦀\",\n  lion_face: \"🦁\",\n  cute_lion: \"🦁\",\n  timid_lion: \"🦁\",\n  unicorn_face: \"🦄\",\n  giraffe_face: \"🦒\",\n  zebra_face: \"🦓\",\n  beard: \"🧔\",\n  person_with_headscarf: \"🧕\",\n  female_mage: \"🧙‍♀️\",\n  male_mage: \"🧙‍♂️\",\n  female_fairy: \"🧚‍♀️\",\n  male_fairy: \"🧚‍♂️\",\n  female_vampire: \"🧛‍♀️\",\n  male_vampire: \"🧛‍♂️\",\n  female_elf: \"🧝‍♀️\",\n  male_elf: \"🧝‍♂️\",\n  female_genie: \"🧞‍♀️\",\n  male_genie: \"🧞‍♂️\",\n  female_zombie: \"🧟‍♀️\",\n  male_zombie: \"🧟‍♂️\",\n  \"left-right_arrow\": \"↔️\",\n  \"up-down_arrow\": \"↕️\",\n  \"up-left_arrow\": \"↖️\",\n  \"up-right_arrow\": \"↗️\",\n  \"down-right_arrow\": \"↘️\",\n  \"down-left_arrow\": \"↙️\",\n  eject: \"⏏️\",\n  \"black_right-pointing_double_triangle\": \"⏩\",\n  \"fast-forward_button\": \"⏩\",\n  \"black_left-pointing_double_triangle\": \"⏪\",\n  \"black_up-pointing_double_triangle\": \"⏫\",\n  \"black_down-pointing_double_triangle\": \"⏬\",\n  black_right_pointing_double_triangle_with_vertical_bar: \"⏭️\",\n  black_left_pointing_double_triangle_with_vertical_bar: \"⏮️\",\n  black_right_pointing_triangle_with_double_vertical_bar: \"⏯️\",\n  hourglass_with_flowing_sand: \"⏳\",\n  double_vertical_bar: \"⏸️\",\n  black_square_for_stop: \"⏹️\",\n  black_circle_for_record: \"⏺️\",\n  \"white_medium-small_square\": \"◽\",\n  \"black_medium-small_square\": \"◾\",\n  radioactive_sign: \"☢️\",\n  biohazard_sign: \"☣️\",\n  white_frowning_face: \"☹️\",\n  staff_of_aesculapius: \"⚕️\",\n  scales: \"⚖️\",\n  high_voltage_sign: \"⚡\",\n  medium_white_circle: \"⚪\",\n  medium_black_circle: \"⚫\",\n  thunder_cloud_and_rain: \"⛈️\",\n  helmet_with_white_cross: \"⛑️\",\n  \"woman-bouncing-ball\": \"⛹️‍♀️\",\n  \"man-bouncing-ball\": \"⛹️‍♂️\",\n  person_with_ball: \"⛹️\",\n  white_heavy_check_mark: \"✅\",\n  \"eight-spoked_asterisk\": \"✳️\",\n  \"eight-pointed_star\": \"✴️\",\n  black_question_mark_ornament: \"❓\",\n  white_question_mark_ornament: \"❔\",\n  white_exclamation_mark_ornament: \"❕\",\n  heavy_exclamation_mark_symbol: \"❗\",\n  heavy_heart_exclamation_mark_ornament: \"❣️\",\n  white_medium_star: \"⭐\",\n  heavy_large_circle: \"⭕\",\n  \"japanese_“congratulations”_button\": \"㊗️\",\n  \"japanese_“secret”_button\": \"㊙️\",\n  white_smiling_face: \"☺\",\n  white_up_pointing_index: \"☝\",\n  heavy_black_heart: \"❤\",\n  black_sun_with_rays: \"☀\",\n  black_telephone: \"☎\",\n  black_scissors: \"✂\",\n  warning_sign: \"⚠\",\n  upwards_black_arrow: \"⬆\",\n  downwards_black_arrow: \"⬇\",\n  leftwards_black_arrow: \"⬅\",\n  black_rightwards_arrow: \"➡\",\n  north_east_arrow: \"↗\",\n  north_west_arrow: \"↖\",\n  south_east_arrow: \"↘\",\n  south_west_arrow: \"↙\",\n  \"black_left-pointing_triangle\": \"◀\",\n  \"black_right-pointing_triangle\": \"▶\",\n  rightwards_arrow_with_hook: \"↪\",\n  arrow_pointing_rightwards_then_curving_downwards: \"⤵\",\n  arrow_pointing_rightwards_then_curving_upwards: \"⤴\",\n  negative_squared_latin_capital_letter_p: \"🅿\",\n  \"squared_cjk_unified_ideograph-6708\": \"🈷\",\n  squared_katakana_sa: \"🈂\",\n  circled_latin_capital_letter_m: \"Ⓜ\",\n  circled_ideograph_secret: \"㊙\",\n  circled_ideograph_congratulation: \"㊗\",\n  negative_squared_latin_capital_letter_a: \"🅰\",\n  negative_squared_latin_capital_letter_b: \"🅱\",\n  negative_squared_latin_capital_letter_o: \"🅾\",\n  black_universal_recycling_symbol: \"♻\",\n  copyright_sign: \"©\",\n  registered_sign: \"®\",\n  trade_mark_sign: \"™\",\n  black_spade_suit: \"♠\",\n  black_heart_suit: \"♥\",\n  black_club_suit: \"♣\",\n  black_diamond_suit: \"♦\",\n  regional_indicator_symbol_a: \"🇦\",\n  regional_indicator_symbol_letter_a: \"🇦\",\n  regional_indicator_symbol_b: \"🇧\",\n  regional_indicator_symbol_letter_b: \"🇧\",\n  regional_indicator_symbol_c: \"🇨\",\n  regional_indicator_symbol_letter_c: \"🇨\",\n  regional_indicator_symbol_d: \"🇩\",\n  regional_indicator_symbol_letter_d: \"🇩\",\n  regional_indicator_symbol_e: \"🇪\",\n  regional_indicator_symbol_letter_e: \"🇪\",\n  regional_indicator_symbol_f: \"🇫\",\n  regional_indicator_symbol_letter_f: \"🇫\",\n  regional_indicator_symbol_g: \"🇬\",\n  regional_indicator_symbol_letter_g: \"🇬\",\n  regional_indicator_symbol_h: \"🇭\",\n  regional_indicator_symbol_letter_h: \"🇭\",\n  regional_indicator_symbol_i: \"🇮\",\n  regional_indicator_symbol_letter_i: \"🇮\",\n  regional_indicator_symbol_j: \"🇯\",\n  regional_indicator_symbol_letter_j: \"🇯\",\n  regional_indicator_symbol_k: \"🇰\",\n  regional_indicator_symbol_letter_k: \"🇰\",\n  regional_indicator_symbol_l: \"🇱\",\n  regional_indicator_symbol_letter_l: \"🇱\",\n  regional_indicator_symbol_m: \"🇲\",\n  regional_indicator_symbol_letter_m: \"🇲\",\n  regional_indicator_symbol_n: \"🇳\",\n  regional_indicator_symbol_letter_n: \"🇳\",\n  regional_indicator_symbol_o: \"🇴\",\n  regional_indicator_symbol_letter_o: \"🇴\",\n  regional_indicator_symbol_p: \"🇵\",\n  regional_indicator_symbol_letter_p: \"🇵\",\n  regional_indicator_symbol_q: \"🇶\",\n  regional_indicator_symbol_letter_q: \"🇶\",\n  regional_indicator_symbol_r: \"🇷\",\n  regional_indicator_symbol_letter_r: \"🇷\",\n  regional_indicator_symbol_s: \"🇸\",\n  regional_indicator_symbol_letter_s: \"🇸\",\n  regional_indicator_symbol_t: \"🇹\",\n  regional_indicator_symbol_letter_t: \"🇹\",\n  regional_indicator_symbol_u: \"🇺\",\n  regional_indicator_symbol_letter_u: \"🇺\",\n  regional_indicator_symbol_v: \"🇻\",\n  regional_indicator_symbol_letter_v: \"🇻\",\n  regional_indicator_symbol_w: \"🇼\",\n  regional_indicator_symbol_letter_w: \"🇼\",\n  regional_indicator_symbol_x: \"🇽\",\n  regional_indicator_symbol_letter_x: \"🇽\",\n  regional_indicator_symbol_y: \"🇾\",\n  regional_indicator_symbol_letter_y: \"🇾\",\n  regional_indicator_symbol_z: \"🇿\",\n  regional_indicator_symbol_letter_z: \"🇿\",\n  \"couple_with_heart_(woman,_woman)\": \"👩‍❤‍👩\",\n  \"couple_with_heart_(man,_man)\": \"👨‍❤‍👨\",\n  \"kiss_(man,_man)\": \"‍👨❤️💋‍👨\",\n  helmet_white_cross: \"⛑\",\n  helmet_with_white_crosse: \"⛑\",\n  \"rescue_worker’s_helmet\": \"⛑\",\n  sleuth: \"🕵\",\n  private_eye: \"🕵\",\n  spy: \"🕵\",\n  hovering_man: \"🕴\",\n  levitating_man: \"🕴\",\n  splayed_hand: \"🖐\",\n  raised_hand_with_five_fingers_splayed: \"🖐\",\n  writing: \"✍\",\n  exclamation_heart: \"❣\",\n  zig_zag_bubble: \"🗯\",\n  skull_crossbones: \"☠\",\n  squirrel: \"🐿\",\n  dove_peace: \"🕊\",\n  \"dove_of_peace,_carrying_an_olive_branch\": \"🕊\",\n  black_spider_with_eight_legs: \"🕷\",\n  cobweb: \"🕸\",\n  spider_web_in_orb_form: \"🕸\",\n  st_patrick: \"☘\",\n  chili_pepper: \"🌶\",\n  spice: \"🌶\",\n  spicy: \"🌶\",\n  fork_knife_plate: \"🍽\",\n  mont_fuji: \"🏔\",\n  \"snow-capped_mountain\": \"🏔\",\n  campsite: \"🏕\",\n  camping_with_tent_and_tree: \"🏕\",\n  breach: \"🏖\",\n  desert_with_cactus: \"🏜\",\n  desert_island_with_palm_tree: \"🏝\",\n  crane: \"🏗\",\n  building_in_construction_with_crane: \"🏗\",\n  multiple_houses: \"🏘\",\n  old_house: \"🏚\",\n  abandoned_house: \"🏚\",\n  picture_frame: \"🖼\",\n  painting: \"🖼\",\n  gallery: \"🖼\",\n  frame_with_picture_or_painting: \"🖼\",\n  highway: \"🛣\",\n  road: \"🛣\",\n  interstate: \"🛣\",\n  freeway: \"🛣\",\n  bedroom: \"🛏\",\n  bed_or_bedroom: \"🛏\",\n  couch_lamp: \"🛋\",\n  couch: \"🛋\",\n  sofa: \"🛋\",\n  lounge: \"🛋\",\n  hot_weather: \"🌡\",\n  temperature: \"🌡\",\n  thunder_cloud_rain: \"⛈\",\n  white_sun_small_cloud: \"🌤\",\n  white_sun_with_small_cloud: \"🌤\",\n  white_sun_behind_cloud: \"🌥\",\n  white_sun_behind_cloud_rain: \"🌦\",\n  white_sun_behind_cloud_with_rain: \"🌦\",\n  cloud_rain: \"🌧\",\n  cloud_snow: \"🌨\",\n  cloud_lightning: \"🌩\",\n  cloud_tornado: \"🌪\",\n  cloud_with_tornado: \"🌪\",\n  mother_nature: \"🌬\",\n  blowing_wind: \"🌬\",\n  planted_umbrella: \"⛱\",\n  umbrella_planted_on_the_ground: \"⛱\",\n  snowing_snowman: \"☃\",\n  light_beam: \"☄\",\n  blue_beam: \"☄\",\n  military_decoration: \"🎖\",\n  military_medal_with_ribbon: \"🎖\",\n  awareness_ribbon: \"🎗\",\n  admission_ticket: \"🎟\",\n  golf_club: \"🏌\",\n  golfer_swinging_a_golf_club: \"🏌\",\n  man_golfer: \"🏌♂️\",\n  male_golfer: \"🏌♂️\",\n  male_golfing: \"🏌♂️\",\n  woman_golfer: \"🏌‍♀️\",\n  female_golfer: \"🏌‍♀️\",\n  female_golfing: \"🏌‍♀️\",\n  ice_skating: \"⛸\",\n  single_ice_skate: \"⛸\",\n  formula_one: \"🏎\",\n  f1: \"🏎\",\n  motorbike: \"🏍\",\n  \"black_right-pointing_double_triangle_with_vertical_bar\": \"⏭\",\n  \"black_right-pointing_triangle_with_double_vertical_bar\": \"⏯\",\n  \"black_left-pointing_double_triangle_with_vertical_bar\": \"⏮\",\n  keycap_asterisk: \"*⃣\",\n  star_keycap: \"*⃣\",\n  pc_tower: \"🖥\",\n  imac: \"🖥\",\n  candle_burning: \"🕯\",\n  newspaper_delivery: \"🗞\",\n  newspaper_rolled_up_for_delivery: \"🗞\",\n  \"rolled-up_newspaper\": \"🗞\",\n  ballot: \"🗳\",\n  ballot_bow_with_ballot: \"🗳\",\n  multiple_paperclips_linked_together: \"🖇\",\n  an_ornate_old_key: \"🗝\",\n  scales_of_justice: \"⚖\",\n  knife_weapon: \"🗡\",\n  funeral: \"⚰\",\n  casket: \"⚰\",\n  scouts: \"⚜\",\n  \"fleur-de-lis\": \"⚜\",\n  atom: \"⚛\",\n  pranava: \"🕉\",\n  aumkara: \"🕉\",\n  omkara: \"🕉\",\n  christian_cross: \"✝\",\n  kami_no_michi: \"⛩\",\n  star_crescent: \"☪\",\n  peace_sign: \"☮\",\n  radioactive_symbol: \"☢\",\n  biohazard_symbol: \"☣\",\n  i_am_a_witness: \"👁‍🗨\",\n  red_hair: \"👨‍🦰\",\n  curly_hair: \"👨‍🦱\",\n  white_hair: \"👨‍🦳\",\n  bald: \"👨‍🦲\",\n  \"yo-yo\": \"🪀\",\n  \"one-piece_swimsuit\": \"🩱\",\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","/*\n *          __        ___\n *    _____/ /___  __/ (_)____\n *   / ___/ __/ / / / / / ___/\n *  (__  ) /_/ /_/ / / (__  )\n * /____/\\__/\\__, /_/_/____/\n *          /____/\n *\n * light - weight css preprocessor @licence MIT\n */\n(function (factory) {/* eslint-disable */\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory(null)) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory(null)) :\n\t\t\t(window['stylis'] = factory(null))\n}(/** @param {*=} options */function factory (options) {/* eslint-disable */\n\n\t'use strict'\n\n\t/**\n\t * Notes\n\t *\n\t * The ['<method name>'] pattern is used to support closure compiler\n\t * the jsdoc signatures are also used to the same effect\n\t *\n\t * ----\n\t *\n\t * int + int + int === n4 [faster]\n\t *\n\t * vs\n\t *\n\t * int === n1 && int === n2 && int === n3\n\t *\n\t * ----\n\t *\n\t * switch (int) { case ints...} [faster]\n\t *\n\t * vs\n\t *\n\t * if (int == 1 && int === 2 ...)\n\t *\n\t * ----\n\t *\n\t * The (first*n1 + second*n2 + third*n3) format used in the property parser\n\t * is a simple way to hash the sequence of characters\n\t * taking into account the index they occur in\n\t * since any number of 3 character sequences could produce duplicates.\n\t *\n\t * On the other hand sequences that are directly tied to the index of the character\n\t * resolve a far more accurate measure, it's also faster\n\t * to evaluate one condition in a switch statement\n\t * than three in an if statement regardless of the added math.\n\t *\n\t * This allows the vendor prefixer to be both small and fast.\n\t */\n\n\tvar nullptn = /^\\0+/g /* matches leading null characters */\n\tvar formatptn = /[\\0\\r\\f]/g /* matches new line, null and formfeed characters */\n\tvar colonptn = /: */g /* splits animation rules */\n\tvar cursorptn = /zoo|gra/ /* assert cursor varient */\n\tvar transformptn = /([,: ])(transform)/g /* vendor prefix transform, older webkit */\n\tvar animationptn = /,+\\s*(?![^(]*[)])/g /* splits multiple shorthand notation animations */\n\tvar propertiesptn = / +\\s*(?![^(]*[)])/g /* animation properties */\n\tvar elementptn = / *[\\0] */g /* selector elements */\n\tvar selectorptn = /,\\r+?/g /* splits selectors */\n\tvar andptn = /([\\t\\r\\n ])*\\f?&/g /* match & */\n\tvar escapeptn = /:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g /* matches :global(.*) */\n\tvar invalidptn = /\\W+/g /* removes invalid characters from keyframes */\n\tvar keyframeptn = /@(k\\w+)\\s*(\\S*)\\s*/ /* matches @keyframes $1 */\n\tvar plcholdrptn = /::(place)/g /* match ::placeholder varient */\n\tvar readonlyptn = /:(read-only)/g /* match :read-only varient */\n\tvar beforeptn = /\\s+(?=[{\\];=:>])/g /* matches \\s before ] ; = : */\n\tvar afterptn = /([[}=:>])\\s+/g /* matches \\s after characters [ } = : */\n\tvar tailptn = /(\\{[^{]+?);(?=\\})/g /* matches tail semi-colons ;} */\n\tvar whiteptn = /\\s{2,}/g /* matches repeating whitespace */\n\tvar pseudoptn = /([^\\(])(:+) */g /* pseudo element */\n\tvar writingptn = /[svh]\\w+-[tblr]{2}/ /* match writing mode property values */\n\tvar gradientptn = /([\\w-]+t\\()/g /* match *gradient property */\n\tvar supportsptn = /\\(\\s*(.*)\\s*\\)/g /* match supports (groups) */\n\tvar propertyptn = /([\\s\\S]*?);/g /* match properties leading semicolon */\n\tvar selfptn = /-self|flex-/g /* match flex- and -self in align-self: flex-*; */\n\tvar pseudofmt = /[^]*?(:[rp][el]a[\\w-]+)[^]*/ /* extrats :readonly or :placholder from selector */\n\tvar trimptn = /[ \\t]+$/ /* match tail whitspace */\n\tvar dimensionptn = /stretch|:\\s*\\w+\\-(?:conte|avail)/ /* match max/min/fit-content, fill-available */\n\tvar imgsrcptn = /([^-])(image-set\\()/\n\n\t/* vendors */\n\tvar webkit = '-webkit-'\n\tvar moz = '-moz-'\n\tvar ms = '-ms-'\n\n\t/* character codes */\n\tvar SEMICOLON = 59 /* ; */\n\tvar CLOSEBRACES = 125 /* } */\n\tvar OPENBRACES = 123 /* { */\n\tvar OPENPARENTHESES = 40 /* ( */\n\tvar CLOSEPARENTHESES = 41 /* ) */\n\tvar OPENBRACKET = 91 /* [ */\n\tvar CLOSEBRACKET = 93 /* ] */\n\tvar NEWLINE = 10 /* \\n */\n\tvar CARRIAGE = 13 /* \\r */\n\tvar TAB = 9 /* \\t */\n\tvar AT = 64 /* @ */\n\tvar SPACE = 32 /*   */\n\tvar AND = 38 /* & */\n\tvar DASH = 45 /* - */\n\tvar UNDERSCORE = 95 /* _ */\n\tvar STAR = 42 /* * */\n\tvar COMMA = 44 /* , */\n\tvar COLON = 58 /* : */\n\tvar SINGLEQUOTE = 39 /* ' */\n\tvar DOUBLEQUOTE = 34 /* \" */\n\tvar FOWARDSLASH = 47 /* / */\n\tvar GREATERTHAN = 62 /* > */\n\tvar PLUS = 43 /* + */\n\tvar TILDE = 126 /* ~ */\n\tvar NULL = 0 /* \\0 */\n\tvar FORMFEED = 12 /* \\f */\n\tvar VERTICALTAB = 11 /* \\v */\n\n\t/* special identifiers */\n\tvar KEYFRAME = 107 /* k */\n\tvar MEDIA = 109 /* m */\n\tvar SUPPORTS = 115 /* s */\n\tvar PLACEHOLDER = 112 /* p */\n\tvar READONLY = 111 /* o */\n\tvar IMPORT = 105 /* <at>i */\n\tvar CHARSET = 99 /* <at>c */\n\tvar DOCUMENT = 100 /* <at>d */\n\tvar PAGE = 112 /* <at>p */\n\n\tvar column = 1 /* current column */\n\tvar line = 1 /* current line numebr */\n\tvar pattern = 0 /* :pattern */\n\n\tvar cascade = 1 /* #id h1 h2 vs h1#id h2#id  */\n\tvar prefix = 1 /* vendor prefix */\n\tvar escape = 1 /* escape :global() pattern */\n\tvar compress = 0 /* compress output */\n\tvar semicolon = 0 /* no/semicolon option */\n\tvar preserve = 0 /* preserve empty selectors */\n\n\t/* empty reference */\n\tvar array = []\n\n\t/* plugins */\n\tvar plugins = []\n\tvar plugged = 0\n\tvar should = null\n\n\t/* plugin context */\n\tvar POSTS = -2\n\tvar PREPS = -1\n\tvar UNKWN = 0\n\tvar PROPS = 1\n\tvar BLCKS = 2\n\tvar ATRUL = 3\n\n\t/* plugin newline context */\n\tvar unkwn = 0\n\n\t/* keyframe animation */\n\tvar keyed = 1\n\tvar key = ''\n\n\t/* selector namespace */\n\tvar nscopealt = ''\n\tvar nscope = ''\n\n\t/**\n\t * Compile\n\t *\n\t * @param {Array<string>} parent\n\t * @param {Array<string>} current\n\t * @param {string} body\n\t * @param {number} id\n\t * @param {number} depth\n\t * @return {string}\n\t */\n\tfunction compile (parent, current, body, id, depth) {\n\t\tvar bracket = 0 /* brackets [] */\n\t\tvar comment = 0 /* comments /* // or /* */\n\t\tvar parentheses = 0 /* functions () */\n\t\tvar quote = 0 /* quotes '', \"\" */\n\n\t\tvar first = 0 /* first character code */\n\t\tvar second = 0 /* second character code */\n\t\tvar code = 0 /* current character code */\n\t\tvar tail = 0 /* previous character code */\n\t\tvar trail = 0 /* character before previous code */\n\t\tvar peak = 0 /* previous non-whitespace code */\n\n\t\tvar counter = 0 /* count sequence termination */\n\t\tvar context = 0 /* track current context */\n\t\tvar atrule = 0 /* track @at-rule context */\n\t\tvar pseudo = 0 /* track pseudo token index */\n\t\tvar caret = 0 /* current character index */\n\t\tvar format = 0 /* control character formating context */\n\t\tvar insert = 0 /* auto semicolon insertion */\n\t\tvar invert = 0 /* inverted selector pattern */\n\t\tvar length = 0 /* generic length address */\n\t\tvar eof = body.length /* end of file(length) */\n\t\tvar eol = eof - 1 /* end of file(characters) */\n\n\t\tvar char = '' /* current character */\n\t\tvar chars = '' /* current buffer of characters */\n\t\tvar child = '' /* next buffer of characters */\n\t\tvar out = '' /* compiled body */\n\t\tvar children = '' /* compiled children */\n\t\tvar flat = '' /* compiled leafs */\n\t\tvar selector /* generic selector address */\n\t\tvar result /* generic address */\n\n\t\t// ...build body\n\t\twhile (caret < eof) {\n\t\t\tcode = body.charCodeAt(caret)\n\n\t\t\t// eof varient\n\t\t\tif (caret === eol) {\n\t\t\t\t// last character + noop context, add synthetic padding for noop context to terminate\n\t\t\t\tif (comment + quote + parentheses + bracket !== 0) {\n\t\t\t\t\tif (comment !== 0) {\n\t\t\t\t\t\tcode = comment === FOWARDSLASH ? NEWLINE : FOWARDSLASH\n\t\t\t\t\t}\n\n\t\t\t\t\tquote = parentheses = bracket = 0\n\t\t\t\t\teof++\n\t\t\t\t\teol++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t// eof varient\n\t\t\t\tif (caret === eol) {\n\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chars.trim().length > 0) {\n\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchars += body.charAt(caret)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcode = SEMICOLON\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// auto semicolon insertion\n\t\t\t\tif (insert === 1) {\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t// false flags\n\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\tcase OPENPARENTHESES:\n\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// valid\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\tfirst = code\n\t\t\t\t\t\t\tcaret--\n\t\t\t\t\t\t\tcode = SEMICOLON\n\n\t\t\t\t\t\t\twhile (length < eof) {\n\t\t\t\t\t\t\t\tswitch (body.charCodeAt(length++)) {\n\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// token varient\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\tchars = chars.trim()\n\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\tcounter = 1\n\t\t\t\t\t\tlength = ++caret\n\n\t\t\t\t\t\twhile (caret < eof) {\n\t\t\t\t\t\t\tswitch (code = body.charCodeAt(caret)) {\n\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\tcounter++\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\t\tcounter--\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\tswitch (second = body.charCodeAt(caret + 1)) {\n\t\t\t\t\t\t\t\t\t\t// /*, //\n\t\t\t\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\t\t\tcaret = delimited(second, caret, eol, body)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"[\" === 91 & \"]\" === 93 hence forth 91 + 1 + 1 === 93\n\t\t\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"(\" === 40 & \")\" === 41 hence forth 40 + 1 === 41\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// quote tail delimiter is identical to the head delimiter hence noop,\n\t\t\t\t\t\t\t\t// fallthrough clauses have been shifted to the correct tail delimiter\n\t\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\t\t\twhile (caret++ < eol) {\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(caret) === code) {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (counter === 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcaret++\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchild = body.substring(length, caret)\n\n\t\t\t\t\t\tif (first === NULL) {\n\t\t\t\t\t\t\tfirst = (chars = chars.replace(nullptn, '').trim()).charCodeAt(0)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t// @at-rule\n\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\tcase SUPPORTS:\n\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\tselector = current\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tselector = array\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tchild = compile(current, selector, child, second, depth+1)\n\t\t\t\t\t\t\t\tlength = child.length\n\n\t\t\t\t\t\t\t\t// preserve empty @at-rule\n\t\t\t\t\t\t\t\tif (preserve > 0 && length === 0) {\n\t\t\t\t\t\t\t\t\tlength = chars.length\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// execute plugins, @at-rule context\n\t\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\t\tselector = select(array, chars, invert)\n\t\t\t\t\t\t\t\t\tresult = proxy(ATRUL, child, selector, current, line, column, length, second, depth, id)\n\t\t\t\t\t\t\t\t\tchars = selector.join('')\n\n\t\t\t\t\t\t\t\t\tif (result !== void 0) {\n\t\t\t\t\t\t\t\t\t\tif ((length = (child = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\t\tsecond = 0\n\t\t\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (length > 0) {\n\t\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\t\tcase SUPPORTS: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(supportsptn, supports)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase KEYFRAME: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(keyframeptn, '$1 $2' + (keyed > 0 ? key : ''))\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\n\t\t\t\t\t\t\t\t\t\t\tif (prefix === 1 || (prefix === 2 && vendor('@'+child, 3))) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + webkit + child + '@' + child\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + child\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + child\n\n\t\t\t\t\t\t\t\t\t\t\tif (id === PAGE) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = (out += child, '')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// selector\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchild = compile(current, select(current, chars, invert), child, id, depth+1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildren += child\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tatrule = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\tchars = (format > 0 ? chars.replace(formatptn, '') : chars).trim()\n\n\t\t\t\t\t\tif ((length = chars.length) > 1) {\n\t\t\t\t\t\t\t// monkey-patch missing colon\n\t\t\t\t\t\t\tif (pseudo === 0) {\n\t\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\n\t\t\t\t\t\t\t\t// first character is a letter or dash, buffer has a space character\n\t\t\t\t\t\t\t\tif ((first === DASH || first > 96 && first < 123)) {\n\t\t\t\t\t\t\t\t\tlength = (chars = chars.replace(' ', ':')).length\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// execute plugins, property context\n\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\tif ((result = proxy(PROPS, chars, current, parent, line, column, out.length, id, depth, id)) !== void 0) {\n\t\t\t\t\t\t\t\t\tif ((length = (chars = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\tchars = '\\0\\0'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\t\tif (second === IMPORT || second === CHARSET) {\n\t\t\t\t\t\t\t\t\t\tflat += chars + body.charAt(caret)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\tif (chars.charCodeAt(length-1) === COLON) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tout += property(chars, first, second, chars.charCodeAt(2))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// parse characters\n\t\t\tswitch (code) {\n\t\t\t\tcase CARRIAGE:\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t// auto insert semicolon\n\t\t\t\t\tif (comment + quote + parentheses + bracket + semicolon === 0) {\n\t\t\t\t\t\t// valid non-whitespace characters that\n\t\t\t\t\t\t// may precede a newline\n\t\t\t\t\t\tswitch (peak) {\n\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\tcase AT:\n\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\tcase FOWARDSLASH:\n\t\t\t\t\t\t\tcase DASH:\n\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t// current buffer has a colon\n\t\t\t\t\t\t\t\tif (pseudo > 0) {\n\t\t\t\t\t\t\t\t\tinsert = 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// terminate line comment\n\t\t\t\t\tif (comment === FOWARDSLASH) {\n\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t} else if (cascade + context === 0 && id !== KEYFRAME && chars.length > 0) {\n\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\tchars += '\\0'\n\t\t\t\t\t}\n\n\t\t\t\t\t// execute plugins, newline context\n\t\t\t\t\tif (plugged * unkwn > 0) {\n\t\t\t\t\t\tproxy(UNKWN, chars, current, parent, line, column, out.length, id, depth, id)\n\t\t\t\t\t}\n\n\t\t\t\t\t// next line, reset column position\n\t\t\t\t\tcolumn = 1\n\t\t\t\t\tline++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase SEMICOLON:\n\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t\t\tcolumn++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// increment column position\n\t\t\t\t\tcolumn++\n\n\t\t\t\t\t// current character\n\t\t\t\t\tchar = body.charAt(caret)\n\n\t\t\t\t\t// remove comments, escape functions, strings, attributes and prepare selectors\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tif (quote + bracket + comment === 0) {\n\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tif (code !== SPACE) {\n\t\t\t\t\t\t\t\t\t\t\tchar = ' '\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// escape breaking control characters\n\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\tchar = '\\\\0'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase FORMFEED: {\n\t\t\t\t\t\t\tchar = '\\\\f'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase VERTICALTAB: {\n\t\t\t\t\t\t\tchar = '\\\\v'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// &\n\t\t\t\t\t\tcase AND: {\n\t\t\t\t\t\t\t// inverted selector pattern i.e html &\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0 && cascade > 0) {\n\t\t\t\t\t\t\t\tinvert = 1\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar = '\\f' + char\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ::p<l>aceholder, l\n\t\t\t\t\t\t// :read-on<l>y, l\n\t\t\t\t\t\tcase 108: {\n\t\t\t\t\t\t\tif (quote + comment + bracket + pattern === 0 && pseudo > 0) {\n\t\t\t\t\t\t\t\tswitch (caret - pseudo) {\n\t\t\t\t\t\t\t\t\t// ::placeholder\n\t\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\t\tif (tail === PLACEHOLDER && body.charCodeAt(caret-3) === COLON) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = tail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// :read-only\n\t\t\t\t\t\t\t\t\tcase 8: {\n\t\t\t\t\t\t\t\t\t\tif (trail === READONLY) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = trail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// :<pattern>\n\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tpseudo = caret\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectors\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket === 0) {\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar += '\\r'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// quotes\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t\t\tquote = quote === code ? 0 : (quote === 0 ? code : quote)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// attributes\n\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase CLOSEBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// functions\n\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tparentheses--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\tswitch (tail*2 + trail*3) {\n\t\t\t\t\t\t\t\t\t\t// :matches\n\t\t\t\t\t\t\t\t\t\tcase 533: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// :global, :not, :nth-child etc...\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tcounter = 0\n\t\t\t\t\t\t\t\t\t\t\tcontext = 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tparentheses++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket + pseudo + atrule === 0) {\n\t\t\t\t\t\t\t\tatrule = 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// block/line comments\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\tif (quote + bracket + parentheses > 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch (comment) {\n\t\t\t\t\t\t\t\t// initialize line/block comment context\n\t\t\t\t\t\t\t\tcase 0: {\n\t\t\t\t\t\t\t\t\tswitch (code*2 + body.charCodeAt(caret+1)*3) {\n\t\t\t\t\t\t\t\t\t\t// //\n\t\t\t\t\t\t\t\t\t\tcase 235: {\n\t\t\t\t\t\t\t\t\t\t\tcomment = FOWARDSLASH\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// /*\n\t\t\t\t\t\t\t\t\t\tcase 220: {\n\t\t\t\t\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\t\t\t\t\tcomment = STAR\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// end block comment context\n\t\t\t\t\t\t\t\tcase STAR: {\n\t\t\t\t\t\t\t\t\tif (code === FOWARDSLASH && tail === STAR && length + 2 !== caret) {\n\t\t\t\t\t\t\t\t\t\t// /*<!> ... */, !\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(length+2) === 33) {\n\t\t\t\t\t\t\t\t\t\t\tout += body.substring(length, caret+1)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ignore comment blocks\n\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t// aggressive isolation mode, divide each individual selector\n\t\t\t\t\t\t// including selectors in :not function but excluding selectors in :global function\n\t\t\t\t\t\tif (cascade + quote + bracket + atrule === 0 && id !== KEYFRAME && code !== SEMICOLON) {\n\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t// outside of an isolated context i.e nth-child(<...>)\n\t\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = char + '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = '\\0' + char + (code === COMMA ? '' : '\\0')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// within an isolated context, sleep untill it's terminated\n\t\t\t\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\t// :globa<l>(\n\t\t\t\t\t\t\t\t\t\t\t\tif (pseudo + 7 === caret && tail === 108) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext = ++counter\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\tif ((context = --counter) === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\tcase NULL:\n\t\t\t\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\t\tcase FORMFEED:\n\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t// ignore in isolated contexts\n\t\t\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// concat buffer of characters\n\t\t\t\t\t\tchars += char\n\n\t\t\t\t\t\t// previous non-whitespace character code\n\t\t\t\t\t\tif (code !== SPACE && code !== TAB) {\n\t\t\t\t\t\t\tpeak = code\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tail character codes\n\t\t\ttrail = tail\n\t\t\ttail = code\n\n\t\t\t// visit every character\n\t\t\tcaret++\n\t\t}\n\n\t\tlength = out.length\n\n\t\t// preserve empty selector\n \t\tif (preserve > 0) {\n \t\t\tif (length === 0 && children.length === 0 && (current[0].length === 0) === false) {\n \t\t\t\tif (id !== MEDIA || (current.length === 1 && (cascade > 0 ? nscopealt : nscope) === current[0])) {\n\t\t\t\t\tlength = current.join(',').length + 2\n \t\t\t\t}\n \t\t\t}\n\t\t}\n\n\t\tif (length > 0) {\n\t\t\t// cascade isolation mode?\n\t\t\tselector = cascade === 0 && id !== KEYFRAME ? isolate(current) : current\n\n\t\t\t// execute plugins, block context\n\t\t\tif (plugged > 0) {\n\t\t\t\tresult = proxy(BLCKS, out, selector, parent, line, column, length, id, depth, id)\n\n\t\t\t\tif (result !== void 0 && (out = result).length === 0) {\n\t\t\t\t\treturn flat + out + children\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout = selector.join(',') + '{' + out + '}'\n\n\t\t\tif (prefix*pattern !== 0) {\n\t\t\t\tif (prefix === 2 && !vendor(out, 2))\n\t\t\t\t\tpattern = 0\n\n\t\t\t\tswitch (pattern) {\n\t\t\t\t\t// ::read-only\n\t\t\t\t\tcase READONLY: {\n\t\t\t\t\t\tout = out.replace(readonlyptn, ':'+moz+'$1')+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// ::placeholder\n\t\t\t\t\tcase PLACEHOLDER: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + webkit + 'input-$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + moz + '$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, ':' + ms + 'input-$1') + out\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpattern = 0\n\t\t\t}\n\t\t}\n\n\t\treturn flat + out + children\n\t}\n\n\t/**\n\t * Select\n\t *\n\t * @param {Array<string>} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @return {Array<string>}\n\t */\n\tfunction select (parent, current, invert) {\n\t\tvar selectors = current.trim().split(selectorptn)\n\t\tvar out = selectors\n\n\t\tvar length = selectors.length\n\t\tvar l = parent.length\n\n\t\tswitch (l) {\n\t\t\t// 0-1 parent selectors\n\t\t\tcase 0:\n\t\t\tcase 1: {\n\t\t\t\tfor (var i = 0, selector = l === 0 ? '' : parent[0] + ' '; i < length; ++i) {\n\t\t\t\t\tout[i] = scope(selector, out[i], invert, l).trim()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// >2 parent selectors, nested\n\t\t\tdefault: {\n\t\t\t\tfor (var i = 0, j = 0, out = []; i < length; ++i) {\n\t\t\t\t\tfor (var k = 0; k < l; ++k) {\n\t\t\t\t\t\tout[j++] = scope(parent[k] + ' ', selectors[i], invert, l).trim()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Scope\n\t *\n\t * @param {string} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @param {number} level\n\t * @return {string}\n\t */\n\tfunction scope (parent, current, invert, level) {\n\t\tvar selector = current\n\t\tvar code = selector.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (selector = selector.trim()).charCodeAt(0)\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// &\n\t\t\tcase AND: {\n\t\t\t\tswitch (cascade + level) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\tcase 1: {\n\t\t\t\t\t\tif (parent.trim().length === 0) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// :\n\t\t\tcase COLON: {\n\t\t\t\tswitch (selector.charCodeAt(1)) {\n\t\t\t\t\t// g in :global\n\t\t\t\t\tcase 103: {\n\t\t\t\t\t\tif (escape > 0 && cascade > 0) {\n\t\t\t\t\t\t\treturn selector.replace(escapeptn, '$1').replace(andptn, '$1'+nscope)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// :hover\n\t\t\t\t\t\treturn parent.trim() + selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// html &\n\t\t\t\tif (invert*cascade > 0 && selector.indexOf('\\f') > 0) {\n\t\t\t\t\treturn selector.replace(andptn, (parent.charCodeAt(0) === COLON ? '' : '$1')+parent.trim())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn parent + selector\n\t}\n\n\t/**\n\t * Property\n\t *\n\t * @param {string} input\n\t * @param {number} first\n\t * @param {number} second\n\t * @param {number} third\n\t * @return {string}\n\t */\n\tfunction property (input, first, second, third) {\n\t\tvar index = 0\n\t\tvar out = input + ';'\n\t\tvar hash = (first*2) + (second*3) + (third*4)\n\t\tvar cache\n\n\t\t// animation: a, n, i characters\n\t\tif (hash === 944) {\n\t\t\treturn animation(out)\n\t\t} else if (prefix === 0 || (prefix === 2 && !vendor(out, 1))) {\n\t\t\treturn out\n\t\t}\n\n\t\t// vendor prefix\n\t\tswitch (hash) {\n\t\t\t// text-decoration/text-size-adjust/text-shadow/text-align/text-transform: t, e, x\n\t\t\tcase 1015: {\n\t\t\t\t// text-shadow/text-align/text-transform, a\n\t\t\t\treturn out.charCodeAt(10) === 97 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// filter/fill f, i, l\n\t\t\tcase 951: {\n\t\t\t\t// filter, t\n\t\t\t\treturn out.charCodeAt(3) === 116 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// color/column, c, o, l\n\t\t\tcase 963: {\n\t\t\t\t// column, n\n\t\t\t\treturn out.charCodeAt(5) === 110 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// box-decoration-break, b, o, x\n\t\t\tcase 1009: {\n\t\t\t\tif (out.charCodeAt(4) !== 100) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// mask, m, a, s\n\t\t\t// clip-path, c, l, i\n\t\t\tcase 969:\n\t\t\tcase 942: {\n\t\t\t\treturn webkit + out + out\n\t\t\t}\n\t\t\t// appearance: a, p, p\n\t\t\tcase 978: {\n\t\t\t\treturn webkit + out + moz + out + out\n\t\t\t}\n\t\t\t// hyphens: h, y, p\n\t\t\t// user-select: u, s, e\n\t\t\tcase 1019:\n\t\t\tcase 983: {\n\t\t\t\treturn webkit + out + moz + out + ms + out + out\n\t\t\t}\n\t\t\t// background/backface-visibility, b, a, c\n\t\t\tcase 883: {\n\t\t\t\t// backface-visibility, -\n\t\t\t\tif (out.charCodeAt(8) === DASH) {\n\t\t\t\t\treturn webkit + out + out\n\t\t\t\t}\n\n\t\t\t\t// image-set(...)\n\t\t\t\tif (out.indexOf('image-set(', 11) > 0) {\n\t\t\t\t\treturn out.replace(imgsrcptn, '$1'+webkit+'$2') + out\n\t\t\t\t}\n\n\t\t\t\treturn out\n\t\t\t}\n\t\t\t// flex: f, l, e\n\t\t\tcase 932: {\n\t\t\t\tif (out.charCodeAt(4) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(5)) {\n\t\t\t\t\t\t// flex-grow, g\n\t\t\t\t\t\tcase 103: {\n\t\t\t\t\t\t\treturn webkit + 'box-' + out.replace('-grow', '') + webkit + out + ms + out.replace('grow', 'positive') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-shrink, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('shrink', 'negative') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-basis, b\n\t\t\t\t\t\tcase 98: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('basis', 'preferred-size') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + out + out\n\t\t\t}\n\t\t\t// order: o, r, d\n\t\t\tcase 964: {\n\t\t\t\treturn webkit + out + ms + 'flex' + '-' + out + out\n\t\t\t}\n\t\t\t// justify-items/justify-content, j, u, s\n\t\t\tcase 1023: {\n\t\t\t\t// justify-content, c\n\t\t\t\tif (out.charCodeAt(8) !== 99) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcache = out.substring(out.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify')\n\t\t\t\treturn webkit + 'box-pack' + cache + webkit + out + ms + 'flex-pack' + cache + out\n\t\t\t}\n\t\t\t// cursor, c, u, r\n\t\t\tcase 1005: {\n\t\t\t\treturn cursorptn.test(out) ? out.replace(colonptn, ':' + webkit) + out.replace(colonptn, ':' + moz) + out : out\n\t\t\t}\n\t\t\t// writing-mode, w, r, i\n\t\t\tcase 1000: {\n\t\t\t\tcache = out.substring(13).trim()\n\t\t\t\tindex = cache.indexOf('-') + 1\n\n\t\t\t\tswitch (cache.charCodeAt(0)+cache.charCodeAt(index)) {\n\t\t\t\t\t// vertical-lr\n\t\t\t\t\tcase 226: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// vertical-rl\n\t\t\t\t\tcase 232: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb-rl')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// horizontal-tb\n\t\t\t\t\tcase 220: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'lr')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn out\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + cache + out\n\t\t\t}\n\t\t\t// position: sticky\n\t\t\tcase 1017: {\n\t\t\t\tif (out.indexOf('sticky', 9) === -1) {\n\t\t\t\t\treturn out\n\t\t\t\t}\n\t\t\t}\n\t\t\t// display(flex/inline-flex/inline-box): d, i, s\n\t\t\tcase 975: {\n\t\t\t\tindex = (out = input).length - 10\n\t\t\t\tcache = (out.charCodeAt(index) === 33 ? out.substring(0, index) : out).substring(input.indexOf(':', 7) + 1).trim()\n\n\t\t\t\tswitch (hash = cache.charCodeAt(0) + (cache.charCodeAt(7)|0)) {\n\t\t\t\t\t// inline-\n\t\t\t\t\tcase 203: {\n\t\t\t\t\t\t// inline-box\n\t\t\t\t\t\tif (cache.charCodeAt(8) < 111) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// inline-box/sticky\n\t\t\t\t\tcase 115: {\n\t\t\t\t\t\tout = out.replace(cache, webkit+cache)+';'+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// inline-flex\n\t\t\t\t\t// flex\n\t\t\t\t\tcase 207:\n\t\t\t\t\tcase 102: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(cache, webkit+(hash > 102 ? 'inline-' : '')+'box')+';'+\n\t\t\t\t\t\t\tout.replace(cache, webkit+cache)+';'+\n\t\t\t\t\t\t\tout.replace(cache, ms+cache+'box')+';'+\n\t\t\t\t\t\t\tout\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out + ';'\n\t\t\t}\n\t\t\t// align-items, align-center, align-self: a, l, i, -\n\t\t\tcase 938: {\n\t\t\t\tif (out.charCodeAt(5) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(6)) {\n\t\t\t\t\t\t// align-items, i\n\t\t\t\t\t\tcase 105: {\n\t\t\t\t\t\t\tcache = out.replace('-items', '')\n\t\t\t\t\t\t\treturn webkit + out + webkit + 'box-' + cache + ms + 'flex-' + cache + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-self, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-item-' + out.replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-content\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-line-pack' + out.replace('align-content', '').replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// min/max\n\t\t\tcase 973:\n\t\t\tcase 989: {\n\t\t\t\t// min-/max- height/width/block-size/inline-size\n\t\t\t\tif (out.charCodeAt(3) !== DASH || out.charCodeAt(4) === 122) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// height/width: min-content / width: max-content\n\t\t\tcase 931:\n\t\t\tcase 953: {\n\t\t\t\tif (dimensionptn.test(input) === true) {\n\t\t\t\t\t// stretch\n\t\t\t\t\tif ((cache = input.substring(input.indexOf(':') + 1)).charCodeAt(0) === 115)\n\t\t\t\t\t\treturn property(input.replace('stretch', 'fill-available'), first, second, third).replace(':fill-available', ':stretch')\n\t\t\t\t\telse\n\t\t\t\t\t\treturn out.replace(cache, webkit + cache) + out.replace(cache, moz + cache.replace('fill-', '')) + out\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// transform, transition: t, r, a\n\t\t\tcase 962: {\n\t\t\t\tout = webkit + out + (out.charCodeAt(5) === 102 ? ms + out : '') + out\n\n\t\t\t\t// transitions\n\t\t\t\tif (second + third === 211 && out.charCodeAt(13) === 105 && out.indexOf('transform', 10) > 0) {\n\t\t\t\t\treturn out.substring(0, out.indexOf(';', 27) + 1).replace(transformptn, '$1' + webkit + '$2') + out\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Vendor\n\t *\n\t * @param {string} content\n\t * @param {number} context\n\t * @return {boolean}\n\t */\n\tfunction vendor (content, context) {\n\t\tvar index = content.indexOf(context === 1 ? ':' : '{')\n\t\tvar key = content.substring(0, context !== 3 ? index : 10)\n\t\tvar value = content.substring(index + 1, content.length - 1)\n\n\t\treturn should(context !== 2 ? key : key.replace(pseudofmt, '$1'), value, context)\n\t}\n\n\t/**\n\t * Supports\n\t *\n\t * @param {string} match\n\t * @param {string} group\n\t * @return {string}\n\t */\n\tfunction supports (match, group) {\n\t\tvar out = property(group, group.charCodeAt(0), group.charCodeAt(1), group.charCodeAt(2))\n\n\t\treturn out !== group+';' ? out.replace(propertyptn, ' or ($1)').substring(4) : '('+group+')'\n\t}\n\n\t/**\n\t * Animation\n\t *\n\t * @param {string} input\n\t * @return {string}\n\t */\n\tfunction animation (input) {\n\t\tvar length = input.length\n\t\tvar index = input.indexOf(':', 9) + 1\n\t\tvar declare = input.substring(0, index).trim()\n\t\tvar out = input.substring(index, length-1).trim()\n\n\t\tswitch (input.charCodeAt(9)*keyed) {\n\t\t\tcase 0: {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// animation-*, -\n\t\t\tcase DASH: {\n\t\t\t\t// animation-name, n\n\t\t\t\tif (input.charCodeAt(10) !== 110) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// animation/animation-name\n\t\t\tdefault: {\n\t\t\t\t// split in case of multiple animations\n\t\t\t\tvar list = out.split((out = '', animationptn))\n\n\t\t\t\tfor (var i = 0, index = 0, length = list.length; i < length; index = 0, ++i) {\n\t\t\t\t\tvar value = list[i]\n\t\t\t\t\tvar items = value.split(propertiesptn)\n\n\t\t\t\t\twhile (value = items[index]) {\n\t\t\t\t\t\tvar peak = value.charCodeAt(0)\n\n\t\t\t\t\t\tif (keyed === 1 && (\n\t\t\t\t\t\t\t// letters\n\t\t\t\t\t\t\t(peak > AT && peak < 90) || (peak > 96 && peak < 123) || peak === UNDERSCORE ||\n\t\t\t\t\t\t\t// dash but not in sequence i.e --\n\t\t\t\t\t\t\t(peak === DASH && value.charCodeAt(1) !== DASH)\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t// not a number/function\n\t\t\t\t\t\t\tswitch (isNaN(parseFloat(value)) + (value.indexOf('(') !== -1)) {\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\t\t\t\t\t// not a valid reserved keyword\n\t\t\t\t\t\t\t\t\t\tcase 'infinite': case 'alternate': case 'backwards': case 'running':\n\t\t\t\t\t\t\t\t\t\tcase 'normal': case 'forwards': case 'both': case 'none': case 'linear':\n\t\t\t\t\t\t\t\t\t\tcase 'ease': case 'ease-in': case 'ease-out': case 'ease-in-out':\n\t\t\t\t\t\t\t\t\t\tcase 'paused': case 'reverse': case 'alternate-reverse': case 'inherit':\n\t\t\t\t\t\t\t\t\t\tcase 'initial': case 'unset': case 'step-start': case 'step-end': {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tvalue += key\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titems[index++] = value\n\t\t\t\t\t}\n\n\t\t\t\t\tout += (i === 0 ? '' : ',') + items.join(' ')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tout = declare + out + ';'\n\n\t\tif (prefix === 1 || (prefix === 2 && vendor(out, 1)))\n\t\t\treturn webkit + out + out\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Isolate\n\t *\n\t * @param {Array<string>} current\n\t */\n\tfunction isolate (current) {\n\t\tfor (var i = 0, length = current.length, selector = Array(length), padding, element; i < length; ++i) {\n\t\t\t// split individual elements in a selector i.e h1 h2 === [h1, h2]\n\t\t\tvar elements = current[i].split(elementptn)\n\t\t\tvar out = ''\n\n\t\t\tfor (var j = 0, size = 0, tail = 0, code = 0, l = elements.length; j < l; ++j) {\n\t\t\t\t// empty element\n\t\t\t\tif ((size = (element = elements[j]).length) === 0 && l > 1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttail = out.charCodeAt(out.length-1)\n\t\t\t\tcode = element.charCodeAt(0)\n\t\t\t\tpadding = ''\n\n\t\t\t\tif (j !== 0) {\n\t\t\t\t\t// determine if we need padding\n\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\tcase OPENPARENTHESES:  {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tpadding = ' '\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase AND: {\n\t\t\t\t\t\telement = padding + nscopealt\n\t\t\t\t\t}\n\t\t\t\t\tcase TILDE:\n\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\tcase PLUS:\n\t\t\t\t\tcase SPACE:\n\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\tswitch (element.charCodeAt(1)*2 + element.charCodeAt(2)*3) {\n\t\t\t\t\t\t\t// :global\n\t\t\t\t\t\t\tcase 530: {\n\t\t\t\t\t\t\t\tif (escape > 0) {\n\t\t\t\t\t\t\t\t\telement = padding + element.substring(8, size - 1)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// :hover, :nth-child(), ...\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tif (j < 1 || elements[j-1].length < 1) {\n\t\t\t\t\t\t\t\t\telement = padding + nscopealt + element\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\tpadding = ''\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tif (size > 1 && element.indexOf(':') > 0) {\n\t\t\t\t\t\t\telement = padding + element.replace(pseudoptn, '$1' + nscopealt + '$2')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tout += element\n\t\t\t}\n\n\t\t\tselector[i] = out.replace(formatptn, '').trim()\n\t\t}\n\n\t\treturn selector\n\t}\n\n\t/**\n\t * Proxy\n\t *\n\t * @param {number} context\n\t * @param {string} content\n\t * @param {Array<string>} selectors\n\t * @param {Array<string>} parents\n\t * @param {number} line\n\t * @param {number} column\n\t * @param {number} length\n\t * @param {number} id\n\t * @param {number} depth\n\t * @param {number} at\n\t * @return {(string|void|*)}\n\t */\n\tfunction proxy (context, content, selectors, parents, line, column, length, id, depth, at) {\n\t\tfor (var i = 0, out = content, next; i < plugged; ++i) {\n\t\t\tswitch (next = plugins[i].call(stylis, context, out, selectors, parents, line, column, length, id, depth, at)) {\n\t\t\t\tcase void 0:\n\t\t\t\tcase false:\n\t\t\t\tcase true:\n\t\t\t\tcase null: {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tout = next\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (out !== content) {\n\t\t  return out\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} code\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction delimited (code, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\t// /*\n\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\tif (code === STAR) {\n\t\t\t\t\t\tif (body.charCodeAt(i - 1) === STAR &&  index + 2 !== i) {\n\t\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// //\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\tif (code === FOWARDSLASH) {\n\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * @param {number} type\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {number} find\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction match (type, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\tcase type: {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * Minify\n\t *\n\t * @param {(string|*)} output\n\t * @return {string}\n\t */\n\tfunction minify (output) {\n\t\treturn output\n\t\t\t.replace(formatptn, '')\n\t\t\t.replace(beforeptn, '')\n\t\t\t.replace(afterptn, '$1')\n\t\t\t.replace(tailptn, '$1')\n\t\t\t.replace(whiteptn, ' ')\n\t}\n\n\t/**\n\t * Use\n\t *\n\t * @param {(Array<function(...?)>|function(...?)|number|void)?} plugin\n\t */\n\tfunction use (plugin) {\n\t\tswitch (plugin) {\n\t\t\tcase void 0:\n\t\t\tcase null: {\n\t\t\t\tplugged = plugins.length = 0\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (typeof plugin === 'function') {\n\t\t\t\t\tplugins[plugged++] = plugin\n\t\t\t\t}\telse if (typeof plugin === 'object') {\n\t\t\t\t\tfor (var i = 0, length = plugin.length; i < length; ++i) {\n\t\t\t\t\t\tuse(plugin[i])\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tunkwn = !!plugin|0\n\t\t\t\t}\n\t\t\t}\n \t\t}\n\n \t\treturn use\n\t}\n\n\t/**\n\t * Set\n\t *\n\t * @param {*} options\n\t */\n\tfunction set (options) {\n\t\tfor (var name in options) {\n\t\t\tvar value = options[name]\n\t\t\tswitch (name) {\n\t\t\t\tcase 'keyframe': keyed = value|0; break\n\t\t\t\tcase 'global': escape = value|0; break\n\t\t\t\tcase 'cascade': cascade = value|0; break\n\t\t\t\tcase 'compress': compress = value|0; break\n\t\t\t\tcase 'semicolon': semicolon = value|0; break\n\t\t\t\tcase 'preserve': preserve = value|0; break\n\t\t\t\tcase 'prefix':\n\t\t\t\t\tshould = null\n\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tprefix = 0\n\t\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\t\tprefix = 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprefix = 2\n\t\t\t\t\t\tshould = value\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn set\n\t}\n\n\t/**\n\t * Stylis\n\t *\n\t * @param {string} selector\n\t * @param {string} input\n\t * @return {*}\n\t */\n\tfunction stylis (selector, input) {\n\t\tif (this !== void 0 && this.constructor === stylis) {\n\t\t\treturn factory(selector)\n\t\t}\n\n\t\t// setup\n\t\tvar ns = selector\n\t\tvar code = ns.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (ns = ns.trim()).charCodeAt(0)\n\t\t}\n\n\t\t// keyframe/animation namespace\n\t\tif (keyed > 0) {\n\t\t\tkey = ns.replace(invalidptn, code === OPENBRACKET ? '' : '-')\n\t\t}\n\n\t\t// reset, used to assert if a plugin is moneky-patching the return value\n\t\tcode = 1\n\n\t\t// cascade/isolate\n\t\tif (cascade === 1) {\n\t\t\tnscope = ns\n\t\t} else {\n\t\t\tnscopealt = ns\n\t\t}\n\n\t\tvar selectors = [nscope]\n\t\tvar result\n\n\t\t// execute plugins, pre-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(PREPS, input, selectors, selectors, line, column, 0, 0, 0, 0)\n\n\t\t\tif (result !== void 0 && typeof result === 'string') {\n\t\t\t\tinput = result\n\t\t\t}\n\t\t}\n\n\t\t// build\n\t\tvar output = compile(array, selectors, input, 0, 0)\n\n\t\t// execute plugins, post-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(POSTS, output, selectors, selectors, line, column, output.length, 0, 0, 0)\n\n\t\t\t// bypass minification\n\t\t\tif (result !== void 0 && typeof(output = result) !== 'string') {\n\t\t\t\tcode = 0\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tkey = ''\n\t\tnscope = ''\n\t\tnscopealt = ''\n\t\tpattern = 0\n\t\tline = 1\n\t\tcolumn = 1\n\n\t\treturn compress*code === 0 ? output : minify(output)\n\t}\n\n\tstylis['use'] = use\n\tstylis['set'] = set\n\n\tif (options !== void 0) {\n\t\tset(options)\n\t}\n\n\treturn stylis\n}));\n","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n    childContextTypes: true,\n    contextTypes: true,\n    defaultProps: true,\n    displayName: true,\n    getDefaultProps: true,\n    getDerivedStateFromProps: true,\n    mixins: true,\n    propTypes: true,\n    type: true\n};\n\nvar KNOWN_STATICS = {\n    name: true,\n    length: true,\n    prototype: true,\n    caller: true,\n    callee: true,\n    arguments: true,\n    arity: true\n};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n    if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n        if (objectPrototype) {\n            var inheritedComponent = getPrototypeOf(sourceComponent);\n            if (inheritedComponent && inheritedComponent !== objectPrototype) {\n                hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n            }\n        }\n\n        var keys = getOwnPropertyNames(sourceComponent);\n\n        if (getOwnPropertySymbols) {\n            keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n        }\n\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n                var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n                try { // Avoid failures from read-only properties\n                    defineProperty(targetComponent, key, descriptor);\n                } catch (e) {}\n            }\n        }\n\n        return targetComponent;\n    }\n\n    return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/* global APP, JitsiMeetJS */\n\nimport {\n    getAudioOutputDeviceId,\n    notifyCameraError,\n    notifyMicError\n} from '../../react/features/base/devices';\nimport {\n    getUserSelectedCameraDeviceId,\n    getUserSelectedMicDeviceId,\n    getUserSelectedOutputDeviceId\n} from '../../react/features/base/settings';\n\n/**\n * Determines if currently selected audio output device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @returns {string|undefined} - ID of new audio output device to use, undefined\n *      if audio output device should not be changed.\n */\nfunction getNewAudioOutputDevice(newDevices) {\n    if (!JitsiMeetJS.mediaDevices.isDeviceChangeAvailable('output')) {\n        return;\n    }\n\n    const selectedAudioOutputDeviceId = getAudioOutputDeviceId();\n    const availableAudioOutputDevices = newDevices.filter(\n        d => d.kind === 'audiooutput');\n\n    // Switch to 'default' audio output device if we don't have the selected one\n    // available anymore.\n    if (selectedAudioOutputDeviceId !== 'default'\n        && !availableAudioOutputDevices.find(d =>\n            d.deviceId === selectedAudioOutputDeviceId)) {\n        return 'default';\n    }\n\n    const preferredAudioOutputDeviceId = getUserSelectedOutputDeviceId(APP.store.getState());\n\n    // if the preferred one is not the selected and is available in the new devices\n    // we want to use it as it was just added\n    if (preferredAudioOutputDeviceId\n        && preferredAudioOutputDeviceId !== selectedAudioOutputDeviceId\n        && availableAudioOutputDevices.find(d => d.deviceId === preferredAudioOutputDeviceId)) {\n        return preferredAudioOutputDeviceId;\n    }\n}\n\n/**\n * Determines if currently selected audio input device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @param {JitsiLocalTrack} localAudio\n * @returns {string|undefined} - ID of new microphone device to use, undefined\n *      if audio input device should not be changed.\n */\nfunction getNewAudioInputDevice(newDevices, localAudio) {\n    const availableAudioInputDevices = newDevices.filter(\n        d => d.kind === 'audioinput');\n    const selectedAudioInputDeviceId = getUserSelectedMicDeviceId(APP.store.getState());\n    const selectedAudioInputDevice = availableAudioInputDevices.find(\n        d => d.deviceId === selectedAudioInputDeviceId);\n\n    // Here we handle case when no device was initially plugged, but\n    // then it's connected OR new device was connected when previous\n    // track has ended.\n    if (!localAudio || localAudio.disposed || localAudio.isEnded()) {\n        // If we have new audio device and permission to use it was granted\n        // (label is not an empty string), then we will try to use the first\n        // available device.\n        if (selectedAudioInputDevice && selectedAudioInputDeviceId) {\n            return selectedAudioInputDeviceId;\n        } else if (availableAudioInputDevices.length\n            && availableAudioInputDevices[0].label !== '') {\n            return availableAudioInputDevices[0].deviceId;\n        }\n    } else if (selectedAudioInputDevice\n        && selectedAudioInputDeviceId !== localAudio.getDeviceId()) {\n\n        // And here we handle case when we already have some device working,\n        // but we plug-in a \"preferred\" (previously selected in settings, stored\n        // in local storage) device.\n        return selectedAudioInputDeviceId;\n    }\n}\n\n/**\n * Determines if currently selected video input device should be changed after\n * list of available devices has been changed.\n * @param {MediaDeviceInfo[]} newDevices\n * @param {JitsiLocalTrack} localVideo\n * @returns {string|undefined} - ID of new camera device to use, undefined\n *      if video input device should not be changed.\n */\nfunction getNewVideoInputDevice(newDevices, localVideo) {\n    const availableVideoInputDevices = newDevices.filter(\n        d => d.kind === 'videoinput');\n    const selectedVideoInputDeviceId = getUserSelectedCameraDeviceId(APP.store.getState());\n    const selectedVideoInputDevice = availableVideoInputDevices.find(\n        d => d.deviceId === selectedVideoInputDeviceId);\n\n    // Here we handle case when no video input device was initially plugged,\n    // but then device is connected OR new device was connected when\n    // previous track has ended.\n    if (!localVideo || localVideo.disposed || localVideo.isEnded()) {\n        // If we have new video device and permission to use it was granted\n        // (label is not an empty string), then we will try to use the first\n        // available device.\n        if (selectedVideoInputDevice && selectedVideoInputDeviceId) {\n            return selectedVideoInputDeviceId;\n        } else if (availableVideoInputDevices.length\n            && availableVideoInputDevices[0].label !== '') {\n            return availableVideoInputDevices[0].deviceId;\n        }\n    } else if (selectedVideoInputDevice\n            && selectedVideoInputDeviceId !== localVideo.getDeviceId()) {\n        // And here we handle case when we already have some device working,\n        // but we plug-in a \"preferred\" (previously selected in settings, stored\n        // in local storage) device.\n        return selectedVideoInputDeviceId;\n    }\n}\n\nexport default {\n    /**\n     * Determines if currently selected media devices should be changed after\n     * list of available devices has been changed.\n     * @param {MediaDeviceInfo[]} newDevices\n     * @param {boolean} isSharingScreen\n     * @param {JitsiLocalTrack} localVideo\n     * @param {JitsiLocalTrack} localAudio\n     * @returns {{\n     *  audioinput: (string|undefined),\n     *  videoinput: (string|undefined),\n     *  audiooutput: (string|undefined)\n     *  }}\n     */\n    getNewMediaDevicesAfterDeviceListChanged( // eslint-disable-line max-params\n            newDevices,\n            isSharingScreen,\n            localVideo,\n            localAudio) {\n        return {\n            audioinput: getNewAudioInputDevice(newDevices, localAudio),\n            videoinput: isSharingScreen ? undefined : getNewVideoInputDevice(newDevices, localVideo),\n            audiooutput: getNewAudioOutputDevice(newDevices)\n        };\n    },\n\n    /**\n     * Tries to create new local tracks for new devices obtained after device\n     * list changed. Shows error dialog in case of failures.\n     * @param {function} createLocalTracks\n     * @param {string} (cameraDeviceId)\n     * @param {string} (micDeviceId)\n     * @returns {Promise.<JitsiLocalTrack[]>}\n     */\n    createLocalTracksAfterDeviceListChanged(\n            createLocalTracks,\n            cameraDeviceId,\n            micDeviceId) {\n        let audioTrackError;\n        let videoTrackError;\n        const audioRequested = Boolean(micDeviceId);\n        const videoRequested = Boolean(cameraDeviceId);\n\n        if (audioRequested && videoRequested) {\n            // First we try to create both audio and video tracks together.\n            return (\n                createLocalTracks({\n                    devices: [ 'audio', 'video' ],\n                    cameraDeviceId,\n                    micDeviceId\n                })\n\n                // If we fail to do this, try to create them separately.\n                .catch(() => Promise.all([\n                    createAudioTrack(false).then(([ stream ]) => stream),\n                    createVideoTrack(false).then(([ stream ]) => stream)\n                ]))\n                .then(tracks => {\n                    if (audioTrackError) {\n                        APP.store.dispatch(notifyMicError(audioTrackError));\n                    }\n\n                    if (videoTrackError) {\n                        APP.store.dispatch(notifyCameraError(videoTrackError));\n                    }\n\n                    return tracks.filter(t => typeof t !== 'undefined');\n                }));\n        } else if (videoRequested && !audioRequested) {\n            return createVideoTrack();\n        } else if (audioRequested && !videoRequested) {\n            return createAudioTrack();\n        }\n\n        return Promise.resolve([]);\n\n        /**\n         *\n         */\n        function createAudioTrack(showError = true) {\n            return (\n                createLocalTracks({\n                    devices: [ 'audio' ],\n                    cameraDeviceId: null,\n                    micDeviceId\n                })\n                .catch(err => {\n                    audioTrackError = err;\n                    showError && APP.store.dispatch(notifyMicError(err));\n\n                    return [];\n                }));\n        }\n\n        /**\n         *\n         */\n        function createVideoTrack(showError = true) {\n            return (\n                createLocalTracks({\n                    devices: [ 'video' ],\n                    cameraDeviceId,\n                    micDeviceId: null\n                })\n                .catch(err => {\n                    videoTrackError = err;\n                    showError && APP.store.dispatch(notifyCameraError(err));\n\n                    return [];\n                }));\n        }\n    }\n};\n","'use strict';\n\nfunction getText(rootChild) {\n  var res = '';\n  var rr = function rr(child) {\n    if (typeof child === 'string' || typeof child === 'number') {\n      res += child;\n    } else if (Array.isArray(child)) {\n      child.forEach(function (c) {\n        return rr(c);\n      });\n    } else if (child && child.props) {\n      var children = child.props.children;\n\n\n      if (Array.isArray(children)) {\n        children.forEach(function (c) {\n          return rr(c);\n        });\n      } else {\n        rr(children);\n      }\n    }\n  };\n\n  rr(rootChild);\n\n  return res;\n}\n\nmodule.exports = getText;","\"use strict\";\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar common_1 = require(\"./common\");\r\nvar GraphRequest_1 = require(\"./GraphRequest\");\r\nvar Client = (function () {\r\n    function Client() {\r\n        this.config = {\r\n            debugLogging: false,\r\n            defaultVersion: common_1.DEFAULT_VERSION,\r\n            baseUrl: common_1.GRAPH_BASE_URL\r\n        };\r\n    }\r\n    Client.init = function (clientOptions) {\r\n        var graphClient = new Client();\r\n        for (var key in clientOptions) {\r\n            graphClient.config[key] = clientOptions[key];\r\n        }\r\n        return graphClient;\r\n    };\r\n    Client.prototype.api = function (path) {\r\n        return new GraphRequest_1.GraphRequest(this.config, path);\r\n    };\r\n    return Client;\r\n}());\r\nexports.Client = Client;\r\n__export(require(\"./GraphRequest\"));\r\n__export(require(\"./common\"));\r\n__export(require(\"./ResponseHandler\"));\r\n//# sourceMappingURL=index.js.map","/* global $, APP */\n/* eslint-disable no-unused-vars */\nimport Logger from 'jitsi-meet-logger';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\n\nimport { createScreenSharingIssueEvent, sendAnalytics } from '../../../react/features/analytics';\nimport { Avatar } from '../../../react/features/base/avatar';\nimport { i18next } from '../../../react/features/base/i18n';\nimport {\n    JitsiParticipantConnectionStatus\n} from '../../../react/features/base/lib-jitsi-meet';\nimport { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';\nimport { getParticipantById } from '../../../react/features/base/participants';\nimport { getTrackByMediaTypeAndParticipant } from '../../../react/features/base/tracks';\nimport { CHAT_SIZE } from '../../../react/features/chat';\nimport {\n    updateKnownLargeVideoResolution\n} from '../../../react/features/large-video/actions';\nimport { getParticipantsPaneOpen } from '../../../react/features/participants-pane/functions';\nimport theme from '../../../react/features/participants-pane/theme.json';\nimport { PresenceLabel } from '../../../react/features/presence-status';\nimport { shouldDisplayTileView } from '../../../react/features/video-layout';\n/* eslint-enable no-unused-vars */\nimport { createDeferred } from '../../util/helpers';\nimport AudioLevels from '../audio_levels/AudioLevels';\n\nimport { VideoContainer, VIDEO_CONTAINER_TYPE } from './VideoContainer';\n\nconst logger = Logger.getLogger(__filename);\n\nconst DESKTOP_CONTAINER_TYPE = 'desktop';\n\n/**\n * Manager for all Large containers.\n */\nexport default class LargeVideoManager {\n    /**\n     * Checks whether given container is a {@link VIDEO_CONTAINER_TYPE}.\n     * FIXME currently this is a workaround for the problem where video type is\n     * mixed up with container type.\n     * @param {string} containerType\n     * @return {boolean}\n     */\n    static isVideoContainer(containerType) {\n        return containerType === VIDEO_CONTAINER_TYPE\n            || containerType === DESKTOP_CONTAINER_TYPE;\n    }\n\n    /**\n     *\n     */\n    constructor() {\n        /**\n         * The map of <tt>LargeContainer</tt>s where the key is the video\n         * container type.\n         * @type {Object.<string, LargeContainer>}\n         */\n        this.containers = {};\n\n        this.state = VIDEO_CONTAINER_TYPE;\n\n        // FIXME: We are passing resizeContainer as parameter which is calling\n        // Container.resize. Probably there's better way to implement this.\n        this.videoContainer = new VideoContainer(() => this.resizeContainer(VIDEO_CONTAINER_TYPE));\n        this.addContainer(VIDEO_CONTAINER_TYPE, this.videoContainer);\n\n        // use the same video container to handle desktop tracks\n        this.addContainer(DESKTOP_CONTAINER_TYPE, this.videoContainer);\n\n        /**\n         * The preferred width passed as an argument to {@link updateContainerSize}.\n         *\n         * @type {number|undefined}\n         */\n        this.preferredWidth = undefined;\n\n        /**\n         * The preferred height passed as an argument to {@link updateContainerSize}.\n         *\n         * @type {number|undefined}\n         */\n        this.preferredHeight = undefined;\n\n        /**\n         * The calculated width that will be used for the large video.\n         * @type {number}\n         */\n        this.width = 0;\n\n        /**\n         * The calculated height that will be used for the large video.\n         * @type {number}\n         */\n        this.height = 0;\n\n        /**\n         * Cache the aspect ratio of the video displayed to detect changes to\n         * the aspect ratio on video resize events.\n         *\n         * @type {number}\n         */\n        this._videoAspectRatio = 0;\n\n        this.$container = $('#largeVideoContainer');\n\n        this.$container.css({\n            display: 'inline-block'\n        });\n\n        this.$container.hover(\n            e => this.onHoverIn(e),\n            e => this.onHoverOut(e)\n        );\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onVideoResolutionUpdate\n            = this._onVideoResolutionUpdate.bind(this);\n\n        this.videoContainer.addResizeListener(this._onVideoResolutionUpdate);\n\n        this._dominantSpeakerAvatarContainer\n            = document.getElementById('dominantSpeakerAvatarContainer');\n    }\n\n    /**\n     * Removes any listeners registered on child components, including\n     * React Components.\n     *\n     * @returns {void}\n     */\n    destroy() {\n        this.videoContainer.removeResizeListener(\n            this._onVideoResolutionUpdate);\n\n        this.removePresenceLabel();\n\n        ReactDOM.unmountComponentAtNode(this._dominantSpeakerAvatarContainer);\n\n        this.$container.css({ display: 'none' });\n    }\n\n    /**\n     *\n     */\n    onHoverIn(e) {\n        if (!this.state) {\n            return;\n        }\n        const container = this.getCurrentContainer();\n\n        container.onHoverIn(e);\n    }\n\n    /**\n     *\n     */\n    onHoverOut(e) {\n        if (!this.state) {\n            return;\n        }\n        const container = this.getCurrentContainer();\n\n        container.onHoverOut(e);\n    }\n\n    /**\n     *\n     */\n    get id() {\n        const container = this.getCurrentContainer();\n\n        // If a user switch for large video is in progress then provide what\n        // will be the end result of the update.\n        if (this.updateInProcess\n            && this.newStreamData\n            && this.newStreamData.id !== container.id) {\n            return this.newStreamData.id;\n        }\n\n        return container.id;\n    }\n\n    /**\n     *\n     */\n    scheduleLargeVideoUpdate() {\n        if (this.updateInProcess || !this.newStreamData) {\n            return;\n        }\n\n        this.updateInProcess = true;\n\n        // Include hide()/fadeOut only if we're switching between users\n        // eslint-disable-next-line eqeqeq\n        const container = this.getCurrentContainer();\n        const isUserSwitch = this.newStreamData.id !== container.id;\n        const preUpdate = isUserSwitch ? container.hide() : Promise.resolve();\n\n        preUpdate.then(() => {\n            const { id, stream, videoType, resolve } = this.newStreamData;\n\n            // FIXME this does not really make sense, because the videoType\n            // (camera or desktop) is a completely different thing than\n            // the video container type (Etherpad, SharedVideo, VideoContainer).\n            const isVideoContainer = LargeVideoManager.isVideoContainer(videoType);\n\n            this.newStreamData = null;\n\n            logger.info(`hover in ${id}`);\n            this.state = videoType;\n            // eslint-disable-next-line no-shadow\n            const container = this.getCurrentContainer();\n\n            container.setStream(id, stream, videoType);\n\n            // change the avatar url on large\n            this.updateAvatar();\n\n            const isVideoMuted = !stream || stream.isMuted();\n            const state = APP.store.getState();\n            const participant = getParticipantById(state, id);\n            const connectionStatus = participant?.connectionStatus;\n            const isVideoRenderable = !isVideoMuted\n                && (APP.conference.isLocalId(id) || connectionStatus === JitsiParticipantConnectionStatus.ACTIVE);\n            const isAudioOnly = APP.conference.isAudioOnly();\n            const showAvatar\n                = isVideoContainer\n                    && ((isAudioOnly && videoType !== VIDEO_TYPE.DESKTOP) || !isVideoRenderable);\n\n            let promise;\n\n            // do not show stream if video is muted\n            // but we still should show watermark\n            if (showAvatar) {\n                this.showWatermark(true);\n\n                // If the intention of this switch is to show the avatar\n                // we need to make sure that the video is hidden\n                promise = container.hide();\n\n                if ((!shouldDisplayTileView(state) || participant?.pinned) // In theory the tile view may not be\n                // enabled yet when we auto pin the participant.\n\n                        && participant && !participant.local && !participant.isFakeParticipant) {\n                    // remote participant only\n                    const track = getTrackByMediaTypeAndParticipant(\n                        state['features/base/tracks'], MEDIA_TYPE.VIDEO, id);\n                    const isScreenSharing = track?.videoType === 'desktop';\n\n                    if (isScreenSharing) {\n                        // send the event\n                        sendAnalytics(createScreenSharingIssueEvent({\n                            source: 'large-video',\n                            connectionStatus,\n                            isVideoMuted,\n                            isAudioOnly,\n                            isVideoContainer,\n                            videoType\n                        }));\n                    }\n                }\n\n            } else {\n                promise = container.show();\n            }\n\n            // show the avatar on large if needed\n            container.showAvatar(showAvatar);\n\n            // Clean up audio level after previous speaker.\n            if (showAvatar) {\n                this.updateLargeVideoAudioLevel(0);\n            }\n\n            const messageKey\n                = connectionStatus === JitsiParticipantConnectionStatus.INACTIVE ? 'connection.LOW_BANDWIDTH' : null;\n\n            // Do not show connection status message in the audio only mode,\n            // because it's based on the video playback status.\n            const overrideAndHide = APP.conference.isAudioOnly();\n\n            this.updateParticipantConnStatusIndication(\n                    id,\n                    !overrideAndHide && messageKey);\n\n            // Change the participant id the presence label is listening to.\n            this.updatePresenceLabel(id);\n\n            this.videoContainer.positionRemoteStatusMessages();\n\n            // resolve updateLargeVideo promise after everything is done\n            promise.then(resolve);\n\n            return promise;\n        }).then(() => {\n            // after everything is done check again if there are any pending\n            // new streams.\n            this.updateInProcess = false;\n            this.scheduleLargeVideoUpdate();\n        });\n    }\n\n    /**\n     * Shows/hides notification about participant's connectivity issues to be\n     * shown on the large video area.\n     *\n     * @param {string} id the id of remote participant(MUC nickname)\n     * @param {string|null} messageKey the i18n key of the message which will be\n     * displayed on the large video or <tt>null</tt> to hide it.\n     *\n     * @private\n     */\n    updateParticipantConnStatusIndication(id, messageKey) {\n        if (messageKey) {\n            // Get user's display name\n            const displayName\n                = APP.conference.getParticipantDisplayName(id);\n\n            this._setRemoteConnectionMessage(\n                messageKey,\n                { displayName });\n\n            // Show it now only if the VideoContainer is on top\n            this.showRemoteConnectionMessage(\n                LargeVideoManager.isVideoContainer(this.state));\n        } else {\n            // Hide the message\n            this.showRemoteConnectionMessage(false);\n        }\n\n    }\n\n    /**\n     * Update large video.\n     * Switches to large video even if previously other container was visible.\n     * @param userID the userID of the participant associated with the stream\n     * @param {JitsiTrack?} stream new stream\n     * @param {string?} videoType new video type\n     * @returns {Promise}\n     */\n    updateLargeVideo(userID, stream, videoType) {\n        if (this.newStreamData) {\n            this.newStreamData.reject();\n        }\n\n        this.newStreamData = createDeferred();\n        this.newStreamData.id = userID;\n        this.newStreamData.stream = stream;\n        this.newStreamData.videoType = videoType;\n\n        this.scheduleLargeVideoUpdate();\n\n        return this.newStreamData.promise;\n    }\n\n    /**\n     * Update container size.\n     */\n    updateContainerSize(width, height) {\n        if (typeof width === 'number') {\n            this.preferredWidth = width;\n        }\n        if (typeof height === 'number') {\n            this.preferredHeight = height;\n        }\n\n        let widthToUse = this.preferredWidth || window.innerWidth;\n        const state = APP.store.getState();\n        const { isOpen } = state['features/chat'];\n        const isParticipantsPaneOpen = getParticipantsPaneOpen(state);\n\n        if (isParticipantsPaneOpen) {\n            widthToUse -= theme.participantsPaneWidth;\n        }\n\n        if (isOpen && window.innerWidth > 580) {\n            /**\n             * If chat state is open, we re-compute the container width\n             * by subtracting the default width of the chat.\n             */\n            widthToUse -= CHAT_SIZE;\n        }\n\n        this.width = widthToUse;\n        this.height = this.preferredHeight || window.innerHeight;\n    }\n\n    /**\n     * Resize Large container of specified type.\n     * @param {string} type type of container which should be resized.\n     * @param {boolean} [animate=false] if resize process should be animated.\n     */\n    resizeContainer(type, animate = false) {\n        const container = this.getContainer(type);\n\n        container.resize(this.width, this.height, animate);\n    }\n\n    /**\n     * Resize all Large containers.\n     * @param {boolean} animate if resize process should be animated.\n     */\n    resize(animate) {\n        // resize all containers\n        Object.keys(this.containers)\n            .forEach(type => this.resizeContainer(type, animate));\n    }\n\n    /**\n     * Updates the src of the dominant speaker avatar\n     */\n    updateAvatar() {\n        ReactDOM.render(\n            <Provider store = { APP.store }>\n                <Avatar\n                    id = \"dominantSpeakerAvatar\"\n                    participantId = { this.id }\n                    size = { 200 } />\n            </Provider>,\n            this._dominantSpeakerAvatarContainer\n        );\n    }\n\n    /**\n     * Updates the audio level indicator of the large video.\n     *\n     * @param lvl the new audio level to set\n     */\n    updateLargeVideoAudioLevel(lvl) {\n        AudioLevels.updateLargeVideoAudioLevel('dominantSpeaker', lvl);\n    }\n\n    /**\n     * Displays a message of the passed in participant id's presence status. The\n     * message will not display if the remote connection message is displayed.\n     *\n     * @param {string} id - The participant ID whose associated user's presence\n     * status should be displayed.\n     * @returns {void}\n     */\n    updatePresenceLabel(id) {\n        const isConnectionMessageVisible\n            = $('#remoteConnectionMessage').is(':visible');\n\n        if (isConnectionMessageVisible) {\n            this.removePresenceLabel();\n\n            return;\n        }\n\n        const presenceLabelContainer = $('#remotePresenceMessage');\n\n        if (presenceLabelContainer.length) {\n            ReactDOM.render(\n                <Provider store = { APP.store }>\n                    <I18nextProvider i18n = { i18next }>\n                        <PresenceLabel\n                            participantID = { id }\n                            className = 'presence-label' />\n                    </I18nextProvider>\n                </Provider>,\n                presenceLabelContainer.get(0));\n        }\n    }\n\n    /**\n     * Removes the messages about the displayed participant's presence status.\n     *\n     * @returns {void}\n     */\n    removePresenceLabel() {\n        const presenceLabelContainer = $('#remotePresenceMessage');\n\n        if (presenceLabelContainer.length) {\n            ReactDOM.unmountComponentAtNode(presenceLabelContainer.get(0));\n        }\n    }\n\n    /**\n     * Show or hide watermark.\n     * @param {boolean} show\n     */\n    showWatermark(show) {\n        $('.watermark').css('visibility', show ? 'visible' : 'hidden');\n    }\n\n    /**\n     * Shows hides the \"avatar\" message which is to be displayed either in\n     * the middle of the screen or below the avatar image.\n     *\n     * @param {boolean|undefined} [show=undefined] <tt>true</tt> to show\n     * the avatar message or <tt>false</tt> to hide it. If not provided then\n     * the connection status of the user currently on the large video will be\n     * obtained form \"APP.conference\" and the message will be displayed if\n     * the user's connection is either interrupted or inactive.\n     */\n    showRemoteConnectionMessage(show) {\n        if (typeof show !== 'boolean') {\n            const participant = getParticipantById(APP.store.getState(), this.id);\n            const connStatus = participant?.connectionStatus;\n\n            // eslint-disable-next-line no-param-reassign\n            show = !APP.conference.isLocalId(this.id)\n                && (connStatus === JitsiParticipantConnectionStatus.INTERRUPTED\n                    || connStatus\n                        === JitsiParticipantConnectionStatus.INACTIVE);\n        }\n\n        if (show) {\n            $('#remoteConnectionMessage').css({ display: 'block' });\n        } else {\n            $('#remoteConnectionMessage').hide();\n        }\n    }\n\n    /**\n     * Updates the text which describes that the remote user is having\n     * connectivity issues.\n     *\n     * @param {string} msgKey the translation key which will be used to get\n     * the message text.\n     * @param {object} msgOptions translation options object.\n     *\n     * @private\n     */\n    _setRemoteConnectionMessage(msgKey, msgOptions) {\n        if (msgKey) {\n            $('#remoteConnectionMessage')\n                .attr('data-i18n', msgKey)\n                .attr('data-i18n-options', JSON.stringify(msgOptions));\n            APP.translation.translateElement(\n                $('#remoteConnectionMessage'), msgOptions);\n        }\n    }\n\n    /**\n     * Add container of specified type.\n     * @param {string} type container type\n     * @param {LargeContainer} container container to add.\n     */\n    addContainer(type, container) {\n        if (this.containers[type]) {\n            throw new Error(`container of type ${type} already exist`);\n        }\n\n        this.containers[type] = container;\n        this.resizeContainer(type);\n    }\n\n    /**\n     * Get Large container of specified type.\n     * @param {string} type container type.\n     * @returns {LargeContainer}\n     */\n    getContainer(type) {\n        const container = this.containers[type];\n\n        if (!container) {\n            throw new Error(`container of type ${type} doesn't exist`);\n        }\n\n        return container;\n    }\n\n    /**\n     * Returns {@link LargeContainer} for the current {@link state}\n     *\n     * @return {LargeContainer}\n     *\n     * @throws an <tt>Error</tt> if there is no container for the current\n     * {@link state}.\n     */\n    getCurrentContainer() {\n        return this.getContainer(this.state);\n    }\n\n    /**\n     * Returns type of the current {@link LargeContainer}\n     * @return {string}\n     */\n    getCurrentContainerType() {\n        return this.state;\n    }\n\n    /**\n     * Remove Large container of specified type.\n     * @param {string} type container type.\n     */\n    removeContainer(type) {\n        if (!this.containers[type]) {\n            throw new Error(`container of type ${type} doesn't exist`);\n        }\n\n        delete this.containers[type];\n    }\n\n    /**\n     * Show Large container of specified type.\n     * Does nothing if such container is already visible.\n     * @param {string} type container type.\n     * @returns {Promise}\n     */\n    showContainer(type) {\n        if (this.state === type) {\n            return Promise.resolve();\n        }\n\n        const oldContainer = this.containers[this.state];\n\n        // FIXME when video is being replaced with other content we need to hide\n        // companion icons/messages. It would be best if the container would\n        // be taking care of it by itself, but that is a bigger refactoring\n\n        if (LargeVideoManager.isVideoContainer(this.state)) {\n            this.showWatermark(false);\n            this.showRemoteConnectionMessage(false);\n        }\n        oldContainer.hide();\n\n        this.state = type;\n        const container = this.getContainer(type);\n\n        return container.show().then(() => {\n            if (LargeVideoManager.isVideoContainer(type)) {\n                // FIXME when video appears on top of other content we need to\n                // show companion icons/messages. It would be best if\n                // the container would be taking care of it by itself, but that\n                // is a bigger refactoring\n                this.showWatermark(true);\n\n                // \"avatar\" and \"video connection\" can not be displayed both\n                // at the same time, but the latter is of higher priority and it\n                // will hide the avatar one if will be displayed.\n                this.showRemoteConnectionMessage(/* fetch the current state */);\n            }\n        });\n    }\n\n    /**\n     * Changes the flipX state of the local video.\n     * @param val {boolean} true if flipped.\n     */\n    onLocalFlipXChange(val) {\n        this.videoContainer.setLocalFlipX(val);\n    }\n\n    /**\n     * Dispatches an action to update the known resolution state of the large video and adjusts container sizes when the\n     * resolution changes.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onVideoResolutionUpdate() {\n        const { height, width } = this.videoContainer.getStreamSize();\n        const { resolution } = APP.store.getState()['features/large-video'];\n\n        if (height !== resolution) {\n            APP.store.dispatch(updateKnownLargeVideoResolution(height));\n        }\n\n        const currentAspectRatio = height === 0 ? 0 : width / height;\n\n        if (this._videoAspectRatio !== currentAspectRatio) {\n            this._videoAspectRatio = currentAspectRatio;\n            this.resize();\n        }\n    }\n}\n","// @flow\n\nimport JitsiMeetJS from '../../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../../base/media';\n\n/**\n * Class Implementing the effect interface expected by a JitsiLocalTrack.\n * The AudioMixerEffect, as the name implies, mixes two JitsiLocalTracks containing a audio track. First track is\n * provided at the moment of creation, second is provided through the effect interface.\n */\nexport class AudioMixerEffect {\n    /**\n     * JitsiLocalTrack that is going to be mixed into the track that uses this effect.\n     */\n    _mixAudio: Object;\n\n    /**\n     * MediaStream resulted from mixing.\n     */\n    _mixedMediaStream: Object;\n\n    /**\n     * MediaStreamTrack obtained from mixed stream.\n     */\n    _mixedMediaTrack: Object;\n\n    /**\n     * Original MediaStream from the JitsiLocalTrack that uses this effect.\n     */\n    _originalStream: Object;\n\n    /**\n     * MediaStreamTrack obtained from the original MediaStream.\n     */\n    _originalTrack: Object;\n\n    /**\n     * lib-jitsi-meet AudioMixer.\n     */\n    _audioMixer: Object;\n\n    /**\n     * Creates AudioMixerEffect.\n     *\n     * @param {JitsiLocalTrack} mixAudio - JitsiLocalTrack which will be mixed with the original track.\n     */\n    constructor(mixAudio: Object) {\n        if (mixAudio.getType() !== MEDIA_TYPE.AUDIO) {\n            throw new Error('AudioMixerEffect only supports audio JitsiLocalTracks; effect will not work!');\n        }\n\n        this._mixAudio = mixAudio;\n    }\n\n    /**\n     * Checks if the JitsiLocalTrack supports this effect.\n     *\n     * @param {JitsiLocalTrack} sourceLocalTrack - Track to which the effect will be applied.\n     * @returns {boolean} - Returns true if this effect can run on the specified track, false otherwise.\n     */\n    isEnabled(sourceLocalTrack: Object) {\n        // Both JitsiLocalTracks need to be audio i.e. contain an audio MediaStreamTrack\n        return sourceLocalTrack.isAudioTrack() && this._mixAudio.isAudioTrack();\n    }\n\n    /**\n     * Effect interface called by source JitsiLocalTrack, At this point a WebAudio ChannelMergerNode is created\n     * and and the two associated MediaStreams are connected to it; the resulting mixed MediaStream is returned.\n     *\n     * @param {MediaStream} audioStream - Audio stream which will be mixed with _mixAudio.\n     * @returns {MediaStream} - MediaStream containing both audio tracks mixed together.\n     */\n    startEffect(audioStream: MediaStream) {\n        this._originalStream = audioStream;\n        this._originalTrack = audioStream.getTracks()[0];\n\n        this._audioMixer = JitsiMeetJS.createAudioMixer();\n        this._audioMixer.addMediaStream(this._mixAudio.getOriginalStream());\n        this._audioMixer.addMediaStream(this._originalStream);\n\n        this._mixedMediaStream = this._audioMixer.start();\n        this._mixedMediaTrack = this._mixedMediaStream.getTracks()[0];\n\n        // Sync the resulting mixed track enabled state with that of the track using the effect.\n        this.setMuted(!this._originalTrack.enabled);\n        this._originalTrack.enabled = true;\n\n        return this._mixedMediaStream;\n    }\n\n    /**\n     * Reset the AudioMixer stopping it in the process.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        // Match state of the original track with that of the mixer track, not doing so can\n        // result in an inconsistent state e.g. redux state is muted yet track is enabled.\n        this._originalTrack.enabled = this._mixedMediaTrack.enabled;\n        this._audioMixer.reset();\n    }\n\n    /**\n     * Change the muted state of the effect.\n     *\n     * @param {boolean} muted - Should effect be muted or not.\n     * @returns {void}\n     */\n    setMuted(muted: boolean) {\n        this._mixedMediaTrack.enabled = !muted;\n    }\n\n    /**\n     * Check whether or not this effect is muted.\n     *\n     * @returns {boolean}\n     */\n    isMuted() {\n        return !this._mixedMediaTrack.enabled;\n    }\n}\n","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw ERROR;\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw ERROR;\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw ERROR;\n          }\n        }\n      } else {\n        throw ERROR;\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >> 12);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >> 18);\n              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/screenshot-capture');\n","// @flow\n\nimport { getLocalVideoTrack } from '../../features/base/tracks';\nimport { createScreenshotCaptureEffect } from '../stream-effects/screenshot-capture';\n\nimport { SET_SCREENSHOT_CAPTURE } from './actionTypes';\nimport logger from './logger';\n\nlet ongoingEffect;\n\n/**\n * Marks the on-off state of screenshot captures.\n *\n * @param {boolean} enabled - Whether to turn screen captures on or off.\n * @returns {{\n    *      type: START_SCREENSHOT_CAPTURE,\n    *      payload: enabled\n    * }}\n*/\nfunction setScreenshotCapture(enabled) {\n    return {\n        type: SET_SCREENSHOT_CAPTURE,\n        payload: enabled\n    };\n}\n\n/**\n* Action that toggles the screenshot captures.\n*\n* @param {boolean} enabled - Bool that represents the intention to start/stop screenshot captures.\n* @returns {Promise}\n*/\nexport function toggleScreenshotCaptureEffect(enabled: boolean) {\n    return async function(dispatch: (Object) => Object, getState: () => any) {\n        const state = getState();\n\n        if (state['features/screenshot-capture'].capturesEnabled !== enabled) {\n            const { jitsiTrack } = getLocalVideoTrack(state['features/base/tracks']);\n\n            if (!ongoingEffect) {\n                ongoingEffect = await createScreenshotCaptureEffect(state);\n            }\n\n            // Screenshot capture effect doesn't return a modified stream. Therefore, we don't have to\n            // switch the stream at the conference level, starting/stopping the effect will suffice here.\n            if (enabled) {\n                try {\n                    await ongoingEffect.startEffect(\n                        jitsiTrack.getOriginalStream(),\n                        jitsiTrack.videoType\n                    );\n                    dispatch(setScreenshotCapture(enabled));\n                } catch {\n\n                    // Handle promise rejection from {@code startEffect} due to stream type not being desktop.\n                    logger.error('Unsupported stream type.');\n                }\n            } else {\n                ongoingEffect.stopEffect();\n                dispatch(setScreenshotCapture(enabled));\n            }\n        }\n\n        return Promise.resolve();\n    };\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* Copyright @ 2015-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*jslint latedef:false*/\n\n/**\n * Ordered log levels.\n */\nvar levels = {\n    \"trace\": 0,\n    \"debug\": 1,\n    \"info\": 2,\n    \"log\": 3,\n    \"warn\": 4,\n    \"error\": 5\n};\n\n/**\n * The default transport - console\n * @type LoggerTransport\n */\nLogger.consoleTransport = console;\n\n/**\n * The array which stores currently registered global transports.\n * @type {[LoggerTransport]}\n */\nvar globalTransports = [ Logger.consoleTransport ];\n\n/**\n * Adds given {@link LoggerTransport} instance to the list of global\n * transports which means that it'll be used by all {@link Logger}s\n * @param {LoggerTransport} transport\n */\nLogger.addGlobalTransport = function(transport) {\n    if (globalTransports.indexOf(transport) === -1) {\n        globalTransports.push(transport);\n    }\n};\n\n/**\n * Removes given {@link LoggerTransport} instance from the list of global\n * transports\n * @param {LoggerTransport} transport\n */\nLogger.removeGlobalTransport = function(transport) {\n    var transportIdx = globalTransports.indexOf(transport);\n    if (transportIdx !== -1) {\n        globalTransports.splice(transportIdx, 1);\n    }\n};\n\n/**\n * The global configuration options.\n */\nvar globalOptions = {};\n\n/**\n * Sets global options which will be used by all loggers. Changing these works\n * even after other loggers are created.\n */\nLogger.setGlobalOptions = function(options) {\n    globalOptions = options || {};\n};\n\n/**\n * Parses Error's object stack trace and extracts information about the last\n * caller before the log method was called.\n * @returns JS object with info about the caller - method name, file location,\n * line and column.\n */\nfunction getCallerInfo() {\n    var callerInfo = {\n        methodName: \"\",\n        fileLocation: \"\",\n        line: null,\n        column: null\n    };\n    //gets the part of the stack without the logger wrappers\n    var error = new Error();\n    var stack = error.stack? error.stack.split(\"\\n\") : [];\n    if(!stack || stack.length < 3) {\n        return callerInfo;\n    }\n    var m = null;\n    if(stack[3]) {\n        m = stack[3].match(/\\s*at\\s*(.+?)\\s*\\((\\S*)\\s*:(\\d*)\\s*:(\\d*)\\)/);\n    }\n    if(!m || m.length <= 4) {\n        //Firefox && Safari\n        if(stack[2].indexOf(\"log@\") === 0){\n            //Safari\n            callerInfo.methodName = stack[3].substr(0, stack[3].indexOf(\"@\"));\n        } else {\n            //Firefox\n            callerInfo.methodName = stack[2].substr(0, stack[2].indexOf(\"@\"));\n        }\n        return callerInfo;\n    }\n\n    callerInfo.methodName = m[1];\n    callerInfo.fileLocation = m[2];\n    callerInfo.line = m[3];\n    callerInfo.column = m[4];\n    return callerInfo;\n}\n\n/**\n * Logs messages using the transports and level from the logger.\n * @param logger a logger instance.\n * @param level the log level of the message. See the levels variable.\n * @param arguments array with arguments that will be logged.\n */\nfunction log() {\n    var logger = arguments[0], level = arguments[1],\n        args = Array.prototype.slice.call(arguments, 2);\n    if(levels[level] < logger.level) {\n        return;\n    }\n\n    var callerInfo\n        = !(logger.options.disableCallerInfo || globalOptions.disableCallerInfo) &&\n            getCallerInfo();\n    var transports = globalTransports.concat(logger.transports);\n    for(var i = 0; i < transports.length; i++) {\n        var t = transports[i];\n        var l = t[level];\n        if(l && typeof(l) === \"function\") {\n            var logPrefixes = [];\n\n            logPrefixes.push(new Date().toISOString());\n\n            if (logger.id) {\n                logPrefixes.push(\"[\" + logger.id + \"]\");\n            }\n\n            if (callerInfo && callerInfo.methodName.length > 1) {\n                logPrefixes.push(\"<\" + callerInfo.methodName + \">: \");\n            }\n\n            var fullLogParts = logPrefixes.concat(args);\n\n            l.bind(t).apply(t, fullLogParts);\n        }\n    }\n}\n\n/**\n *\n * Constructs new logger object.\n * @param level the logging level for the new logger\n * @param id optional identifier for the logger instance.\n * @param {LoggerTransport} transports optional list of handlers(objects) for\n * the logs. The handlers must support - log, warn, error, debug, info, trace.\n * @param options optional configuration file for how the logger should behave.\n * @param {boolean} options.disableCallerInfo Whether the call site of a logger\n * method invocation should be included in the log. Defaults to false, so the\n * call site will be included.\n */\nfunction Logger(level, id, transports, options) {\n    this.id = id;\n    this.options = options || {};\n    this.transports = transports;\n    if(!this.transports) {\n        this.transports = [];\n    }\n    this.level = levels[level];\n    var methods = Object.keys(levels);\n    for(var i = 0; i < methods.length; i++){\n        this[methods[i]] =\n            log.bind(null, this, methods[i]);\n    }\n}\n\n/**\n * Sets the log level for the logger.\n * @param level the new log level.\n */\nLogger.prototype.setLevel = function (level) {\n    this.level = levels[level];\n};\nmodule.exports = Logger;\n\n/**\n * Enum for the supported log levels.\n */\nLogger.levels = {\n    TRACE: \"trace\",\n    DEBUG: \"debug\",\n    INFO: \"info\",\n    LOG: \"log\",\n    WARN: \"warn\",\n    ERROR: \"error\"\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\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(n);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n  rng = function whatwgRNG() {\n    crypto.getRandomValues(rnds8);\n    return rnds8;\n  };\n}\n\nif (!rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n  rng = function() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n\nmodule.exports = rng;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bind = void 0;\nfunction bind(target, _a) {\n    var type = _a.type, listener = _a.listener, options = _a.options;\n    target.addEventListener(type, listener, options);\n    return function unbind() {\n        target.removeEventListener(type, listener, options);\n    };\n}\nexports.bind = bind;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TouchScrollable = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _exenv = require('exenv');\n\nvar _utils = require('./utils');\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TouchScrollable = exports.TouchScrollable = function (_PureComponent) {\n  _inherits(TouchScrollable, _PureComponent);\n\n  function TouchScrollable() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, TouchScrollable);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = TouchScrollable.__proto__ || Object.getPrototypeOf(TouchScrollable)).call.apply(_ref, [this].concat(args))), _this), _this.getScrollableArea = function (ref) {\n      _this.scrollableArea = ref;\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(TouchScrollable, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (!_exenv.canUseEventListeners) return;\n\n      this.scrollableArea.addEventListener('touchstart', _utils.preventInertiaScroll, _utils.listenerOptions);\n      this.scrollableArea.addEventListener('touchmove', _utils.allowTouchMove, _utils.listenerOptions);\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (!_exenv.canUseEventListeners) return;\n\n      this.scrollableArea.removeEventListener('touchstart', _utils.preventInertiaScroll, _utils.listenerOptions);\n      this.scrollableArea.removeEventListener('touchmove', _utils.allowTouchMove, _utils.listenerOptions);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _props = this.props,\n          children = _props.children,\n          rest = _objectWithoutProperties(_props, ['children']);\n\n      return typeof children === 'function' ? children(this.getScrollableArea) : (0, _react.cloneElement)(children, _extends({ ref: this.getScrollableArea }, rest));\n    }\n  }]);\n\n  return TouchScrollable;\n}(_react.PureComponent);","// If a generic is used here, props can be inferred never and passed up (even with defaults)\nexport function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","// @flow\n\n/**\n * Returns the field value in a platform generic way.\n *\n * @param {Object | string} fieldParameter - The parameter passed through the change event function.\n * @returns {string}\n */\nexport function getFieldValue(fieldParameter: Object | string) {\n    return typeof fieldParameter === 'string' ? fieldParameter : fieldParameter?.target?.value;\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar es6_promise_1 = require(\"es6-promise\");\r\nrequire(\"isomorphic-fetch\");\r\nvar common_1 = require(\"./common\");\r\nvar ResponseHandler_1 = require(\"./ResponseHandler\");\r\nvar RequestMethod_1 = require(\"./RequestMethod\");\r\nvar GraphHelper_1 = require(\"./GraphHelper\");\r\nvar GraphRequest = (function () {\r\n    function GraphRequest(config, path) {\r\n        this.config = config;\r\n        this._headers = {};\r\n        this.urlComponents = {\r\n            host: this.config.baseUrl,\r\n            version: this.config.defaultVersion,\r\n            oDataQueryParams: {},\r\n            otherURLQueryParams: {}\r\n        };\r\n        this.parsePath(path);\r\n    }\r\n    GraphRequest.prototype.header = function (headerKey, headerValue) {\r\n        this._headers[headerKey] = headerValue;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.headers = function (headers) {\r\n        for (var key in headers) {\r\n            this._headers[key] = headers[key];\r\n        }\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.parsePath = function (rawPath) {\r\n        if (rawPath.indexOf(\"https://\") != -1) {\r\n            rawPath = rawPath.replace(\"https://\", \"\");\r\n            var endOfHostStrPos = rawPath.indexOf(\"/\");\r\n            this.urlComponents.host = \"https://\" + rawPath.substring(0, endOfHostStrPos);\r\n            rawPath = rawPath.substring(endOfHostStrPos + 1, rawPath.length);\r\n            var endOfVersionStrPos = rawPath.indexOf(\"/\");\r\n            this.urlComponents.version = rawPath.substring(0, endOfVersionStrPos);\r\n            rawPath = rawPath.substring(endOfVersionStrPos + 1, rawPath.length);\r\n        }\r\n        if (rawPath.charAt(0) == \"/\") {\r\n            rawPath = rawPath.substr(1);\r\n        }\r\n        var queryStrPos = rawPath.indexOf(\"?\");\r\n        if (queryStrPos == -1) {\r\n            this.urlComponents.path = rawPath;\r\n        }\r\n        else {\r\n            this.urlComponents.path = rawPath.substr(0, queryStrPos);\r\n            var queryParams = rawPath.substring(queryStrPos + 1, rawPath.length).split(\"&\");\r\n            for (var _i = 0, queryParams_1 = queryParams; _i < queryParams_1.length; _i++) {\r\n                var queryParam = queryParams_1[_i];\r\n                var queryParams_2 = queryParam.split(\"=\");\r\n                var key = queryParams_2[0];\r\n                var value = queryParams_2[1];\r\n                if (common_1.oDataQueryNames.indexOf(key)) {\r\n                    this.urlComponents.oDataQueryParams[key] = value;\r\n                }\r\n                else {\r\n                    this.urlComponents.otherURLQueryParams[key] = value;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    GraphRequest.prototype.urlJoin = function (urlSegments) {\r\n        var tr = function (s) { return s.replace(/\\/+$/, ''); };\r\n        var tl = function (s) { return s.replace(/^\\/+/, ''); };\r\n        var joiner = function (pre, cur) { return [tr(pre), tl(cur)].join('/'); };\r\n        var parts = Array.prototype.slice.call(urlSegments);\r\n        return parts.reduce(joiner);\r\n    };\r\n    GraphRequest.prototype.buildFullUrl = function () {\r\n        var url = this.urlJoin([this.urlComponents.host,\r\n            this.urlComponents.version,\r\n            this.urlComponents.path])\r\n            + this.createQueryString();\r\n        if (this.config.debugLogging) {\r\n            console.log(url);\r\n        }\r\n        return url;\r\n    };\r\n    GraphRequest.prototype.version = function (v) {\r\n        this.urlComponents.version = v;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.select = function (properties) {\r\n        this.addCsvQueryParamater(\"$select\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.expand = function (properties) {\r\n        this.addCsvQueryParamater(\"$expand\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.orderby = function (properties) {\r\n        this.addCsvQueryParamater(\"$orderby\", properties, arguments);\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.filter = function (filterStr) {\r\n        this.urlComponents.oDataQueryParams[\"$filter\"] = filterStr;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.top = function (n) {\r\n        this.urlComponents.oDataQueryParams[\"$top\"] = n;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.skip = function (n) {\r\n        this.urlComponents.oDataQueryParams[\"$skip\"] = n;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.skipToken = function (token) {\r\n        this.urlComponents.oDataQueryParams[\"$skipToken\"] = token;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.count = function (count) {\r\n        this.urlComponents.oDataQueryParams[\"$count\"] = count.toString();\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.responseType = function (responseType) {\r\n        this._responseType = responseType;\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.addCsvQueryParamater = function (propertyName, propertyValue, additionalProperties) {\r\n        this.urlComponents.oDataQueryParams[propertyName] = this.urlComponents.oDataQueryParams[propertyName] ? this.urlComponents.oDataQueryParams[propertyName] + \",\" : \"\";\r\n        var allValues = [];\r\n        if (typeof propertyValue === \"string\") {\r\n            allValues.push(propertyValue);\r\n        }\r\n        else {\r\n            allValues = allValues.concat(propertyValue);\r\n        }\r\n        if (additionalProperties.length > 1 && typeof propertyValue === \"string\") {\r\n            allValues = Array.prototype.slice.call(additionalProperties);\r\n        }\r\n        this.urlComponents.oDataQueryParams[propertyName] += allValues.join(\",\");\r\n    };\r\n    GraphRequest.prototype.delete = function (callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, { method: RequestMethod_1.RequestMethod.DELETE, headers: new Headers() }), callback);\r\n    };\r\n    GraphRequest.prototype.patch = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.PATCH,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers({ 'Content-Type': 'application/json' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.post = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.POST,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers((content.constructor !== undefined && content.constructor.name === \"FormData\") ? {} : { 'Content-Type': 'application/json' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.put = function (content, callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, {\r\n            method: RequestMethod_1.RequestMethod.PUT,\r\n            body: GraphHelper_1.GraphHelper.serializeContent(content),\r\n            headers: new Headers({ 'Content-Type': 'application/octet-stream' })\r\n        }), callback);\r\n    };\r\n    GraphRequest.prototype.create = function (content, callback) {\r\n        return this.post(content, callback);\r\n    };\r\n    GraphRequest.prototype.update = function (content, callback) {\r\n        return this.patch(content, callback);\r\n    };\r\n    GraphRequest.prototype.del = function (callback) {\r\n        return this.delete(callback);\r\n    };\r\n    GraphRequest.prototype.get = function (callback) {\r\n        var url = this.buildFullUrl();\r\n        return this.sendRequestAndRouteResponse(new Request(url, { method: RequestMethod_1.RequestMethod.GET, headers: new Headers() }), callback);\r\n    };\r\n    GraphRequest.prototype.routeResponseToPromise = function (request) {\r\n        var _this = this;\r\n        return new es6_promise_1.Promise(function (resolve, reject) {\r\n            _this.routeResponseToCallback(request, function (err, body) {\r\n                if (err != null) {\r\n                    reject(err);\r\n                }\r\n                else {\r\n                    resolve(body);\r\n                }\r\n            });\r\n        });\r\n    };\r\n    GraphRequest.prototype.handleFetch = function (request, callback, options) {\r\n        var _this = this;\r\n        ((request.constructor.name === \"Request\") ? fetch(request) : fetch(request, options)).then(function (response) {\r\n            _this.convertResponseType(response).then(function (responseValue) {\r\n                ResponseHandler_1.ResponseHandler.init(response, undefined, responseValue, callback);\r\n            }).catch(function (error) {\r\n                ResponseHandler_1.ResponseHandler.init(response, error, undefined, callback);\r\n            });\r\n        }).catch(function (error) {\r\n            ResponseHandler_1.ResponseHandler.init(undefined, error, undefined, callback);\r\n        });\r\n    };\r\n    GraphRequest.prototype.routeResponseToCallback = function (request, callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err == null && accessToken != null) {\r\n                request = self.configureRequest(request, accessToken);\r\n                self.handleFetch(request, callback);\r\n            }\r\n            else {\r\n                callback(err, null, null);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.sendRequestAndRouteResponse = function (request, callback) {\r\n        if (callback == null && typeof es6_promise_1.Promise !== \"undefined\") {\r\n            return this.routeResponseToPromise(request);\r\n        }\r\n        else {\r\n            this.routeResponseToCallback(request, callback || function () { });\r\n        }\r\n    };\r\n    GraphRequest.prototype.getStream = function (callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err === null && accessToken !== null) {\r\n                var url = self.buildFullUrl();\r\n                var options_1 = {\r\n                    method: RequestMethod_1.RequestMethod.GET,\r\n                    headers: self.getDefaultRequestHeaders(accessToken)\r\n                };\r\n                self.responseType(\"stream\");\r\n                Object.keys(self._headers).forEach(function (key) { return options_1.headers[key] = self._headers[key]; });\r\n                self.handleFetch(url, callback, options_1);\r\n            }\r\n            else {\r\n                callback(err, null);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.putStream = function (stream, callback) {\r\n        var self = this;\r\n        self.config.authProvider(function (err, accessToken) {\r\n            if (err === null && accessToken !== null) {\r\n                var url = self.buildFullUrl();\r\n                var options_2 = {\r\n                    method: RequestMethod_1.RequestMethod.PUT,\r\n                    headers: {\r\n                        'Content-Type': 'application/octet-stream',\r\n                    },\r\n                    body: stream\r\n                };\r\n                var defaultHeaders_1 = self.getDefaultRequestHeaders(accessToken);\r\n                Object.keys(defaultHeaders_1).forEach(function (key) { return options_2.headers[key] = defaultHeaders_1[key]; });\r\n                Object.keys(self._headers).forEach(function (key) { return options_2.headers[key] = self._headers[key]; });\r\n                self.handleFetch(url, callback, options_2);\r\n            }\r\n        });\r\n    };\r\n    GraphRequest.prototype.getDefaultRequestHeaders = function (accessToken) {\r\n        return {\r\n            Authorization: \"Bearer \" + accessToken,\r\n            SdkVersion: \"graph-js-\" + common_1.PACKAGE_VERSION\r\n        };\r\n    };\r\n    GraphRequest.prototype.configureRequest = function (request, accessToken) {\r\n        var self = this, defaultHeaders = self.getDefaultRequestHeaders(accessToken);\r\n        Object.keys(defaultHeaders).forEach(function (key) { return request.headers.set(key, defaultHeaders[key]); });\r\n        Object.keys(self._headers).forEach(function (key) { return request.headers.set(key, self._headers[key]); });\r\n        return request;\r\n    };\r\n    GraphRequest.prototype.query = function (queryDictionaryOrString) {\r\n        if (typeof queryDictionaryOrString === \"string\") {\r\n            var queryStr = queryDictionaryOrString;\r\n            var queryKey = queryStr.split(\"=\")[0];\r\n            var queryValue = queryStr.split(\"=\")[1];\r\n            this.urlComponents.otherURLQueryParams[queryKey] = queryValue;\r\n        }\r\n        else {\r\n            for (var key in queryDictionaryOrString) {\r\n                this.urlComponents.otherURLQueryParams[key] = queryDictionaryOrString[key];\r\n            }\r\n        }\r\n        return this;\r\n    };\r\n    GraphRequest.prototype.createQueryString = function () {\r\n        var q = [];\r\n        if (Object.keys(this.urlComponents.oDataQueryParams).length != 0) {\r\n            for (var property in this.urlComponents.oDataQueryParams) {\r\n                q.push(property + \"=\" + this.urlComponents.oDataQueryParams[property]);\r\n            }\r\n        }\r\n        if (Object.keys(this.urlComponents.otherURLQueryParams).length != 0) {\r\n            for (var property in this.urlComponents.otherURLQueryParams) {\r\n                q.push(property + \"=\" + this.urlComponents.otherURLQueryParams[property]);\r\n            }\r\n        }\r\n        if (q.length > 0) {\r\n            return \"?\" + q.join(\"&\");\r\n        }\r\n        return \"\";\r\n    };\r\n    GraphRequest.prototype.convertResponseType = function (response) {\r\n        var responseValue;\r\n        if (!this._responseType) {\r\n            this._responseType = '';\r\n        }\r\n        switch (this._responseType.toLowerCase()) {\r\n            case \"arraybuffer\":\r\n                responseValue = response.arrayBuffer();\r\n                break;\r\n            case \"blob\":\r\n                responseValue = response.blob();\r\n                break;\r\n            case \"document\":\r\n                responseValue = response.json();\r\n                break;\r\n            case \"json\":\r\n                responseValue = response.json();\r\n                break;\r\n            case \"text\":\r\n                responseValue = response.text();\r\n                break;\r\n            case \"stream\":\r\n                responseValue = es6_promise_1.Promise.resolve(response.body);\r\n                break;\r\n            default:\r\n                responseValue = response.json();\r\n                break;\r\n        }\r\n        return responseValue;\r\n    };\r\n    return GraphRequest;\r\n}());\r\nexports.GraphRequest = GraphRequest;\r\n//# sourceMappingURL=GraphRequest.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ResponseHandler = (function () {\r\n    function ResponseHandler() {\r\n    }\r\n    ResponseHandler.init = function (res, err, resContents, callback) {\r\n        if (res && res.ok) {\r\n            callback(null, resContents, res);\r\n        }\r\n        else {\r\n            if (err == null && res != null)\r\n                if (resContents != null && resContents.error != null)\r\n                    callback(ResponseHandler.buildGraphErrorFromResponseObject(resContents.error, res.status), null, res);\r\n                else\r\n                    callback(ResponseHandler.defaultGraphError(res.status), null, res);\r\n            else\r\n                callback(ResponseHandler.ParseError(err), null, res);\r\n        }\r\n    };\r\n    ResponseHandler.ParseError = function (rawErr) {\r\n        if (!rawErr) {\r\n            return ResponseHandler.defaultGraphError(-1);\r\n        }\r\n        return ResponseHandler.buildGraphErrorFromErrorObject(rawErr);\r\n    };\r\n    ResponseHandler.defaultGraphError = function (statusCode) {\r\n        return {\r\n            statusCode: statusCode,\r\n            code: null,\r\n            message: null,\r\n            requestId: null,\r\n            date: new Date(),\r\n            body: null\r\n        };\r\n    };\r\n    ResponseHandler.buildGraphErrorFromErrorObject = function (errObj) {\r\n        var error = ResponseHandler.defaultGraphError(-1);\r\n        error.body = errObj.toString();\r\n        error.message = errObj.message;\r\n        error.date = new Date();\r\n        return error;\r\n    };\r\n    ResponseHandler.buildGraphErrorFromResponseObject = function (errObj, statusCode) {\r\n        return {\r\n            statusCode: statusCode,\r\n            code: errObj.code,\r\n            message: errObj.message,\r\n            requestId: errObj.innerError[\"request-id\"],\r\n            date: new Date(errObj.innerError.date),\r\n            body: errObj\r\n        };\r\n    };\r\n    return ResponseHandler;\r\n}());\r\nexports.ResponseHandler = ResponseHandler;\r\n//# sourceMappingURL=ResponseHandler.js.map","// @flow\n\nimport { getLogger } from 'jitsi-meet-logger';\n\nimport { doGetJSON } from '../base/util';\n\nimport {\n    SET_DYNAMIC_BRANDING_DATA,\n    SET_DYNAMIC_BRANDING_FAILED,\n    SET_DYNAMIC_BRANDING_READY\n} from './actionTypes';\nimport { getDynamicBrandingUrl } from './functions';\n\nconst logger = getLogger(__filename);\n\n\n/**\n * Fetches custom branding data.\n * If there is no data or the request fails, sets the `customizationReady` flag\n * so the defaults can be displayed.\n *\n * @returns {Function}\n */\nexport function fetchCustomBrandingData() {\n    return async function(dispatch: Function, getState: Function) {\n        const state = getState();\n        const { customizationReady } = state['features/dynamic-branding'];\n\n        if (!customizationReady) {\n            const url = getDynamicBrandingUrl(state);\n\n            if (url) {\n                try {\n                    const res = await doGetJSON(url);\n\n                    return dispatch(setDynamicBrandingData(res));\n                } catch (err) {\n                    logger.error('Error fetching branding data', err);\n\n                    return dispatch(setDynamicBrandingFailed());\n                }\n            }\n\n            dispatch(setDynamicBrandingReady());\n        }\n    };\n}\n\n/**\n * Action used to set the user customizations.\n *\n * @param {Object} value - The custom data to be set.\n * @returns {Object}\n */\nfunction setDynamicBrandingData(value) {\n    return {\n        type: SET_DYNAMIC_BRANDING_DATA,\n        value\n    };\n}\n\n/**\n * Action used to signal the branding elements are ready to be displayed.\n *\n * @returns {Object}\n */\nfunction setDynamicBrandingReady() {\n    return {\n        type: SET_DYNAMIC_BRANDING_READY\n    };\n}\n\n/**\n * Action used to signal the branding request failed.\n *\n * @returns {Object}\n */\nfunction setDynamicBrandingFailed() {\n    return {\n        type: SET_DYNAMIC_BRANDING_FAILED\n    };\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array ? array.length : 0;\n  return length ? baseFlatten(array, 1) : [];\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = flatten;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar allowedAliasCharacters = exports.allowedAliasCharacters = \"\\\\w\\\\-\\\\_\\\\+\\\\*\\\\(\\\\)\\\\!#&åô’çéãí“”,\";\nvar startOfURL = exports.startOfURL = \"https?\\\\S*\";\n\nfunction getAliasesRegex() {\n  return new RegExp(\"(\" + startOfURL + \")?:([\" + allowedAliasCharacters + \"]+):\", \"g\");\n}\n\nexports.default = getAliasesRegex;","// @flow\n\nimport Logger from 'jitsi-meet-logger';\n\nimport {\n    createApiEvent,\n    sendAnalytics\n} from '../../react/features/analytics';\nimport {\n    getCurrentConference,\n    sendTones,\n    setFollowMe,\n    setPassword,\n    setSubject\n} from '../../react/features/base/conference';\nimport { overwriteConfig, getWhitelistedJSON } from '../../react/features/base/config';\nimport { toggleDialog } from '../../react/features/base/dialog/actions';\nimport { parseJWTFromURLParams } from '../../react/features/base/jwt';\nimport JitsiMeetJS, { JitsiRecordingConstants } from '../../react/features/base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../../react/features/base/media';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    pinParticipant,\n    kickParticipant,\n    raiseHand,\n    isParticipantModerator\n} from '../../react/features/base/participants';\nimport { updateSettings } from '../../react/features/base/settings';\nimport { isToggleCameraEnabled, toggleCamera } from '../../react/features/base/tracks';\nimport {\n    sendMessage,\n    setPrivateMessageRecipient,\n    toggleChat\n} from '../../react/features/chat/actions';\nimport { openChat } from '../../react/features/chat/actions.web';\nimport {\n    processExternalDeviceRequest\n} from '../../react/features/device-selection/functions';\nimport { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';\nimport { toggleE2EE } from '../../react/features/e2ee/actions';\nimport { invite } from '../../react/features/invite';\nimport {\n    selectParticipantInLargeVideo\n} from '../../react/features/large-video/actions.any';\nimport {\n    captureLargeVideoScreenshot,\n    resizeLargeVideo\n} from '../../react/features/large-video/actions.web';\nimport { toggleLobbyMode } from '../../react/features/lobby/actions';\nimport { RECORDING_TYPES } from '../../react/features/recording/constants';\nimport { getActiveSession } from '../../react/features/recording/functions';\nimport { isScreenAudioSupported } from '../../react/features/screen-share';\nimport { startScreenShareFlow, startAudioScreenShareFlow } from '../../react/features/screen-share/actions';\nimport { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';\nimport { toggleTileView, setTileView } from '../../react/features/video-layout';\nimport { muteAllParticipants } from '../../react/features/video-menu/actions';\nimport { setVideoQuality } from '../../react/features/video-quality';\nimport VirtualBackgroundDialog from '../../react/features/virtual-background/components/VirtualBackgroundDialog';\nimport { getJitsiMeetTransport } from '../transport';\n\nimport { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';\n\nconst logger = Logger.getLogger(__filename);\n\ndeclare var APP: Object;\n\n/**\n * List of the available commands.\n */\nlet commands = {};\n\n/**\n * The transport instance used for communication with external apps.\n *\n * @type {Transport}\n */\nconst transport = getJitsiMeetTransport();\n\n/**\n * The current audio availability.\n *\n * @type {boolean}\n */\nlet audioAvailable = true;\n\n/**\n * The current video availability.\n *\n * @type {boolean}\n */\nlet videoAvailable = true;\n\n/**\n * Initializes supported commands.\n *\n * @returns {void}\n */\nfunction initCommands() {\n    commands = {\n        'display-name': displayName => {\n            sendAnalytics(createApiEvent('display.name.changed'));\n            APP.conference.changeLocalDisplayName(displayName);\n        },\n        'mute-everyone': mediaType => {\n            const muteMediaType = mediaType ? mediaType : MEDIA_TYPE.AUDIO;\n\n            sendAnalytics(createApiEvent('muted-everyone'));\n            const localParticipant = getLocalParticipant(APP.store.getState());\n            const exclude = [];\n\n            if (localParticipant && isParticipantModerator(localParticipant)) {\n                exclude.push(localParticipant.id);\n            }\n\n            APP.store.dispatch(muteAllParticipants(exclude, muteMediaType));\n        },\n        'toggle-lobby': isLobbyEnabled => {\n            APP.store.dispatch(toggleLobbyMode(isLobbyEnabled));\n        },\n        'password': password => {\n            const { conference, passwordRequired }\n                = APP.store.getState()['features/base/conference'];\n\n            if (passwordRequired) {\n                sendAnalytics(createApiEvent('submit.password'));\n\n                APP.store.dispatch(setPassword(\n                    passwordRequired,\n                    passwordRequired.join,\n                    password\n                ));\n            } else {\n                sendAnalytics(createApiEvent('password.changed'));\n\n                APP.store.dispatch(setPassword(\n                    conference,\n                    conference.lock,\n                    password\n                ));\n            }\n        },\n        'pin-participant': id => {\n            logger.debug('Pin participant command received');\n            sendAnalytics(createApiEvent('participant.pinned'));\n            APP.store.dispatch(pinParticipant(id));\n        },\n        'proxy-connection-event': event => {\n            APP.conference.onProxyConnectionEvent(event);\n        },\n        'resize-large-video': (width, height) => {\n            logger.debug('Resize large video command received');\n            sendAnalytics(createApiEvent('largevideo.resized'));\n            APP.store.dispatch(resizeLargeVideo(width, height));\n        },\n        'send-tones': (options = {}) => {\n            const { duration, tones, pause } = options;\n\n            APP.store.dispatch(sendTones(tones, duration, pause));\n        },\n        'set-follow-me': value => {\n            logger.debug('Set follow me command received');\n\n            if (value) {\n                sendAnalytics(createApiEvent('follow.me.set'));\n            } else {\n                sendAnalytics(createApiEvent('follow.me.unset'));\n            }\n\n            APP.store.dispatch(setFollowMe(value));\n        },\n        'set-large-video-participant': participantId => {\n            logger.debug('Set large video participant command received');\n            sendAnalytics(createApiEvent('largevideo.participant.set'));\n            APP.store.dispatch(selectParticipantInLargeVideo(participantId));\n        },\n        'subject': subject => {\n            sendAnalytics(createApiEvent('subject.changed'));\n            APP.store.dispatch(setSubject(subject));\n        },\n        'submit-feedback': feedback => {\n            sendAnalytics(createApiEvent('submit.feedback'));\n            APP.conference.submitFeedback(feedback.score, feedback.message);\n        },\n        'toggle-audio': () => {\n            sendAnalytics(createApiEvent('toggle-audio'));\n            logger.log('Audio toggle: API command received');\n            APP.conference.toggleAudioMuted(false /* no UI */);\n        },\n        'toggle-video': () => {\n            sendAnalytics(createApiEvent('toggle-video'));\n            logger.log('Video toggle: API command received');\n            APP.conference.toggleVideoMuted(false /* no UI */);\n        },\n        'toggle-film-strip': () => {\n            sendAnalytics(createApiEvent('film.strip.toggled'));\n            APP.UI.toggleFilmstrip();\n        },\n        'toggle-camera': () => {\n            if (!isToggleCameraEnabled(APP.store.getState())) {\n                return;\n            }\n\n            APP.store.dispatch(toggleCamera());\n        },\n        'toggle-camera-mirror': () => {\n            const state = APP.store.getState();\n            const { localFlipX: currentFlipX } = state['features/base/settings'];\n\n            APP.store.dispatch(updateSettings({ localFlipX: !currentFlipX }));\n        },\n        'toggle-chat': () => {\n            sendAnalytics(createApiEvent('chat.toggled'));\n            APP.store.dispatch(toggleChat());\n        },\n        'toggle-raise-hand': () => {\n            const localParticipant = getLocalParticipant(APP.store.getState());\n\n            if (!localParticipant) {\n                return;\n            }\n            const { raisedHand } = localParticipant;\n\n            sendAnalytics(createApiEvent('raise-hand.toggled'));\n            APP.store.dispatch(raiseHand(!raisedHand));\n        },\n        'toggle-share-audio': () => {\n            sendAnalytics(createApiEvent('audio.screen.sharing.toggled'));\n            if (isScreenAudioSupported()) {\n                APP.store.dispatch(startAudioScreenShareFlow());\n\n                return;\n            }\n\n            logger.error('Audio screen sharing is not supported by the current platform!');\n        },\n\n        /**\n         * Callback to invoke when the \"toggle-share-screen\" command is received.\n         *\n         * @param {Object} options - Additional details of how to perform\n         * the action. Note this parameter is undocumented and experimental.\n         * @param {boolean} options.enable - Whether trying to enable screen\n         * sharing or to turn it off.\n         * @returns {void}\n         */\n        'toggle-share-screen': (options = {}) => {\n            sendAnalytics(createApiEvent('screen.sharing.toggled'));\n            toggleScreenSharing(options.enable);\n        },\n        'toggle-tile-view': () => {\n            sendAnalytics(createApiEvent('tile-view.toggled'));\n\n            APP.store.dispatch(toggleTileView());\n        },\n        'set-tile-view': enabled => {\n            APP.store.dispatch(setTileView(enabled));\n        },\n        'video-hangup': (showFeedbackDialog = true) => {\n            sendAnalytics(createApiEvent('video.hangup'));\n            APP.conference.hangup(showFeedbackDialog);\n        },\n        'email': email => {\n            sendAnalytics(createApiEvent('email.changed'));\n            APP.conference.changeLocalEmail(email);\n        },\n        'avatar-url': avatarUrl => {\n            sendAnalytics(createApiEvent('avatar.url.changed'));\n            APP.conference.changeLocalAvatarUrl(avatarUrl);\n        },\n        'send-chat-message': (message, to, ignorePrivacy = false) => {\n            logger.debug('Send chat message command received');\n            if (to) {\n                const participant = getParticipantById(APP.store.getState(), to);\n\n                if (participant) {\n                    APP.store.dispatch(setPrivateMessageRecipient(participant));\n                } else {\n                    logger.error(`Participant with id ${to} not found!`);\n\n                    return;\n                }\n            } else {\n                APP.store.dispatch(setPrivateMessageRecipient());\n            }\n\n            APP.store.dispatch(sendMessage(message, ignorePrivacy));\n        },\n        'send-endpoint-text-message': (to, text) => {\n            logger.debug('Send endpoint message command received');\n            try {\n                APP.conference.sendEndpointMessage(to, {\n                    name: ENDPOINT_TEXT_MESSAGE_NAME,\n                    text\n                });\n            } catch (err) {\n                logger.error('Failed sending endpoint text message', err);\n            }\n        },\n        'toggle-e2ee': enabled => {\n            logger.debug('Toggle E2EE key command received');\n            APP.store.dispatch(toggleE2EE(enabled));\n        },\n        'set-video-quality': frameHeight => {\n            logger.debug('Set video quality command received');\n            sendAnalytics(createApiEvent('set.video.quality'));\n            APP.store.dispatch(setVideoQuality(frameHeight));\n        },\n\n        'start-share-video': url => {\n            logger.debug('Share video command received');\n            sendAnalytics(createApiEvent('share.video.start'));\n            APP.store.dispatch(playSharedVideo(url));\n        },\n\n        'stop-share-video': () => {\n            logger.debug('Share video command received');\n            sendAnalytics(createApiEvent('share.video.stop'));\n            APP.store.dispatch(stopSharedVideo());\n        },\n\n        /**\n         * Starts a file recording or streaming session depending on the passed on params.\n         * For RTMP streams, `rtmpStreamKey` must be passed on. `rtmpBroadcastID` is optional.\n         * For youtube streams, `youtubeStreamKey` must be passed on. `youtubeBroadcastID` is optional.\n         * For dropbox recording, recording `mode` should be `file` and a dropbox oauth2 token must be provided.\n         * For file recording, recording `mode` should be `file` and optionally `shouldShare` could be passed on.\n         * No other params should be passed.\n         *\n         * @param { string } arg.mode - Recording mode, either `file` or `stream`.\n         * @param { string } arg.dropboxToken - Dropbox oauth2 token.\n         * @param { string } arg.rtmpStreamKey - The RTMP stream key.\n         * @param { string } arg.rtmpBroadcastID - The RTMP braodcast ID.\n         * @param { boolean } arg.shouldShare - Whether the recording should be shared with the participants or not.\n         * Only applies to certain jitsi meet deploys.\n         * @param { string } arg.youtubeStreamKey - The youtube stream key.\n         * @param { string } arg.youtubeBroadcastID - The youtube broacast ID.\n         * @returns {void}\n         */\n        'start-recording': ({\n            mode,\n            dropboxToken,\n            shouldShare,\n            rtmpStreamKey,\n            rtmpBroadcastID,\n            youtubeStreamKey,\n            youtubeBroadcastID\n        }) => {\n            const state = APP.store.getState();\n            const conference = getCurrentConference(state);\n\n            if (!conference) {\n                logger.error('Conference is not defined');\n\n                return;\n            }\n\n            if (dropboxToken && !isDropboxEnabled(state)) {\n                logger.error('Failed starting recording: dropbox is not enabled on this deployment');\n\n                return;\n            }\n\n            if (mode === JitsiRecordingConstants.mode.STREAM && !(youtubeStreamKey || rtmpStreamKey)) {\n                logger.error('Failed starting recording: missing youtube or RTMP stream key');\n\n                return;\n            }\n\n            let recordingConfig;\n\n            if (mode === JitsiRecordingConstants.mode.FILE) {\n                if (dropboxToken) {\n                    recordingConfig = {\n                        mode: JitsiRecordingConstants.mode.FILE,\n                        appData: JSON.stringify({\n                            'file_recording_metadata': {\n                                'upload_credentials': {\n                                    'service_name': RECORDING_TYPES.DROPBOX,\n                                    'token': dropboxToken\n                                }\n                            }\n                        })\n                    };\n                } else {\n                    recordingConfig = {\n                        mode: JitsiRecordingConstants.mode.FILE,\n                        appData: JSON.stringify({\n                            'file_recording_metadata': {\n                                'share': shouldShare\n                            }\n                        })\n                    };\n                }\n            } else if (mode === JitsiRecordingConstants.mode.STREAM) {\n                recordingConfig = {\n                    broadcastId: youtubeBroadcastID || rtmpBroadcastID,\n                    mode: JitsiRecordingConstants.mode.STREAM,\n                    streamId: youtubeStreamKey || rtmpStreamKey\n                };\n            } else {\n                logger.error('Invalid recording mode provided');\n\n                return;\n            }\n\n            conference.startRecording(recordingConfig);\n        },\n\n        /**\n         * Stops a recording or streaming in progress.\n         *\n         * @param {string} mode - `file` or `stream`.\n         * @returns {void}\n         */\n        'stop-recording': mode => {\n            const state = APP.store.getState();\n            const conference = getCurrentConference(state);\n\n            if (!conference) {\n                logger.error('Conference is not defined');\n\n                return;\n            }\n\n            if (![ JitsiRecordingConstants.mode.FILE, JitsiRecordingConstants.mode.STREAM ].includes(mode)) {\n                logger.error('Invalid recording mode provided!');\n\n                return;\n            }\n\n            const activeSession = getActiveSession(state, mode);\n\n            if (activeSession && activeSession.id) {\n                conference.stopRecording(activeSession.id);\n            } else {\n                logger.error('No recording or streaming session found');\n            }\n        },\n        'initiate-private-chat': participantId => {\n            const state = APP.store.getState();\n            const participant = getParticipantById(state, participantId);\n\n            if (participant) {\n                const { isOpen: isChatOpen } = state['features/chat'];\n\n                if (!isChatOpen) {\n                    APP.store.dispatch(toggleChat());\n                }\n                APP.store.dispatch(openChat(participant));\n            } else {\n                logger.error('No participant found for the given participantId');\n            }\n        },\n        'cancel-private-chat': () => {\n            APP.store.dispatch(setPrivateMessageRecipient());\n        },\n        'kick-participant': participantId => {\n            APP.store.dispatch(kickParticipant(participantId));\n        },\n        'overwrite-config': config => {\n            const whitelistedConfig = getWhitelistedJSON('config', config);\n\n            APP.store.dispatch(overwriteConfig(whitelistedConfig));\n        },\n        'toggle-virtual-background': () => {\n            APP.store.dispatch(toggleDialog(VirtualBackgroundDialog));\n        }\n    };\n    transport.on('event', ({ data, name }) => {\n        if (name && commands[name]) {\n            commands[name](...data);\n\n            return true;\n        }\n\n        return false;\n    });\n    transport.on('request', (request, callback) => {\n        const { dispatch, getState } = APP.store;\n\n        if (processExternalDeviceRequest(dispatch, getState, request, callback)) {\n            return true;\n        }\n\n        const { name } = request;\n\n        switch (name) {\n        case 'capture-largevideo-screenshot' :\n            APP.store.dispatch(captureLargeVideoScreenshot())\n                .then(dataURL => {\n                    let error;\n\n                    if (!dataURL) {\n                        error = new Error('No large video found!');\n                    }\n\n                    callback({\n                        error,\n                        dataURL\n                    });\n                });\n            break;\n        case 'invite': {\n            const { invitees } = request;\n\n            if (!Array.isArray(invitees) || invitees.length === 0) {\n                callback({\n                    error: new Error('Unexpected format of invitees')\n                });\n\n                break;\n            }\n\n            // The store should be already available because API.init is called\n            // on appWillMount action.\n            APP.store.dispatch(\n                invite(invitees, true))\n                .then(failedInvitees => {\n                    let error;\n                    let result;\n\n                    if (failedInvitees.length) {\n                        error = new Error('One or more invites failed!');\n                    } else {\n                        result = true;\n                    }\n\n                    callback({\n                        error,\n                        result\n                    });\n                });\n            break;\n        }\n        case 'is-audio-muted':\n            callback(APP.conference.isLocalAudioMuted());\n            break;\n        case 'is-video-muted':\n            callback(APP.conference.isLocalVideoMuted());\n            break;\n        case 'is-audio-available':\n            callback(audioAvailable);\n            break;\n        case 'is-video-available':\n            callback(videoAvailable);\n            break;\n        case 'is-sharing-screen':\n            callback(Boolean(APP.conference.isSharingScreen));\n            break;\n        case 'get-content-sharing-participants': {\n            const tracks = getState()['features/base/tracks'];\n            const sharingParticipantIds = tracks.filter(tr => tr.videoType === 'desktop').map(t => t.participantId);\n\n            callback({\n                sharingParticipantIds\n            });\n            break;\n        }\n        case 'get-livestream-url': {\n            const state = APP.store.getState();\n            const conference = getCurrentConference(state);\n            let livestreamUrl;\n\n            if (conference) {\n                const activeSession = getActiveSession(state, JitsiRecordingConstants.mode.STREAM);\n\n                livestreamUrl = activeSession?.liveStreamViewURL;\n            } else {\n                logger.error('Conference is not defined');\n            }\n            callback({\n                livestreamUrl\n            });\n            break;\n        }\n        case 'get-custom-avatar-backgrounds' : {\n            callback({\n                avatarBackgrounds: APP.store.getState()['features/dynamic-branding'].avatarBackgrounds\n            });\n            break;\n        }\n        default:\n            return false;\n        }\n\n        return true;\n    });\n}\n\n/**\n * Check whether the API should be enabled or not.\n *\n * @returns {boolean}\n */\nfunction shouldBeEnabled() {\n    return (\n        typeof API_ID === 'number'\n\n            // XXX Enable the API when a JSON Web Token (JWT) is specified in\n            // the location/URL because then it is very likely that the Jitsi\n            // Meet (Web) app is being used by an external/wrapping (Web) app\n            // and, consequently, the latter will need to communicate with the\n            // former. (The described logic is merely a heuristic though.)\n            || parseJWTFromURLParams());\n}\n\n/**\n * Executes on toggle-share-screen command.\n *\n * @param {boolean} [enable] - Whether this toggle is to explicitly enable or\n * disable screensharing. If not defined, the application will automatically\n * attempt to toggle between enabled and disabled. This boolean is useful for\n * explicitly setting desired screensharing state.\n * @returns {void}\n */\nfunction toggleScreenSharing(enable) {\n    if (JitsiMeetJS.isDesktopSharingEnabled()) {\n        APP.store.dispatch(startScreenShareFlow(enable));\n    }\n}\n\n/**\n * Removes sensitive data from a mouse event.\n *\n * @param {MouseEvent} event - The mouse event to sanitize.\n * @returns {Object}\n */\nfunction sanitizeMouseEvent(event: MouseEvent) {\n    const {\n        clientX,\n        clientY,\n        movementX,\n        movementY,\n        offsetX,\n        offsetY,\n        pageX,\n        pageY,\n        x,\n        y,\n        screenX,\n        screenY\n    } = event;\n\n    return {\n        clientX,\n        clientY,\n        movementX,\n        movementY,\n        offsetX,\n        offsetY,\n        pageX,\n        pageY,\n        x,\n        y,\n        screenX,\n        screenY\n    };\n}\n\n/**\n * Implements API class that communicates with external API class and provides\n * interface to access Jitsi Meet features by external applications that embed\n * Jitsi Meet.\n */\nclass API {\n    _enabled: boolean;\n\n    /**\n     * Initializes the API. Setups message event listeners that will receive\n     * information from external applications that embed Jitsi Meet. It also\n     * sends a message to the external application that API is initialized.\n     *\n     * @param {Object} options - Optional parameters.\n     * @returns {void}\n     */\n    init() {\n        if (!shouldBeEnabled()) {\n            return;\n        }\n\n        /**\n         * Current status (enabled/disabled) of API.\n         *\n         * @private\n         * @type {boolean}\n         */\n        this._enabled = true;\n\n        initCommands();\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the large video\n     * visibility changed.\n     *\n     * @param {boolean} isHidden - True if the large video is hidden and false\n     * otherwise.\n     * @returns {void}\n     */\n    notifyLargeVideoVisibilityChanged(isHidden: boolean) {\n        this._sendEvent({\n            name: 'large-video-visibility-changed',\n            isVisible: !isHidden\n        });\n    }\n\n    /**\n     * Notifies the external application (spot) that the local jitsi-participant\n     * has a status update.\n     *\n     * @param {Object} event - The message to pass onto spot.\n     * @returns {void}\n     */\n    sendProxyConnectionEvent(event: Object) {\n        this._sendEvent({\n            name: 'proxy-connection-event',\n            ...event\n        });\n    }\n\n    /**\n     * Sends event to the external application.\n     *\n     * @param {Object} event - The event to be sent.\n     * @returns {void}\n     */\n    _sendEvent(event: Object = {}) {\n        if (this._enabled) {\n            transport.sendEvent(event);\n        }\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the chat state has been updated.\n     *\n     * @param {number} unreadCount - The unread messages counter.\n     * @param {boolean} isOpen - True if the chat panel is open.\n     * @returns {void}\n     */\n    notifyChatUpdated(unreadCount: number, isOpen: boolean) {\n        this._sendEvent({\n            name: 'chat-updated',\n            unreadCount,\n            isOpen\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that message was sent.\n     *\n     * @param {string} message - Message body.\n     * @param {boolean} privateMessage - True if the message was a private message.\n     * @returns {void}\n     */\n    notifySendingChatMessage(message: string, privateMessage: boolean) {\n        this._sendEvent({\n            name: 'outgoing-message',\n            message,\n            privateMessage\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the mouse has entered inside the iframe.\n     *\n     * @param {MouseEvent} event - The mousemove event.\n     * @returns {void}\n     */\n    notifyMouseEnter(event: MouseEvent) {\n        this._sendEvent({\n            name: 'mouse-enter',\n            event: sanitizeMouseEvent(event)\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the mouse has entered inside the iframe.\n     *\n     * @param {MouseEvent} event - The mousemove event.\n     * @returns {void}\n     */\n    notifyMouseLeave(event: MouseEvent) {\n        this._sendEvent({\n            name: 'mouse-leave',\n            event: sanitizeMouseEvent(event)\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the mouse has moved inside the iframe.\n     *\n     * @param {MouseEvent} event - The mousemove event.\n     * @returns {void}\n     */\n    notifyMouseMove(event: MouseEvent) {\n        this._sendEvent({\n            name: 'mouse-move',\n            event: sanitizeMouseEvent(event)\n        });\n    }\n\n    /**\n     * Notify external application that the video quality setting has changed.\n     *\n     * @param {number} videoQuality - The video quality. The number represents the maximum height of the video streams.\n     * @returns {void}\n     */\n    notifyVideoQualityChanged(videoQuality: number) {\n        this._sendEvent({\n            name: 'video-quality-changed',\n            videoQuality\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that message was\n     * received.\n     *\n     * @param {Object} options - Object with the message properties.\n     * @returns {void}\n     */\n    notifyReceivedChatMessage(\n            { body, id, nick, privateMessage, ts }: {\n                body: *, id: string, nick: string, privateMessage: boolean, ts: *\n            } = {}) {\n        if (APP.conference.isLocalId(id)) {\n            return;\n        }\n\n        this._sendEvent({\n            name: 'incoming-message',\n            from: id,\n            message: body,\n            nick,\n            privateMessage,\n            stamp: ts\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user joined the\n     * conference.\n     *\n     * @param {string} id - User id.\n     * @param {Object} props - The display name of the user.\n     * @returns {void}\n     */\n    notifyUserJoined(id: string, props: Object) {\n        this._sendEvent({\n            name: 'participant-joined',\n            id,\n            ...props\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user left the\n     * conference.\n     *\n     * @param {string} id - User id.\n     * @returns {void}\n     */\n    notifyUserLeft(id: string) {\n        this._sendEvent({\n            name: 'participant-left',\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the user role\n     * has changed.\n     *\n     * @param {string} id - User id.\n     * @param {string} role - The new user role.\n     * @returns {void}\n     */\n    notifyUserRoleChanged(id: string, role: string) {\n        this._sendEvent({\n            name: 'participant-role-changed',\n            id,\n            role\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * avatar.\n     *\n     * @param {string} id - User id.\n     * @param {string} avatarURL - The new avatar URL of the participant.\n     * @returns {void}\n     */\n    notifyAvatarChanged(id: string, avatarURL: string) {\n        this._sendEvent({\n            name: 'avatar-changed',\n            avatarURL,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user received\n     * a text message through datachannels.\n     *\n     * @param {Object} data - The event data.\n     * @returns {void}\n     */\n    notifyEndpointTextMessageReceived(data: Object) {\n        this._sendEvent({\n            name: 'endpoint-text-message-received',\n            data\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the list of sharing participants changed.\n     *\n     * @param {Object} data - The event data.\n     * @returns {void}\n     */\n    notifySharingParticipantsChanged(data: Object) {\n        this._sendEvent({\n            name: 'content-sharing-participants-changed',\n            data\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the device list has\n     * changed.\n     *\n     * @param {Object} devices - The new device list.\n     * @returns {void}\n     */\n    notifyDeviceListChanged(devices: Object) {\n        this._sendEvent({\n            name: 'device-list-changed',\n            devices\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * nickname.\n     *\n     * @param {string} id - User id.\n     * @param {string} displayname - User nickname.\n     * @param {string} formattedDisplayName - The display name shown in Jitsi\n     * meet's UI for the user.\n     * @returns {void}\n     */\n    notifyDisplayNameChanged(\n            id: string,\n            { displayName, formattedDisplayName }: Object) {\n        this._sendEvent({\n            name: 'display-name-change',\n            displayname: displayName,\n            formattedDisplayName,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user changed their\n     * email.\n     *\n     * @param {string} id - User id.\n     * @param {string} email - The new email of the participant.\n     * @returns {void}\n     */\n    notifyEmailChanged(\n            id: string,\n            { email }: Object) {\n        this._sendEvent({\n            name: 'email-change',\n            email,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the an error has been logged.\n     *\n     * @param {string} logLevel - The message log level.\n     * @param {Array} args - Array of strings composing the log message.\n     * @returns {void}\n     */\n    notifyLog(logLevel: string, args: Array<string>) {\n        this._sendEvent({\n            name: 'log',\n            logLevel,\n            args\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the conference has\n     * been joined.\n     *\n     * @param {string} roomName - The room name.\n     * @param {string} id - The id of the local user.\n     * @param {Object} props - The display name and avatar URL of the local\n     * user.\n     * @returns {void}\n     */\n    notifyConferenceJoined(roomName: string, id: string, props: Object) {\n        this._sendEvent({\n            name: 'video-conference-joined',\n            roomName,\n            id,\n            ...props\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that local user has left the conference.\n     *\n     * @param {string} roomName - User id.\n     * @returns {void}\n     */\n    notifyConferenceLeft(roomName: string) {\n        this._sendEvent({\n            name: 'video-conference-left',\n            roomName\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that we are ready to be\n     * closed.\n     *\n     * @returns {void}\n     */\n    notifyReadyToClose() {\n        this._sendEvent({ name: 'video-ready-to-close' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that a suspend event in host computer.\n     *\n     * @returns {void}\n     */\n    notifySuspendDetected() {\n        this._sendEvent({ name: 'suspend-detected' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for audio muted status\n     * changed.\n     *\n     * @param {boolean} muted - The new muted status.\n     * @returns {void}\n     */\n    notifyAudioMutedStatusChanged(muted: boolean) {\n        this._sendEvent({\n            name: 'audio-mute-status-changed',\n            muted\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for video muted status\n     * changed.\n     *\n     * @param {boolean} muted - The new muted status.\n     * @returns {void}\n     */\n    notifyVideoMutedStatusChanged(muted: boolean) {\n        this._sendEvent({\n            name: 'video-mute-status-changed',\n            muted\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for audio availability\n     * changed.\n     *\n     * @param {boolean} available - True if available and false otherwise.\n     * @returns {void}\n     */\n    notifyAudioAvailabilityChanged(available: boolean) {\n        audioAvailable = available;\n        this._sendEvent({\n            name: 'audio-availability-changed',\n            available\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) for video available\n     * status changed.\n     *\n     * @param {boolean} available - True if available and false otherwise.\n     * @returns {void}\n     */\n    notifyVideoAvailabilityChanged(available: boolean) {\n        videoAvailable = available;\n        this._sendEvent({\n            name: 'video-availability-changed',\n            available\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the on stage\n     * participant has changed.\n     *\n     * @param {string} id - User id of the new on stage participant.\n     * @returns {void}\n     */\n    notifyOnStageParticipantChanged(id: string) {\n        this._sendEvent({\n            name: 'on-stage-participant-changed',\n            id\n        });\n    }\n\n    /**\n     * Notify external application of an unexpected camera-related error having\n     * occurred.\n     *\n     * @param {string} type - The type of the camera error.\n     * @param {string} message - Additional information about the error.\n     * @returns {void}\n     */\n    notifyOnCameraError(type: string, message: string) {\n        this._sendEvent({\n            name: 'camera-error',\n            type,\n            message\n        });\n    }\n\n    /**\n     * Notify external application of an unexpected mic-related error having\n     * occurred.\n     *\n     * @param {string} type - The type of the mic error.\n     * @param {string} message - Additional information about the error.\n     * @returns {void}\n     */\n    notifyOnMicError(type: string, message: string) {\n        this._sendEvent({\n            name: 'mic-error',\n            type,\n            message\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that conference feedback\n     * has been submitted. Intended to be used in conjunction with the\n     * submit-feedback command to get notified if feedback was submitted.\n     *\n     * @param {string} error - A failure message, if any.\n     * @returns {void}\n     */\n    notifyFeedbackSubmitted(error: string) {\n        this._sendEvent({\n            name: 'feedback-submitted',\n            error\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the feedback prompt\n     * has been displayed.\n     *\n     * @returns {void}\n     */\n    notifyFeedbackPromptDisplayed() {\n        this._sendEvent({ name: 'feedback-prompt-displayed' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the display\n     * configuration of the filmstrip has been changed.\n     *\n     * @param {boolean} visible - Whether or not the filmstrip has been set to\n     * be displayed or hidden.\n     * @returns {void}\n     */\n    notifyFilmstripDisplayChanged(visible: boolean) {\n        this._sendEvent({\n            name: 'filmstrip-display-changed',\n            visible\n        });\n    }\n\n    /**\n     * Notify external application of a participant, remote or local, being\n     * removed from the conference by another participant.\n     *\n     * @param {string} kicked - The ID of the participant removed from the\n     * conference.\n     * @param {string} kicker - The ID of the participant that removed the\n     * other participant.\n     * @returns {void}\n     */\n    notifyKickedOut(kicked: Object, kicker: Object) {\n        this._sendEvent({\n            name: 'participant-kicked-out',\n            kicked,\n            kicker\n        });\n    }\n\n    /**\n     * Notify external application of the current meeting requiring a password\n     * to join.\n     *\n     * @returns {void}\n     */\n    notifyOnPasswordRequired() {\n        this._sendEvent({ name: 'password-required' });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the screen sharing\n     * has been turned on/off.\n     *\n     * @param {boolean} on - True if screen sharing is enabled.\n     * @param {Object} details - Additional information about the screen\n     * sharing.\n     * @param {string} details.sourceType - Type of device or window the screen\n     * share is capturing.\n     * @returns {void}\n     */\n    notifyScreenSharingStatusChanged(on: boolean, details: Object) {\n        this._sendEvent({\n            name: 'screen-sharing-status-changed',\n            on,\n            details\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the dominant speaker\n     * has been turned on/off.\n     *\n     * @param {string} id - Id of the dominant participant.\n     * @returns {void}\n     */\n    notifyDominantSpeakerChanged(id: string) {\n        this._sendEvent({\n            name: 'dominant-speaker-changed',\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the conference\n     * changed their subject.\n     *\n     * @param {string} subject - Conference subject.\n     * @returns {void}\n     */\n    notifySubjectChanged(subject: string) {\n        this._sendEvent({\n            name: 'subject-change',\n            subject\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that tile view has been\n     * entered or exited.\n     *\n     * @param {string} enabled - True if tile view is currently displayed, false\n     * otherwise.\n     * @returns {void}\n     */\n    notifyTileViewChanged(enabled: boolean) {\n        this._sendEvent({\n            name: 'tile-view-changed',\n            enabled\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that the localStorage has changed.\n     *\n     * @param {string} localStorageContent - The new localStorageContent.\n     * @returns {void}\n     */\n    notifyLocalStorageChanged(localStorageContent: string) {\n        this._sendEvent({\n            name: 'local-storage-changed',\n            localStorageContent\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that user updated their hand raised.\n     *\n     * @param {string} id - User id.\n     * @param {boolean} handRaised - Whether user has raised hand.\n     * @returns {void}\n     */\n    notifyRaiseHandUpdated(id: string, handRaised: boolean) {\n        this._sendEvent({\n            name: 'raise-hand-updated',\n            handRaised,\n            id\n        });\n    }\n\n    /**\n     * Notify external application (if API is enabled) that recording has started or stopped.\n     *\n     * @param {boolean} on - True if recording is on, false otherwise.\n     * @param {string} mode - Stream or file.\n     * @param {string} error - Error type or null if success.\n     * @returns {void}\n     */\n    notifyRecordingStatusChanged(on: boolean, mode: string, error?: string) {\n        this._sendEvent({\n            name: 'recording-status-changed',\n            on,\n            mode,\n            error\n        });\n    }\n\n    /**\n     * Disposes the allocated resources.\n     *\n     * @returns {void}\n     */\n    dispose() {\n        if (this._enabled) {\n            this._enabled = false;\n        }\n    }\n}\n\nexport default new API();\n","// Generated by CoffeeScript 1.10.0\nvar adjacency_graphs;\n\nadjacency_graphs = {\n  qwerty: {\n    \"!\": [\"`~\", null, null, \"2@\", \"qQ\", null],\n    \"\\\"\": [\";:\", \"[{\", \"]}\", null, null, \"/?\"],\n    \"#\": [\"2@\", null, null, \"4$\", \"eE\", \"wW\"],\n    \"$\": [\"3#\", null, null, \"5%\", \"rR\", \"eE\"],\n    \"%\": [\"4$\", null, null, \"6^\", \"tT\", \"rR\"],\n    \"&\": [\"6^\", null, null, \"8*\", \"uU\", \"yY\"],\n    \"'\": [\";:\", \"[{\", \"]}\", null, null, \"/?\"],\n    \"(\": [\"8*\", null, null, \"0)\", \"oO\", \"iI\"],\n    \")\": [\"9(\", null, null, \"-_\", \"pP\", \"oO\"],\n    \"*\": [\"7&\", null, null, \"9(\", \"iI\", \"uU\"],\n    \"+\": [\"-_\", null, null, null, \"]}\", \"[{\"],\n    \",\": [\"mM\", \"kK\", \"lL\", \".>\", null, null],\n    \"-\": [\"0)\", null, null, \"=+\", \"[{\", \"pP\"],\n    \".\": [\",<\", \"lL\", \";:\", \"/?\", null, null],\n    \"/\": [\".>\", \";:\", \"'\\\"\", null, null, null],\n    \"0\": [\"9(\", null, null, \"-_\", \"pP\", \"oO\"],\n    \"1\": [\"`~\", null, null, \"2@\", \"qQ\", null],\n    \"2\": [\"1!\", null, null, \"3#\", \"wW\", \"qQ\"],\n    \"3\": [\"2@\", null, null, \"4$\", \"eE\", \"wW\"],\n    \"4\": [\"3#\", null, null, \"5%\", \"rR\", \"eE\"],\n    \"5\": [\"4$\", null, null, \"6^\", \"tT\", \"rR\"],\n    \"6\": [\"5%\", null, null, \"7&\", \"yY\", \"tT\"],\n    \"7\": [\"6^\", null, null, \"8*\", \"uU\", \"yY\"],\n    \"8\": [\"7&\", null, null, \"9(\", \"iI\", \"uU\"],\n    \"9\": [\"8*\", null, null, \"0)\", \"oO\", \"iI\"],\n    \":\": [\"lL\", \"pP\", \"[{\", \"'\\\"\", \"/?\", \".>\"],\n    \";\": [\"lL\", \"pP\", \"[{\", \"'\\\"\", \"/?\", \".>\"],\n    \"<\": [\"mM\", \"kK\", \"lL\", \".>\", null, null],\n    \"=\": [\"-_\", null, null, null, \"]}\", \"[{\"],\n    \">\": [\",<\", \"lL\", \";:\", \"/?\", null, null],\n    \"?\": [\".>\", \";:\", \"'\\\"\", null, null, null],\n    \"@\": [\"1!\", null, null, \"3#\", \"wW\", \"qQ\"],\n    \"A\": [null, \"qQ\", \"wW\", \"sS\", \"zZ\", null],\n    \"B\": [\"vV\", \"gG\", \"hH\", \"nN\", null, null],\n    \"C\": [\"xX\", \"dD\", \"fF\", \"vV\", null, null],\n    \"D\": [\"sS\", \"eE\", \"rR\", \"fF\", \"cC\", \"xX\"],\n    \"E\": [\"wW\", \"3#\", \"4$\", \"rR\", \"dD\", \"sS\"],\n    \"F\": [\"dD\", \"rR\", \"tT\", \"gG\", \"vV\", \"cC\"],\n    \"G\": [\"fF\", \"tT\", \"yY\", \"hH\", \"bB\", \"vV\"],\n    \"H\": [\"gG\", \"yY\", \"uU\", \"jJ\", \"nN\", \"bB\"],\n    \"I\": [\"uU\", \"8*\", \"9(\", \"oO\", \"kK\", \"jJ\"],\n    \"J\": [\"hH\", \"uU\", \"iI\", \"kK\", \"mM\", \"nN\"],\n    \"K\": [\"jJ\", \"iI\", \"oO\", \"lL\", \",<\", \"mM\"],\n    \"L\": [\"kK\", \"oO\", \"pP\", \";:\", \".>\", \",<\"],\n    \"M\": [\"nN\", \"jJ\", \"kK\", \",<\", null, null],\n    \"N\": [\"bB\", \"hH\", \"jJ\", \"mM\", null, null],\n    \"O\": [\"iI\", \"9(\", \"0)\", \"pP\", \"lL\", \"kK\"],\n    \"P\": [\"oO\", \"0)\", \"-_\", \"[{\", \";:\", \"lL\"],\n    \"Q\": [null, \"1!\", \"2@\", \"wW\", \"aA\", null],\n    \"R\": [\"eE\", \"4$\", \"5%\", \"tT\", \"fF\", \"dD\"],\n    \"S\": [\"aA\", \"wW\", \"eE\", \"dD\", \"xX\", \"zZ\"],\n    \"T\": [\"rR\", \"5%\", \"6^\", \"yY\", \"gG\", \"fF\"],\n    \"U\": [\"yY\", \"7&\", \"8*\", \"iI\", \"jJ\", \"hH\"],\n    \"V\": [\"cC\", \"fF\", \"gG\", \"bB\", null, null],\n    \"W\": [\"qQ\", \"2@\", \"3#\", \"eE\", \"sS\", \"aA\"],\n    \"X\": [\"zZ\", \"sS\", \"dD\", \"cC\", null, null],\n    \"Y\": [\"tT\", \"6^\", \"7&\", \"uU\", \"hH\", \"gG\"],\n    \"Z\": [null, \"aA\", \"sS\", \"xX\", null, null],\n    \"[\": [\"pP\", \"-_\", \"=+\", \"]}\", \"'\\\"\", \";:\"],\n    \"\\\\\": [\"]}\", null, null, null, null, null],\n    \"]\": [\"[{\", \"=+\", null, \"\\\\|\", null, \"'\\\"\"],\n    \"^\": [\"5%\", null, null, \"7&\", \"yY\", \"tT\"],\n    \"_\": [\"0)\", null, null, \"=+\", \"[{\", \"pP\"],\n    \"`\": [null, null, null, \"1!\", null, null],\n    \"a\": [null, \"qQ\", \"wW\", \"sS\", \"zZ\", null],\n    \"b\": [\"vV\", \"gG\", \"hH\", \"nN\", null, null],\n    \"c\": [\"xX\", \"dD\", \"fF\", \"vV\", null, null],\n    \"d\": [\"sS\", \"eE\", \"rR\", \"fF\", \"cC\", \"xX\"],\n    \"e\": [\"wW\", \"3#\", \"4$\", \"rR\", \"dD\", \"sS\"],\n    \"f\": [\"dD\", \"rR\", \"tT\", \"gG\", \"vV\", \"cC\"],\n    \"g\": [\"fF\", \"tT\", \"yY\", \"hH\", \"bB\", \"vV\"],\n    \"h\": [\"gG\", \"yY\", \"uU\", \"jJ\", \"nN\", \"bB\"],\n    \"i\": [\"uU\", \"8*\", \"9(\", \"oO\", \"kK\", \"jJ\"],\n    \"j\": [\"hH\", \"uU\", \"iI\", \"kK\", \"mM\", \"nN\"],\n    \"k\": [\"jJ\", \"iI\", \"oO\", \"lL\", \",<\", \"mM\"],\n    \"l\": [\"kK\", \"oO\", \"pP\", \";:\", \".>\", \",<\"],\n    \"m\": [\"nN\", \"jJ\", \"kK\", \",<\", null, null],\n    \"n\": [\"bB\", \"hH\", \"jJ\", \"mM\", null, null],\n    \"o\": [\"iI\", \"9(\", \"0)\", \"pP\", \"lL\", \"kK\"],\n    \"p\": [\"oO\", \"0)\", \"-_\", \"[{\", \";:\", \"lL\"],\n    \"q\": [null, \"1!\", \"2@\", \"wW\", \"aA\", null],\n    \"r\": [\"eE\", \"4$\", \"5%\", \"tT\", \"fF\", \"dD\"],\n    \"s\": [\"aA\", \"wW\", \"eE\", \"dD\", \"xX\", \"zZ\"],\n    \"t\": [\"rR\", \"5%\", \"6^\", \"yY\", \"gG\", \"fF\"],\n    \"u\": [\"yY\", \"7&\", \"8*\", \"iI\", \"jJ\", \"hH\"],\n    \"v\": [\"cC\", \"fF\", \"gG\", \"bB\", null, null],\n    \"w\": [\"qQ\", \"2@\", \"3#\", \"eE\", \"sS\", \"aA\"],\n    \"x\": [\"zZ\", \"sS\", \"dD\", \"cC\", null, null],\n    \"y\": [\"tT\", \"6^\", \"7&\", \"uU\", \"hH\", \"gG\"],\n    \"z\": [null, \"aA\", \"sS\", \"xX\", null, null],\n    \"{\": [\"pP\", \"-_\", \"=+\", \"]}\", \"'\\\"\", \";:\"],\n    \"|\": [\"]}\", null, null, null, null, null],\n    \"}\": [\"[{\", \"=+\", null, \"\\\\|\", null, \"'\\\"\"],\n    \"~\": [null, null, null, \"1!\", null, null]\n  },\n  dvorak: {\n    \"!\": [\"`~\", null, null, \"2@\", \"'\\\"\", null],\n    \"\\\"\": [null, \"1!\", \"2@\", \",<\", \"aA\", null],\n    \"#\": [\"2@\", null, null, \"4$\", \".>\", \",<\"],\n    \"$\": [\"3#\", null, null, \"5%\", \"pP\", \".>\"],\n    \"%\": [\"4$\", null, null, \"6^\", \"yY\", \"pP\"],\n    \"&\": [\"6^\", null, null, \"8*\", \"gG\", \"fF\"],\n    \"'\": [null, \"1!\", \"2@\", \",<\", \"aA\", null],\n    \"(\": [\"8*\", null, null, \"0)\", \"rR\", \"cC\"],\n    \")\": [\"9(\", null, null, \"[{\", \"lL\", \"rR\"],\n    \"*\": [\"7&\", null, null, \"9(\", \"cC\", \"gG\"],\n    \"+\": [\"/?\", \"]}\", null, \"\\\\|\", null, \"-_\"],\n    \",\": [\"'\\\"\", \"2@\", \"3#\", \".>\", \"oO\", \"aA\"],\n    \"-\": [\"sS\", \"/?\", \"=+\", null, null, \"zZ\"],\n    \".\": [\",<\", \"3#\", \"4$\", \"pP\", \"eE\", \"oO\"],\n    \"/\": [\"lL\", \"[{\", \"]}\", \"=+\", \"-_\", \"sS\"],\n    \"0\": [\"9(\", null, null, \"[{\", \"lL\", \"rR\"],\n    \"1\": [\"`~\", null, null, \"2@\", \"'\\\"\", null],\n    \"2\": [\"1!\", null, null, \"3#\", \",<\", \"'\\\"\"],\n    \"3\": [\"2@\", null, null, \"4$\", \".>\", \",<\"],\n    \"4\": [\"3#\", null, null, \"5%\", \"pP\", \".>\"],\n    \"5\": [\"4$\", null, null, \"6^\", \"yY\", \"pP\"],\n    \"6\": [\"5%\", null, null, \"7&\", \"fF\", \"yY\"],\n    \"7\": [\"6^\", null, null, \"8*\", \"gG\", \"fF\"],\n    \"8\": [\"7&\", null, null, \"9(\", \"cC\", \"gG\"],\n    \"9\": [\"8*\", null, null, \"0)\", \"rR\", \"cC\"],\n    \":\": [null, \"aA\", \"oO\", \"qQ\", null, null],\n    \";\": [null, \"aA\", \"oO\", \"qQ\", null, null],\n    \"<\": [\"'\\\"\", \"2@\", \"3#\", \".>\", \"oO\", \"aA\"],\n    \"=\": [\"/?\", \"]}\", null, \"\\\\|\", null, \"-_\"],\n    \">\": [\",<\", \"3#\", \"4$\", \"pP\", \"eE\", \"oO\"],\n    \"?\": [\"lL\", \"[{\", \"]}\", \"=+\", \"-_\", \"sS\"],\n    \"@\": [\"1!\", null, null, \"3#\", \",<\", \"'\\\"\"],\n    \"A\": [null, \"'\\\"\", \",<\", \"oO\", \";:\", null],\n    \"B\": [\"xX\", \"dD\", \"hH\", \"mM\", null, null],\n    \"C\": [\"gG\", \"8*\", \"9(\", \"rR\", \"tT\", \"hH\"],\n    \"D\": [\"iI\", \"fF\", \"gG\", \"hH\", \"bB\", \"xX\"],\n    \"E\": [\"oO\", \".>\", \"pP\", \"uU\", \"jJ\", \"qQ\"],\n    \"F\": [\"yY\", \"6^\", \"7&\", \"gG\", \"dD\", \"iI\"],\n    \"G\": [\"fF\", \"7&\", \"8*\", \"cC\", \"hH\", \"dD\"],\n    \"H\": [\"dD\", \"gG\", \"cC\", \"tT\", \"mM\", \"bB\"],\n    \"I\": [\"uU\", \"yY\", \"fF\", \"dD\", \"xX\", \"kK\"],\n    \"J\": [\"qQ\", \"eE\", \"uU\", \"kK\", null, null],\n    \"K\": [\"jJ\", \"uU\", \"iI\", \"xX\", null, null],\n    \"L\": [\"rR\", \"0)\", \"[{\", \"/?\", \"sS\", \"nN\"],\n    \"M\": [\"bB\", \"hH\", \"tT\", \"wW\", null, null],\n    \"N\": [\"tT\", \"rR\", \"lL\", \"sS\", \"vV\", \"wW\"],\n    \"O\": [\"aA\", \",<\", \".>\", \"eE\", \"qQ\", \";:\"],\n    \"P\": [\".>\", \"4$\", \"5%\", \"yY\", \"uU\", \"eE\"],\n    \"Q\": [\";:\", \"oO\", \"eE\", \"jJ\", null, null],\n    \"R\": [\"cC\", \"9(\", \"0)\", \"lL\", \"nN\", \"tT\"],\n    \"S\": [\"nN\", \"lL\", \"/?\", \"-_\", \"zZ\", \"vV\"],\n    \"T\": [\"hH\", \"cC\", \"rR\", \"nN\", \"wW\", \"mM\"],\n    \"U\": [\"eE\", \"pP\", \"yY\", \"iI\", \"kK\", \"jJ\"],\n    \"V\": [\"wW\", \"nN\", \"sS\", \"zZ\", null, null],\n    \"W\": [\"mM\", \"tT\", \"nN\", \"vV\", null, null],\n    \"X\": [\"kK\", \"iI\", \"dD\", \"bB\", null, null],\n    \"Y\": [\"pP\", \"5%\", \"6^\", \"fF\", \"iI\", \"uU\"],\n    \"Z\": [\"vV\", \"sS\", \"-_\", null, null, null],\n    \"[\": [\"0)\", null, null, \"]}\", \"/?\", \"lL\"],\n    \"\\\\\": [\"=+\", null, null, null, null, null],\n    \"]\": [\"[{\", null, null, null, \"=+\", \"/?\"],\n    \"^\": [\"5%\", null, null, \"7&\", \"fF\", \"yY\"],\n    \"_\": [\"sS\", \"/?\", \"=+\", null, null, \"zZ\"],\n    \"`\": [null, null, null, \"1!\", null, null],\n    \"a\": [null, \"'\\\"\", \",<\", \"oO\", \";:\", null],\n    \"b\": [\"xX\", \"dD\", \"hH\", \"mM\", null, null],\n    \"c\": [\"gG\", \"8*\", \"9(\", \"rR\", \"tT\", \"hH\"],\n    \"d\": [\"iI\", \"fF\", \"gG\", \"hH\", \"bB\", \"xX\"],\n    \"e\": [\"oO\", \".>\", \"pP\", \"uU\", \"jJ\", \"qQ\"],\n    \"f\": [\"yY\", \"6^\", \"7&\", \"gG\", \"dD\", \"iI\"],\n    \"g\": [\"fF\", \"7&\", \"8*\", \"cC\", \"hH\", \"dD\"],\n    \"h\": [\"dD\", \"gG\", \"cC\", \"tT\", \"mM\", \"bB\"],\n    \"i\": [\"uU\", \"yY\", \"fF\", \"dD\", \"xX\", \"kK\"],\n    \"j\": [\"qQ\", \"eE\", \"uU\", \"kK\", null, null],\n    \"k\": [\"jJ\", \"uU\", \"iI\", \"xX\", null, null],\n    \"l\": [\"rR\", \"0)\", \"[{\", \"/?\", \"sS\", \"nN\"],\n    \"m\": [\"bB\", \"hH\", \"tT\", \"wW\", null, null],\n    \"n\": [\"tT\", \"rR\", \"lL\", \"sS\", \"vV\", \"wW\"],\n    \"o\": [\"aA\", \",<\", \".>\", \"eE\", \"qQ\", \";:\"],\n    \"p\": [\".>\", \"4$\", \"5%\", \"yY\", \"uU\", \"eE\"],\n    \"q\": [\";:\", \"oO\", \"eE\", \"jJ\", null, null],\n    \"r\": [\"cC\", \"9(\", \"0)\", \"lL\", \"nN\", \"tT\"],\n    \"s\": [\"nN\", \"lL\", \"/?\", \"-_\", \"zZ\", \"vV\"],\n    \"t\": [\"hH\", \"cC\", \"rR\", \"nN\", \"wW\", \"mM\"],\n    \"u\": [\"eE\", \"pP\", \"yY\", \"iI\", \"kK\", \"jJ\"],\n    \"v\": [\"wW\", \"nN\", \"sS\", \"zZ\", null, null],\n    \"w\": [\"mM\", \"tT\", \"nN\", \"vV\", null, null],\n    \"x\": [\"kK\", \"iI\", \"dD\", \"bB\", null, null],\n    \"y\": [\"pP\", \"5%\", \"6^\", \"fF\", \"iI\", \"uU\"],\n    \"z\": [\"vV\", \"sS\", \"-_\", null, null, null],\n    \"{\": [\"0)\", null, null, \"]}\", \"/?\", \"lL\"],\n    \"|\": [\"=+\", null, null, null, null, null],\n    \"}\": [\"[{\", null, null, null, \"=+\", \"/?\"],\n    \"~\": [null, null, null, \"1!\", null, null]\n  },\n  keypad: {\n    \"*\": [\"/\", null, null, null, \"-\", \"+\", \"9\", \"8\"],\n    \"+\": [\"9\", \"*\", \"-\", null, null, null, null, \"6\"],\n    \"-\": [\"*\", null, null, null, null, null, \"+\", \"9\"],\n    \".\": [\"0\", \"2\", \"3\", null, null, null, null, null],\n    \"/\": [null, null, null, null, \"*\", \"9\", \"8\", \"7\"],\n    \"0\": [null, \"1\", \"2\", \"3\", \".\", null, null, null],\n    \"1\": [null, null, \"4\", \"5\", \"2\", \"0\", null, null],\n    \"2\": [\"1\", \"4\", \"5\", \"6\", \"3\", \".\", \"0\", null],\n    \"3\": [\"2\", \"5\", \"6\", null, null, null, \".\", \"0\"],\n    \"4\": [null, null, \"7\", \"8\", \"5\", \"2\", \"1\", null],\n    \"5\": [\"4\", \"7\", \"8\", \"9\", \"6\", \"3\", \"2\", \"1\"],\n    \"6\": [\"5\", \"8\", \"9\", \"+\", null, null, \"3\", \"2\"],\n    \"7\": [null, null, null, \"/\", \"8\", \"5\", \"4\", null],\n    \"8\": [\"7\", null, \"/\", \"*\", \"9\", \"6\", \"5\", \"4\"],\n    \"9\": [\"8\", \"/\", \"*\", \"-\", \"+\", null, \"6\", \"5\"]\n  },\n  mac_keypad: {\n    \"*\": [\"/\", null, null, null, null, null, \"-\", \"9\"],\n    \"+\": [\"6\", \"9\", \"-\", null, null, null, null, \"3\"],\n    \"-\": [\"9\", \"/\", \"*\", null, null, null, \"+\", \"6\"],\n    \".\": [\"0\", \"2\", \"3\", null, null, null, null, null],\n    \"/\": [\"=\", null, null, null, \"*\", \"-\", \"9\", \"8\"],\n    \"0\": [null, \"1\", \"2\", \"3\", \".\", null, null, null],\n    \"1\": [null, null, \"4\", \"5\", \"2\", \"0\", null, null],\n    \"2\": [\"1\", \"4\", \"5\", \"6\", \"3\", \".\", \"0\", null],\n    \"3\": [\"2\", \"5\", \"6\", \"+\", null, null, \".\", \"0\"],\n    \"4\": [null, null, \"7\", \"8\", \"5\", \"2\", \"1\", null],\n    \"5\": [\"4\", \"7\", \"8\", \"9\", \"6\", \"3\", \"2\", \"1\"],\n    \"6\": [\"5\", \"8\", \"9\", \"-\", \"+\", null, \"3\", \"2\"],\n    \"7\": [null, null, null, \"=\", \"8\", \"5\", \"4\", null],\n    \"8\": [\"7\", null, \"=\", \"/\", \"9\", \"6\", \"5\", \"4\"],\n    \"9\": [\"8\", \"=\", \"/\", \"*\", \"-\", \"+\", \"6\", \"5\"],\n    \"=\": [null, null, null, null, \"/\", \"9\", \"8\", \"7\"]\n  }\n};\n\nmodule.exports = adjacency_graphs;\n\n//# sourceMappingURL=adjacency_graphs.js.map\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n';\nimport { Icon } from '../../../icons';\nimport { Tooltip } from '../../../tooltip';\n\n/**\n * The type of the React {@code Component} props of {@link BaseIndicator}.\n */\ntype Props = {\n\n    /**\n     * Additional CSS class names to set on the icon container.\n     */\n    className: string,\n\n    /**\n     * The icon component to use.\n     */\n    icon: Object,\n\n    /**\n     * The CSS classnames to set on the icon element of the component.\n    */\n    iconClassName: string,\n\n    /**\n     * Id of the icon to be rendered.\n     */\n    iconId?: string,\n\n    /**\n     * The font size for the icon.\n     */\n    iconSize: string,\n\n    /**\n     * The ID attribute to set on the root element of the component.\n     */\n    id: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * The translation key to use for displaying a tooltip when hovering over\n     * the component.\n     */\n    tooltipKey: string,\n\n    /**\n     * From which side of the indicator the tooltip should appear from,\n     * defaulting to \"top\".\n     */\n    tooltipPosition: string\n};\n\n/**\n * React {@code Component} for showing an icon with a tooltip.\n *\n * @extends Component\n */\nclass BaseIndicator extends Component<Props> {\n    /**\n     * Default values for {@code BaseIndicator} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        className: '',\n        id: '',\n        tooltipPosition: 'top'\n    };\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            className,\n            icon,\n            iconClassName,\n            iconId,\n            iconSize,\n            id,\n            t,\n            tooltipKey,\n            tooltipPosition\n        } = this.props;\n        const iconContainerClassName = `indicator-icon-container ${className}`;\n        const style = {};\n\n        if (iconSize) {\n            style.fontSize = iconSize;\n        }\n\n        return (\n            <div className = 'indicator-container'>\n                <Tooltip\n                    content = { t(tooltipKey) }\n                    position = { tooltipPosition }>\n                    <span\n                        className = { iconContainerClassName }\n                        id = { id }>\n                        <Icon\n                            className = { iconClassName }\n                            id = { iconId }\n                            src = { icon }\n                            style = { style } />\n                    </span>\n                </Tooltip>\n            </div>\n        );\n    }\n}\n\nexport default translate(BaseIndicator);\n","/* @flow */\n\nimport Button from '@atlaskit/button/standard-button';\nimport React, { Component } from 'react';\n\ntype Props = {\n\n    /**\n     * React Elements to display within the component.\n     */\n    children: React$Node | Object,\n\n    /**\n     * Handler called when the user presses the button.\n     */\n    onValueChange: Function\n};\n\n/**\n * Renders a button.\n */\nexport default class ButtonImpl extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { onValueChange } = this.props;\n\n        return (\n            <Button\n                appearance = 'primary'\n                onClick = { onValueChange }\n                type = 'button'>\n                { this.props.children }\n            </Button>\n        );\n    }\n}\n","import React, { Component } from 'react';\n\n/**\n * Implements a React/Web {@link Component} for displaying image\n * in order to facilitate cross-platform source code.\n *\n * @extends Component\n */\nexport default class Image extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return React.createElement('img', this.props);\n    }\n}\n","// @flow\n\nimport punycode from 'punycode';\nimport React, { Component } from 'react';\nimport ReactLinkify from 'react-linkify';\n\ntype Props = {\n\n    /**\n     * The children of the component.\n     */\n    children: React$Node\n};\n\n/**\n * Implements a react wrapper for the react-linkify component.\n */\nexport default class Linkify extends Component<Props> {\n    /**\n     * Implements {@Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <ReactLinkify\n                componentDecorator = { this._componentDecorator }>\n                { this.props.children }\n            </ReactLinkify>\n        );\n    }\n\n    /**\n     * Implements a component decorator for react-linkify.\n     *\n     * @param {string} decoratedHref - The href src.\n     * @param {string} decoratedText - The link text.\n     * @param {string} key - The component key.\n     * @returns {React$Node}\n     */\n    _componentDecorator(decoratedHref: string, decoratedText: string, key: number) {\n        return (\n            <a\n                href = { decoratedHref }\n                key = { key }\n                rel = 'noopener noreferrer'\n                target = '_blank'>\n                { punycode.toASCII(decoratedText) }\n            </a>\n        );\n    }\n}\n","import React, { Component } from 'react';\n\n/**\n * Implements a React/Web {@link Component} for displaying text similar to React\n * Native's {@code Text} in order to facilitate cross-platform source code.\n *\n * @extends Component\n */\nexport default class Text extends Component {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return React.createElement('span', this.props);\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport {\n    getLocalizedDateFormatter,\n    getLocalizedDurationFormatter,\n    translate\n} from '../../../i18n';\nimport { Icon, IconTrash } from '../../../icons';\n\nimport Container from './Container';\nimport Text from './Text';\n\ntype Props = {\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Indicates if the URL should be hidden or not.\n     */\n    hideURL: boolean,\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: Function,\n\n    /**\n     * Rendered when the list is empty. Should be a rendered element.\n     */\n    listEmptyComponent: Object,\n\n    /**\n     * An array of meetings.\n     */\n    meetings: Array<Object>,\n\n    /**\n     * Handler for deleting an item.\n     */\n    onItemDelete?: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Generates a date string for a given date.\n *\n * @param {Object} date - The date.\n * @private\n * @returns {string}\n */\nfunction _toDateString(date) {\n    return getLocalizedDateFormatter(date).format('ll');\n}\n\n\n/**\n * Generates a time (interval) string for a given times.\n *\n * @param {Array<Date>} times - Array of times.\n * @private\n * @returns {string}\n */\nfunction _toTimeString(times) {\n    if (times && times.length > 0) {\n        return (\n            times\n                .map(time => getLocalizedDateFormatter(time).format('LT'))\n                .join(' - '));\n    }\n\n    return undefined;\n}\n\n/**\n * Implements a React/Web {@link Component} for displaying a list with\n * meetings.\n *\n * @extends Component\n */\nclass MeetingsList extends Component<Props> {\n    /**\n     * Constructor of the MeetingsList component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onPress = this._onPress.bind(this);\n        this._renderItem = this._renderItem.bind(this);\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {React.ReactNode}\n     */\n    render() {\n        const { listEmptyComponent, meetings, t } = this.props;\n\n        /**\n         * If there are no recent meetings we don't want to display anything\n         */\n        if (meetings) {\n            return (\n                <Container\n                    aria-label = { t('welcomepage.recentList') }\n                    className = 'meetings-list'\n                    role = 'menu'\n                    tabIndex = '-1'>\n                    {\n                        meetings.length === 0\n                            ? listEmptyComponent\n                            : meetings.map(this._renderItem)\n                    }\n                </Container>\n            );\n        }\n\n        return null;\n    }\n\n    _onPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onPress callback of the items.\n     *\n     * @param {string} url - The URL of the item to navigate to.\n     * @private\n     * @returns {Function}\n     */\n    _onPress(url) {\n        const { disabled, onPress } = this.props;\n\n        if (!disabled && url && typeof onPress === 'function') {\n            return () => onPress(url);\n        }\n\n        return null;\n    }\n\n    _onKeyPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onPress callback of the items.\n     *\n     * @param {string} url - The URL of the item to navigate to.\n     * @private\n     * @returns {Function}\n     */\n    _onKeyPress(url) {\n        const { disabled, onPress } = this.props;\n\n        if (!disabled && url && typeof onPress === 'function') {\n            return e => {\n                if (e.key === ' ' || e.key === 'Enter') {\n                    onPress(url);\n                }\n            };\n        }\n\n        return null;\n    }\n\n    _onDelete: Object => Function;\n\n    /**\n     * Returns a function that is used on the onDelete callback.\n     *\n     * @param {Object} item - The item to be deleted.\n     * @private\n     * @returns {Function}\n     */\n    _onDelete(item) {\n        const { onItemDelete } = this.props;\n\n        return evt => {\n            evt.stopPropagation();\n\n            onItemDelete && onItemDelete(item);\n        };\n    }\n\n    _onDeleteKeyPress: Object => Function;\n\n    /**\n     * Returns a function that is used on the onDelete keypress callback.\n     *\n     * @param {Object} item - The item to be deleted.\n     * @private\n     * @returns {Function}\n     */\n    _onDeleteKeyPress(item) {\n        const { onItemDelete } = this.props;\n\n        return e => {\n            if (onItemDelete && (e.key === ' ' || e.key === 'Enter')) {\n                e.preventDefault();\n                e.stopPropagation();\n                onItemDelete(item);\n            }\n        };\n    }\n\n    _renderItem: (Object, number) => React$Node;\n\n    /**\n     * Renders an item for the list.\n     *\n     * @param {Object} meeting - Information about the meeting.\n     * @param {number} index - The index of the item.\n     * @returns {Node}\n     */\n    _renderItem(meeting, index) {\n        const {\n            date,\n            duration,\n            elementAfter,\n            time,\n            title,\n            url\n        } = meeting;\n        const { hideURL = false, onItemDelete, t } = this.props;\n        const onPress = this._onPress(url);\n        const onKeyPress = this._onKeyPress(url);\n        const rootClassName\n            = `item ${\n                onPress ? 'with-click-handler' : 'without-click-handler'}`;\n\n        return (\n            <Container\n                aria-label = { title }\n                className = { rootClassName }\n                key = { index }\n                onClick = { onPress }\n                onKeyPress = { onKeyPress }\n                role = 'menuitem'\n                tabIndex = { 0 }>\n                <Container className = 'left-column'>\n                    <Text className = 'title'>\n                        { _toDateString(date) }\n                    </Text>\n                    <Text className = 'subtitle'>\n                        { _toTimeString(time) }\n                    </Text>\n                </Container>\n                <Container className = 'right-column'>\n                    <Text className = 'title'>\n                        { title }\n                    </Text>\n                    {\n                        hideURL || !url ? null : (\n                            <Text>\n                                { url }\n                            </Text>)\n                    }\n                    {\n                        typeof duration === 'number' ? (\n                            <Text className = 'subtitle'>\n                                { getLocalizedDurationFormatter(duration) }\n                            </Text>) : null\n                    }\n                </Container>\n                <Container className = 'actions'>\n                    { elementAfter || null }\n\n                    { onItemDelete && <Icon\n                        ariaLabel = { t('welcomepage.recentListDelete') }\n                        className = 'delete-meeting'\n                        onClick = { this._onDelete(meeting) }\n                        onKeyPress = { this._onDeleteKeyPress(meeting) }\n                        role = 'button'\n                        src = { IconTrash }\n                        tabIndex = { 0 } />}\n                </Container>\n            </Container>\n        );\n    }\n}\n\nexport default translate(MeetingsList);\n","import styled, { css } from 'styled-components';\nimport { gridSize, fontSize } from '@atlaskit/theme/constants';\nimport { placeholderText } from '@atlaskit/theme/colors';\nvar lineHeightDefault = gridSize() * 2 / fontSize();\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], placeholderText);\nvar Input = styled.input.withConfig({\n  displayName: \"Stateless__Input\",\n  componentId: \"wsqt66-0\"\n})([\"\\n  display: inline-block;\\n  flex: 1 0 10px;\\n  margin: 0;\\n  padding: 0;\\n  outline: 0;\\n  border: 0;\\n  background: none;\\n  align-self: center;\\n  font-size: \", \"px;\\n  line-height: \", \";\\n\\n  \", \";\\n\"], fontSize, lineHeightDefault, getPlaceholderStyle(getPlaceholderColor));\nvar SelectWrapper = styled.div.withConfig({\n  displayName: \"Stateless__SelectWrapper\",\n  componentId: \"wsqt66-1\"\n})([\"\\n  display: inline-block;\\n\\n  \", \";\\n\"], function (_ref) {\n  var shouldFitContainer = _ref.shouldFitContainer;\n  return shouldFitContainer ? css([\"\\n          display: block;\\n        \"]) : css([\"\\n          display: inline-block;\\n        \"]);\n});\nexport { Input, SelectWrapper };","/** @jsx jsx */\nimport { forwardRef } from 'react';\nimport { jsx } from '@emotion/core';\nimport { containerStyles } from './styles';\nvar TagGroup = /*#__PURE__*/forwardRef(function (props, ref) {\n  var _props$alignment = props.alignment,\n      alignment = _props$alignment === void 0 ? 'start' : _props$alignment,\n      children = props.children;\n  return jsx(\"div\", {\n    ref: ref,\n    css: containerStyles(alignment)\n  }, children);\n});\nexport default TagGroup;","export var containerStyles = function containerStyles(justify) {\n  return {\n    display: 'flex',\n    flexWrap: 'wrap',\n    justifyContent: \"flex-\".concat(justify),\n    width: '100%'\n  };\n};","import React, { Children, createContext, memo, useContext, useMemo, useRef } from 'react';\nimport { isReducedMotion } from '../utils/accessibility';\nimport { useForceRender } from '../utils/use-force-render';\n/**\n * Internally we will be playing with an element that will always have a key defined.\n */\n\n// We define empty context here so the object doesn't change.\nvar emptyContext = {\n  // Motions will always appear if not inside a exiting persistence component.\n  appear: true,\n  isExiting: false\n};\nvar ExitingContext = /*#__PURE__*/createContext(emptyContext);\n\nvar isAnyPreviousKeysMissingFromCurrent = function isAnyPreviousKeysMissingFromCurrent(currentMap, previous) {\n  for (var i = 0; i < previous.length; i++) {\n    var element = previous[i];\n    var _key = element.key;\n\n    if (!currentMap[_key]) {\n      return true;\n    }\n  }\n\n  return false;\n};\n/**\n * This method will wrap any React element with a context provider. We're using context (instead of\n * cloneElement) so we can communicate between multiple elements without the need of prop drilling\n * (results in a better API for consumers).\n */\n\n\nvar wrapChildWithContextProvider = function wrapChildWithContextProvider(child) {\n  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : emptyContext;\n  return /*#__PURE__*/React.createElement(ExitingContext.Provider, {\n    key: \"\".concat(child.key, \"-provider\"),\n    value: value\n  }, child);\n};\n\nvar childrenToObj = function childrenToObj(children) {\n  return children.reduce(function (acc, child) {\n    acc[child.key] = child;\n    return acc;\n  }, {});\n};\n\nvar spliceNewElementsIntoPrevious = function spliceNewElementsIntoPrevious(current, previous) {\n  var splicedChildren = previous.concat([]);\n  var previousMap = childrenToObj(previous);\n\n  for (var i = 0; i < current.length; i++) {\n    var child = current[i];\n    var childIsNew = !previousMap[child.key];\n\n    if (childIsNew) {\n      // This will insert the new element after the previous element.\n      splicedChildren.splice(i + 1, 0, child);\n    }\n  }\n\n  return splicedChildren;\n};\n/**\n * This function will convert all children types to an array while also filtering out non-valid React elements.\n */\n\n\nvar childrenToArray = function childrenToArray(children) {\n  var childrenAsArray = []; // We convert children to an array using this helper method as it will add keys to children that do not\n  // have them, such as when we have hardcoded children that are conditionally rendered.\n\n  Children.toArray(children).forEach(function (child) {\n    // We ignore any boolean children to make our code a little more simple later on,\n    // and also filter out any falsies (empty strings, nulls, and undefined).\n    if (typeof child !== 'boolean' && Boolean(child)) {\n      // Children WILL have a key after being forced into an array using the React.Children helper.\n      childrenAsArray.push(child);\n    }\n  });\n  return childrenAsArray;\n};\n/**\n * This handles the case when a render updates during an exit motion.\n * If any child is mounted again we removed them from the exiting children object and return true.\n */\n\n\nvar hasAnyExitingChildMountedAgain = function hasAnyExitingChildMountedAgain(exitingChildren, children) {\n  var exitingChildMountedAgain = false;\n  children.forEach(function (child) {\n    if (exitingChildren.current[child.key]) {\n      exitingChildMountedAgain = true;\n      delete exitingChildren.current[child.key];\n    }\n  });\n  return exitingChildMountedAgain;\n};\n\nvar ExitingPersistence = /*#__PURE__*/memo(function (_ref) {\n  var _ref$appear = _ref.appear,\n      appearFromProp = _ref$appear === void 0 ? false : _ref$appear,\n      childs = _ref.children,\n      exitThenEnter = _ref.exitThenEnter;\n  var children = childrenToArray(childs);\n  var childrenObj = childrenToObj(children);\n  var previousChildren = useRef([]);\n  var persistedChildren = useRef([]);\n  var forceRender = useForceRender();\n  var exitingChildren = useRef({});\n  var appear = useRef(appearFromProp);\n  var defaultContextValue = useMemo(function () {\n    return {\n      appear: appear.current,\n      isExiting: false\n    };\n  }, // React rules of hooks says this isn't needed because mutating appear won't cause a re-render.\n  // While technically true - it will trigger this to make a new object on the _next_ render which is what we want.\n  // Remove this or use appear instead of appear.current and you will notice a test breaks.\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  [appear.current]);\n\n  if (isReducedMotion()) {\n    return children;\n  }\n\n  if (!appear.current) {\n    // We always want child motions to appear after the initial mount.\n    appear.current = true;\n  } // This entire block can't be an effect because we need it to run synchronously during a render\n  // else when elements are being removed they will be remounted instead of being updated.\n\n\n  if (previousChildren.current.length && isAnyPreviousKeysMissingFromCurrent(childrenObj, previousChildren.current)) {\n    if (persistedChildren.current.length === 0 || hasAnyExitingChildMountedAgain(exitingChildren, children)) {\n      persistedChildren.current = previousChildren.current;\n    } // We have persisted children now set from previous children.\n    // Let's update previous children so we have it available next render.\n\n\n    previousChildren.current = children;\n    return (exitThenEnter ? persistedChildren.current : spliceNewElementsIntoPrevious(children, persistedChildren.current)).map(function (child) {\n      var currentChild = childrenObj[child.key];\n\n      if (!currentChild) {\n        // We've found an exiting child - mark it!\n        exitingChildren.current[child.key] = true;\n        return wrapChildWithContextProvider(child, {\n          isExiting: true,\n          appear: true,\n          onFinish: function onFinish() {\n            delete exitingChildren.current[child.key]; // We will only remove the exiting elements when any subsequent exiting elements have also finished.\n            // Think of removing many items from a todo list - when removing a few over a few clicks we don't\n            // want the list jumping around when they exit.\n\n            if (Object.keys(exitingChildren.current).length === 0) {\n              // Set previous children to nothing.\n              // This let's us skip the next render check as it's assumed children and previous will be the same.\n              previousChildren.current = [];\n              persistedChildren.current = []; // Re-render after the element(s) have animated away which will end up rendering the latest children.\n\n              forceRender();\n            }\n          }\n        });\n      } // This element isn't exiting.\n      // Wrap context and let's continue on our way.\n\n\n      return wrapChildWithContextProvider(currentChild, defaultContextValue);\n    });\n  } else {\n    previousChildren.current = children;\n  }\n\n  return children.map(function (child) {\n    return wrapChildWithContextProvider(child, defaultContextValue);\n  });\n});\nexport var useExitingPersistence = function useExitingPersistence() {\n  return useContext(ExitingContext);\n};\nExitingPersistence.displayName = 'ExitingPersistence';\nexport default ExitingPersistence;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { useCallback, useState } from 'react';\nexport var useForceRender = function useForceRender() {\n  var _useState = useState({}),\n      _useState2 = _slicedToArray(_useState, 2),\n      updateState = _useState2[1];\n\n  var forceRender = useCallback(function () {\n    return updateState({});\n  }, []);\n  return forceRender;\n};","/**\n * Use for any programatic motions needed at runtime.\n * Will return `true` if the current user prefers reduced motion.\n * This is generally set through OS preferences/settings.\n */\nexport var isReducedMotion = function isReducedMotion() {\n  if (typeof window === 'undefined' || !('matchMedia' in window)) {\n    return false;\n  }\n\n  var _window$matchMedia = window.matchMedia('(prefers-reduced-motion: reduce)'),\n      matches = _window$matchMedia.matches;\n\n  return matches;\n};\n/**\n * Use for any CSS based motion (animation or transition).\n * Always put at the end of your declaration for correct use of the cascade.\n * Reduced motion preference is generally set through OS preferences/settings.\n */\n\nexport var prefersReducedMotion = function prefersReducedMotion() {\n  return {\n    '@media (prefers-reduced-motion: reduce)': {\n      animation: 'none',\n      transition: 'none'\n    }\n  };\n};","import { useCallback, useEffect, useRef } from 'react';\n\nvar getHookDeps = function getHookDeps(opts) {\n  switch (opts.cleanup) {\n    case 'next-effect':\n      return undefined;\n\n    case 'unmount':\n    default:\n      return [];\n  }\n};\n/**\n * Will return request animation frame as a function which will clean itself up.\n */\n\n\nexport var useRequestAnimationFrame = function useRequestAnimationFrame() {\n  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    cleanup: 'unmount'\n  };\n  var frames = useRef([]);\n  useEffect(function () {\n    return function () {\n      if (frames.current.length) {\n        frames.current.forEach(function (id) {\n          return cancelAnimationFrame(id);\n        });\n        frames.current = [];\n      }\n    }; // We dynamically set this so we either clean up on the next effect - or on unmount.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, getHookDeps(opts));\n  return useCallback(function (handler) {\n    var id = requestAnimationFrame(function (time) {\n      frames.current = frames.current.filter(function (frameId) {\n        return frameId !== id;\n      });\n      handler(time);\n    });\n    frames.current.push(id);\n  }, []);\n};\n/**\n * Will return set  timeout as a function which will clean itself up.\n */\n\nexport var useSetTimeout = function useSetTimeout() {\n  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    cleanup: 'unmount'\n  };\n  var timeouts = useRef([]);\n  useEffect(function () {\n    return function () {\n      if (timeouts.current.length) {\n        timeouts.current.forEach(function (id) {\n          return clearTimeout(id);\n        });\n        timeouts.current = [];\n      }\n    }; // We dynamically set this so we either clean up on the next effect - or on unmount.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, getHookDeps(opts));\n  return useCallback(function (handler, timeout) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    var id = setTimeout.apply(void 0, [function () {\n      timeouts.current = timeouts.current.filter(function (timeoutId) {\n        return timeoutId !== id;\n      });\n      handler();\n    }, timeout].concat(args));\n    timeouts.current.push(id);\n  }, []);\n};","import { useEffect, useLayoutEffect as useRealLayoutEffect } from 'react';\n/**\n * Needed to supress the SSR warning when running use layout effect on the server.\n */\n\nexport var useLayoutEffect = typeof window === 'undefined' ? useEffect : useRealLayoutEffect;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { easeIn } from '../utils/curves';\nimport { smallDurationMs } from '../utils/durations';\nimport { useRequestAnimationFrame, useSetTimeout } from '../utils/timer-hooks';\nimport { useElementRef } from '../utils/use-element-ref';\nimport { useLayoutEffect } from '../utils/use-layout-effect';\nimport { useExitingPersistence } from './exiting-persistence';\n\nvar ShrinkOut = function ShrinkOut(_ref) {\n  var children = _ref.children,\n      _ref$duration = _ref.duration,\n      duration = _ref$duration === void 0 ? smallDurationMs : _ref$duration,\n      onFinish = _ref.onFinish;\n\n  var _useElementRef = useElementRef(),\n      _useElementRef2 = _slicedToArray(_useElementRef, 2),\n      element = _useElementRef2[0],\n      setElementRef = _useElementRef2[1];\n\n  var exiting = useExitingPersistence();\n  var requestAnimationFrame = useRequestAnimationFrame();\n  var setTimeout = useSetTimeout();\n  var direction = exiting.isExiting ? 'exiting' : 'entering';\n  useLayoutEffect(function () {\n    if (exiting.isExiting && element) {\n      var newStyles = {\n        // We fix both width and height because when changing box sizing to border-box.\n        width: \"\".concat(element.offsetWidth, \"px\"),\n        height: \"\".concat(element.offsetHeight, \"px\"),\n        boxSizing: 'border-box',\n        willChange: 'width,margin'\n      };\n      Object.assign(element.style, newStyles);\n      requestAnimationFrame(function () {\n        requestAnimationFrame(function () {\n          var newStyles = {\n            width: '0px',\n            margin: '0px',\n            // We animate margin down to zero so it doesn't take any space.\n            transitionTimingFunction: easeIn,\n            transitionDuration: \"\".concat(duration, \"ms\"),\n            transitionProperty: 'width,margin'\n          };\n          Object.assign(element.style, newStyles);\n          setTimeout(function () {\n            exiting.onFinish && exiting.onFinish();\n            onFinish && onFinish('exiting');\n          }, duration);\n        });\n      });\n    }\n  });\n  return children({\n    ref: setElementRef\n  }, direction);\n};\n\nexport default ShrinkOut;","import { useCallback, useRef } from 'react';\n\n/**\n * Will return a tuple of the element and the callback ref to set.\n * This is used as a work around for using `useRef` directly with Typescript\n * as the types don't flow through as one would expect.\n */\nexport var useElementRef = function useElementRef() {\n  var elementRef = useRef(null);\n  var setRef = useCallback(function (ref) {\n    elementRef.current = ref;\n  }, []);\n  return [elementRef.current, setRef];\n};","/**\n * Think of this as the motion equivalent of the @atlaskit/theme `grid()`.\n */\nexport var durationStep = 25;\nexport var smallDurationMs = durationStep * 4;\nexport var mediumDurationMs = durationStep * 14;\nexport var largeDurationMs = durationStep * 28;","export var easeInOut = 'cubic-bezier(0.15,1,0.3,1)';\nexport var easeOut = 'cubic-bezier(0.2,0,0,1)';\nexport var easeIn = 'cubic-bezier(0.8,0,0,0.8)';","// ideally this would be fetched from ../constants but that causes a\n// circular dep loop. This will be refactored as part of a breaking\n// change in the future.\nvar DEFAULT_THEME_MODE = 'light';\nvar THEME_MODES = ['light', 'dark']; // Resolves the different types of theme objects in the current API\n\nexport default function getTheme(props) {\n  if (props && props.theme) {\n    // Theme is the global Atlaskit theme\n    if ('__ATLASKIT_THEME__' in props.theme) {\n      return props.theme.__ATLASKIT_THEME__;\n    } // User has provided alternative modes\n    else if ('mode' in props.theme && THEME_MODES.includes(props.theme.mode)) {\n        return props.theme;\n      }\n  } // If format not supported (or no theme provided), return standard theme\n\n\n  return {\n    mode: DEFAULT_THEME_MODE\n  };\n}","/* eslint-disable prefer-rest-params */\nimport getTheme from './getTheme';\n\n// Unpack custom variants, and get correct value for the current theme\nfunction themedVariants(variantProp, variants) {\n  return function (props) {\n    var theme = getTheme(props);\n\n    if (props && props[variantProp] && variants) {\n      var modes = variants[props[variantProp]];\n\n      if (modes && modes[theme.mode]) {\n        var value = modes[theme.mode];\n\n        if (value) {\n          return value;\n        } // TS believes value can be undefined\n\n      }\n    }\n\n    return '';\n  };\n}\n\nexport default function themed(modesOrVariant, variantModes) {\n  if (typeof modesOrVariant === 'string') {\n    return themedVariants(modesOrVariant, variantModes);\n  }\n\n  var modes = modesOrVariant;\n  return function (props) {\n    // Get theme from the user's props\n    var theme = getTheme(props); // User isn't required to provide both light and dark values\n\n    if (theme.mode in modes) {\n      var value = modes[theme.mode]; // TS believes value can be undefined\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return '';\n  };\n}","import themed from './utils/themed'; // Reds\n\nexport var R50 = '#FFEBE6';\nexport var R75 = '#FFBDAD';\nexport var R100 = '#FF8F73';\nexport var R200 = '#FF7452';\nexport var R300 = '#FF5630';\nexport var R400 = '#DE350B';\nexport var R500 = '#BF2600'; // Yellows\n\nexport var Y50 = '#FFFAE6';\nexport var Y75 = '#FFF0B3';\nexport var Y100 = '#FFE380';\nexport var Y200 = '#FFC400';\nexport var Y300 = '#FFAB00';\nexport var Y400 = '#FF991F';\nexport var Y500 = '#FF8B00'; // Greens\n\nexport var G50 = '#E3FCEF';\nexport var G75 = '#ABF5D1';\nexport var G100 = '#79F2C0';\nexport var G200 = '#57D9A3';\nexport var G300 = '#36B37E';\nexport var G400 = '#00875A';\nexport var G500 = '#006644'; // Blues\n\nexport var B50 = '#DEEBFF';\nexport var B75 = '#B3D4FF';\nexport var B100 = '#4C9AFF';\nexport var B200 = '#2684FF';\nexport var B300 = '#0065FF';\nexport var B400 = '#0052CC';\nexport var B500 = '#0747A6'; // Purples\n\nexport var P50 = '#EAE6FF';\nexport var P75 = '#C0B6F2';\nexport var P100 = '#998DD9';\nexport var P200 = '#8777D9';\nexport var P300 = '#6554C0';\nexport var P400 = '#5243AA';\nexport var P500 = '#403294'; // Teals\n\nexport var T50 = '#E6FCFF';\nexport var T75 = '#B3F5FF';\nexport var T100 = '#79E2F2';\nexport var T200 = '#00C7E6';\nexport var T300 = '#00B8D9';\nexport var T400 = '#00A3BF';\nexport var T500 = '#008DA6'; // Neutrals\n\nexport var N0 = '#FFFFFF';\nexport var N10 = '#FAFBFC';\nexport var N20 = '#F4F5F7';\nexport var N30 = '#EBECF0';\nexport var N40 = '#DFE1E6';\nexport var N50 = '#C1C7D0';\nexport var N60 = '#B3BAC5';\nexport var N70 = '#A5ADBA';\nexport var N80 = '#97A0AF';\nexport var N90 = '#8993A4';\nexport var N100 = '#7A869A';\nexport var N200 = '#6B778C';\nexport var N300 = '#5E6C84';\nexport var N400 = '#505F79';\nexport var N500 = '#42526E';\nexport var N600 = '#344563';\nexport var N700 = '#253858';\nexport var N800 = '#172B4D'; // ATTENTION: update the tints if you update this\n\nexport var N900 = '#091E42'; // Each tint is made of N900 and an alpha channel\n\nexport var N10A = 'rgba(9, 30, 66, 0.02)';\nexport var N20A = 'rgba(9, 30, 66, 0.04)';\nexport var N30A = 'rgba(9, 30, 66, 0.08)';\nexport var N40A = 'rgba(9, 30, 66, 0.13)';\nexport var N50A = 'rgba(9, 30, 66, 0.25)';\nexport var N60A = 'rgba(9, 30, 66, 0.31)';\nexport var N70A = 'rgba(9, 30, 66, 0.36)';\nexport var N80A = 'rgba(9, 30, 66, 0.42)';\nexport var N90A = 'rgba(9, 30, 66, 0.48)';\nexport var N100A = 'rgba(9, 30, 66, 0.54)';\nexport var N200A = 'rgba(9, 30, 66, 0.60)';\nexport var N300A = 'rgba(9, 30, 66, 0.66)';\nexport var N400A = 'rgba(9, 30, 66, 0.71)';\nexport var N500A = 'rgba(9, 30, 66, 0.77)';\nexport var N600A = 'rgba(9, 30, 66, 0.82)';\nexport var N700A = 'rgba(9, 30, 66, 0.89)';\nexport var N800A = 'rgba(9, 30, 66, 0.95)'; // Dark Mode Neutrals\n\nexport var DN900 = '#E6EDFA';\nexport var DN800 = '#DCE5F5';\nexport var DN700 = '#CED9EB';\nexport var DN600 = '#B8C7E0';\nexport var DN500 = '#ABBBD6';\nexport var DN400 = '#9FB0CC';\nexport var DN300 = '#8C9CB8';\nexport var DN200 = '#7988A3';\nexport var DN100 = '#67758F';\nexport var DN90 = '#56637A';\nexport var DN80 = '#455166';\nexport var DN70 = '#3B475C';\nexport var DN60 = '#313D52';\nexport var DN50 = '#283447';\nexport var DN40 = '#202B3D';\nexport var DN30 = '#1B2638';\nexport var DN20 = '#121A29';\nexport var DN10 = '#0E1624'; // ATTENTION: update the tints if you update this\n\nexport var DN0 = '#0D1424'; // Each dark tint is made of DN0 and an alpha channel\n\nexport var DN800A = 'rgba(13, 20, 36, 0.06)';\nexport var DN700A = 'rgba(13, 20, 36, 0.14)';\nexport var DN600A = 'rgba(13, 20, 36, 0.18)';\nexport var DN500A = 'rgba(13, 20, 36, 0.29)';\nexport var DN400A = 'rgba(13, 20, 36, 0.36)';\nexport var DN300A = 'rgba(13, 20, 36, 0.40)';\nexport var DN200A = 'rgba(13, 20, 36, 0.47)';\nexport var DN100A = 'rgba(13, 20, 36, 0.53)';\nexport var DN90A = 'rgba(13, 20, 36, 0.63)';\nexport var DN80A = 'rgba(13, 20, 36, 0.73)';\nexport var DN70A = 'rgba(13, 20, 36, 0.78)';\nexport var DN60A = 'rgba(13, 20, 36, 0.81)';\nexport var DN50A = 'rgba(13, 20, 36, 0.85)';\nexport var DN40A = 'rgba(13, 20, 36, 0.89)';\nexport var DN30A = 'rgba(13, 20, 36, 0.92)';\nexport var DN20A = 'rgba(13, 20, 36, 0.95)';\nexport var DN10A = 'rgba(13, 20, 36, 0.97)'; // Themed colors\n\nexport var background = themed({\n  light: N0,\n  dark: DN30\n});\nexport var backgroundActive = themed({\n  light: B50,\n  dark: B75\n});\nexport var backgroundHover = themed({\n  light: N30,\n  dark: DN70\n});\nexport var backgroundOnLayer = themed({\n  light: N0,\n  dark: DN50\n});\nexport var text = themed({\n  light: N900,\n  dark: DN600\n});\nexport var textHover = themed({\n  light: N800,\n  dark: DN600\n});\nexport var textActive = themed({\n  light: B400,\n  dark: B400\n});\nexport var subtleText = themed({\n  light: N200,\n  dark: DN300\n});\nexport var placeholderText = themed({\n  light: N100,\n  dark: DN200\n});\nexport var heading = themed({\n  light: N800,\n  dark: DN600\n});\nexport var subtleHeading = themed({\n  light: N200,\n  dark: DN300\n});\nexport var codeBlock = themed({\n  light: N20,\n  dark: DN50\n});\nexport var link = themed({\n  light: B400,\n  dark: B100\n});\nexport var linkHover = themed({\n  light: B300,\n  dark: B200\n});\nexport var linkActive = themed({\n  light: B500,\n  dark: B100\n});\nexport var linkOutline = themed({\n  light: B100,\n  dark: B200\n});\nexport var primary = themed({\n  light: B400,\n  dark: B100\n});\nexport var blue = themed({\n  light: B400,\n  dark: B100\n});\nexport var teal = themed({\n  light: T300,\n  dark: T200\n});\nexport var purple = themed({\n  light: P300,\n  dark: P100\n});\nexport var red = themed({\n  light: R300,\n  dark: R300\n});\nexport var yellow = themed({\n  light: Y300,\n  dark: Y300\n});\nexport var green = themed({\n  light: G300,\n  dark: G300\n});\nexport var skeleton = function skeleton() {\n  return N20A;\n};","import * as colors from '@atlaskit/theme/colors';\nvar textColors = {\n  standard: {\n    light: colors.N700,\n    dark: colors.DN600\n  },\n  green: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  purple: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  red: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  yellow: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  grey: {\n    light: colors.N0,\n    dark: colors.N0\n  },\n  teal: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  blue: {\n    light: colors.N800,\n    dark: colors.N800\n  },\n  tealLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  blueLight: {\n    light: colors.B500,\n    dark: colors.B500\n  },\n  greenLight: {\n    light: colors.G500,\n    dark: colors.G500\n  },\n  purpleLight: {\n    light: colors.P500,\n    dark: colors.P500\n  },\n  redLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  yellowLight: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  greyLight: {\n    light: colors.N500,\n    dark: colors.N500\n  }\n};\nvar backgroundColors = {\n  standard: {\n    light: colors.N20,\n    dark: colors.DN100A\n  },\n  green: {\n    light: colors.G200,\n    dark: colors.G200\n  },\n  purple: {\n    light: colors.P100,\n    dark: colors.P100\n  },\n  red: {\n    light: colors.R100,\n    dark: colors.R100\n  },\n  yellow: {\n    light: colors.Y200,\n    dark: colors.Y200\n  },\n  grey: {\n    light: colors.N500,\n    dark: colors.N500\n  },\n  teal: {\n    light: colors.T200,\n    dark: colors.T200\n  },\n  blue: {\n    light: colors.B100,\n    dark: colors.B100\n  },\n  tealLight: {\n    light: colors.T100,\n    dark: colors.T100\n  },\n  blueLight: {\n    light: colors.B75,\n    dark: colors.B75\n  },\n  greenLight: {\n    light: colors.G100,\n    dark: colors.G100\n  },\n  purpleLight: {\n    light: colors.P75,\n    dark: colors.P75\n  },\n  redLight: {\n    light: colors.R75,\n    dark: colors.R75\n  },\n  yellowLight: {\n    light: colors.Y100,\n    dark: colors.Y100\n  },\n  greyLight: {\n    light: colors.N30,\n    dark: colors.N30\n  }\n};\nvar linkBackgroundColorHover = {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN60\n  },\n  green: {\n    light: colors.G100,\n    dark: colors.DN60\n  },\n  purple: {\n    light: colors.P75,\n    dark: colors.DN60\n  },\n  red: {\n    light: colors.R75,\n    dark: colors.DN60\n  },\n  yellow: {\n    light: colors.Y100,\n    dark: colors.DN60\n  },\n  grey: {\n    light: colors.N50,\n    dark: colors.DN60\n  },\n  teal: {\n    light: colors.T100,\n    dark: colors.DN60\n  },\n  blue: {\n    light: colors.B75,\n    dark: colors.DN60\n  },\n  tealLight: {\n    light: colors.T75,\n    dark: colors.DN60\n  },\n  blueLight: {\n    light: colors.B50,\n    dark: colors.DN60\n  },\n  greenLight: {\n    light: colors.G75,\n    dark: colors.DN60\n  },\n  purpleLight: {\n    light: colors.P50,\n    dark: colors.DN60\n  },\n  redLight: {\n    light: colors.R50,\n    dark: colors.DN60\n  },\n  yellowLight: {\n    light: colors.Y75,\n    dark: colors.DN60\n  },\n  greyLight: {\n    light: colors.N30,\n    dark: colors.DN60\n  }\n};\nvar focusRingColorObj = {\n  light: colors.B100,\n  dark: colors.B75\n};\nvar hoverBoxShadowColorObj = {\n  light: colors.R300,\n  dark: colors.R200\n};\nvar focusBoxShadowColorObj = {\n  light: colors.B100,\n  dark: colors.B75\n};\nvar linkHoverColorObj = {\n  light: colors.B300,\n  dark: colors.B200\n};\n\nvar getTextColor = function getTextColor(tagColor, mode) {\n  var color = tagColor ? tagColor : 'standard';\n  return textColors[color][mode];\n};\n\nvar getLinkBackgroundColorHover = function getLinkBackgroundColorHover(tagColor, mode) {\n  var color = tagColor ? tagColor : 'standard';\n  return linkBackgroundColorHover[color][mode];\n};\n\nvar getBackgroundColor = function getBackgroundColor(tagColor, mode) {\n  var color = tagColor ? tagColor : 'standard';\n  return backgroundColors[color][mode];\n};\n\nvar getTextColorForRemoval = function getTextColorForRemoval(tagColor, mode) {\n  return {\n    light: colors.R500,\n    dark: colors.DN30\n  }[mode];\n};\n\nvar getBackgroundColorForRemoval = function getBackgroundColorForRemoval(tagColor, mode) {\n  return {\n    light: colors.R50,\n    dark: colors.R100\n  }[mode];\n};\n\nvar getChromeColors = function getChromeColors(color, mode, isRemovable) {\n  var backgroundColor = getBackgroundColor(color, mode);\n  var backgroundColorHover = isRemovable ? getBackgroundColorForRemoval(color, mode) : getLinkBackgroundColorHover(color, mode);\n  var textColor = getTextColor(color, mode);\n  var textColorHover = isRemovable ? getTextColorForRemoval(color, mode) : getTextColor(color, mode);\n  return {\n    backgroundColor: backgroundColor,\n    backgroundColorHover: backgroundColorHover,\n    textColor: textColor,\n    textColorHover: textColorHover\n  };\n};\n\nvar getChromeLinkColors = function getChromeLinkColors(color, mode) {\n  var hoverBackgroundColorRemoval = getBackgroundColorForRemoval(color, mode);\n  var hoverTextColorRemoval = getTextColorForRemoval(color, mode);\n  var hoverBackgroundColor = getLinkBackgroundColorHover(color, mode);\n  var hoverTextColor = linkHoverColorObj[mode];\n  var focusRingColor = focusRingColorObj[mode];\n  return {\n    hoverBackgroundColor: hoverBackgroundColor,\n    hoverTextColor: hoverTextColor,\n    hoverBackgroundColorRemoval: hoverBackgroundColorRemoval,\n    hoverTextColorRemoval: hoverTextColorRemoval,\n    focusRingColor: focusRingColor\n  };\n};\n\nvar getButtonColors = function getButtonColors(color, mode) {\n  var backgroundColor = getBackgroundColor(color, mode);\n  var backgroundColorHover = getBackgroundColorForRemoval(color, mode);\n  var focusBoxShadowColor = focusBoxShadowColorObj[mode];\n  var hoverBoxShadowColor = hoverBoxShadowColorObj[mode];\n  return {\n    backgroundColor: backgroundColor,\n    backgroundColorHover: backgroundColorHover,\n    focusBoxShadowColor: focusBoxShadowColor,\n    hoverBoxShadowColor: hoverBoxShadowColor\n  };\n};\n\nexport var getThemeColors = function getThemeColors(color, mode, isRemovable) {\n  var chromeColors = getChromeColors(color, mode, isRemovable);\n  var chromeLinkColors = getChromeLinkColors(color, mode);\n  var buttonColors = getButtonColors(color, mode);\n  var linkHoverColor = linkHoverColorObj[mode];\n  return {\n    chromeColors: chromeColors,\n    chromeLinkColors: chromeLinkColors,\n    buttonColors: buttonColors,\n    linkHoverColor: linkHoverColor\n  };\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\n/** @jsx jsx */\nimport React from 'react';\nimport { jsx } from '@emotion/core';\nvar BaseTag = /*#__PURE__*/React.forwardRef(function BaseTag(_ref, ref) {\n  var before = _ref.before,\n      contentElement = _ref.contentElement,\n      after = _ref.after,\n      testId = _ref.testId,\n      tagCss = _ref.tagCss,\n      other = _objectWithoutProperties(_ref, [\"before\", \"contentElement\", \"after\", \"testId\", \"tagCss\"]);\n\n  return jsx(\"span\", _extends({}, other, {\n    ref: ref,\n    css: tagCss,\n    \"data-testid\": testId\n  }), before, contentElement, after);\n});\nexport default BaseTag;","import { borderRadius, fontSize, gridSize } from '@atlaskit/theme/constants';\nvar gridSizeValue = gridSize();\nvar borderRaidusValue = borderRadius();\nvar fontSizeValue = fontSize();\nexport var tagHeightUnitless = 2.5 * gridSizeValue;\nexport var tagHeight = \"\".concat(tagHeightUnitless, \"px\");\nexport var buttonWidthUnitless = tagHeightUnitless; // button should be square\n\nexport var buttonWidth = tagHeight; // button should be square\n\nexport var maxWidthUnitless = 25 * gridSizeValue;\nexport var maxWidth = \"\".concat(maxWidthUnitless, \"px\");\nexport var maxTextWidthUnitless = maxWidthUnitless - tagHeightUnitless;\nexport var maxTextWidth = \"\".concat(maxTextWidthUnitless, \"px\");\nexport var defaultBorderRadius = \"\".concat(borderRaidusValue, \"px\");\nexport var defaultRoundedBorderRadius = \"\".concat(buttonWidthUnitless / 2, \"px\");\nexport var defaultMargin = \"\".concat(gridSizeValue / 2, \"px\");\nexport var defaultTextPadding = \"\".concat(gridSizeValue / 2, \"px\");\nexport var textPaddingRight = \"\".concat(2 * gridSizeValue, \"px\");\nexport var textMarginLeft = \"\".concat(tagHeightUnitless, \"px\");\nexport var textFontSize = \"\".concat(fontSizeValue, \"px\");","import { B100, N30A, skeleton as skeletonColor } from './colors';\nexport var FLATTENED = '__FLATTENED__';\nexport var CHANNEL = '__ATLASKIT_THEME__';\nexport var DEFAULT_THEME_MODE = 'light';\nexport var THEME_MODES = ['light', 'dark'];\n/*\n  These theme values are expressed as functions so that if we decide to make\n  them dependent on props in the future, it wouldn't require a significant\n  refactor everywhere they are being used.\n*/\n\nexport var borderRadius = function borderRadius() {\n  return 3;\n};\nexport var gridSize = function gridSize() {\n  return 8;\n};\nexport var fontSize = function fontSize() {\n  return 14;\n};\nexport var fontSizeSmall = function fontSizeSmall() {\n  return 11;\n};\nexport var fontFamily = function fontFamily() {\n  return \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\";\n};\nexport var codeFontFamily = function codeFontFamily() {\n  return \"'SFMono-Medium', 'SF Mono', 'Segoe UI Mono', 'Roboto Mono', 'Ubuntu Mono', Menlo, Consolas, Courier, monospace\";\n};\nexport var focusRing = function focusRing() {\n  var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : B100;\n  var outlineWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : gridSize() / 4;\n  return \"\\n  &:focus {\\n    outline: none;\\n    box-shadow: 0px 0px 0px \".concat(outlineWidth, \"px \").concat(color, \";\\n  }\\n\");\n};\nexport var noFocusRing = function noFocusRing() {\n  return \"\\n  box-shadow: none;\\n\";\n};\nexport var layers = {\n  card: function card() {\n    return 100;\n  },\n  navigation: function navigation() {\n    return 200;\n  },\n  dialog: function dialog() {\n    return 300;\n  },\n  layer: function layer() {\n    return 400;\n  },\n  blanket: function blanket() {\n    return 500;\n  },\n  modal: function modal() {\n    return 510;\n  },\n  flag: function flag() {\n    return 600;\n  },\n  spotlight: function spotlight() {\n    return 700;\n  },\n  tooltip: function tooltip() {\n    return 800;\n  }\n};\nexport var visuallyHidden = function visuallyHidden() {\n  return {\n    border: '0 !important',\n    clip: 'rect(1px, 1px, 1px, 1px) !important',\n    height: '1px !important',\n    overflow: 'hidden !important',\n    padding: '0 !important',\n    position: 'absolute !important',\n    width: '1px !important',\n    whiteSpace: 'nowrap !important'\n  };\n};\n/**\n * Deprecated Styled Components mixin.\n * Use visuallyHidden instead.\n * @deprecated\n */\n\nexport var assistive = visuallyHidden;\nexport var skeletonShimmer = function skeletonShimmer() {\n  return {\n    css: {\n      backgroundColor: skeletonColor(),\n      animationDuration: '1.5s',\n      animationIterationCount: 'infinite',\n      animationTimingFunction: 'linear',\n      animationDirection: 'alternate'\n    },\n    keyframes: {\n      from: {\n        backgroundColor: skeletonColor()\n      },\n      to: {\n        backgroundColor: N30A\n      }\n    }\n  };\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { buttonWidthUnitless, defaultBorderRadius, defaultMargin, defaultRoundedBorderRadius, defaultTextPadding, maxTextWidth, maxTextWidthUnitless, tagHeight, textFontSize, textMarginLeft, textPaddingRight } from '../../../constants';\nexport var roundedBorderStyles = {\n  borderRadius: \"\".concat(defaultRoundedBorderRadius)\n};\nexport var beforeElementStyles = function beforeElementStyles(_ref) {\n  var textColor = _ref.textColor;\n  return {\n    position: 'absolute',\n    left: 0,\n    borderRadius: \"\".concat(defaultBorderRadius),\n    alignItems: 'center',\n    display: 'flex',\n    justifyContent: 'center',\n    color: textColor\n  };\n};\nexport var chromeStyles = function chromeStyles(_ref2) {\n  var backgroundColor = _ref2.backgroundColor,\n      backgroundColorHover = _ref2.backgroundColorHover,\n      textColor = _ref2.textColor,\n      textColorHover = _ref2.textColorHover;\n  return {\n    backgroundColor: backgroundColor,\n    color: textColor,\n    '&:hover': {\n      backgroundColor: backgroundColorHover,\n      color: textColorHover\n    },\n    '& button:hover': {\n      backgroundColor: backgroundColor,\n      color: textColor\n    },\n    '&>span:hover': {\n      backgroundColor: backgroundColor,\n      color: textColor\n    },\n    borderRadius: \"\".concat(defaultBorderRadius),\n    cursor: 'default',\n    display: 'inline-flex',\n    position: 'relative',\n    height: \"\".concat(tagHeight),\n    lineHeight: 1,\n    margin: \"\".concat(defaultMargin),\n    padding: 0,\n    overflow: 'hidden'\n  };\n};\nexport var chromeLinkStyles = function chromeLinkStyles(_ref3) {\n  var hoverBackgroundColor = _ref3.hoverBackgroundColor,\n      hoverTextColor = _ref3.hoverTextColor,\n      hoverBackgroundColorRemoval = _ref3.hoverBackgroundColorRemoval,\n      hoverTextColorRemoval = _ref3.hoverTextColorRemoval,\n      focusRingColor = _ref3.focusRingColor;\n  return {\n    '&>a:hover': {\n      backgroundColor: hoverBackgroundColor,\n      color: hoverTextColor\n    },\n    '&[data-removable=\"true\"]:hover': {\n      backgroundColor: hoverBackgroundColorRemoval,\n      color: hoverTextColorRemoval\n    },\n    '&:focus-within': {\n      boxShadow: \"0 0 0 2px \".concat(focusRingColor),\n      outline: 'none'\n    },\n    '&[data-removing=\"true\"]:focus-within': {\n      boxShadow: \"0 0 0 2px transparent\",\n      outline: 'none'\n    }\n  };\n};\nexport var hasAfterStyles = {\n  paddingRight: \"\".concat(textPaddingRight),\n  maxWidth: \"\".concat(maxTextWidthUnitless - buttonWidthUnitless, \"px\")\n};\nexport var hasBeforeStyles = {\n  marginLeft: \"\".concat(textMarginLeft)\n};\nexport var textStyles = {\n  fontSize: textFontSize,\n  fontWeight: 'normal',\n  lineHeight: 1,\n  paddingLeft: defaultTextPadding,\n  paddingRight: defaultTextPadding,\n  paddingTop: '2px',\n  paddingBottom: '2px',\n  borderRadius: defaultBorderRadius,\n  maxWidth: maxTextWidth,\n  overflow: 'hidden',\n  textOverflow: 'ellipsis',\n  whiteSpace: 'nowrap'\n};\nexport var linkStyles = function linkStyles(linkHoverColor) {\n  return _objectSpread(_objectSpread({}, textStyles), {}, {\n    ':not([data-color=\"standard\"])': {\n      color: 'inherit',\n      textDecoration: 'underline'\n    },\n    textDecoration: 'none',\n    '&:hover': {\n      color: linkHoverColor\n    },\n    '&:focus': {\n      outline: 'none'\n    }\n  });\n};","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { beforeElementStyles, roundedBorderStyles } from './styles';\n\nvar Before = function Before(_ref) {\n  var elemBefore = _ref.elemBefore,\n      isRounded = _ref.isRounded,\n      styles = _ref.styles;\n  return elemBefore ? jsx(\"span\", {\n    css: [beforeElementStyles(styles), isRounded ? roundedBorderStyles : undefined]\n  }, elemBefore) : null;\n};\n\nexport default Before;","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { hasAfterStyles, hasBeforeStyles, linkStyles, roundedBorderStyles, textStyles } from './styles';\n\nvar Content = function Content(props) {\n  var _props$elemBefore = props.elemBefore,\n      elemBefore = _props$elemBefore === void 0 ? null : _props$elemBefore,\n      _props$isRemovable = props.isRemovable,\n      isRemovable = _props$isRemovable === void 0 ? true : _props$isRemovable,\n      _props$text = props.text,\n      text = _props$text === void 0 ? '' : _props$text,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'standard' : _props$color,\n      href = props.href,\n      isRounded = props.isRounded,\n      isLink = props.isLink,\n      _props$linkComponent = props.linkComponent,\n      Link = _props$linkComponent === void 0 ? 'a' : _props$linkComponent,\n      linkHoverColor = props.linkHoverColor;\n\n  if (isLink) {\n    return jsx(Link, {\n      href: href,\n      \"data-color\": color,\n      css: [linkStyles(linkHoverColor), isRounded ? roundedBorderStyles : undefined, elemBefore ? hasBeforeStyles : undefined, isRemovable ? hasAfterStyles : undefined]\n    }, text);\n  } else {\n    return jsx(\"span\", {\n      css: [textStyles, isRounded ? roundedBorderStyles : undefined, elemBefore ? hasBeforeStyles : undefined, isRemovable ? hasAfterStyles : undefined]\n    }, text);\n  }\n};\n\nexport default Content;","export function mergeRefs() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n\n  return function (ref) {\n    refs.forEach(function (resolvableRef) {\n      if (!resolvableRef) {\n        return;\n      }\n\n      if (typeof resolvableRef === 'function') {\n        resolvableRef(ref);\n      } else {\n        resolvableRef.current = ref;\n      }\n    });\n  };\n}","import { N500, R500 } from '@atlaskit/theme/colors';\nimport { defaultBorderRadius } from '../../../constants'; // NOTE:\n// \"-moz-focus-inner\" removes some inbuilt padding that Firefox adds (taken from reduced-ui-pack)\n// the focus ring is red unless combined with hover, then uses default blue\n\nexport var removeButtonStyles = function removeButtonStyles(_ref) {\n  var backgroundColor = _ref.backgroundColor,\n      backgroundColorHover = _ref.backgroundColorHover,\n      focusBoxShadowColor = _ref.focusBoxShadowColor,\n      hoverBoxShadowColor = _ref.hoverBoxShadowColor;\n  return {\n    position: 'absolute',\n    right: 0,\n    backgroundColor: backgroundColor,\n    alignItems: 'center',\n    alignSelf: 'center',\n    appearance: 'none',\n    border: 'none',\n    borderRadius: defaultBorderRadius,\n    color: N500,\n    display: 'flex',\n    justifyContent: 'center',\n    height: '16px',\n    margin: 0,\n    padding: 0,\n    cursor: 'pointer',\n    '&::-moz-focus-inner': {\n      border: 0,\n      margin: 0,\n      padding: 0\n    },\n    '&:focus': {\n      boxShadow: \"0 0 0 2px \".concat(focusBoxShadowColor, \" inset\"),\n      outline: 'none'\n    },\n    '&:hover': {\n      backgroundColor: \"\".concat(backgroundColorHover, \" !important\"),\n      color: R500\n    }\n  };\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport { forwardRef, memo, useCallback, useMemo, useState } from 'react';\nimport { jsx } from '@emotion/core';\nimport { useCallbackWithAnalytics } from '@atlaskit/analytics-next';\nimport EditorCloseIcon from '@atlaskit/icon/glyph/editor/close';\nimport { ExitingPersistence, ShrinkOut } from '@atlaskit/motion';\nimport GlobalTheme from '@atlaskit/theme/components';\n// eslint-disable-next-line import/order\nimport { getThemeColors } from '../../../theme';\nvar packageName = \"@atlaskit/tag\";\nvar packageVersion = \"11.1.2\";\nimport BaseTag from '../shared/base';\nimport Before from '../shared/before';\nimport Content from '../shared/content';\nimport { chromeLinkStyles, chromeStyles, roundedBorderStyles } from '../shared/styles';\nimport { mergeRefs } from '../shared/utils';\nimport { removeButtonStyles } from './styles';\n\nvar defaultBeforeRemoveAction = function defaultBeforeRemoveAction() {\n  return true;\n};\n\nvar noop = function noop() {};\n\nvar TagStatus;\n\n(function (TagStatus) {\n  TagStatus[\"Showing\"] = \"showing\";\n  TagStatus[\"Removing\"] = \"removing\";\n  TagStatus[\"Removed\"] = \"removed\";\n})(TagStatus || (TagStatus = {}));\n\nvar InnerRemovableTag = /*#__PURE__*/forwardRef(function (props, ref) {\n  var _useState = useState(TagStatus.Showing),\n      _useState2 = _slicedToArray(_useState, 2),\n      status = _useState2[0],\n      setStatus = _useState2[1];\n\n  var _props$appearance = props.appearance,\n      appearance = _props$appearance === void 0 ? 'default' : _props$appearance,\n      _props$elemBefore = props.elemBefore,\n      elemBefore = _props$elemBefore === void 0 ? null : _props$elemBefore,\n      _props$isRemovable = props.isRemovable,\n      isRemovable = _props$isRemovable === void 0 ? true : _props$isRemovable,\n      _props$text = props.text,\n      text = _props$text === void 0 ? '' : _props$text,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'standard' : _props$color,\n      _props$mode = props.mode,\n      mode = _props$mode === void 0 ? 'light' : _props$mode,\n      href = props.href,\n      removeButtonLabel = props.removeButtonLabel,\n      testId = props.testId,\n      _props$onBeforeRemove = props.onBeforeRemoveAction,\n      onBeforeRemoveAction = _props$onBeforeRemove === void 0 ? defaultBeforeRemoveAction : _props$onBeforeRemove,\n      _props$onAfterRemoveA = props.onAfterRemoveAction,\n      onAfterRemoveAction = _props$onAfterRemoveA === void 0 ? noop : _props$onAfterRemoveA;\n  var isRounded = appearance === 'rounded';\n  var isLink = Boolean(href);\n  var onAfterRemoveActionWithAnalytics = useCallbackWithAnalytics(onAfterRemoveAction, {\n    action: 'removed',\n    actionSubject: 'tag',\n    attributes: {\n      componentName: 'tag',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }, 'atlaskit');\n  var handleRemoveComplete = useCallback(function () {\n    onAfterRemoveActionWithAnalytics(text);\n    setStatus(TagStatus.Removed);\n  }, [onAfterRemoveActionWithAnalytics, text]);\n  var handleRemoveRequest = useCallback(function () {\n    if (onBeforeRemoveAction && onBeforeRemoveAction()) {\n      handleRemoveComplete();\n    }\n  }, [handleRemoveComplete, onBeforeRemoveAction]);\n  var onKeyPress = useCallback(function (e) {\n    var spacebarOrEnter = e.key === ' ' || e.key === 'Enter';\n\n    if (spacebarOrEnter) {\n      e.stopPropagation();\n      handleRemoveRequest();\n    }\n  }, [handleRemoveRequest]);\n  var removingTag = useCallback(function () {\n    return setStatus(TagStatus.Removing);\n  }, []);\n  var showingTag = useCallback(function () {\n    return setStatus(TagStatus.Showing);\n  }, []);\n\n  var _useMemo = useMemo(function () {\n    return getThemeColors(color, mode, true);\n  }, [color, mode]),\n      chromeColors = _useMemo.chromeColors,\n      chromeLinkColors = _useMemo.chromeLinkColors,\n      buttonColors = _useMemo.buttonColors,\n      linkHoverColor = _useMemo.linkHoverColor;\n\n  var chromeContainerForLinkStyles = [chromeLinkStyles(chromeLinkColors), isRounded ? roundedBorderStyles : undefined];\n  var chromeContainerStyles = [chromeStyles(_objectSpread({}, chromeColors)), isRounded ? roundedBorderStyles : undefined];\n  var removeButton = isRemovable ? jsx(\"button\", {\n    css: [removeButtonStyles(_objectSpread({}, buttonColors)), isRounded ? roundedBorderStyles : undefined],\n    tabIndex: 0,\n    \"aria-label\": \"\".concat(removeButtonLabel, \" \").concat(text),\n    onClick: handleRemoveRequest,\n    onFocus: removingTag,\n    onBlur: showingTag,\n    onKeyPress: onKeyPress,\n    type: \"button\",\n    \"data-testid\": \"close-button-\".concat(testId)\n  }, jsx(EditorCloseIcon, {\n    label: \"close tag\",\n    size: \"small\"\n  })) : undefined;\n  var tagCss = [].concat(chromeContainerStyles, [isLink ? chromeContainerForLinkStyles : undefined]);\n  var content = jsx(Content, _extends({}, props, {\n    isRemovable: isRemovable,\n    isLink: isLink,\n    isRounded: isRounded,\n    linkHoverColor: linkHoverColor\n  }));\n  return jsx(ExitingPersistence, null, !(status === TagStatus.Removed) && jsx(ShrinkOut, null, function (motion) {\n    return jsx(BaseTag, {\n      ref: mergeRefs(motion.ref, ref),\n      testId: testId,\n      tagCss: tagCss,\n      \"data-removable\": true,\n      \"data-removing\": status === TagStatus.Removing,\n      before: jsx(Before, {\n        isRounded: isRounded,\n        elemBefore: elemBefore,\n        styles: chromeColors\n      }),\n      contentElement: content,\n      after: removeButton\n    });\n  }));\n});\nvar RemovableTag = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (props, ref) {\n  return jsx(GlobalTheme.Consumer, null, function (tokens) {\n    return jsx(InnerRemovableTag, _extends({}, props, {\n      mode: tokens.mode,\n      ref: ref\n    }));\n  });\n}));\nexport default RemovableTag;","import { useCallback } from 'react';\nimport { useAnalyticsEvents } from './useAnalyticsEvents';\nimport { useTrackedRef } from './useTrackedRef';\nexport var useCallbackWithAnalytics = function useCallbackWithAnalytics(method, payload, channel) {\n  var _useAnalyticsEvents = useAnalyticsEvents(),\n      createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;\n\n  var methodRef = useTrackedRef(method);\n  var payloadRef = useTrackedRef(payload);\n  return useCallback(function () {\n    var pload = typeof payloadRef.current === 'function' ? payloadRef.current.apply(payloadRef, arguments) : payloadRef.current;\n    createAnalyticsEvent(pload).fire(channel);\n    methodRef.current.apply(methodRef, arguments);\n  }, [createAnalyticsEvent, methodRef, payloadRef, channel]);\n};","import styled, { css } from 'styled-components';\nimport { fontSize, gridSize } from '@atlaskit/theme/constants';\nimport { placeholderText, text } from '@atlaskit/theme/colors';\nvar gridSizeUnitless = gridSize();\nvar lineHeightDefault = gridSizeUnitless * 2 / fontSize();\n\nvar getPlaceholderStyle = function getPlaceholderStyle(style) {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    \", \" opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    \", \";\\n  }\\n  &:-moz-placeholder {\\n    /* Mozilla Firefox 4 to 18 */\\n    \", \" opacity: 1;\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    \", \";\\n  }\\n\"], style, style, style, style, style);\n};\n\nvar getPlaceholderColor = css([\"\\n  color: \", \";\\n\"], placeholderText);\nvar Content = styled.div.withConfig({\n  displayName: \"Trigger__Content\",\n  componentId: \"p117u5-0\"\n})([\"\\n  flex: 1 1 auto;\\n  margin: 3px \", \"px; /* magic number to make multi-select the same height as field-text. */\\n  white-space: nowrap;\\n  width: 100%;\\n\"], gridSizeUnitless);\nvar Expand = styled.div.withConfig({\n  displayName: \"Trigger__Expand\",\n  componentId: \"p117u5-1\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex: 0 0 \", \"px;\\n  justify-content: center;\\n  margin: 0 \", \"px;\\n\"], gridSizeUnitless * 3, gridSizeUnitless);\nvar Input = styled.input.withConfig({\n  displayName: \"Trigger__Input\",\n  componentId: \"p117u5-2\"\n})([\"\\n  display: inline-block;\\n  flex: 1 0 10px;\\n  margin: 0;\\n  padding: 0;\\n  outline: 0;\\n  border: 0;\\n  background: none;\\n  align-self: center;\\n  font-size: \", \"px;\\n  line-height: \", \";\\n  color: \", \";\\n\\n  \", \";\\n\"], fontSize, lineHeightDefault, text, getPlaceholderStyle(getPlaceholderColor));\nvar TriggerDiv = styled.div.withConfig({\n  displayName: \"Trigger__TriggerDiv\",\n  componentId: \"p117u5-3\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  width: 100%;\\n  min-height: 37px; /* magic number to make multi-select the same height as field-text. */\\n\\n  \", \";\\n\"], function (_ref) {\n  var isDisabled = _ref.isDisabled;\n  return isDisabled ? css([\"\\n          cursor: not-allowed;\\n        \"]) : '';\n});\nexport { Content, Expand, TriggerDiv, Input };","// =============================================================\n// NOTE: Duplicated in ../index and ../StatelessMultiSelect until\n// docgen can follow imports.\n// -------------------------------------------------------------\n// DO NOT update values here without updating the other.\n// =============================================================\nexport var appearances = {\n  values: ['default', 'subtle'],\n  default: 'default'\n};\nvar appearancesMap = {\n  default: 'standard',\n  subtle: 'subtle'\n};\nexport var mapAppearanceToFieldBase = function mapAppearanceToFieldBase(appearance) {\n  return appearancesMap[appearance];\n};","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport { FieldBaseStateless } from '@atlaskit/field-base';\nimport TagGroup from '@atlaskit/tag-group';\nimport Tag from '@atlaskit/tag';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport Spinner from '@atlaskit/spinner';\nimport { Content, Expand, Input, TriggerDiv } from '../styled/Trigger';\nimport { mapAppearanceToFieldBase } from '../internal/appearances'; // =============================================================\n// NOTE: Duplicated in ./internal/appearances until docgen can follow imports.\n// -------------------------------------------------------------\n// DO NOT update values here without updating the other.\n// =============================================================\n\nvar Trigger = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Trigger, _PureComponent);\n\n  var _super = _createSuper(Trigger);\n\n  function Trigger() {\n    _classCallCheck(this, Trigger);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Trigger, [{\n    key: \"render\",\n    // disabled because all of the accessibility is handled manually\n\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          filterValue = _this$props.filterValue,\n          handleItemRemove = _this$props.handleItemRemove,\n          handleOnChange = _this$props.handleOnChange,\n          handleTriggerClick = _this$props.handleTriggerClick,\n          inputRefFunction = _this$props.inputRefFunction,\n          icon = _this$props.icon,\n          isDisabled = _this$props.isDisabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          invalidMessage = _this$props.invalidMessage,\n          isLoading = _this$props.isLoading,\n          isRequired = _this$props.isRequired,\n          onBlur = _this$props.onBlur,\n          onFocus = _this$props.onFocus,\n          placeholder = _this$props.placeholder,\n          selectedItems = _this$props.selectedItems,\n          tagGroupRefFunction = _this$props.tagGroupRefFunction;\n      return /*#__PURE__*/React.createElement(FieldBaseStateless, {\n        appearance: mapAppearanceToFieldBase(appearance),\n        isDisabled: isDisabled,\n        isFitContainerWidthEnabled: true,\n        isDialogOpen: isFocused,\n        isFocused: isFocused,\n        isInvalid: isInvalid,\n        invalidMessage: invalidMessage,\n        isPaddingDisabled: true,\n        isRequired: isRequired,\n        onBlur: onBlur,\n        onFocus: onFocus\n      }, /*#__PURE__*/React.createElement(TriggerDiv, {\n        isDisabled: isDisabled,\n        onClick: handleTriggerClick\n      }, /*#__PURE__*/React.createElement(Content, null, /*#__PURE__*/React.createElement(TagGroup, {\n        ref: tagGroupRefFunction\n      }, selectedItems.map(function (item) {\n        return /*#__PURE__*/React.createElement(Tag, {\n          appearance: item.tag ? item.tag.appearance : undefined,\n          elemBefore: item.tag ? item.tag.elemBefore : undefined,\n          key: item.value,\n          onAfterRemoveAction: function onAfterRemoveAction() {\n            handleItemRemove(item);\n          },\n          removeButtonText: isDisabled ? undefined : \"\".concat(item.content, \", remove\"),\n          text: item.content\n        });\n      }), isDisabled ? null : /*#__PURE__*/React.createElement(Input, {\n        disabled: isDisabled,\n        onChange: handleOnChange,\n        placeholder: placeholder,\n        innerRef: inputRefFunction,\n        type: \"text\",\n        value: filterValue\n      }))), /*#__PURE__*/React.createElement(Expand, null, isFocused && isLoading ? /*#__PURE__*/React.createElement(Spinner, null) : icon)));\n    }\n    /* eslint-enable jsx-a11y/no-static-element-interactions */\n\n  }]);\n\n  return Trigger;\n}(PureComponent);\n\n_defineProperty(Trigger, \"defaultProps\", {\n  isDisabled: false,\n  isLoading: false,\n  onClick: function onClick() {},\n  icon: /*#__PURE__*/React.createElement(ExpandIcon, {\n    label: \"\"\n  })\n});\n\nexport { Trigger as default };","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { N40A } from '@atlaskit/theme/colors';\nvar FooterDiv = styled.div.withConfig({\n  displayName: \"Footer__FooterDiv\",\n  componentId: \"sc-1xuos4y-0\"\n})([\"\\n  padding: \", \"px 0 \", \"px 0;\\n  border-top: \", \";\\n\"], gridSize(), gridSize() / 2, function (_ref) {\n  var shouldHideSeparator = _ref.shouldHideSeparator;\n  return shouldHideSeparator ? '0' : \"2px solid \".concat(N40A);\n});\nexport default FooterDiv;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport { Item } from '@atlaskit/droplist';\nimport FooterDiv from '../styled/Footer';\n\nvar Footer = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Footer, _PureComponent);\n\n  var _super = _createSuper(Footer);\n\n  function Footer() {\n    _classCallCheck(this, Footer);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Footer, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          elemBefore = _this$props.elemBefore,\n          isFocused = _this$props.isFocused,\n          onClick = _this$props.onClick,\n          shouldHideSeparator = _this$props.shouldHideSeparator;\n      return /*#__PURE__*/React.createElement(FooterDiv, {\n        onClick: onClick,\n        shouldHideSeparator: shouldHideSeparator\n      }, /*#__PURE__*/React.createElement(Item, {\n        appearance: appearance,\n        elemBefore: elemBefore,\n        isFocused: isFocused,\n        type: \"option\"\n      }, children));\n    }\n  }]);\n\n  return Footer;\n}(PureComponent);\n\nexport { Footer as default };","/**\n * Try to match with filterValues first. If it's not provided, then match with content.\n */\nvar isMatched = function isMatched(item, matchingValue) {\n  var filterValues = item.filterValues;\n\n  if (filterValues && filterValues.length > 0) {\n    return filterValues.some(function (value) {\n      return value.toLowerCase().indexOf(matchingValue) > -1;\n    });\n  }\n\n  return item.content.toLowerCase().indexOf(matchingValue) > -1;\n};\n\nvar filterItems = function filterItems(items, filterValue, selectedItems) {\n  var value = filterValue;\n  var trimmedValue = value && value.toLowerCase().trim();\n  var selectedValues = selectedItems ? selectedItems.map(function (item) {\n    return item.value;\n  }) : [];\n  var unselectedItems = items.filter(function (item) {\n    return selectedValues.indexOf(item.value) === -1;\n  });\n  return trimmedValue ? unselectedItems.filter(function (item) {\n    return isMatched(item, trimmedValue);\n  }) : unselectedItems;\n};\n\nvar getNextFocusable = function getNextFocusable(indexItem, length) {\n  var footerIsFocusable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var currentItem = indexItem;\n  var footerShouldBeFocused = footerIsFocusable && currentItem === length - 1;\n\n  if (currentItem == null) {\n    currentItem = 0;\n  } else if (currentItem < length - 1) {\n    currentItem++;\n  } else if (footerShouldBeFocused) {\n    currentItem = length;\n  } else {\n    currentItem = 0;\n  }\n\n  return currentItem;\n};\n\nvar getPrevFocusable = function getPrevFocusable(indexItem, length) {\n  var footerIsFocusable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var currentItem = indexItem;\n  var footerShouldBeFocused = footerIsFocusable && currentItem === 0;\n\n  if (currentItem && currentItem > 0) {\n    currentItem--;\n  } else if (footerShouldBeFocused) {\n    currentItem = length;\n  } else {\n    currentItem = length - 1;\n  }\n\n  return currentItem;\n}; // This function exists because mutliselect supports two slightly different APIs when it comes to\n// the `items` prop. One way is an array of Items\n// i.e [{ content: 'one', value: 1}, { content: 'two', value: 2}, { content: 'three', value: 3}]\n// the other is what can be thought of as an array of Groups\n// i.e [{ heading: 'numbers', items: [...] }, { heading: 'letters', items: [...] }]\n// In this form, the items array matches the one we see above.\n// This function normalises `items` so that it will always be in the later form\n\n\nvar groupItems = function groupItems(items) {\n  var firstItem = items[0] || {};\n  return Array.isArray(firstItem.items) ? items : convertToGroupType(items);\n};\n\nvar convertToGroupType = function convertToGroupType(items) {\n  return [{\n    items: items\n  }];\n};\n\nexport { filterItems, getNextFocusable, getPrevFocusable, groupItems };","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme/constants';\nvar NoMatches = styled.div.withConfig({\n  displayName: \"NoMatch__NoMatches\",\n  componentId: \"sc-1au7ofu-0\"\n})([\"\\n  padding: 6px \", \"px;\\n\"], gridSize() * 3);\nexport default NoMatches;","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme/constants';\nvar InitialLoading = styled.div.withConfig({\n  displayName: \"InitialLoading\",\n  componentId: \"vq33zx-0\"\n})([\"\\n  padding: 6px \", \"px;\\n\"], gridSize() * 3);\nexport default InitialLoading;","import styled from 'styled-components';\nimport { gridSize } from '@atlaskit/theme/constants'; // we apply overflow and maxheight to the GroupWrapper if we are displaying a footer so that the\n// footer is 'sticky' to the bottom (always visible)\n\nvar GroupsContainer = styled.div.withConfig({\n  displayName: \"GroupsContainer\",\n  componentId: \"sc-1dbou9n-0\"\n})([\"\\n  overflow: \", \";\\n  max-height: \", \";\\n\"], function (_ref) {\n  var hasFooter = _ref.hasFooter;\n  return hasFooter ? 'auto' : 'visible';\n}, function (_ref2) {\n  var hasFooter = _ref2.hasFooter;\n  return hasFooter ? \"\".concat(gridSize() * 4 * 9.5, \"px\") : 'none';\n});\nexport default GroupsContainer;","import _extends from \"@babel/runtime/helpers/extends\";\n\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport { Item, Group } from '@atlaskit/droplist';\nimport NoMatches from '../styled/NoMatch';\nimport InitialLoading from '../styled/InitialLoading';\nimport GroupsContainer from '../styled/GroupsContainer';\nimport { filterItems } from '../internal/sharedFunctions';\n\nvar renderItems = function renderItems(_ref) {\n  var items = _ref.items,\n      focusedItemIndex = _ref.focusedItemIndex,\n      handleItemSelect = _ref.handleItemSelect;\n\n  if (items && items.length) {\n    return items.map(function (item, itemIndex) {\n      return /*#__PURE__*/React.createElement(Item, _extends({}, item, {\n        elemBefore: item.elemBefore,\n        isFocused: itemIndex === focusedItemIndex,\n        key: itemIndex // eslint-disable-line react/no-array-index-key\n        ,\n        onActivate: function onActivate(attrs) {\n          handleItemSelect(item, attrs);\n        }\n      }), item.content);\n    });\n  }\n\n  return null;\n};\n\nvar renderNoItemsMessage = function renderNoItemsMessage(noMatchesFound) {\n  return /*#__PURE__*/React.createElement(NoMatches, null, noMatchesFound);\n};\n\nvar renderLoadingMessage = function renderLoadingMessage(loadingMessage) {\n  return /*#__PURE__*/React.createElement(InitialLoading, {\n    \"aria-live\": \"polite\",\n    role: \"status\"\n  }, loadingMessage);\n};\n\nvar renderMessageForEmptyList = function renderMessageForEmptyList(_ref2) {\n  var noMatchesFound = _ref2.noMatchesFound,\n      isLoading = _ref2.isLoading,\n      loadingMessage = _ref2.loadingMessage;\n  return isLoading ? renderLoadingMessage(loadingMessage) : renderNoItemsMessage(noMatchesFound);\n};\n\nvar renderGroups = function renderGroups(_ref3) {\n  var filterValue = _ref3.filterValue,\n      focusedItemIndex = _ref3.focusedItemIndex,\n      hasFooter = _ref3.hasFooter,\n      groups = _ref3.groups,\n      handleItemSelect = _ref3.handleItemSelect,\n      noMatchesFound = _ref3.noMatchesFound,\n      selectedItems = _ref3.selectedItems,\n      shouldAllowCreateItem = _ref3.shouldAllowCreateItem,\n      isLoading = _ref3.isLoading,\n      loadingMessage = _ref3.loadingMessage;\n  var renderedGroups = groups.map(function (group, groupIndex) {\n    var filteredItems = filterItems(group.items, filterValue, selectedItems);\n    return filteredItems.length > 0 ? /*#__PURE__*/React.createElement(Group, {\n      heading: group.heading,\n      key: groupIndex // eslint-disable-line react/no-array-index-key\n\n    }, renderItems({\n      items: filteredItems,\n      focusedItemIndex: focusedItemIndex,\n      handleItemSelect: handleItemSelect\n    })) : null;\n  }).filter(function (group) {\n    return !!group;\n  }); // don't show the 'noItems' message when the new item functinality is enabled\n\n  return renderedGroups.length > 0 || shouldAllowCreateItem ? /*#__PURE__*/React.createElement(GroupsContainer, {\n    hasFooter: hasFooter\n  }, renderedGroups) : renderMessageForEmptyList({\n    noMatchesFound: noMatchesFound,\n    isLoading: isLoading,\n    loadingMessage: loadingMessage\n  });\n};\n\nexport default renderGroups;","import React from 'react';\n\nvar renderOptions = function renderOptions(items) {\n  if (!items || !items.length) return [];\n  return items.map(function (item, itemIndex) {\n    return /*#__PURE__*/React.createElement(\"option\", {\n      disabled: item.isDisabled,\n      key: itemIndex // eslint-disable-line react/no-array-index-key\n      ,\n      value: item.value\n    }, item.content);\n  });\n};\n\nvar renderOptGroups = function renderOptGroups(groups) {\n  return groups.map(function (group, groupIndex) {\n    return /*#__PURE__*/React.createElement(\"optgroup\", {\n      key: groupIndex // eslint-disable-line react/no-array-index-key\n      ,\n      label: group.heading\n    }, renderOptions(group.items));\n  });\n};\n\nexport default renderOptGroups;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport ReactDOM from 'react-dom';\nimport Droplist from '@atlaskit/droplist';\nimport { Label } from '@atlaskit/field-base';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport { SelectWrapper } from '../styled/Stateless';\nimport Trigger from './Trigger';\nimport Footer from './Footer';\nimport { filterItems, getNextFocusable, getPrevFocusable, groupItems } from '../internal/sharedFunctions';\nimport renderGroups from './Groups';\nimport renderOptGroups from './Options'; // =============================================================\n// NOTE: Duplicated in ./internal/appearances until docgen can follow imports.\n// -------------------------------------------------------------\n// DO NOT update values here without updating the other.\n// =============================================================\n\nvar appearances = {\n  values: ['default', 'subtle'],\n  default: 'default'\n};\n\nvar getAllValues = function getAllValues(selectedItems) {\n  return selectedItems.map(function (item) {\n    return item.value;\n  });\n};\n/*\n\n==============================+\nCOMPONENT CODE BEGINS HERE\n==============================+\n\n*/\n\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('@atlaskit/multi-select has been deprecated. Please use the @atlaskit/select package instead.');\n}\n\nvar StatelessMultiSelect = /*#__PURE__*/function (_PureComponent) {\n  _inherits(StatelessMultiSelect, _PureComponent);\n\n  var _super = _createSuper(StatelessMultiSelect);\n\n  function StatelessMultiSelect() {\n    var _this;\n\n    _classCallCheck(this, StatelessMultiSelect);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      isFocused: _this.props.isOpen || _this.props.shouldFocus,\n      focusedItemIndex: undefined,\n      groupedItems: groupItems(_this.props.items)\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidMount\", function () {\n      if (_this.state.isFocused && _this.inputNode) {\n        _this.inputNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"UNSAFE_componentWillReceiveProps\", function (nextProps) {\n      if (_this.props.items !== nextProps.items) {\n        _this.setState({\n          groupedItems: groupItems(nextProps.items)\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidUpdate\", function (prevProps) {\n      if (!prevProps.shouldFocus && _this.props.shouldFocus && _this.inputNode) {\n        _this.inputNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onFocus\", function () {\n      if (!_this.props.isDisabled) {\n        _this.setState({\n          isFocused: true\n        });\n        /**\n         * Check if we're tabbing to the Remove button on a tag.\n         * This is a hacky workaround for now and should be fixed when\n         * we implement proper traversal for tags with the keyboard.\n         *\n         * @see {@link https://ecosystem.atlassian.net/browse/AK-2250}\n         * @todo Implement traversal of tags with arrow keys, then remove this.\n         */\n\n\n        if (document.activeElement && document.activeElement.tagName.toLowerCase() !== 'button' && _this.inputNode) {\n          _this.inputNode.focus();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n      if (!_this.props.isDisabled) {\n        _this.setState({\n          isFocused: false\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onOpenChange\", function (attrs) {\n      var target = attrs.event.currentTarget; // eslint-disable-next-line react/no-find-dom-node\n\n      var tagGroup = ReactDOM.findDOMNode(_this.tagGroup);\n      var tagGroupElements = tagGroup ? tagGroup.children : [];\n\n      var isInsideTagGroup = _toConsumableArray(tagGroupElements).some(function (node) {\n        return node.contains(target) && node.tagName !== 'INPUT';\n      });\n\n      var args = _objectSpread(_objectSpread({}, attrs), {}, {\n        inputNode: _this.inputNode\n      });\n\n      if (!isInsideTagGroup) {\n        _this.props.onOpenChange(args);\n      }\n\n      var tagInput = tagGroup ? tagGroup.querySelector('input') : undefined;\n\n      if (attrs.isOpen && tagInput) {\n        tagInput.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getPlaceholder\", function () {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          selectedItems = _this$props.selectedItems,\n          placeholder = _this$props.placeholder;\n\n      if (!isOpen && selectedItems.length === 0) {\n        return placeholder;\n      }\n\n      return undefined;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAllVisibleItems\", function (groups) {\n      var _this$props2 = _this.props,\n          filterValue = _this$props2.filterValue,\n          selectedItems = _this$props2.selectedItems;\n      return groups.reduce(function (allFilteredItems, val) {\n        var filteredItems = filterItems(val.items, filterValue, selectedItems);\n        return allFilteredItems.concat(filteredItems);\n      }, []);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemCreate\", function (event) {\n      var _this$props3 = _this.props,\n          value = _this$props3.filterValue,\n          items = _this$props3.items;\n\n      if (value) {\n        var allVisible = _this.getAllVisibleItems(items);\n\n        var matchingElement = allVisible.filter(function (item) {\n          return item.content === value;\n        });\n\n        if (!matchingElement.length) {\n          if (_this.props.onNewItemCreated) {\n            _this.props.onNewItemCreated({\n              value: value\n            });\n          }\n        } else {\n          _this.handleItemSelect(matchingElement[0], {\n            event: event\n          });\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemSelect\", function (item, attrs) {\n      if (!_this.isFooterFocused()) {\n        // we short circuit above because when focusing on footer we don't have `item`.\n        // We could look at adding item.disabled in the future though if required.\n        if (!item.isDisabled) {\n          _this.props.onOpenChange({\n            isOpen: false,\n            event: attrs.event\n          });\n\n          _this.props.onSelected(item);\n\n          _this.props.onFilterChange('');\n\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n        }\n      } else if (_this.props.shouldAllowCreateItem) {\n        _this.handleItemCreate(attrs.event);\n      } else {\n        // footer is focused and we dont have shouldAllowCreateItem so call the footer's onActivate\n        _this.handleFooterActivate(attrs.event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemRemove\", function (item) {\n      _this.props.onRemoved(item);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"removeLatestItem\", function () {\n      if (_this.props.selectedItems.length) {\n        var selectedItems = _this.props.selectedItems;\n\n        _this.handleItemRemove(selectedItems[selectedItems.length - 1]);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"hasVisibleFooter\", function () {\n      var _this$props4 = _this.props,\n          footer = _this$props4.footer,\n          shouldAllowCreateItem = _this$props4.shouldAllowCreateItem,\n          filterValue = _this$props4.filterValue; // This logic is interesting because we explicitly check !multiSelectContainer with footer\n      // because if you have both turned on but you havent typed anything, there will be no footer\n\n      return footer && footer.content && !shouldAllowCreateItem || shouldAllowCreateItem && !!filterValue;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"isFooterFocused\", function () {\n      var _this$state = _this.state,\n          focusedItemIndex = _this$state.focusedItemIndex,\n          groupedItems = _this$state.groupedItems;\n\n      var selectableItems = _this.getAllVisibleItems(groupedItems); // if our selected index is outside of our array bounds, the footer should be selected\n\n\n      return focusedItemIndex === selectableItems.length;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOnChange\", function (event) {\n      var value = event.currentTarget.value;\n\n      if (value !== _this.props.filterValue) {\n        // We want to get rid of the focus on the items when the shouldAllowCreateItem enabled.\n        // When a user presses Enter multi-select should create a new value if nothing is focused, but\n        // it still should allow to focus an item in the list and select it by pressing Enter\n        // as normal multi-select does.\n        if (_this.props.shouldAllowCreateItem) {\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n        }\n\n        _this.props.onFilterChange(value);\n\n        _this.onOpenChange({\n          event: event,\n          isOpen: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleTriggerClick\", function (event) {\n      if (!_this.props.isDisabled) {\n        _this.onOpenChange({\n          event: event,\n          isOpen: true\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleFooterActivate\", function (event) {\n      var footer = _this.props.footer;\n\n      if (footer && footer.onActivate) {\n        footer.onActivate(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusNextItem\", function () {\n      var filteredItems = _this.getAllVisibleItems(_this.props.items);\n\n      var footerIsFocusable = _this.hasVisibleFooter();\n\n      var focusedItemIndex = _this.state.focusedItemIndex;\n\n      _this.setState({\n        focusedItemIndex: getNextFocusable(focusedItemIndex, filteredItems.length, footerIsFocusable)\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusPreviousItem\", function () {\n      var filteredItems = _this.getAllVisibleItems(_this.props.items);\n\n      var footerIsFocusable = _this.hasVisibleFooter();\n\n      var focusedItemIndex = _this.state.focusedItemIndex;\n\n      _this.setState({\n        focusedItemIndex: getPrevFocusable(focusedItemIndex, filteredItems.length, footerIsFocusable)\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyboardInteractions\", function (event) {\n      var _this$props5 = _this.props,\n          isOpen = _this$props5.isOpen,\n          items = _this$props5.items,\n          filterValue = _this$props5.filterValue;\n      var focusedItemIndex = _this.state.focusedItemIndex;\n      var isSelectOpen = isOpen;\n\n      switch (event.key) {\n        case 'ArrowDown':\n          event.preventDefault();\n\n          if (!isSelectOpen) {\n            _this.onOpenChange({\n              event: event,\n              isOpen: true\n            });\n          }\n\n          _this.focusNextItem();\n\n          break;\n\n        case 'ArrowUp':\n          event.preventDefault();\n\n          if (isSelectOpen) {\n            _this.focusPreviousItem();\n          }\n\n          break;\n\n        case 'Enter':\n          if (isSelectOpen) {\n            event.preventDefault();\n\n            if (focusedItemIndex != null) {\n              _this.handleItemSelect(_this.getAllVisibleItems(items)[focusedItemIndex], {\n                event: event\n              });\n            } else if (_this.props.shouldAllowCreateItem) {\n              _this.handleItemCreate(event);\n            }\n          }\n\n          break;\n\n        case 'Backspace':\n          if (!filterValue) {\n            _this.removeLatestItem();\n\n            _this.onOpenChange({\n              event: event,\n              isOpen: true\n            });\n          }\n\n          break;\n\n        case 'Tab':\n          // tabbing from within the multi select should move focus to the next form element\n          // hence, we close the dropdown and clear the focusedItemIndex\n          _this.onOpenChange({\n            event: event,\n            isOpen: false\n          });\n\n          _this.setState({\n            focusedItemIndex: undefined\n          });\n\n          break;\n\n        default:\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderFooter\", function () {\n      var _this$props6 = _this.props,\n          newValue = _this$props6.filterValue,\n          shouldAllowCreateItem = _this$props6.shouldAllowCreateItem,\n          footer = _this$props6.footer,\n          createNewItemLabel = _this$props6.createNewItemLabel;\n\n      if (shouldAllowCreateItem) {\n        if (newValue) {\n          return /*#__PURE__*/React.createElement(Footer, {\n            appearance: footer && footer.appearance,\n            isFocused: _this.isFooterFocused(),\n            newLabel: _this.props.createNewItemLabel,\n            onClick: _this.handleItemCreate,\n            shouldHideSeparator: !_this.getAllVisibleItems(_this.props.items).length\n          }, newValue, \" (\", createNewItemLabel, \")\");\n        }\n      } else if (footer && footer.content) {\n        return /*#__PURE__*/React.createElement(Footer, {\n          appearance: footer.appearance,\n          elemBefore: footer.elemBefore,\n          isFocused: _this.isFooterFocused(),\n          onClick: _this.handleFooterActivate,\n          shouldHideSeparator: !_this.getAllVisibleItems(_this.props.items).length\n        }, footer.content);\n      }\n\n      return null;\n    });\n\n    return _this;\n  }\n\n  _createClass(StatelessMultiSelect, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props7 = this.props,\n          appearance = _this$props7.appearance,\n          filterValue = _this$props7.filterValue,\n          id = _this$props7.id,\n          isDisabled = _this$props7.isDisabled,\n          isFirstChild = _this$props7.isFirstChild,\n          isInvalid = _this$props7.isInvalid,\n          invalidMessage = _this$props7.invalidMessage,\n          isLoading = _this$props7.isLoading,\n          isOpen = _this$props7.isOpen,\n          isRequired = _this$props7.isRequired,\n          label = _this$props7.label,\n          loadingMessage = _this$props7.loadingMessage,\n          name = _this$props7.name,\n          noMatchesFound = _this$props7.noMatchesFound,\n          position = _this$props7.position,\n          selectedItems = _this$props7.selectedItems,\n          shouldAllowCreateItem = _this$props7.shouldAllowCreateItem,\n          shouldFitContainer = _this$props7.shouldFitContainer,\n          shouldFlip = _this$props7.shouldFlip;\n      var _this$state2 = this.state,\n          groupedItems = _this$state2.groupedItems,\n          isFocused = _this$state2.isFocused,\n          focusedItemIndex = _this$state2.focusedItemIndex;\n      return (\n        /*#__PURE__*/\n        // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n        React.createElement(SelectWrapper, {\n          shouldFitContainer: shouldFitContainer,\n          onKeyDown: this.handleKeyboardInteractions\n        }, /*#__PURE__*/React.createElement(\"select\", {\n          disabled: isDisabled,\n          id: id,\n          multiple: true,\n          name: name,\n          readOnly: true,\n          required: isRequired,\n          style: {\n            display: 'none'\n          },\n          value: getAllValues(selectedItems)\n        }, renderOptGroups(groupedItems)), label ? /*#__PURE__*/React.createElement(Label, {\n          htmlFor: id,\n          isDisabled: isDisabled,\n          isFirstChild: isFirstChild,\n          isRequired: isRequired,\n          label: label\n        }) : null, /*#__PURE__*/React.createElement(Droplist, {\n          appearance: this.hasVisibleFooter() ? 'tall' : 'default',\n          isKeyboardInteractionDisabled: true,\n          isOpen: isOpen,\n          isTriggerDisabled: true,\n          isTriggerNotTabbable: true,\n          onOpenChange: this.onOpenChange,\n          position: position,\n          shouldFitContainer: true,\n          shouldFlip: shouldFlip,\n          trigger: /*#__PURE__*/React.createElement(Trigger, {\n            appearance: appearance,\n            filterValue: filterValue,\n            handleItemRemove: this.handleItemRemove,\n            handleOnChange: this.handleOnChange,\n            handleTriggerClick: this.handleTriggerClick,\n            inputNode: this.inputNode,\n            inputRefFunction: function inputRefFunction(ref) {\n              _this2.inputNode = ref;\n            },\n            isDisabled: isDisabled,\n            isFocused: isOpen || isFocused,\n            isInvalid: isInvalid,\n            invalidMessage: invalidMessage,\n            isLoading: isLoading,\n            isRequired: isRequired,\n            onBlur: this.onBlur,\n            onFocus: this.onFocus,\n            placeholder: this.getPlaceholder(),\n            selectedItems: selectedItems,\n            tagGroup: this.tagGroup,\n            tagGroupRefFunction: function tagGroupRefFunction(ref) {\n              _this2.tagGroup = ref;\n            },\n            icon: this.props.icon\n          })\n        }, renderGroups({\n          groups: groupedItems,\n          hasFooter: this.hasVisibleFooter(),\n          filterValue: filterValue,\n          selectedItems: selectedItems,\n          noMatchesFound: noMatchesFound,\n          focusedItemIndex: focusedItemIndex,\n          handleItemSelect: this.handleItemSelect,\n          shouldAllowCreateItem: shouldAllowCreateItem,\n          isLoading: isLoading,\n          loadingMessage: loadingMessage\n        }), this.renderFooter()))\n      );\n    }\n  }]);\n\n  return StatelessMultiSelect;\n}(PureComponent);\n\n_defineProperty(StatelessMultiSelect, \"defaultProps\", {\n  appearance: appearances.default,\n  createNewItemLabel: 'New item',\n  filterValue: '',\n  footer: {},\n  shouldFocus: false,\n  shouldFlip: true,\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  label: '',\n  loadingMessage: 'Receiving information',\n  noMatchesFound: 'No matches found',\n  onFilterChange: function onFilterChange() {},\n  onOpenChange: function onOpenChange() {},\n  onSelected: function onSelected() {},\n  onRemoved: function onRemoved() {},\n  position: 'bottom left',\n  selectedItems: [],\n  shouldAllowCreateItem: false,\n  icon: /*#__PURE__*/React.createElement(ExpandIcon, {\n    label: \"\"\n  })\n});\n\nexport { StatelessMultiSelect as default };","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/react');\n","/* @flow */\n\nimport Button from '@atlaskit/button/standard-button';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../i18n';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of {@link InlineDialogFailure}.\n */\ntype Props = {\n\n    /**\n     * Allows to retry the call that previously didn't succeed.\n     */\n    onRetry: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n\n    /**\n     * Indicates whether the support link should be shown in case of an error\n     */\n     showSupportLink: Boolean,\n};\n\n/**\n * Inline dialog that represents a failure and allows a retry.\n */\nclass InlineDialogFailure extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t, showSupportLink } = this.props;\n\n        const supportLink = interfaceConfig.SUPPORT_URL;\n        const supportString = t('inlineDialogFailure.supportMsg');\n        const supportLinkElem\n            = supportLink && showSupportLink\n                ? (\n                    <div className = 'inline-dialog-error-text'>\n                        <span>{ supportString.padEnd(supportString.length + 1) }\n                        </span>\n                        <span>\n                            <a\n                                href = { supportLink }\n                                rel = 'noopener noreferrer'\n                                target = '_blank'>\n                                { t('inlineDialogFailure.support') }\n                            </a>\n                        </span>\n                        <span>.</span>\n                    </div>\n                )\n                : null;\n\n        return (\n            <div className = 'inline-dialog-error'>\n                <div className = 'inline-dialog-error-text'>\n                    { t('inlineDialogFailure.msg') }\n                </div>\n                { supportLinkElem }\n                <Button\n                    className = 'inline-dialog-error-button'\n                    onClick = { this.props.onRetry } >\n                    { t('inlineDialogFailure.retry') }\n                </Button>\n            </div>\n        );\n    }\n}\n\nexport default translate(InlineDialogFailure);\n","// @flow\n\nimport AKInlineDialog from '@atlaskit/inline-dialog';\nimport { MultiSelectStateless } from '@atlaskit/multi-select';\nimport _debounce from 'lodash/debounce';\nimport React, { Component } from 'react';\n\nimport logger from '../../logger';\n\nimport InlineDialogFailure from './InlineDialogFailure';\n\n/**\n * The type of the React {@code Component} props of\n * {@link MultiSelectAutocomplete}.\n */\ntype Props = {\n\n    /**\n     * The default value of the selected item.\n     */\n    defaultValue: Array<Object>,\n\n    /**\n     * Optional footer to show as a last element in the results.\n     * Should be of type {content: <some content>}\n     */\n    footer: Object,\n\n    /**\n     * Indicates if the component is disabled.\n     */\n    isDisabled: boolean,\n\n    /**\n     * Text to display while a query is executing.\n     */\n    loadingMessage: string,\n\n    /**\n     * The text to show when no matches are found.\n     */\n    noMatchesFound: string,\n\n    /**\n     * The function called immediately before a selection has been actually\n     * selected. Provides an opportunity to do any formatting.\n     */\n    onItemSelected: Function,\n\n    /**\n     * The function called when the selection changes.\n     */\n    onSelectionChange: Function,\n\n    /**\n     * The placeholder text of the input component.\n     */\n    placeholder: string,\n\n    /**\n     * The service providing the search.\n     */\n    resourceClient: { makeQuery: Function, parseResults: Function },\n\n    /**\n     * Indicates if the component should fit the container.\n     */\n    shouldFitContainer: boolean,\n\n    /**\n     * Indicates if we should focus.\n     */\n    shouldFocus: boolean,\n\n    /**\n     * Indicates whether the support link should be shown in case of an error\n     */\n    showSupportLink: Boolean,\n};\n\n/**\n * The type of the React {@code Component} state of\n * {@link MultiSelectAutocomplete}.\n */\ntype State = {\n\n    /**\n     * Indicates if the dropdown is open.\n     */\n    isOpen: boolean,\n\n    /**\n     * The text that filters the query result of the search.\n     */\n    filterValue: string,\n\n    /**\n     * Indicates if the component is currently loading results.\n     */\n    loading: boolean,\n\n    /**\n     * Indicates if there was an error.\n     */\n    error: boolean,\n\n    /**\n     * The list of result items.\n     */\n    items: Array<Object>,\n\n    /**\n     * The list of selected items.\n     */\n    selectedItems: Array<Object>\n};\n\n/**\n * A MultiSelect that is also auto-completing.\n */\nclass MultiSelectAutocomplete extends Component<Props, State> {\n    /**\n     * Initializes a new {@code MultiSelectAutocomplete} instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const defaultValue = this.props.defaultValue || [];\n\n        this.state = {\n            isOpen: false,\n            filterValue: '',\n            loading: false,\n            error: false,\n            items: [],\n            selectedItems: [ ...defaultValue ]\n        };\n\n        this._onFilterChange = this._onFilterChange.bind(this);\n        this._onRetry = this._onRetry.bind(this);\n        this._onSelectionChange = this._onSelectionChange.bind(this);\n        this._sendQuery = _debounce(this._sendQuery.bind(this), 200);\n    }\n\n    /**\n     * Sets the items to display as selected.\n     *\n     * @param {Array<Object>} selectedItems - The list of items to display as\n     * having been selected.\n     * @returns {void}\n     */\n    setSelectedItems(selectedItems: Array<Object> = []) {\n        this.setState({ selectedItems });\n    }\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const shouldFitContainer = this.props.shouldFitContainer || false;\n        const shouldFocus = this.props.shouldFocus || false;\n        const isDisabled = this.props.isDisabled || false;\n        const placeholder = this.props.placeholder || '';\n        const noMatchesFound = this.props.noMatchesFound || '';\n\n        return (\n            <div>\n                <MultiSelectStateless\n                    filterValue = { this.state.filterValue }\n                    footer = { this.props.footer }\n                    icon = { null }\n                    isDisabled = { isDisabled }\n                    isLoading = { this.state.loading }\n                    isOpen = { this.state.isOpen }\n                    items = { this.state.items }\n                    loadingMessage = { this.props.loadingMessage }\n                    noMatchesFound = { noMatchesFound }\n                    onFilterChange = { this._onFilterChange }\n                    onRemoved = { this._onSelectionChange }\n                    onSelected = { this._onSelectionChange }\n                    placeholder = { placeholder }\n                    selectedItems = { this.state.selectedItems }\n                    shouldFitContainer = { shouldFitContainer }\n                    shouldFocus = { shouldFocus } />\n                { this._renderError() }\n            </div>\n        );\n    }\n\n    _onFilterChange: (string) => void;\n\n    /**\n     * Sets the state and sends a query on filter change.\n     *\n     * @param {string} filterValue - The filter text value.\n     * @private\n     * @returns {void}\n     */\n    _onFilterChange(filterValue) {\n        this.setState({\n            // Clean the error if the filterValue is empty.\n            error: this.state.error && Boolean(filterValue),\n            filterValue,\n            isOpen: Boolean(this.state.items.length) && Boolean(filterValue),\n            items: filterValue ? this.state.items : [],\n            loading: Boolean(filterValue)\n        });\n        if (filterValue) {\n            this._sendQuery(filterValue);\n        }\n    }\n\n    _onRetry: () => void;\n\n    /**\n     * Retries the query on retry.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRetry() {\n        this._sendQuery(this.state.filterValue);\n    }\n\n    _onSelectionChange: (Object) => void;\n\n    /**\n     * Updates the selected items when a selection event occurs.\n     *\n     * @param {Object} item - The selected item.\n     * @private\n     * @returns {void}\n     */\n    _onSelectionChange(item) {\n        const existing\n            = this.state.selectedItems.find(k => k.value === item.value);\n        let selectedItems = this.state.selectedItems;\n\n        if (existing) {\n            selectedItems = selectedItems.filter(k => k !== existing);\n        } else {\n            selectedItems.push(this.props.onItemSelected(item));\n        }\n        this.setState({\n            isOpen: false,\n            selectedItems\n        });\n\n        if (this.props.onSelectionChange) {\n            this.props.onSelectionChange(selectedItems);\n        }\n    }\n\n    /**\n     * Renders the error UI.\n     *\n     * @returns {ReactElement|null}\n     */\n    _renderError() {\n        if (!this.state.error) {\n            return null;\n        }\n        const content = (\n            <div className = 'autocomplete-error'>\n                <InlineDialogFailure\n                    onRetry = { this._onRetry }\n                    showSupportLink = { this.props.showSupportLink } />\n            </div>\n        );\n\n        return (\n            <AKInlineDialog\n                content = { content }\n                isOpen = { true } />\n        );\n    }\n\n    _sendQuery: (string) => void;\n\n    /**\n     * Sends a query to the resourceClient.\n     *\n     * @param {string} filterValue - The string to use for the search.\n     * @returns {void}\n     */\n    _sendQuery(filterValue) {\n        if (!filterValue) {\n            return;\n        }\n\n        this.setState({\n            error: false\n        });\n\n        const resourceClient = this.props.resourceClient || {\n            makeQuery: () => Promise.resolve([]),\n            parseResults: results => results\n        };\n\n        resourceClient.makeQuery(filterValue)\n            .then(results => {\n                if (this.state.filterValue !== filterValue) {\n                    this.setState({\n                        error: false\n                    });\n\n                    return;\n                }\n                const itemGroups = [\n                    {\n                        items: resourceClient.parseResults(results)\n                    }\n                ];\n\n                this.setState({\n                    items: itemGroups,\n                    isOpen: true,\n                    loading: false,\n                    error: false\n                });\n            })\n            .catch(error => {\n                logger.error('MultiSelectAutocomplete error in query', error);\n\n                this.setState({\n                    error: true,\n                    loading: false,\n                    isOpen: false\n                });\n            });\n    }\n}\n\nexport default MultiSelectAutocomplete;\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport type { Item } from '../../Types';\n\nimport Container from './Container';\nimport Text from './Text';\n\n/**\n * The type of the React {@code Component} props of\n * {@link NavigateSectionListItem}.\n */\ntype Props = {\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: ?Function,\n\n    /**\n     * A item containing data to be rendered\n     */\n    item: Item\n};\n\n/**\n * Implements a React/Web {@link Component} for displaying an item in a\n * NavigateSectionList\n *\n * @extends Component\n */\nexport default class NavigateSectionListItem<P: Props>\n    extends Component<P> {\n\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { elementAfter, lines, title } = this.props.item;\n        const { onPress } = this.props;\n\n        /**\n         * Initializes the date and duration of the conference to the an empty\n         * string in case for some reason there is an error where the item data\n         * lines doesn't contain one or both of those values (even though this\n         * unlikely the app shouldn't break because of it)\n         * @type {string}\n         */\n        let date = '';\n        let duration = '';\n\n        if (lines[0]) {\n            date = lines[0];\n        }\n        if (lines[1]) {\n            duration = lines[1];\n        }\n\n        const rootClassName = `navigate-section-list-tile ${\n            onPress ? 'with-click-handler' : 'without-click-handler'}`;\n\n        return (\n            <Container\n                className = { rootClassName }\n                onClick = { onPress }>\n                <Container className = 'navigate-section-list-tile-info'>\n                    <Text\n                        className = 'navigate-section-tile-title'>\n                        { title }\n                    </Text>\n                    <Text\n                        className = 'navigate-section-tile-body'>\n                        { date }\n                    </Text>\n                    <Text\n                        className = 'navigate-section-tile-body'>\n                        { duration }\n                    </Text>\n                </Container>\n                <Container className = { 'element-after' }>\n                    { elementAfter || null }\n                </Container>\n            </Container>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport type { Section } from '../../Types';\n\nimport Text from './Text';\n\ntype Props = {\n\n    /**\n     * A section containing the data to be rendered\n     */\n    section: Section\n}\n\n/**\n * Implements a React/Web {@link Component} that renders the section header of\n * the list\n *\n * @extends Component\n */\nexport default class NavigateSectionListSectionHeader extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <Text className = 'navigate-section-section-header'>\n                { this.props.section.title }\n            </Text>\n        );\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport type { Section } from '../../Types';\n\nimport Container from './Container';\n\ntype Props = {\n\n    /**\n     * Rendered when the list is empty. Should be a rendered element.\n     */\n    ListEmptyComponent: Object,\n\n    /**\n     * Used to extract a unique key for a given item at the specified index.\n     * Key is used for caching and as the react key to track item re-ordering.\n     */\n    keyExtractor: Function,\n\n    /**\n     * Returns a React component that renders each Item in the list\n     */\n    renderItem: Function,\n\n    /**\n     * Returns a React component that renders the header for every section\n     */\n    renderSectionHeader: Function,\n\n    /**\n     * An array of sections\n     */\n    sections: Array<Section>,\n\n    /**\n     * defines what happens when  an item in the section list is clicked\n     */\n    onItemClick: Function\n};\n\n/**\n * Implements a React/Web {@link Component} for displaying a list with\n * sections similar to React Native's {@code SectionList} in order to\n * facilitate cross-platform source code.\n *\n * @extends Component\n */\nexport default class SectionList extends Component<Props> {\n    /**\n     * Renders the content of this component.\n     *\n     * @returns {React.ReactNode}\n     */\n    render() {\n        const {\n            ListEmptyComponent,\n            renderSectionHeader,\n            renderItem,\n            sections,\n            keyExtractor\n        } = this.props;\n\n        /**\n         * If there are no recent items we don't want to display anything\n         */\n        if (sections) {\n            return (\n                <Container\n                    className = 'navigate-section-list'>\n                    {\n                        sections.length === 0\n                            ? ListEmptyComponent\n                            : sections.map((section, sectionIndex) => (\n                                <Container\n                                    key = { sectionIndex }>\n                                    { renderSectionHeader(section) }\n                                    { section.data\n                                        .map((item, listIndex) => {\n                                            const listItem = {\n                                                item\n                                            };\n\n                                            return renderItem(listItem,\n                                                keyExtractor(section,\n                                                    listIndex));\n                                        }) }\n                                </Container>\n                            )\n                            )\n                    }\n                </Container>\n            );\n        }\n\n        return null;\n    }\n}\n","import { B100, B75, DN0, DN30, DN60, DN600, DN70, G200, G300, G400, N0, N20, N200, N70 } from '@atlaskit/theme/colors';\nvar colorMap = {\n  light: {\n    backgroundColorChecked: G400,\n    backgroundColorCheckedHover: G300,\n    backgroundColorCheckedDisabled: N20,\n    backgroundColorUnchecked: N200,\n    backgroundColorUncheckedHover: N70,\n    backgroundColorUncheckedDisabled: N20,\n    borderColorFocus: B100,\n    iconColorChecked: N0,\n    iconColorDisabled: N70,\n    iconColorUnchecked: N0,\n    handleBackgroundColor: N0,\n    handleBackgroundColorChecked: N0,\n    handleBackgroundColorDisabled: N0\n  },\n  dark: {\n    backgroundColorChecked: G300,\n    backgroundColorCheckedHover: G200,\n    backgroundColorCheckedDisabled: DN70,\n    backgroundColorUnchecked: DN70,\n    backgroundColorUncheckedHover: DN60,\n    backgroundColorUncheckedDisabled: DN70,\n    borderColorFocus: B75,\n    iconColorChecked: DN30,\n    iconColorDisabled: DN30,\n    iconColorUnchecked: DN600,\n    handleBackgroundColor: DN600,\n    handleBackgroundColorChecked: DN0,\n    handleBackgroundColorDisabled: DN0\n  }\n};\nexport var getColors = function getColors(mode) {\n  return colorMap[mode];\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { getColors } from './colors';\nvar globalGridSize = gridSize();\nvar dimensions = {\n  regular: {\n    height: globalGridSize * 2,\n    width: globalGridSize * 4\n  },\n  large: {\n    height: globalGridSize * 2 + globalGridSize / 2,\n    width: globalGridSize * 5\n  }\n};\n\nvar getHeight = function getHeight(_ref) {\n  var size = _ref.size;\n  return dimensions[size].height;\n};\n\nvar getWidth = function getWidth(_ref2) {\n  var size = _ref2.size;\n  return dimensions[size].width;\n};\n\nvar borderWidth = 2;\nvar paddingUnitless = globalGridSize / 4;\nvar transition = 'transform 0.2s ease';\nexport var getStyles = function getStyles(size, mode) {\n  var colors = getColors(mode);\n  return _objectSpread({\n    boxSizing: 'content-box',\n    display: 'inline-block',\n    padding: borderWidth,\n    margin: borderWidth,\n    backgroundClip: 'content-box',\n    backgroundColor: colors.backgroundColorUnchecked,\n    borderRadius: \"\".concat(getHeight({\n      size: size\n    }), \"px\"),\n    border: \"\".concat(borderWidth, \"px solid transparent\"),\n    height: \"\".concat(getHeight({\n      size: size\n    }), \"px\"),\n    position: 'relative',\n    transition: \"\".concat(transition),\n    width: \"\".concat(getWidth({\n      size: size\n    }), \"px\"),\n    '&[data-checked]': {\n      backgroundColor: colors.backgroundColorChecked,\n      color: colors.iconColorChecked\n    },\n    '&[data-disabled]:not([data-checked])': {\n      backgroundColor: colors.backgroundColorUncheckedDisabled\n    },\n    '&[data-disabled][data-checked],&[data-disabled][data-checked]:hover': {\n      backgroundColor: colors.backgroundColorCheckedDisabled\n    },\n    '&:focus-within': {\n      border: \"\".concat(borderWidth, \"px solid \").concat(colors.borderColorFocus)\n    },\n    '&:hover': {\n      backgroundColor: colors.backgroundColorUncheckedHover,\n      cursor: 'pointer'\n    },\n    '&[data-disabled]:hover,&[data-disabled][data-checked]:hover,&[data-disabled]:not([data-checked]):hover': {\n      cursor: 'not-allowed'\n    },\n    '&[data-checked]:hover': {\n      backgroundColor: colors.backgroundColorCheckedHover\n    },\n    '&:not([data-checked]):hover': {\n      backgroundColor: colors.backgroundColorUncheckedHover\n    },\n    '&[data-disabled]:not([data-checked]):hover': {\n      backgroundColor: colors.backgroundColorCheckedDisabled\n    },\n    color: colors.iconColorUnchecked,\n    '&[data-disabled], &[data-disabled][data-checked], &[data-disabled][data-checked]:hover': {\n      color: colors.iconColorDisabled\n    },\n    // the input element underneath\n    'input[type=\"checkbox\"]': {\n      opacity: 0,\n      margin: 0,\n      padding: 0,\n      border: 'none',\n      '&:focus': {\n        outline: 'none !important'\n      }\n    },\n    // slider\n    '::before': {\n      backgroundColor: colors.handleBackgroundColor,\n      borderRadius: '50%',\n      content: '\"\"',\n      position: 'absolute',\n      transform: 'initial',\n      transition: transition,\n      bottom: \"\".concat(2 * paddingUnitless, \"px\"),\n      height: \"\".concat(getHeight({\n        size: size\n      }) - paddingUnitless * 2, \"px\"),\n      width: \"\".concat(getHeight({\n        size: size\n      }) - paddingUnitless * 2, \"px\"),\n      // initially we set left as left-most position\n      left: \"\".concat(2 * paddingUnitless, \"px\")\n    },\n    '&[data-checked]::before': {\n      backgroundColor: colors.handleBackgroundColorChecked,\n      // when  it's checked, slide the pseudo-element to right-most postion\n      transform: \"translateX(\".concat(getHeight({\n        size: size\n      }), \"px)\")\n    },\n    '&[data-disabled]::before': {\n      backgroundColor: colors.handleBackgroundColorDisabled,\n      zIndex: 1\n    },\n    // icons - check and cross\n    '> span': {\n      position: 'absolute',\n      top: \"\".concat(paddingUnitless, \"px\")\n    },\n    '>span:first-of-type': {\n      left: \"3px\"\n    },\n    '>span:last-of-type': {\n      right: \"3px\"\n    }\n  }, size === 'large' && {\n    '> span': {\n      position: 'absolute',\n      height: '20px',\n      width: '20px'\n    }\n  });\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport { forwardRef, memo, useMemo, useState } from 'react';\nimport { jsx } from '@emotion/core';\nimport { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';\nimport CloseIcon from '@atlaskit/icon/glyph/editor/close';\nimport CheckIcon from '@atlaskit/icon/glyph/editor/done';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { getStyles } from './internal/styles';\nimport { name as packageName, version as packageVersion } from './version.json';\nexport var getIconSize = function getIconSize(size) {\n  return size === 'large' ? 'large' : 'small';\n};\n\nvar noop = function noop() {};\n\nvar analyticsAttributes = {\n  componentName: 'toggle',\n  packageName: packageName,\n  packageVersion: packageVersion\n};\nvar InnerToggle = /*#__PURE__*/forwardRef(function (props, ref) {\n  var _props$defaultChecked = props.defaultChecked,\n      defaultChecked = _props$defaultChecked === void 0 ? false : _props$defaultChecked,\n      _props$isDisabled = props.isDisabled,\n      isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled,\n      _props$onBlur = props.onBlur,\n      providedOnBlur = _props$onBlur === void 0 ? noop : _props$onBlur,\n      _props$onChange = props.onChange,\n      providedChange = _props$onChange === void 0 ? noop : _props$onChange,\n      _props$onFocus = props.onFocus,\n      providedFocus = _props$onFocus === void 0 ? noop : _props$onFocus,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'regular' : _props$size,\n      _props$name = props.name,\n      name = _props$name === void 0 ? '' : _props$name,\n      _props$value = props.value,\n      value = _props$value === void 0 ? '' : _props$value,\n      isChecked = props.isChecked,\n      analyticsContext = props.analyticsContext,\n      id = props.id,\n      testId = props.testId,\n      mode = props.mode;\n  var isControlled = typeof isChecked === 'undefined';\n\n  var _useState = useState(defaultChecked),\n      _useState2 = _slicedToArray(_useState, 2),\n      checked = _useState2[0],\n      setChecked = _useState2[1];\n\n  var handleBlur = usePlatformLeafEventHandler(_objectSpread({\n    fn: providedOnBlur,\n    action: 'blur',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var handleFocus = usePlatformLeafEventHandler(_objectSpread({\n    fn: providedFocus,\n    action: 'focus',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var handleChange = usePlatformLeafEventHandler(_objectSpread({\n    fn: function fn(event, analyticsEvent) {\n      if (isControlled) {\n        setChecked(function (checked) {\n          return !checked;\n        });\n      }\n\n      return providedChange(event, analyticsEvent);\n    },\n    action: 'change',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var shouldChecked = isControlled ? checked : isChecked;\n  var controlProps = {\n    'data-checked': shouldChecked ? shouldChecked : undefined,\n    'data-disabled': isDisabled ? isDisabled : undefined,\n    'data-size': size,\n    'data-testid': testId ? testId : undefined\n  };\n  var toggleStyles = useMemo(function () {\n    return getStyles(size, mode);\n  }, [size, mode]);\n  return (// https://product-fabric.atlassian.net/browse/DST-1969\n    // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/label-has-for\n    jsx(\"label\", _extends({}, controlProps, {\n      css: toggleStyles\n    }), jsx(\"input\", {\n      ref: ref,\n      checked: shouldChecked,\n      disabled: isDisabled,\n      id: id,\n      name: name,\n      onBlur: handleBlur,\n      onChange: handleChange,\n      onFocus: handleFocus,\n      type: \"checkbox\",\n      value: value,\n      \"data-testid\": testId && \"\".concat(testId, \"--input\")\n    }), jsx(CheckIcon, {\n      label: \"check\",\n      size: getIconSize(size)\n    }), jsx(CloseIcon, {\n      label: \"cross\",\n      size: getIconSize(size)\n    }))\n  );\n});\nvar Toggle = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Toggle(props, ref) {\n  return jsx(GlobalTheme.Consumer, null, function (tokens) {\n    var mode = tokens.mode;\n    return jsx(InnerToggle, _extends({}, props, {\n      mode: mode,\n      ref: ref\n    }));\n  });\n}));\nToggle.displayName = 'Toggle';\nexport default Toggle;","/* @flow */\n\nimport Toggle from '@atlaskit/toggle';\nimport React, { Component } from 'react';\n\ntype Props = {\n\n    /**\n     * ID of the toggle\n     */\n    id: string,\n\n    /**\n     * CSS class name.\n     */\n    className: string,\n\n    /**\n     * Indicates whether the switch is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Handler called when the user presses the switch.\n     */\n    onValueChange: Function,\n\n    /**\n     * The current value.\n     */\n    value: boolean\n};\n\n/**\n * Renders a boolean input.\n */\nexport default class Switch extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            className,\n            disabled,\n            onValueChange,\n            value,\n            id,\n            ...props\n        } = this.props;\n\n        // TODO: onChange will be called with parameter Event. It will be good\n        // if we translate it to calling the onValueChange with the value as a\n        // parameter to match the native implementation.\n\n        return (\n            <div className = { className }>\n                <Toggle\n                    id = { id }\n                    isChecked = { value }\n                    isDisabled = { disabled }\n                    onChange = { onValueChange }\n                    { ...props } />\n            </div>\n        );\n    }\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { isVpaasMeeting } from '../../../../jaas/functions';\nimport { translate } from '../../../i18n';\nimport { connect } from '../../../redux';\n\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The CSS style of the element with CSS class {@code rightwatermark}.\n *\n * @private\n */\nconst _RIGHT_WATERMARK_STYLE = {\n    backgroundImage: 'url(images/rightwatermark.png)'\n};\n\n/**\n * The type of the React {@code Component} props of {@link Watermarks}.\n */\ntype Props = {\n\n    /**\n     * The link used to navigate to on logo click.\n     */\n    _logoLink: string,\n\n    /**\n     * The url for the logo.\n     */\n    _logoUrl: string,\n\n    /**\n     * If the Jitsi watermark should be displayed or not.\n     */\n    _showJitsiWatermark: boolean,\n\n    /**\n     * The default value for the Jitsi logo URL.\n     */\n    defaultJitsiLogoURL: ?string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link Watermarks}.\n */\ntype State = {\n\n    /**\n     * The url to open when clicking the brand watermark.\n     */\n    brandWatermarkLink: string,\n\n    /**\n     * Whether or not the brand watermark should be displayed.\n     */\n    showBrandWatermark: boolean,\n\n    /**\n     * Whether or not the show the \"powered by Jitsi.org\" link.\n     */\n    showPoweredBy: boolean\n};\n\n/**\n * A Web Component which renders watermarks such as Jits, brand, powered by,\n * etc.\n */\nclass Watermarks extends Component<Props, State> {\n    /**\n     * Initializes a new Watermarks instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        const showBrandWatermark = interfaceConfig.SHOW_BRAND_WATERMARK;\n\n        this.state = {\n            brandWatermarkLink:\n                showBrandWatermark ? interfaceConfig.BRAND_WATERMARK_LINK : '',\n            showBrandWatermark,\n            showPoweredBy: interfaceConfig.SHOW_POWERED_BY\n        };\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div>\n                {\n                    this._renderJitsiWatermark()\n                }\n                {\n                    this._renderBrandWatermark()\n                }\n                {\n                    this._renderPoweredBy()\n                }\n            </div>\n        );\n    }\n\n    /**\n     * Renders a brand watermark if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null} Watermark element or null.\n     */\n    _renderBrandWatermark() {\n        let reactElement = null;\n\n        if (this.state.showBrandWatermark) {\n            reactElement = (\n                <div\n                    className = 'watermark rightwatermark'\n                    style = { _RIGHT_WATERMARK_STYLE } />\n            );\n\n            const { brandWatermarkLink } = this.state;\n\n            if (brandWatermarkLink) {\n                reactElement = (\n                    <a\n                        href = { brandWatermarkLink }\n                        target = '_new'>\n                        { reactElement }\n                    </a>\n                );\n            }\n        }\n\n        return reactElement;\n    }\n\n    /**\n     * Renders a Jitsi watermark if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderJitsiWatermark() {\n        const {\n            _logoLink,\n            _logoUrl,\n            _showJitsiWatermark\n        } = this.props;\n        const { t } = this.props;\n        let reactElement = null;\n\n        if (_showJitsiWatermark) {\n            const style = {\n                backgroundImage: `url(${_logoUrl})`,\n                maxWidth: 150,\n                maxHeight: 50,\n\t\t            width: 150,\n\t\t            height: 50,\n                position: _logoLink ? 'static' : 'absolute'\n            };\n\n            reactElement = (<div\n                className = 'watermark leftwatermark'\n                style = { style } />);\n\n            if (_logoLink) {\n                reactElement = (\n                    <a\n                        aria-label = { t('jitsiHome', { logo: interfaceConfig.APP_NAME }) }\n                        className = 'watermark leftwatermark'\n                        href = { _logoLink }\n                        target = '_new'>\n                        { reactElement }\n                    </a>\n                );\n            }\n        }\n\n        return reactElement;\n    }\n\n    /**\n     * Renders a powered by block if it is enabled.\n     *\n     * @private\n     * @returns {ReactElement|null}\n     */\n    _renderPoweredBy() {\n        if (this.state.showPoweredBy) {\n            const { t } = this.props;\n\n            return (\n                <a\n                    className = 'poweredby'\n                    href = 'http://jitsi.org'\n                    target = '_new'>\n                    <span>{ t('poweredby') } jitsi.org</span>\n                </a>\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps parts of Redux store to component prop types.\n *\n * @param {Object} state - Snapshot of Redux store.\n * @param {Object} ownProps - Component's own props.\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps) {\n    const {\n        customizationReady,\n        customizationFailed,\n        defaultBranding,\n        useDynamicBrandingData,\n        logoClickUrl,\n        logoImageUrl\n    } = state['features/dynamic-branding'];\n    const isValidRoom = state['features/base/conference'].room;\n    const {\n        DEFAULT_LOGO_URL,\n        JITSI_WATERMARK_LINK,\n        SHOW_JITSI_WATERMARK\n    } = interfaceConfig;\n    let _showJitsiWatermark = (\n        customizationReady && !customizationFailed\n        && SHOW_JITSI_WATERMARK)\n    || !isValidRoom;\n    let _logoUrl = logoImageUrl;\n    let _logoLink = logoClickUrl;\n\n    if (useDynamicBrandingData) {\n        if (isVpaasMeeting(state)) {\n            // don't show logo if request fails or no logo set for vpaas meetings\n            _showJitsiWatermark = !customizationFailed && Boolean(logoImageUrl);\n        } else if (defaultBranding) {\n            _logoUrl = DEFAULT_LOGO_URL;\n            _logoLink = JITSI_WATERMARK_LINK;\n        }\n    } else {\n        // When there is no custom branding data use defaults\n        _logoUrl = ownProps.defaultJitsiLogoURL || DEFAULT_LOGO_URL;\n        _logoLink = JITSI_WATERMARK_LINK;\n    }\n\n    return {\n        _logoLink,\n        _logoUrl,\n        _showJitsiWatermark\n    };\n}\n\nexport default connect(_mapStateToProps)(translate(Watermarks));\n","// @flow\n\nimport { Component } from 'react';\n\n/**\n * Abstract component that defines a refreshable page to be rendered by\n * {@code PagedList}.\n */\nexport default class AbstractPage<P> extends Component<P> {\n    /**\n     * Method to be overridden by the implementing classes to refresh the data\n     * content of the component.\n     *\n     * Note: It is a static method as the {@code Component} may not be\n     * initialized yet when the UI invokes refresh (e.g. Tab change).\n     *\n     * @returns {void}\n     */\n    static refresh() {\n        // No implementation in abstract class.\n    }\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\n// TODO: Maybe try to make all NavigateSectionList components to work for both\n// mobile and web, and move them to NavigateSectionList component.\nimport type { Section } from '../Types';\n\nimport {\n    NavigateSectionListEmptyComponent,\n    NavigateSectionListItem,\n    NavigateSectionListSectionHeader,\n    SectionList\n} from './_';\n\ntype Props = {\n\n    /**\n     * Indicates if the list is disabled or not.\n     */\n    disabled: boolean,\n\n    /**\n     * Function to be invoked when an item is long pressed. The item is passed.\n     */\n    onLongPress: Function,\n\n    /**\n     * Function to be invoked when an item is pressed. The item's URL is passed.\n     */\n    onPress: Function,\n\n    /**\n     * Function to be invoked when pull-to-refresh is performed.\n     */\n    onRefresh: Function,\n\n    /**\n     * Function to be invoked when a secondary action is performed on an item.\n     * The item's ID is passed.\n     */\n    onSecondaryAction: Function,\n\n    /**\n     * Function to override the rendered default empty list component.\n     */\n    renderListEmptyComponent: Function,\n\n    /**\n     * An array of sections\n     */\n    sections: Array<Section>\n};\n\n/**\n * Implements a general section list to display items that have a URL property\n * and navigates to (probably) meetings, such as the recent list or the meeting\n * list components.\n */\nclass NavigateSectionList extends Component<Props> {\n    /**\n     * Creates an empty section object.\n     *\n     * @param {string} title - The title of the section.\n     * @param {string} key - The key of the section. It must be unique.\n     * @private\n     * @returns {Object}\n     */\n    static createSection(title: string, key: string) {\n        return {\n            data: [],\n            key,\n            title\n        };\n    }\n\n    /**\n     * Constructor of the NavigateSectionList component.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n        this._getItemKey = this._getItemKey.bind(this);\n        this._onLongPress = this._onLongPress.bind(this);\n        this._onPress = this._onPress.bind(this);\n        this._onRefresh = this._onRefresh.bind(this);\n        this._renderItem = this._renderItem.bind(this);\n        this._renderListEmptyComponent = this._renderListEmptyComponent.bind(this);\n        this._renderSectionHeader = this._renderSectionHeader.bind(this);\n    }\n\n    /**\n     * Implements React's {@code Component.render}.\n     * Note: We don't use the refreshing value yet, because refreshing of these\n     * lists is super quick, no need to complicate the code - yet.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            renderListEmptyComponent = this._renderListEmptyComponent(),\n            sections\n        } = this.props;\n\n        return (\n            <SectionList\n                ListEmptyComponent = { renderListEmptyComponent }\n                keyExtractor = { this._getItemKey }\n                onItemClick = { this.props.onPress }\n                onRefresh = { this._onRefresh }\n                refreshing = { false }\n                renderItem = { this._renderItem }\n                renderSectionHeader = { this._renderSectionHeader }\n                sections = { sections } />\n        );\n    }\n\n    _getItemKey: (Object, number) => string;\n\n    /**\n     * Generates a unique id to every item.\n     *\n     * @param {Object} item - The item.\n     * @param {number} index - The item index.\n     * @private\n     * @returns {string}\n     */\n    _getItemKey(item, index) {\n        return `${index}-${item.key}`;\n    }\n\n    _onLongPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onLongPress callback of the items.\n     *\n     * @param {Object} item - The item that was long-pressed.\n     * @private\n     * @returns {Function}\n     */\n    _onLongPress(item) {\n        const { disabled, onLongPress } = this.props;\n\n        if (!disabled && typeof onLongPress === 'function') {\n            return () => onLongPress(item);\n        }\n\n        return null;\n    }\n\n    _onPress: string => Function;\n\n    /**\n     * Returns a function that is used in the onPress callback of the items.\n     *\n     * @param {string} url - The URL of the item to navigate to.\n     * @private\n     * @returns {Function}\n     */\n    _onPress(url) {\n        const { disabled, onPress } = this.props;\n\n        if (!disabled && url && typeof onPress === 'function') {\n            return () => onPress(url);\n        }\n\n        return null;\n    }\n\n    _onRefresh: () => void;\n\n    /**\n     * Invokes the onRefresh callback if present.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onRefresh() {\n        const { onRefresh } = this.props;\n\n        if (typeof onRefresh === 'function') {\n            onRefresh();\n        }\n    }\n\n    _onSecondaryAction: Object => Function;\n\n    /**\n     * Returns a function that is used in the secondaryAction callback of the\n     * items.\n     *\n     * @param {string} id - The id of the item that secondary action was\n     * performed on.\n     * @private\n     * @returns {Function}\n     */\n    _onSecondaryAction(id) {\n        return () => {\n            this.props.onSecondaryAction(id);\n        };\n    }\n\n    _renderItem: Object => Object;\n\n    /**\n     * Renders a single item in the list.\n     *\n     * @param {Object} listItem - The item to render.\n     * @param {string} key - The item needed for rendering using map on web.\n     * @private\n     * @returns {Component}\n     */\n    _renderItem(listItem, key: string = '') {\n        const { item } = listItem;\n        const { id, url } = item;\n\n        // XXX The value of title cannot be undefined; otherwise, react-native\n        // will throw a TypeError: Cannot read property of undefined. While it's\n        // difficult to get an undefined title and very likely requires the\n        // execution of incorrect source code, it is undesirable to break the\n        // whole app because of an undefined string.\n        if (typeof item.title === 'undefined') {\n            return null;\n        }\n\n        return (\n            <NavigateSectionListItem\n                item = { item }\n                key = { key }\n                onLongPress = { url ? this._onLongPress(item) : undefined }\n                onPress = { url ? this._onPress(url) : undefined }\n                secondaryAction = {\n                    url ? undefined : this._onSecondaryAction(id) } />\n        );\n    }\n\n    _renderListEmptyComponent: () => Object;\n\n    /**\n     * Renders a component to display when the list is empty.\n     *\n     * @param {Object} section - The section being rendered.\n     * @private\n     * @returns {React$Node}\n     */\n    _renderListEmptyComponent() {\n        const { onRefresh } = this.props;\n\n        if (typeof onRefresh === 'function') {\n            return (\n                <NavigateSectionListEmptyComponent />\n            );\n        }\n\n        return null;\n    }\n\n    _renderSectionHeader: Object => Object;\n\n    /**\n     * Renders a section header.\n     *\n     * @param {Object} section - The section being rendered.\n     * @private\n     * @returns {React$Node}\n     */\n    _renderSectionHeader(section) {\n        return (\n            <NavigateSectionListSectionHeader\n                section = { section } />\n        );\n    }\n}\n\nexport default NavigateSectionList;\n","import { createTheme } from '../utils/createTheme';\n\n// Create default global light theme\nvar _createTheme = createTheme(function () {\n  return {\n    mode: 'light'\n  };\n}),\n    Provider = _createTheme.Provider,\n    Consumer = _createTheme.Consumer,\n    useTheme = _createTheme.useTheme;\n\nexport var useGlobalTheme = function useGlobalTheme() {\n  return useTheme();\n};\nexport default {\n  Provider: Provider,\n  Consumer: Consumer\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext, useContext, useCallback } from 'react';\n\n/**\n * createTheme is used to create a set of Providers and Consumers for theming components.\n * - Takes a default theme function; this theme function gets a set of props, and returns tokens\n *  based on those props. An example of this default theme function is one that produces the standard\n *  appearance of the component\n * - Returns three things - a Provider that allow for additional themes to be applied, a Consumer\n *  that can get the current theme and fetch it, and a custom hook - useTheme which provides an alternate (although functionally the same) API\n *  to the Consumer.\n **/\nexport function createTheme(defaultGetTokens) {\n  var emptyThemeFn = function emptyThemeFn(getTokens, props) {\n    return getTokens(props);\n  };\n  /**\n   * Internally, Theme uses React Context, with internal providers and consumers.\n   * The React Context passes only a function that gets props, and turns them into tokens. This\n   * function gets mixed as more Providers with their own themes are added. This mixed function\n   * is ultimately picked up by Consumers, which implement a context consumer internally to fetch\n   * the theme.\n   **/\n\n\n  var ThemeContext = /*#__PURE__*/createContext(defaultGetTokens);\n\n  function useTheme(themeProps) {\n    var theme = useContext(ThemeContext);\n    var themeFn = theme || emptyThemeFn;\n    var tokens = themeFn(themeProps);\n    return tokens;\n  } // The Theme Consumer takes a function as its child - this function takes tokens, and the\n  // return value is generally a set of nodes with the tokens applied appropriately.\n\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]); // @ts-ignore See issue for more info: https://github.com/Microsoft/TypeScript/issues/10727\n    // Argument of type 'Pick<ThemeProps & { children: (tokens: ThemeTokens) => ReactNode; }, Exclude<keyof ThemeProps, \"children\">>' is not assignable to parameter of type 'ThemeProps'.ts(2345)\n\n\n    var tokens = useTheme(themeProps); // We add a fragment to ensure we don't break people upgrading.\n    // Previously they may have been able to pass in undefined without things blowing up.\n\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children(tokens));\n  }\n  /**\n   * The Theme Provider takes regular nodes as its children, but also takes a *theme function*\n   * - The theme function takes a set of props, as well as a function (getTokens) that can turn props into tokens.\n   * - The getTokens function isn't called immediately - instead the props are passed\n   *    through a mix of parent theming functions\n   * Children of this provider will receive this mixed theme\n   */\n\n\n  function Provider(props) {\n    var themeFn = useContext(ThemeContext);\n    var valueFn = props.value || emptyThemeFn;\n    var mixedFn = useCallback(function (themeProps) {\n      return valueFn(themeFn, themeProps);\n    }, [themeFn, valueFn]);\n    return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n      value: mixedFn\n    }, props.children);\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider,\n    useTheme: useTheme\n  };\n}","// These are duplicates of colors imports -\n// Not bringing in colors to reduce dependency on theme\n// These values are enforced via unit tests\nvar DN30 = '#1B2638';\nvar N0 = '#FFFFFF';\nvar themedBackground = {\n  light: N0,\n  dark: DN30\n};\n/**\n * Returns the background color depending on the passed through mode.\n * @param mode\n */\n\nexport var getBackground = function getBackground() {\n  var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'light';\n  return themedBackground[mode];\n};","export var sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexport var sizeMap = {\n  small: 'small',\n  medium: 'medium',\n  large: 'large',\n  xlarge: 'xlarge'\n};\nexport var dimensions = {\n  small: {\n    width: sizes.small,\n    height: sizes.small\n  },\n  medium: {\n    width: sizes.medium,\n    height: sizes.medium\n  },\n  large: {\n    width: sizes.large,\n    height: sizes.large\n  },\n  xlarge: {\n    width: sizes.xlarge,\n    height: sizes.xlarge\n  }\n};","import { dimensions } from '../constants';\nimport { css } from '@emotion/core';\nexport var commonSVGStyles = {\n  overflow: 'hidden',\n  pointerEvents: 'none',\n\n  /**\n   * Stop-color doesn't properly apply in chrome when the inherited/current color changes.\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\n   * rule) and then override it with currentColor for the color changes to be picked up.\n   */\n  stop: {\n    stopColor: 'currentColor'\n  }\n};\nvar smallStyles = css(dimensions.small);\nvar mediumStyles = css(dimensions.medium);\nvar largeStyles = css(dimensions.large);\nvar xlargeStyles = css(dimensions.xlarge); // pre-built css style-size map\n\nexport var sizeStyleMap = {\n  small: smallStyles,\n  medium: mediumStyles,\n  large: largeStyles,\n  xlarge: xlargeStyles\n};\n/**\n * Returns the width of the icon's parent span. This function has\n * special behaviour to deal with icon-file-type specifically.\n *\n * The reality is the SVG still has its own dimensions, so this is\n * a secondary fallback which in 95% of cases is not required.\n * It's only really being kept to maintain backward compatability.\n */\n\nexport var getIconSize = function getIconSize(_ref) {\n  var width = _ref.width,\n      height = _ref.height,\n      size = _ref.size;\n\n  if (width && height) {\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  if (size) {\n    return dimensions[size];\n  }\n\n  return undefined;\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport { memo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useGlobalTheme } from '@atlaskit/theme/components';\nimport { getBackground } from './utils';\nimport { commonSVGStyles, getIconSize } from './styles';\n/**\n * We are hiding these props from consumers as they're used to\n * hack around icon sizing specifically for icon-file-type.\n */\n\nvar iconStyles = css({\n  display: 'inline-block',\n  flexShrink: 0,\n  lineHeight: 1,\n  '> svg': _objectSpread(_objectSpread({}, commonSVGStyles), {}, {\n    maxWidth: '100%',\n    maxHeight: '100%',\n    color: 'var(--icon-primary-color)',\n    fill: 'var(--icon-secondary-color)',\n    verticalAlign: 'bottom'\n  })\n});\n/**\n * For windows high contrast mode\n */\n\nvar baseHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      filter: 'grayscale(1)',\n      '--icon-primary-color': 'CanvasText',\n      // foreground\n      '--icon-secondary-color': 'Canvas' // background\n\n    }\n  }\n});\nvar primaryEqualsSecondaryHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      // if the primaryColor is the same as the secondaryColor we\n      // set the --icon-primary-color to Canvas\n      // this is usually to convey state i.e. Checkbox checked -> not checked\n      '--icon-primary-color': 'Canvas' // foreground\n\n    }\n  }\n});\nvar secondaryTransparentHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      '--icon-secondary-color': 'transparent' // background\n\n    }\n  }\n});\n/**\n * __Icon__\n *\n * An icon is used as a visual representation of common actions and commands to provide context.\n *\n * - [Examples](https://atlaskit.atlassian.com/packages/design-system/icon)\n * - [Code](https://atlaskit.atlassian.com/packages/design-system/icon/docs/custom-icons)\n */\n\nexport var Icon = /*#__PURE__*/memo(function Icon(props) {\n  var _ref = props,\n      Glyph = _ref.glyph,\n      dangerouslySetGlyph = _ref.dangerouslySetGlyph,\n      _ref$primaryColor = _ref.primaryColor,\n      primaryColor = _ref$primaryColor === void 0 ? 'currentColor' : _ref$primaryColor,\n      secondaryColor = _ref.secondaryColor,\n      size = _ref.size,\n      testId = _ref.testId,\n      label = _ref.label,\n      width = _ref.width,\n      height = _ref.height;\n  var glyphProps = dangerouslySetGlyph ? {\n    dangerouslySetInnerHTML: {\n      __html: dangerouslySetGlyph\n    }\n  } : {\n    children: Glyph ? jsx(Glyph, {\n      role: \"presentation\"\n    }) : null\n  };\n  var dimensions = getIconSize({\n    width: width,\n    height: height,\n    size: size\n  });\n\n  var _useGlobalTheme = useGlobalTheme(),\n      mode = _useGlobalTheme.mode;\n\n  return jsx(\"span\", _extends({\n    \"data-testid\": testId,\n    role: label ? 'img' : 'presentation',\n    \"aria-label\": label ? label : undefined,\n    \"aria-hidden\": label ? undefined : true,\n    style: {\n      '--icon-primary-color': primaryColor,\n      '--icon-secondary-color': secondaryColor || getBackground(mode)\n    }\n  }, glyphProps, {\n    css: [iconStyles, baseHcmStyles, primaryColor === secondaryColor && primaryEqualsSecondaryHcmStyles, secondaryColor === 'transparent' && secondaryTransparentHcmStyles, // NB: This can be resolved if this component, composes base SVG / and/or skeleton\n    // We could then simplify how common styles are dealt with simply by encapsualting them\n    // at their appropriate level and/or having a singular approach to css variables in the package\n    dimensions && // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage\n    css({\n      width: dimensions.width,\n      height: dimensions.height,\n      '> svg': dimensions\n    })]\n  }));\n});\nexport default Icon;","/**\n * [js-md5]{@link https://github.com/emn178/js-md5}\n *\n * @namespace md5\n * @version 0.7.3\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n(function () {\n  'use strict';\n\n  var ERROR = 'input is invalid type';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_MD5_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var EXTRA = [128, 32768, 8388608, -2147483648];\n  var SHIFT = [0, 8, 16, 24];\n  var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];\n  var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n  var blocks = [], buffer8;\n  if (ARRAY_BUFFER) {\n    var buffer = new ArrayBuffer(68);\n    buffer8 = new Uint8Array(buffer);\n    blocks = new Uint32Array(buffer);\n  }\n\n  if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  /**\n   * @method hex\n   * @memberof md5\n   * @description Output hash as hex string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} Hex string\n   * @example\n   * md5.hex('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * md5('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method digest\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.digest('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method array\n   * @memberof md5\n   * @description Output hash as bytes array\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Array} Bytes array\n   * @example\n   * md5.array('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method arrayBuffer\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof md5\n   * @description Output hash as ArrayBuffer\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @example\n   * md5.buffer('The quick brown fox jumps over the lazy dog');\n   */\n  /**\n   * @method base64\n   * @memberof md5\n   * @description Output hash as base64 string\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {String} base64 string\n   * @example\n   * md5.base64('The quick brown fox jumps over the lazy dog');\n   */\n  var createOutputMethod = function (outputType) {\n    return function (message) {\n      return new Md5(true).update(message)[outputType]();\n    };\n  };\n\n  /**\n   * @method create\n   * @memberof md5\n   * @description Create Md5 object\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.create();\n   */\n  /**\n   * @method update\n   * @memberof md5\n   * @description Create and update Md5 object\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @example\n   * var hash = md5.update('The quick brown fox jumps over the lazy dog');\n   * // equal to\n   * var hash = md5.create();\n   * hash.update('The quick brown fox jumps over the lazy dog');\n   */\n  var createMethod = function () {\n    var method = createOutputMethod('hex');\n    if (NODE_JS) {\n      method = nodeWrap(method);\n    }\n    method.create = function () {\n      return new Md5();\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createOutputMethod(type);\n    }\n    return method;\n  };\n\n  var nodeWrap = function (method) {\n    var crypto = eval(\"require('crypto')\");\n    var Buffer = eval(\"require('buffer').Buffer\");\n    var nodeMethod = function (message) {\n      if (typeof message === 'string') {\n        return crypto.createHash('md5').update(message, 'utf8').digest('hex');\n      } else {\n        if (message === null || message === undefined) {\n          throw ERROR;\n        } else if (message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        }\n      }\n      if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n        message.constructor === Buffer) {\n        return crypto.createHash('md5').update(new Buffer(message)).digest('hex');\n      } else {\n        return method(message);\n      }\n    };\n    return nodeMethod;\n  };\n\n  /**\n   * Md5 class\n   * @class Md5\n   * @description This is internal class.\n   * @see {@link md5.create}\n   */\n  function Md5(sharedMemory) {\n    if (sharedMemory) {\n      blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      this.blocks = blocks;\n      this.buffer8 = buffer8;\n    } else {\n      if (ARRAY_BUFFER) {\n        var buffer = new ArrayBuffer(68);\n        this.buffer8 = new Uint8Array(buffer);\n        this.blocks = new Uint32Array(buffer);\n      } else {\n        this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      }\n    }\n    this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;\n    this.finalized = this.hashed = false;\n    this.first = true;\n  }\n\n  /**\n   * @method update\n   * @memberof Md5\n   * @instance\n   * @description Update hash\n   * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n   * @returns {Md5} Md5 object.\n   * @see {@link md5.update}\n   */\n  Md5.prototype.update = function (message) {\n    if (this.finalized) {\n      return;\n    }\n\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw ERROR;\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw ERROR;\n          }\n        }\n      } else {\n        throw ERROR;\n      }\n      notString = true;\n    }\n    var code, index = 0, i, length = message.length, blocks = this.blocks;\n    var buffer8 = this.buffer8;\n\n    while (index < length) {\n      if (this.hashed) {\n        this.hashed = false;\n        blocks[0] = blocks[16];\n        blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n        blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n        blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n        blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n      }\n\n      if (notString) {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            buffer8[i++] = message[index];\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n          }\n        }\n      } else {\n        if (ARRAY_BUFFER) {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              buffer8[i++] = code;\n            } else if (code < 0x800) {\n              buffer8[i++] = 0xc0 | (code >> 6);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else if (code < 0xd800 || code >= 0xe000) {\n              buffer8[i++] = 0xe0 | (code >> 12);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              buffer8[i++] = 0xf0 | (code >> 18);\n              buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);\n              buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);\n              buffer8[i++] = 0x80 | (code & 0x3f);\n            }\n          }\n        } else {\n          for (i = this.start; index < length && i < 64; ++index) {\n            code = message.charCodeAt(index);\n            if (code < 0x80) {\n              blocks[i >> 2] |= code << SHIFT[i++ & 3];\n            } else if (code < 0x800) {\n              blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else if (code < 0xd800 || code >= 0xe000) {\n              blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            } else {\n              code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n              blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n              blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n            }\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      this.bytes += i - this.start;\n      if (i >= 64) {\n        this.start = i - 64;\n        this.hash();\n        this.hashed = true;\n      } else {\n        this.start = i;\n      }\n    }\n    if (this.bytes > 4294967295) {\n      this.hBytes += this.bytes / 4294967296 << 0;\n      this.bytes = this.bytes % 4294967296;\n    }\n    return this;\n  };\n\n  Md5.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex;\n    blocks[i >> 2] |= EXTRA[i & 3];\n    if (i >= 56) {\n      if (!this.hashed) {\n        this.hash();\n      }\n      blocks[0] = blocks[16];\n      blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n      blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n      blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n      blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n    }\n    blocks[14] = this.bytes << 3;\n    blocks[15] = this.hBytes << 3 | this.bytes >>> 29;\n    this.hash();\n  };\n\n  Md5.prototype.hash = function () {\n    var a, b, c, d, bc, da, blocks = this.blocks;\n\n    if (this.first) {\n      a = blocks[0] - 680876937;\n      a = (a << 7 | a >>> 25) - 271733879 << 0;\n      d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;\n      b = (b << 22 | b >>> 10) + c << 0;\n    } else {\n      a = this.h0;\n      b = this.h1;\n      c = this.h2;\n      d = this.h3;\n      a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;\n      a = (a << 7 | a >>> 25) + b << 0;\n      d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;\n      d = (d << 12 | d >>> 20) + a << 0;\n      c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;\n      c = (c << 17 | c >>> 15) + d << 0;\n      b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;\n      b = (b << 22 | b >>> 10) + c << 0;\n    }\n\n    a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;\n    a = (a << 7 | a >>> 25) + b << 0;\n    d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;\n    d = (d << 12 | d >>> 20) + a << 0;\n    c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;\n    c = (c << 17 | c >>> 15) + d << 0;\n    b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;\n    b = (b << 22 | b >>> 10) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;\n    b = (b << 20 | b >>> 12) + c << 0;\n    a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;\n    a = (a << 5 | a >>> 27) + b << 0;\n    d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;\n    d = (d << 9 | d >>> 23) + a << 0;\n    c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;\n    c = (c << 14 | c >>> 18) + d << 0;\n    b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;\n    b = (b << 20 | b >>> 12) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[5] - 378558;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[8] - 2022574463;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[11] + 1839030562;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[14] - 35309556;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[1] - 1530992060;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[4] + 1272893353;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[7] - 155497632;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[10] - 1094730640;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[13] + 681279174;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[0] - 358537222;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[3] - 722521979;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[6] + 76029189;\n    b = (b << 23 | b >>> 9) + c << 0;\n    bc = b ^ c;\n    a += (bc ^ d) + blocks[9] - 640364487;\n    a = (a << 4 | a >>> 28) + b << 0;\n    d += (bc ^ a) + blocks[12] - 421815835;\n    d = (d << 11 | d >>> 21) + a << 0;\n    da = d ^ a;\n    c += (da ^ b) + blocks[15] + 530742520;\n    c = (c << 16 | c >>> 16) + d << 0;\n    b += (da ^ c) + blocks[2] - 995338651;\n    b = (b << 23 | b >>> 9) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[0] - 198630844;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[7] + 1126891415;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[14] - 1416354905;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[5] - 57434055;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[12] + 1700485571;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[3] - 1894986606;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[10] - 1051523;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[1] - 2054922799;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[8] + 1873313359;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[15] - 30611744;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[6] - 1560198380;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[13] + 1309151649;\n    b = (b << 21 | b >>> 11) + c << 0;\n    a += (c ^ (b | ~d)) + blocks[4] - 145523070;\n    a = (a << 6 | a >>> 26) + b << 0;\n    d += (b ^ (a | ~c)) + blocks[11] - 1120210379;\n    d = (d << 10 | d >>> 22) + a << 0;\n    c += (a ^ (d | ~b)) + blocks[2] + 718787259;\n    c = (c << 15 | c >>> 17) + d << 0;\n    b += (d ^ (c | ~a)) + blocks[9] - 343485551;\n    b = (b << 21 | b >>> 11) + c << 0;\n\n    if (this.first) {\n      this.h0 = a + 1732584193 << 0;\n      this.h1 = b - 271733879 << 0;\n      this.h2 = c - 1732584194 << 0;\n      this.h3 = d + 271733878 << 0;\n      this.first = false;\n    } else {\n      this.h0 = this.h0 + a << 0;\n      this.h1 = this.h1 + b << 0;\n      this.h2 = this.h2 + c << 0;\n      this.h3 = this.h3 + d << 0;\n    }\n  };\n\n  /**\n   * @method hex\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.hex();\n   */\n  Md5.prototype.hex = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n\n    return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n      HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n      HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n      HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n      HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n      HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n      HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n      HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n      HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n      HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n      HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n      HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n      HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n      HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n      HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n      HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];\n  };\n\n  /**\n   * @method toString\n   * @memberof Md5\n   * @instance\n   * @description Output hash as hex string\n   * @returns {String} Hex string\n   * @see {@link md5.hex}\n   * @example\n   * hash.toString();\n   */\n  Md5.prototype.toString = Md5.prototype.hex;\n\n  /**\n   * @method digest\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.digest}\n   * @example\n   * hash.digest();\n   */\n  Md5.prototype.digest = function () {\n    this.finalize();\n\n    var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;\n    return [\n      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,\n      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,\n      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,\n      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF\n    ];\n  };\n\n  /**\n   * @method array\n   * @memberof Md5\n   * @instance\n   * @description Output hash as bytes array\n   * @returns {Array} Bytes array\n   * @see {@link md5.array}\n   * @example\n   * hash.array();\n   */\n  Md5.prototype.array = Md5.prototype.digest;\n\n  /**\n   * @method arrayBuffer\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.arrayBuffer}\n   * @example\n   * hash.arrayBuffer();\n   */\n  Md5.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var buffer = new ArrayBuffer(16);\n    var blocks = new Uint32Array(buffer);\n    blocks[0] = this.h0;\n    blocks[1] = this.h1;\n    blocks[2] = this.h2;\n    blocks[3] = this.h3;\n    return buffer;\n  };\n\n  /**\n   * @method buffer\n   * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.\n   * @memberof Md5\n   * @instance\n   * @description Output hash as ArrayBuffer\n   * @returns {ArrayBuffer} ArrayBuffer\n   * @see {@link md5.buffer}\n   * @example\n   * hash.buffer();\n   */\n  Md5.prototype.buffer = Md5.prototype.arrayBuffer;\n\n  /**\n   * @method base64\n   * @memberof Md5\n   * @instance\n   * @description Output hash as base64 string\n   * @returns {String} base64 string\n   * @see {@link md5.base64}\n   * @example\n   * hash.base64();\n   */\n  Md5.prototype.base64 = function () {\n    var v1, v2, v3, base64Str = '', bytes = this.array();\n    for (var i = 0; i < 15;) {\n      v1 = bytes[i++];\n      v2 = bytes[i++];\n      v3 = bytes[i++];\n      base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n        BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +\n        BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +\n        BASE64_ENCODE_CHAR[v3 & 63];\n    }\n    v1 = bytes[i];\n    base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +\n      BASE64_ENCODE_CHAR[(v1 << 4) & 63] +\n      '==';\n    return base64Str;\n  };\n\n  var exports = createMethod();\n\n  if (COMMON_JS) {\n    module.exports = exports;\n  } else {\n    /**\n     * @method md5\b\n     * @description Md5 hash function, export to global in browsers.\n     * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash\n     * @returns {String} md5 hashes\n     * @example\n     * md5(''); // d41d8cd98f00b204e9800998ecf8427e\n     * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6\n     * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0\n     *\n     * // It also supports UTF-8 encoding\n     * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07\n     *\n     * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`\n     * md5([]); // d41d8cd98f00b204e9800998ecf8427e\n     * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e\n     */\n    root.md5 = exports;\n    if (AMD) {\n      define(function () {\n        return exports;\n      });\n    }\n  }\n})();\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/*! clipboard-copy. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* global DOMException */\n\nmodule.exports = clipboardCopy\n\nfunction makeError () {\n  return new DOMException('The request is not allowed', 'NotAllowedError')\n}\n\nasync function copyClipboardApi (text) {\n  // Use the Async Clipboard API when available. Requires a secure browsing\n  // context (i.e. HTTPS)\n  if (!navigator.clipboard) {\n    throw makeError()\n  }\n  return navigator.clipboard.writeText(text)\n}\n\nasync function copyExecCommand (text) {\n  // Put the text to copy into a <span>\n  const span = document.createElement('span')\n  span.textContent = text\n\n  // Preserve consecutive spaces and newlines\n  span.style.whiteSpace = 'pre'\n  span.style.webkitUserSelect = 'auto'\n  span.style.userSelect = 'all'\n\n  // Add the <span> to the page\n  document.body.appendChild(span)\n\n  // Make a selection object representing the range of text selected by the user\n  const selection = window.getSelection()\n  const range = window.document.createRange()\n  selection.removeAllRanges()\n  range.selectNode(span)\n  selection.addRange(range)\n\n  // Copy text to the clipboard\n  let success = false\n  try {\n    success = window.document.execCommand('copy')\n  } finally {\n    // Cleanup\n    selection.removeAllRanges()\n    window.document.body.removeChild(span)\n  }\n\n  if (!success) throw makeError()\n}\n\nasync function clipboardCopy (text) {\n  try {\n    await copyClipboardApi(text)\n  } catch (err) {\n    // ...Otherwise, use document.execCommand() fallback\n    try {\n      await copyExecCommand(text)\n    } catch (err2) {\n      throw (err2 || err || makeError())\n    }\n  }\n}\n","/* global APP, JitsiMeetJS, config, interfaceConfig */\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport EventEmitter from 'events';\nimport Logger from 'jitsi-meet-logger';\n\nimport { openConnection } from './connection';\nimport { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants';\nimport { AUDIO_ONLY_SCREEN_SHARE_NO_TRACK } from './modules/UI/UIErrors';\nimport AuthHandler from './modules/UI/authentication/AuthHandler';\nimport UIUtil from './modules/UI/util/UIUtil';\nimport mediaDeviceHelper from './modules/devices/mediaDeviceHelper';\nimport Recorder from './modules/recorder/Recorder';\nimport { createTaskQueue } from './modules/util/helpers';\nimport {\n    createDeviceChangedEvent,\n    createStartSilentEvent,\n    createScreenSharingEvent,\n    createTrackMutedEvent,\n    sendAnalytics\n} from './react/features/analytics';\nimport {\n    maybeRedirectToWelcomePage,\n    redirectToStaticPage,\n    reloadWithStoredParams\n} from './react/features/app/actions';\nimport {\n    AVATAR_URL_COMMAND,\n    EMAIL_COMMAND,\n    authStatusChanged,\n    commonUserJoinedHandling,\n    commonUserLeftHandling,\n    conferenceFailed,\n    conferenceJoined,\n    conferenceLeft,\n    conferenceSubjectChanged,\n    conferenceTimestampChanged,\n    conferenceUniqueIdSet,\n    conferenceWillJoin,\n    conferenceWillLeave,\n    dataChannelOpened,\n    kickedOut,\n    lockStateChanged,\n    onStartMutedPolicyChanged,\n    p2pStatusChanged,\n    sendLocalParticipant\n} from './react/features/base/conference';\nimport { getReplaceParticipant } from './react/features/base/config/functions';\nimport {\n    checkAndNotifyForNewDevice,\n    getAvailableDevices,\n    getDefaultDeviceId,\n    notifyCameraError,\n    notifyMicError,\n    setAudioOutputDeviceId,\n    updateDeviceList\n} from './react/features/base/devices';\nimport {\n    browser,\n    isFatalJitsiConnectionError,\n    JitsiConferenceErrors,\n    JitsiConferenceEvents,\n    JitsiConnectionErrors,\n    JitsiConnectionEvents,\n    JitsiMediaDevicesEvents,\n    JitsiParticipantConnectionStatus,\n    JitsiTrackErrors,\n    JitsiTrackEvents\n} from './react/features/base/lib-jitsi-meet';\nimport {\n    getStartWithAudioMuted,\n    getStartWithVideoMuted,\n    isVideoMutedByUser,\n    MEDIA_TYPE,\n    setAudioAvailable,\n    setAudioMuted,\n    setVideoAvailable,\n    setVideoMuted\n} from './react/features/base/media';\nimport {\n    dominantSpeakerChanged,\n    getLocalParticipant,\n    getNormalizedDisplayName,\n    getParticipantById,\n    localParticipantConnectionStatusChanged,\n    localParticipantRoleChanged,\n    participantConnectionStatusChanged,\n    participantKicked,\n    participantMutedUs,\n    participantPresenceChanged,\n    participantRoleChanged,\n    participantUpdated,\n    updateRemoteParticipantFeatures\n} from './react/features/base/participants';\nimport {\n    getUserSelectedCameraDeviceId,\n    updateSettings\n} from './react/features/base/settings';\nimport {\n    createLocalPresenterTrack,\n    createLocalTracksF,\n    destroyLocalTracks,\n    getLocalJitsiAudioTrack,\n    getLocalJitsiVideoTrack,\n    getLocalTracks,\n    isLocalCameraTrackMuted,\n    isLocalTrackMuted,\n    isUserInteractionRequiredForUnmute,\n    replaceLocalTrack,\n    trackAdded,\n    trackRemoved\n} from './react/features/base/tracks';\nimport { downloadJSON } from './react/features/base/util/downloadJSON';\nimport { getConferenceOptions } from './react/features/conference/functions';\nimport { showDesktopPicker } from './react/features/desktop-picker';\nimport { appendSuffix } from './react/features/display-name';\nimport {\n    maybeOpenFeedbackDialog,\n    submitFeedback\n} from './react/features/feedback';\nimport { showNotification } from './react/features/notifications';\nimport { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './react/features/overlay';\nimport { suspendDetected } from './react/features/power-monitor';\nimport {\n    initPrejoin,\n    isPrejoinPageEnabled,\n    isPrejoinPageVisible,\n    makePrecallTest\n} from './react/features/prejoin';\nimport { disableReceiver, stopReceiver } from './react/features/remote-control';\nimport { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';\nimport { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';\nimport { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';\nimport { createPresenterEffect } from './react/features/stream-effects/presenter';\nimport { endpointMessageReceived } from './react/features/subtitles';\nimport UIEvents from './service/UI/UIEvents';\n\nconst logger = Logger.getLogger(__filename);\n\nconst eventEmitter = new EventEmitter();\n\nlet room;\nlet connection;\n\n/**\n * The promise is used when the prejoin screen is shown.\n * While the user configures the devices the connection can be made.\n *\n * @type {Promise<Object>}\n * @private\n */\nlet _connectionPromise;\n\n/**\n * This promise is used for chaining mutePresenterVideo calls in order to avoid  calling GUM multiple times if it takes\n * a while to finish.\n *\n * @type {Promise<void>}\n * @private\n */\nlet _prevMutePresenterVideo = Promise.resolve();\n\n/*\n * Logic to open a desktop picker put on the window global for\n * lib-jitsi-meet to detect and invoke\n */\nwindow.JitsiMeetScreenObtainer = {\n    openDesktopPicker(options, onSourceChoose) {\n        APP.store.dispatch(showDesktopPicker(options, onSourceChoose));\n    }\n};\n\n/**\n * Known custom conference commands.\n */\nconst commands = {\n    AVATAR_URL: AVATAR_URL_COMMAND,\n    CUSTOM_ROLE: 'custom-role',\n    EMAIL: EMAIL_COMMAND,\n    ETHERPAD: 'etherpad'\n};\n\n/**\n * Open Connection. When authentication failed it shows auth dialog.\n * @param roomName the room name to use\n * @returns Promise<JitsiConnection>\n */\nfunction connect(roomName) {\n    return openConnection({\n        retry: true,\n        roomName\n    })\n    .catch(err => {\n        if (err === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n            APP.UI.notifyTokenAuthFailed();\n        } else {\n            APP.UI.notifyConnectionFailed(err);\n        }\n        throw err;\n    });\n}\n\n/**\n * Share data to other users.\n * @param command the command\n * @param {string} value new value\n */\nfunction sendData(command, value) {\n    if (!room) {\n        return;\n    }\n\n    room.removeCommand(command);\n    room.sendCommand(command, { value });\n}\n\n/**\n * Get user nickname by user id.\n * @param {string} id user id\n * @returns {string?} user nickname or undefined if user is unknown.\n */\nfunction getDisplayName(id) {\n    const participant = getParticipantById(APP.store.getState(), id);\n\n    return participant && participant.name;\n}\n\n/**\n * Mute or unmute local audio stream if it exists.\n * @param {boolean} muted - if audio stream should be muted or unmuted.\n */\nfunction muteLocalAudio(muted) {\n    APP.store.dispatch(setAudioMuted(muted));\n}\n\n/**\n * Mute or unmute local video stream if it exists.\n * @param {boolean} muted if video stream should be muted or unmuted.\n *\n */\nfunction muteLocalVideo(muted) {\n    APP.store.dispatch(setVideoMuted(muted));\n}\n\n/**\n * A queue for the async replaceLocalTrack action so that multiple audio\n * replacements cannot happen simultaneously. This solves the issue where\n * replaceLocalTrack is called multiple times with an oldTrack of null, causing\n * multiple local tracks of the same type to be used.\n *\n * @private\n * @type {Object}\n */\nconst _replaceLocalAudioTrackQueue = createTaskQueue();\n\n/**\n * A task queue for replacement local video tracks. This separate queue exists\n * so video replacement is not blocked by audio replacement tasks in the queue\n * {@link _replaceLocalAudioTrackQueue}.\n *\n * @private\n * @type {Object}\n */\nconst _replaceLocalVideoTrackQueue = createTaskQueue();\n\n/**\n *\n */\nclass ConferenceConnector {\n    /**\n     *\n     */\n    constructor(resolve, reject) {\n        this._resolve = resolve;\n        this._reject = reject;\n        this.reconnectTimeout = null;\n        room.on(JitsiConferenceEvents.CONFERENCE_JOINED,\n            this._handleConferenceJoined.bind(this));\n        room.on(JitsiConferenceEvents.CONFERENCE_FAILED,\n            this._onConferenceFailed.bind(this));\n    }\n\n    /**\n     *\n     */\n    _handleConferenceFailed(err) {\n        this._unsubscribe();\n        this._reject(err);\n    }\n\n    /**\n     *\n     */\n    _onConferenceFailed(err, ...params) {\n        APP.store.dispatch(conferenceFailed(room, err, ...params));\n        logger.error('CONFERENCE FAILED:', err, ...params);\n\n        switch (err) {\n\n        case JitsiConferenceErrors.NOT_ALLOWED_ERROR: {\n            // let's show some auth not allowed page\n            APP.store.dispatch(redirectToStaticPage('static/authError.html'));\n            break;\n        }\n\n        // not enough rights to create conference\n        case JitsiConferenceErrors.AUTHENTICATION_REQUIRED: {\n\n            const replaceParticipant = getReplaceParticipant(APP.store.getState());\n\n            // Schedule reconnect to check if someone else created the room.\n            this.reconnectTimeout = setTimeout(() => {\n                APP.store.dispatch(conferenceWillJoin(room));\n                room.join(null, replaceParticipant);\n            }, 5000);\n\n            const { password }\n                = APP.store.getState()['features/base/conference'];\n\n            AuthHandler.requireAuth(room, password);\n\n            break;\n        }\n\n        case JitsiConferenceErrors.RESERVATION_ERROR: {\n            const [ code, msg ] = params;\n\n            APP.UI.notifyReservationError(code, msg);\n            break;\n        }\n\n        case JitsiConferenceErrors.GRACEFUL_SHUTDOWN:\n            APP.UI.notifyGracefulShutdown();\n            break;\n\n        // FIXME FOCUS_DISCONNECTED is a confusing event name.\n        // What really happens there is that the library is not ready yet,\n        // because Jicofo is not available, but it is going to give it another\n        // try.\n        case JitsiConferenceErrors.FOCUS_DISCONNECTED: {\n            const [ focus, retrySec ] = params;\n\n            APP.UI.notifyFocusDisconnected(focus, retrySec);\n            break;\n        }\n\n        case JitsiConferenceErrors.FOCUS_LEFT:\n        case JitsiConferenceErrors.ICE_FAILED:\n        case JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE:\n        case JitsiConferenceErrors.OFFER_ANSWER_FAILED:\n            APP.store.dispatch(conferenceWillLeave(room));\n\n            // FIXME the conference should be stopped by the library and not by\n            // the app. Both the errors above are unrecoverable from the library\n            // perspective.\n            room.leave().then(() => connection.disconnect());\n            break;\n\n        case JitsiConferenceErrors.CONFERENCE_MAX_USERS:\n            connection.disconnect();\n            APP.UI.notifyMaxUsersLimitReached();\n            break;\n\n        case JitsiConferenceErrors.INCOMPATIBLE_SERVER_VERSIONS:\n            APP.store.dispatch(reloadWithStoredParams());\n            break;\n\n        default:\n            this._handleConferenceFailed(err, ...params);\n        }\n    }\n\n    /**\n     *\n     */\n    _unsubscribe() {\n        room.off(\n            JitsiConferenceEvents.CONFERENCE_JOINED,\n            this._handleConferenceJoined);\n        room.off(\n            JitsiConferenceEvents.CONFERENCE_FAILED,\n            this._onConferenceFailed);\n        if (this.reconnectTimeout !== null) {\n            clearTimeout(this.reconnectTimeout);\n        }\n    }\n\n    /**\n     *\n     */\n    _handleConferenceJoined() {\n        this._unsubscribe();\n        this._resolve();\n    }\n\n    /**\n     *\n     */\n    connect() {\n        const replaceParticipant = getReplaceParticipant(APP.store.getState());\n\n        // the local storage overrides here and in connection.js can be used by jibri\n        room.join(jitsiLocalStorage.getItem('xmpp_conference_password_override'), replaceParticipant);\n    }\n}\n\n/**\n * Disconnects the connection.\n * @returns resolved Promise. We need this in order to make the Promise.all\n * call in hangup() to resolve when all operations are finished.\n */\nfunction disconnect() {\n    const onDisconnected = () => {\n        APP.API.notifyConferenceLeft(APP.conference.roomName);\n\n        return Promise.resolve();\n    };\n\n    if (!connection) {\n        return onDisconnected();\n    }\n\n    return connection.disconnect().then(onDisconnected, onDisconnected);\n}\n\n/**\n * Handles CONNECTION_FAILED events from lib-jitsi-meet.\n *\n * @param {JitsiConnectionError} error - The reported error.\n * @returns {void}\n * @private\n */\nfunction _connectionFailedHandler(error) {\n    if (isFatalJitsiConnectionError(error)) {\n        APP.connection.removeEventListener(\n            JitsiConnectionEvents.CONNECTION_FAILED,\n            _connectionFailedHandler);\n        if (room) {\n            APP.store.dispatch(conferenceWillLeave(room));\n            room.leave();\n        }\n    }\n}\n\nexport default {\n    /**\n     * Flag used to delay modification of the muted status of local media tracks\n     * until those are created (or not, but at that point it's certain that\n     * the tracks won't exist).\n     */\n    _localTracksInitialized: false,\n\n    isSharingScreen: false,\n\n    /**\n     * The local audio track (if any).\n     * FIXME tracks from redux store should be the single source of truth\n     * @type {JitsiLocalTrack|null}\n     */\n    localAudio: null,\n\n    /**\n     * The local presenter video track (if any).\n     * @type {JitsiLocalTrack|null}\n     */\n    localPresenterVideo: null,\n\n    /**\n     * The local video track (if any).\n     * FIXME tracks from redux store should be the single source of truth, but\n     * more refactoring is required around screen sharing ('localVideo' usages).\n     * @type {JitsiLocalTrack|null}\n     */\n    localVideo: null,\n\n    /**\n     * Returns an object containing a promise which resolves with the created tracks &\n     * the errors resulting from that process.\n     *\n     * @returns {Promise<JitsiLocalTrack[]>, Object}\n     */\n    createInitialLocalTracks(options = {}) {\n        const errors = {};\n\n        // Always get a handle on the audio input device so that we have statistics (such as \"No audio input\" or\n        // \"Are you trying to speak?\" ) even if the user joins the conference muted.\n        const initialDevices = config.disableInitialGUM ? [] : [ 'audio' ];\n        const requestedAudio = !config.disableInitialGUM;\n        let requestedVideo = false;\n\n        if (!config.disableInitialGUM\n                && !options.startWithVideoMuted\n                && !options.startAudioOnly\n                && !options.startScreenSharing) {\n            initialDevices.push('video');\n            requestedVideo = true;\n        }\n\n        if (!config.disableInitialGUM) {\n            JitsiMeetJS.mediaDevices.addEventListener(\n                JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN,\n                browserName =>\n                    APP.store.dispatch(\n                        mediaPermissionPromptVisibilityChanged(true, browserName))\n            );\n        }\n\n        JitsiMeetJS.mediaDevices.addEventListener(\n            JitsiMediaDevicesEvents.SLOW_GET_USER_MEDIA,\n            () => APP.store.dispatch(toggleSlowGUMOverlay(true))\n        );\n\n        let tryCreateLocalTracks;\n\n        // On Electron there is no permission prompt for granting permissions. That's why we don't need to\n        // spend much time displaying the overlay screen. If GUM is not resolved within 15 seconds it will\n        // probably never resolve.\n        const timeout = browser.isElectron() ? 15000 : 60000;\n\n        // FIXME is there any simpler way to rewrite this spaghetti below ?\n        if (options.startScreenSharing) {\n            tryCreateLocalTracks = this._createDesktopTrack()\n                .then(([ desktopStream ]) => {\n                    if (!requestedAudio) {\n                        return [ desktopStream ];\n                    }\n\n                    return createLocalTracksF({\n                        devices: [ 'audio' ],\n                        timeout,\n                        firePermissionPromptIsShownEvent: true,\n                        fireSlowPromiseEvent: true\n                    })\n                        .then(([ audioStream ]) =>\n                            [ desktopStream, audioStream ])\n                        .catch(error => {\n                            errors.audioOnlyError = error;\n\n                            return [ desktopStream ];\n                        });\n                })\n                .catch(error => {\n                    logger.error('Failed to obtain desktop stream', error);\n                    errors.screenSharingError = error;\n\n                    return requestedAudio\n                        ? createLocalTracksF({\n                            devices: [ 'audio' ],\n                            timeout,\n                            firePermissionPromptIsShownEvent: true,\n                            fireSlowPromiseEvent: true\n                        })\n                        : [];\n                })\n                .catch(error => {\n                    errors.audioOnlyError = error;\n\n                    return [];\n                });\n        } else if (!requestedAudio && !requestedVideo) {\n            // Resolve with no tracks\n            tryCreateLocalTracks = Promise.resolve([]);\n        } else {\n            tryCreateLocalTracks = createLocalTracksF({\n                devices: initialDevices,\n                timeout,\n                firePermissionPromptIsShownEvent: true,\n                fireSlowPromiseEvent: true\n            })\n                .catch(err => {\n                    if (requestedAudio && requestedVideo) {\n\n                        // Try audio only...\n                        errors.audioAndVideoError = err;\n\n                        if (err.name === JitsiTrackErrors.TIMEOUT && !browser.isElectron()) {\n                            // In this case we expect that the permission prompt is still visible. There is no point of\n                            // executing GUM with different source. Also at the time of writing the following\n                            // inconsistency have been noticed in some browsers - if the permissions prompt is visible\n                            // and another GUM is executed the prompt does not change its content but if the user\n                            // clicks allow the user action isassociated with the latest GUM call.\n                            errors.audioOnlyError = err;\n                            errors.videoOnlyError = err;\n\n                            return [];\n                        }\n\n                        return (\n                            createLocalTracksF({\n                                devices: [ 'audio' ],\n                                timeout,\n                                firePermissionPromptIsShownEvent: true,\n                                fireSlowPromiseEvent: true\n                            }));\n                    } else if (requestedAudio && !requestedVideo) {\n                        errors.audioOnlyError = err;\n\n                        return [];\n                    } else if (requestedVideo && !requestedAudio) {\n                        errors.videoOnlyError = err;\n\n                        return [];\n                    }\n                    logger.error('Should never happen');\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedAudio) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.audioOnlyError = err;\n\n                    // Try video only...\n                    return requestedVideo\n                        ? createLocalTracksF({\n                            devices: [ 'video' ],\n                            firePermissionPromptIsShownEvent: true,\n                            fireSlowPromiseEvent: true\n                        })\n                        : [];\n                })\n                .catch(err => {\n                    // Log this just in case...\n                    if (!requestedVideo) {\n                        logger.error('The impossible just happened', err);\n                    }\n                    errors.videoOnlyError = err;\n\n                    return [];\n                });\n        }\n\n        // Hide the permissions prompt/overlay as soon as the tracks are\n        // created. Don't wait for the connection to be made, since in some\n        // cases, when auth is required, for instance, that won't happen until\n        // the user inputs their credentials, but the dialog would be\n        // overshadowed by the overlay.\n        tryCreateLocalTracks.then(tracks => {\n            APP.store.dispatch(toggleSlowGUMOverlay(false));\n            APP.store.dispatch(mediaPermissionPromptVisibilityChanged(false));\n\n            return tracks;\n        });\n\n        return {\n            tryCreateLocalTracks,\n            errors\n        };\n    },\n\n    /**\n     * Displays error notifications according to the state carried by {@code errors} object returned\n     * by {@link createInitialLocalTracks}.\n     * @param {Object} errors - the errors (if any) returned by {@link createInitialLocalTracks}.\n     *\n     * @returns {void}\n     * @private\n     */\n    _displayErrorsForCreateInitialLocalTracks(errors) {\n        const {\n            audioAndVideoError,\n            audioOnlyError,\n            screenSharingError,\n            videoOnlyError\n        } = errors;\n\n        // FIXME If there will be microphone error it will cover any screensharing dialog, but it's still better than in\n        // the reverse order where the screensharing dialog will sometimes be closing the microphone alert\n        // ($.prompt.close(); is called). Need to figure out dialogs chaining to fix that.\n        if (screenSharingError) {\n            this._handleScreenSharingError(screenSharingError);\n        }\n        if (audioAndVideoError || audioOnlyError) {\n            if (audioOnlyError || videoOnlyError) {\n                // If both requests for 'audio' + 'video' and 'audio' only failed, we assume that there are some\n                // problems with user's microphone and show corresponding dialog.\n                APP.store.dispatch(notifyMicError(audioOnlyError));\n                APP.store.dispatch(notifyCameraError(videoOnlyError));\n            } else {\n                // If request for 'audio' + 'video' failed, but request for 'audio' only was OK, we assume that we had\n                // problems with camera and show corresponding dialog.\n                APP.store.dispatch(notifyCameraError(audioAndVideoError));\n            }\n        }\n    },\n\n    /**\n     * Creates local media tracks and connects to a room. Will show error\n     * dialogs in case accessing the local microphone and/or camera failed. Will\n     * show guidance overlay for users on how to give access to camera and/or\n     * microphone.\n     * @param {string} roomName\n     * @param {object} options\n     * @param {boolean} options.startAudioOnly=false - if <tt>true</tt> then\n     * only audio track will be created and the audio only mode will be turned\n     * on.\n     * @param {boolean} options.startScreenSharing=false - if <tt>true</tt>\n     * should start with screensharing instead of camera video.\n     * @param {boolean} options.startWithAudioMuted - will start the conference\n     * without any audio tracks.\n     * @param {boolean} options.startWithVideoMuted - will start the conference\n     * without any video tracks.\n     * @returns {Promise.<JitsiLocalTrack[], JitsiConnection>}\n     */\n    createInitialLocalTracksAndConnect(roomName, options = {}) {\n        const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);\n\n        return Promise.all([ tryCreateLocalTracks, connect(roomName) ])\n            .then(([ tracks, con ]) => {\n\n                this._displayErrorsForCreateInitialLocalTracks(errors);\n\n                return [ tracks, con ];\n            });\n    },\n\n    startConference(con, tracks) {\n        tracks.forEach(track => {\n            if ((track.isAudioTrack() && this.isLocalAudioMuted())\n                || (track.isVideoTrack() && this.isLocalVideoMuted())) {\n                const mediaType = track.getType();\n\n                sendAnalytics(\n                    createTrackMutedEvent(mediaType, 'initial mute'));\n                logger.log(`${mediaType} mute: initially muted.`);\n                track.mute();\n            }\n        });\n        logger.log(`Initialized with ${tracks.length} local tracks`);\n\n        this._localTracksInitialized = true;\n        con.addEventListener(JitsiConnectionEvents.CONNECTION_FAILED, _connectionFailedHandler);\n        APP.connection = connection = con;\n\n        this._createRoom(tracks);\n\n        // if user didn't give access to mic or camera or doesn't have\n        // them at all, we mark corresponding toolbar buttons as muted,\n        // so that the user can try unmute later on and add audio/video\n        // to the conference\n        if (!tracks.find(t => t.isAudioTrack())) {\n            this.setAudioMuteStatus(true);\n        }\n\n        if (!tracks.find(t => t.isVideoTrack())) {\n            this.setVideoMuteStatus();\n        }\n\n        if (config.iAmRecorder) {\n            this.recorder = new Recorder();\n        }\n\n        if (config.startSilent) {\n            sendAnalytics(createStartSilentEvent());\n            APP.store.dispatch(showNotification({\n                descriptionKey: 'notify.startSilentDescription',\n                titleKey: 'notify.startSilentTitle'\n            }));\n        }\n\n        // XXX The API will take care of disconnecting from the XMPP\n        // server (and, thus, leaving the room) on unload.\n        return new Promise((resolve, reject) => {\n            (new ConferenceConnector(resolve, reject)).connect();\n        });\n    },\n\n    /**\n     * Open new connection and join the conference when prejoin page is not enabled.\n     * If prejoin page is enabled open an new connection in the background\n     * and create local tracks.\n     *\n     * @param {{ roomName: string }} options\n     * @returns {Promise}\n     */\n    async init({ roomName }) {\n        const initialOptions = {\n            startAudioOnly: config.startAudioOnly,\n            startScreenSharing: config.startScreenSharing,\n            startWithAudioMuted: getStartWithAudioMuted(APP.store.getState())\n                || config.startSilent\n                || isUserInteractionRequiredForUnmute(APP.store.getState()),\n            startWithVideoMuted: getStartWithVideoMuted(APP.store.getState())\n                || isUserInteractionRequiredForUnmute(APP.store.getState())\n        };\n\n        this.roomName = roomName;\n\n        try {\n            // Initialize the device list first. This way, when creating tracks\n            // based on preferred devices, loose label matching can be done in\n            // cases where the exact ID match is no longer available, such as\n            // when the camera device has switched USB ports.\n            // when in startSilent mode we want to start with audio muted\n            await this._initDeviceList();\n        } catch (error) {\n            logger.warn('initial device list initialization failed', error);\n        }\n\n        if (isPrejoinPageEnabled(APP.store.getState())) {\n            _connectionPromise = connect(roomName).then(c => {\n                // we want to initialize it early, in case of errors to be able\n                // to gather logs\n                APP.connection = c;\n\n                return c;\n            });\n\n            APP.store.dispatch(makePrecallTest(this._getConferenceOptions()));\n\n            const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);\n            const tracks = await tryCreateLocalTracks;\n\n            // Initialize device list a second time to ensure device labels\n            // get populated in case of an initial gUM acceptance; otherwise\n            // they may remain as empty strings.\n            this._initDeviceList(true);\n\n            if (isPrejoinPageVisible(APP.store.getState())) {\n                return APP.store.dispatch(initPrejoin(tracks, errors));\n            }\n\n            logger.debug('Prejoin screen no longer displayed at the time when tracks were created');\n\n            this._displayErrorsForCreateInitialLocalTracks(errors);\n\n            return this._setLocalAudioVideoStreams(tracks);\n        }\n\n        const [ tracks, con ] = await this.createInitialLocalTracksAndConnect(roomName, initialOptions);\n        let localTracks = tracks;\n\n        this._initDeviceList(true);\n\n        if (initialOptions.startWithAudioMuted) {\n            localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);\n        }\n\n        return this.startConference(con, localTracks);\n    },\n\n    /**\n     * Joins conference after the tracks have been configured in the prejoin screen.\n     *\n     * @param {Object[]} tracks - An array with the configured tracks\n     * @returns {Promise}\n     */\n    async prejoinStart(tracks) {\n        const con = await _connectionPromise;\n\n        return this.startConference(con, tracks);\n    },\n\n    /**\n     * Check if id is id of the local user.\n     * @param {string} id id to check\n     * @returns {boolean}\n     */\n    isLocalId(id) {\n        return this.getMyUserId() === id;\n    },\n\n    /**\n     * Tells whether the local video is muted or not.\n     * @return {boolean}\n     */\n    isLocalVideoMuted() {\n        // If the tracks are not ready, read from base/media state\n        return this._localTracksInitialized\n            ? isLocalCameraTrackMuted(\n                APP.store.getState()['features/base/tracks'])\n            : isVideoMutedByUser(APP.store);\n    },\n\n    /**\n     * Simulates toolbar button click for audio mute. Used by shortcuts and API.\n     * @param {boolean} mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    muteAudio(mute, showUI = true) {\n        if (!mute\n                && isUserInteractionRequiredForUnmute(APP.store.getState())) {\n            logger.error('Unmuting audio requires user interaction');\n\n            return;\n        }\n\n        // Not ready to modify track's state yet\n        if (!this._localTracksInitialized) {\n            // This will only modify base/media.audio.muted which is then synced\n            // up with the track at the end of local tracks initialization.\n            muteLocalAudio(mute);\n            this.setAudioMuteStatus(mute);\n\n            return;\n        } else if (this.isLocalAudioMuted() === mute) {\n            // NO-OP\n            return;\n        }\n\n        if (!this.localAudio && !mute) {\n            const maybeShowErrorDialog = error => {\n                showUI && APP.store.dispatch(notifyMicError(error));\n            };\n\n            createLocalTracksF({ devices: [ 'audio' ] })\n                .then(([ audioTrack ]) => audioTrack)\n                .catch(error => {\n                    maybeShowErrorDialog(error);\n\n                    // Rollback the audio muted status by using null track\n                    return null;\n                })\n                .then(audioTrack => this.useAudioStream(audioTrack));\n        } else {\n            muteLocalAudio(mute);\n        }\n    },\n\n    /**\n     * Returns whether local audio is muted or not.\n     * @returns {boolean}\n     */\n    isLocalAudioMuted() {\n        // If the tracks are not ready, read from base/media state\n        return this._localTracksInitialized\n            ? isLocalTrackMuted(\n                APP.store.getState()['features/base/tracks'],\n                MEDIA_TYPE.AUDIO)\n            : Boolean(\n                APP.store.getState()['features/base/media'].audio.muted);\n    },\n\n    /**\n     * Simulates toolbar button click for audio mute. Used by shortcuts\n     * and API.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    toggleAudioMuted(showUI = true) {\n        this.muteAudio(!this.isLocalAudioMuted(), showUI);\n    },\n\n    /**\n     * Simulates toolbar button click for presenter video mute. Used by\n     * shortcuts and API.\n     * @param mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    async mutePresenter(mute, showUI = true) {\n        const maybeShowErrorDialog = error => {\n            showUI && APP.store.dispatch(notifyCameraError(error));\n        };\n\n        if (mute) {\n            try {\n                await this.localVideo.setEffect(undefined);\n            } catch (err) {\n                logger.error('Failed to remove the presenter effect', err);\n                maybeShowErrorDialog(err);\n            }\n        } else {\n            try {\n                await this.localVideo.setEffect(await this._createPresenterStreamEffect());\n            } catch (err) {\n                logger.error('Failed to apply the presenter effect', err);\n                maybeShowErrorDialog(err);\n            }\n        }\n    },\n\n    /**\n     * Simulates toolbar button click for video mute. Used by shortcuts and API.\n     * @param mute true for mute and false for unmute.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    muteVideo(mute, showUI = true) {\n        if (!mute\n                && isUserInteractionRequiredForUnmute(APP.store.getState())) {\n            logger.error('Unmuting video requires user interaction');\n\n            return;\n        }\n\n        if (this.isSharingScreen) {\n            // Chain _mutePresenterVideo calls\n            _prevMutePresenterVideo = _prevMutePresenterVideo.then(() => this._mutePresenterVideo(mute));\n\n            return;\n        }\n\n        // If not ready to modify track's state yet adjust the base/media\n        if (!this._localTracksInitialized) {\n            // This will only modify base/media.video.muted which is then synced\n            // up with the track at the end of local tracks initialization.\n            muteLocalVideo(mute);\n            this.setVideoMuteStatus();\n\n            return;\n        } else if (this.isLocalVideoMuted() === mute) {\n            // NO-OP\n            return;\n        }\n\n        if (!this.localVideo && !mute) {\n            const maybeShowErrorDialog = error => {\n                showUI && APP.store.dispatch(notifyCameraError(error));\n            };\n\n            // Try to create local video if there wasn't any.\n            // This handles the case when user joined with no video\n            // (dismissed screen sharing screen or in audio only mode), but\n            // decided to add it later on by clicking on muted video icon or\n            // turning off the audio only mode.\n            //\n            // FIXME when local track creation is moved to react/redux\n            // it should take care of the use case described above\n            createLocalTracksF({ devices: [ 'video' ] })\n                .then(([ videoTrack ]) => videoTrack)\n                .catch(error => {\n                    // FIXME should send some feedback to the API on error ?\n                    maybeShowErrorDialog(error);\n\n                    // Rollback the video muted status by using null track\n                    return null;\n                })\n                .then(videoTrack => {\n                    logger.debug(`muteVideo: calling useVideoStream for track: ${videoTrack}`);\n\n                    return this.useVideoStream(videoTrack);\n                });\n        } else {\n            // FIXME show error dialog if it fails (should be handled by react)\n            muteLocalVideo(mute);\n        }\n    },\n\n    /**\n     * Simulates toolbar button click for video mute. Used by shortcuts and API.\n     * @param {boolean} [showUI] when set to false will not display any error\n     * dialogs in case of media permissions error.\n     */\n    toggleVideoMuted(showUI = true) {\n        this.muteVideo(!this.isLocalVideoMuted(), showUI);\n    },\n\n    /**\n     * Retrieve list of ids of conference participants (without local user).\n     * @returns {string[]}\n     */\n    listMembersIds() {\n        return room.getParticipants().map(p => p.getId());\n    },\n\n    /**\n     * Checks whether the participant identified by id is a moderator.\n     * @id id to search for participant\n     * @return {boolean} whether the participant is moderator\n     */\n    isParticipantModerator(id) {\n        const user = room.getParticipantById(id);\n\n        return user && user.isModerator();\n    },\n\n    /**\n     * Retrieve list of conference participants (without local user).\n     * @returns {JitsiParticipant[]}\n     *\n     * NOTE: Used by jitsi-meet-torture!\n     */\n    listMembers() {\n        return room.getParticipants();\n    },\n\n    get membersCount() {\n        return room.getParticipants().length + 1;\n    },\n\n    /**\n     * Returns true if the callstats integration is enabled, otherwise returns\n     * false.\n     *\n     * @returns true if the callstats integration is enabled, otherwise returns\n     * false.\n     */\n    isCallstatsEnabled() {\n        return room && room.isCallstatsEnabled();\n    },\n\n    /**\n     * Get speaker stats that track total dominant speaker time.\n     *\n     * @returns {object} A hash with keys being user ids and values being the\n     * library's SpeakerStats model used for calculating time as dominant\n     * speaker.\n     */\n    getSpeakerStats() {\n        return room.getSpeakerStats();\n    },\n\n    /**\n     * Returns the connection times stored in the library.\n     */\n    getConnectionTimes() {\n        return room.getConnectionTimes();\n    },\n\n    // used by torture currently\n    isJoined() {\n        return room && room.isJoined();\n    },\n    getConnectionState() {\n        return room && room.getConnectionState();\n    },\n\n    /**\n     * Obtains current P2P ICE connection state.\n     * @return {string|null} ICE connection state or <tt>null</tt> if there's no\n     * P2P connection\n     */\n    getP2PConnectionState() {\n        return room && room.getP2PConnectionState();\n    },\n\n    /**\n     * Starts P2P (for tests only)\n     * @private\n     */\n    _startP2P() {\n        try {\n            room && room.startP2PSession();\n        } catch (error) {\n            logger.error('Start P2P failed', error);\n            throw error;\n        }\n    },\n\n    /**\n     * Stops P2P (for tests only)\n     * @private\n     */\n    _stopP2P() {\n        try {\n            room && room.stopP2PSession();\n        } catch (error) {\n            logger.error('Stop P2P failed', error);\n            throw error;\n        }\n    },\n\n    /**\n     * Checks whether or not our connection is currently in interrupted and\n     * reconnect attempts are in progress.\n     *\n     * @returns {boolean} true if the connection is in interrupted state or\n     * false otherwise.\n     */\n    isConnectionInterrupted() {\n        return room.isConnectionInterrupted();\n    },\n\n    /**\n     * Obtains the local display name.\n     * @returns {string|undefined}\n     */\n    getLocalDisplayName() {\n        return getDisplayName(this.getMyUserId());\n    },\n\n    /**\n     * Finds JitsiParticipant for given id.\n     *\n     * @param {string} id participant's identifier(MUC nickname).\n     *\n     * @returns {JitsiParticipant|null} participant instance for given id or\n     * null if not found.\n     */\n    getParticipantById(id) {\n        return room ? room.getParticipantById(id) : null;\n    },\n\n    /**\n     * Gets the display name foe the <tt>JitsiParticipant</tt> identified by\n     * the given <tt>id</tt>.\n     *\n     * @param id {string} the participant's id(MUC nickname/JVB endpoint id)\n     *\n     * @return {string} the participant's display name or the default string if\n     * absent.\n     */\n    getParticipantDisplayName(id) {\n        const displayName = getDisplayName(id);\n\n        if (displayName) {\n            return displayName;\n        }\n        if (APP.conference.isLocalId(id)) {\n            return APP.translation.generateTranslationHTML(\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME);\n        }\n\n        return interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;\n    },\n\n    getMyUserId() {\n        return room && room.myUserId();\n    },\n\n    /**\n     * Will be filled with values only when config.debug is enabled.\n     * Its used by torture to check audio levels.\n     */\n    audioLevelsMap: {},\n\n    /**\n     * Returns the stored audio level (stored only if config.debug is enabled)\n     * @param id the id for the user audio level to return (the id value is\n     *          returned for the participant using getMyUserId() method)\n     */\n    getPeerSSRCAudioLevel(id) {\n        return this.audioLevelsMap[id];\n    },\n\n    /**\n     * @return {number} the number of participants in the conference with at\n     * least one track.\n     */\n    getNumberOfParticipantsWithTracks() {\n        return room.getParticipants()\n            .filter(p => p.getTracks().length > 0)\n            .length;\n    },\n\n    /**\n     * Returns the stats.\n     */\n    getStats() {\n        return room.connectionQuality.getStats();\n    },\n\n    // end used by torture\n\n    /**\n     * Download logs, a function that can be called from console while\n     * debugging.\n     * @param filename (optional) specify target filename\n     */\n    saveLogs(filename = 'meetlog.json') {\n        // this can be called from console and will not have reference to this\n        // that's why we reference the global var\n        const logs = APP.connection.getLogs();\n\n        downloadJSON(logs, filename);\n    },\n\n    /**\n     * Exposes a Command(s) API on this instance. It is necessitated by (1) the\n     * desire to keep room private to this instance and (2) the need of other\n     * modules to send and receive commands to and from participants.\n     * Eventually, this instance remains in control with respect to the\n     * decision whether the Command(s) API of room (i.e. lib-jitsi-meet's\n     * JitsiConference) is to be used in the implementation of the Command(s)\n     * API of this instance.\n     */\n    commands: {\n        /**\n         * Known custom conference commands.\n         */\n        defaults: commands,\n\n        /**\n         * Receives notifications from other participants about commands aka\n         * custom events (sent by sendCommand or sendCommandOnce methods).\n         * @param command {String} the name of the command\n         * @param handler {Function} handler for the command\n         */\n        addCommandListener() {\n            // eslint-disable-next-line prefer-rest-params\n            room.addCommandListener(...arguments);\n        },\n\n        /**\n         * Removes command.\n         * @param name {String} the name of the command.\n         */\n        removeCommand() {\n            // eslint-disable-next-line prefer-rest-params\n            room.removeCommand(...arguments);\n        },\n\n        /**\n         * Sends command.\n         * @param name {String} the name of the command.\n         * @param values {Object} with keys and values that will be sent.\n         */\n        sendCommand() {\n            // eslint-disable-next-line prefer-rest-params\n            room.sendCommand(...arguments);\n        },\n\n        /**\n         * Sends command one time.\n         * @param name {String} the name of the command.\n         * @param values {Object} with keys and values that will be sent.\n         */\n        sendCommandOnce() {\n            // eslint-disable-next-line prefer-rest-params\n            room.sendCommandOnce(...arguments);\n        }\n    },\n\n    _createRoom(localTracks) {\n        room\n            = connection.initJitsiConference(\n                APP.conference.roomName,\n                this._getConferenceOptions());\n\n        APP.store.dispatch(conferenceWillJoin(room));\n\n        // Filter out the tracks that are muted.\n        const tracks = localTracks.filter(track => !track.isMuted());\n\n        this._setLocalAudioVideoStreams(tracks);\n        this._room = room; // FIXME do not use this\n\n        sendLocalParticipant(APP.store, room);\n\n        this._setupListeners();\n    },\n\n    /**\n     * Sets local video and audio streams.\n     * @param {JitsiLocalTrack[]} tracks=[]\n     * @returns {Promise[]}\n     * @private\n     */\n    _setLocalAudioVideoStreams(tracks = []) {\n        return tracks.map(track => {\n            if (track.isAudioTrack()) {\n                return this.useAudioStream(track);\n            } else if (track.isVideoTrack()) {\n                logger.debug(`_setLocalAudioVideoStreams is calling useVideoStream with track: ${track}`);\n\n                return this.useVideoStream(track);\n            }\n\n            logger.error(\n                    'Ignored not an audio nor a video track: ', track);\n\n            return Promise.resolve();\n\n        });\n    },\n\n    _getConferenceOptions() {\n        return getConferenceOptions(APP.store.getState());\n    },\n\n    /**\n     * Start using provided video stream.\n     * Stops previous video stream.\n     * @param {JitsiLocalTrack} newTrack - new track to use or null\n     * @returns {Promise}\n     */\n    useVideoStream(newTrack) {\n        logger.debug(`useVideoStream: ${newTrack}`);\n\n        return new Promise((resolve, reject) => {\n            _replaceLocalVideoTrackQueue.enqueue(onFinish => {\n                const state = APP.store.getState();\n\n                // When the prejoin page is displayed localVideo is not set\n                // so just replace the video track from the store with the new one.\n                if (isPrejoinPageVisible(state)) {\n                    const oldTrack = getLocalJitsiVideoTrack(state);\n\n                    logger.debug(`useVideoStream on the prejoin screen: Replacing ${oldTrack} with ${newTrack}`);\n\n                    return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))\n                        .then(resolve)\n                        .catch(error => {\n                            logger.error(`useVideoStream failed on the prejoin screen: ${error}`);\n                            reject(error);\n                        })\n                        .then(onFinish);\n                }\n\n                logger.debug(`useVideoStream: Replacing ${this.localVideo} with ${newTrack}`);\n                APP.store.dispatch(\n                    replaceLocalTrack(this.localVideo, newTrack, room))\n                    .then(() => {\n                        this.localVideo = newTrack;\n                        this._setSharingScreen(newTrack);\n                        this.setVideoMuteStatus();\n                    })\n                    .then(resolve)\n                    .catch(error => {\n                        logger.error(`useVideoStream failed: ${error}`);\n                        reject(error);\n                    })\n                    .then(onFinish);\n            });\n        });\n    },\n\n    /**\n     * Sets `this.isSharingScreen` depending on provided video stream.\n     * In case new screen sharing status is not equal previous one\n     * it updates desktop sharing buttons in UI\n     * and notifies external application.\n     *\n     * @param {JitsiLocalTrack} [newStream] new stream to use or null\n     * @private\n     * @returns {void}\n     */\n    _setSharingScreen(newStream) {\n        const wasSharingScreen = this.isSharingScreen;\n\n        this.isSharingScreen = newStream && newStream.videoType === 'desktop';\n\n        if (wasSharingScreen !== this.isSharingScreen) {\n            const details = {};\n\n            if (this.isSharingScreen) {\n                details.sourceType = newStream.sourceType;\n            }\n\n            APP.API.notifyScreenSharingStatusChanged(\n                this.isSharingScreen, details);\n        }\n    },\n\n    /**\n     * Start using provided audio stream.\n     * Stops previous audio stream.\n     * @param {JitsiLocalTrack} newTrack - new track to use or null\n     * @returns {Promise}\n     */\n    useAudioStream(newTrack) {\n        return new Promise((resolve, reject) => {\n            _replaceLocalAudioTrackQueue.enqueue(onFinish => {\n                const state = APP.store.getState();\n\n                // When the prejoin page is displayed localAudio is not set\n                // so just replace the audio track from the store with the new one.\n                if (isPrejoinPageVisible(state)) {\n                    const oldTrack = getLocalJitsiAudioTrack(state);\n\n                    return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))\n                        .then(resolve)\n                        .catch(reject)\n                        .then(onFinish);\n                }\n\n                APP.store.dispatch(\n                replaceLocalTrack(this.localAudio, newTrack, room))\n                    .then(() => {\n                        this.localAudio = newTrack;\n                        this.setAudioMuteStatus(this.isLocalAudioMuted());\n                    })\n                    .then(resolve)\n                    .catch(reject)\n                    .then(onFinish);\n            });\n        });\n    },\n\n    /**\n     * Returns whether or not the conference is currently in audio only mode.\n     *\n     * @returns {boolean}\n     */\n    isAudioOnly() {\n        return Boolean(APP.store.getState()['features/base/audio-only'].enabled);\n    },\n\n    videoSwitchInProgress: false,\n\n    /**\n     * This fields stores a handler which will create a Promise which turns off\n     * the screen sharing and restores the previous video state (was there\n     * any video, before switching to screen sharing ? was it muted ?).\n     *\n     * Once called this fields is cleared to <tt>null</tt>.\n     * @type {Function|null}\n     */\n    _untoggleScreenSharing: null,\n\n    /**\n     * Creates a Promise which turns off the screen sharing and restores\n     * the previous state described by the arguments.\n     *\n     * This method is bound to the appropriate values, after switching to screen\n     * sharing and stored in {@link _untoggleScreenSharing}.\n     *\n     * @param {boolean} didHaveVideo indicates if there was a camera video being\n     * used, before switching to screen sharing.\n     * @param {boolean} wasVideoMuted indicates if the video was muted, before\n     * switching to screen sharing.\n     * @return {Promise} resolved after the screen sharing is turned off, or\n     * rejected with some error (no idea what kind of error, possible GUM error)\n     * in case it fails.\n     * @private\n     */\n    async _turnScreenSharingOff(didHaveVideo) {\n        this._untoggleScreenSharing = null;\n        this.videoSwitchInProgress = true;\n\n        APP.store.dispatch(stopReceiver());\n\n        this._stopProxyConnection();\n        if (config.enableScreenshotCapture) {\n            APP.store.dispatch(toggleScreenshotCaptureEffect(false));\n        }\n\n        // It can happen that presenter GUM is in progress while screensharing is being turned off. Here it needs to\n        // wait for that GUM to be resolved in order to prevent leaking the presenter track(this.localPresenterVideo\n        // will be null when SS is being turned off, but it will initialize once GUM resolves).\n        let promise = _prevMutePresenterVideo = _prevMutePresenterVideo.then(() => {\n            // mute the presenter track if it exists.\n            if (this.localPresenterVideo) {\n                APP.store.dispatch(setVideoMuted(true, MEDIA_TYPE.PRESENTER));\n\n                return this.localPresenterVideo.dispose().then(() => {\n                    APP.store.dispatch(trackRemoved(this.localPresenterVideo));\n                    this.localPresenterVideo = null;\n                });\n            }\n        });\n\n        // If system audio was also shared stop the AudioMixerEffect and dispose of the desktop audio track.\n        if (this._mixerEffect) {\n            await this.localAudio.setEffect(undefined);\n            await this._desktopAudioStream.dispose();\n            this._mixerEffect = undefined;\n            this._desktopAudioStream = undefined;\n\n        // In case there was no local audio when screen sharing was started the fact that we set the audio stream to\n        // null will take care of the desktop audio stream cleanup.\n        } else if (this._desktopAudioStream) {\n            await this.useAudioStream(null);\n            this._desktopAudioStream = undefined;\n        }\n\n        APP.store.dispatch(setScreenAudioShareState(false));\n\n        if (didHaveVideo) {\n            promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))\n                .then(([ stream ]) => {\n                    logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`);\n\n                    return this.useVideoStream(stream);\n                })\n                .catch(error => {\n                    logger.error('failed to switch back to local video', error);\n\n                    return this.useVideoStream(null).then(() =>\n\n                        // Still fail with the original err\n                        Promise.reject(error)\n                    );\n                });\n        } else {\n            promise = promise.then(() => {\n                logger.debug('_turnScreenSharingOff using null for useVideoStream');\n\n                return this.useVideoStream(null);\n            });\n        }\n\n        return promise.then(\n            () => {\n                this.videoSwitchInProgress = false;\n                sendAnalytics(createScreenSharingEvent('stopped'));\n                logger.info('Screen sharing stopped.');\n            },\n            error => {\n                this.videoSwitchInProgress = false;\n                logger.error(`_turnScreenSharingOff failed: ${error}`);\n\n                throw error;\n            });\n    },\n\n    /**\n     * Toggles between screen sharing and camera video if the toggle parameter\n     * is not specified and starts the procedure for obtaining new screen\n     * sharing/video track otherwise.\n     *\n     * @param {boolean} [toggle] - If true - new screen sharing track will be\n     * obtained. If false - new video track will be obtain. If not specified -\n     * toggles between screen sharing and camera video.\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     * @param {Array<string>} [options.desktopSharingSources] - Array with the\n     * sources that have to be displayed in the desktop picker window ('screen',\n     * 'window', etc.).\n     * @return {Promise.<T>}\n     */\n    async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}) {\n        logger.debug(`toggleScreenSharing: ${toggle}`);\n        if (this.videoSwitchInProgress) {\n            return Promise.reject('Switch in progress.');\n        }\n        if (!JitsiMeetJS.isDesktopSharingEnabled()) {\n            return Promise.reject('Cannot toggle screen sharing: not supported.');\n        }\n\n        if (this.isAudioOnly()) {\n            return Promise.reject('No screensharing in audio only mode');\n        }\n\n        if (toggle) {\n            try {\n                await this._switchToScreenSharing(options);\n\n                return;\n            } catch (err) {\n                logger.error('Failed to switch to screensharing', err);\n\n                return;\n            }\n        }\n\n        return this._untoggleScreenSharing\n            ? this._untoggleScreenSharing()\n            : Promise.resolve();\n    },\n\n    /**\n     * Creates desktop (screensharing) {@link JitsiLocalTrack}\n     *\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     * @param {Object} [options.desktopSharing]\n     * @param {Object} [options.desktopStream] - An existing desktop stream to\n     * use instead of creating a new desktop stream.\n     * @return {Promise.<JitsiLocalTrack>} - A Promise resolved with\n     * {@link JitsiLocalTrack} for the screensharing or rejected with\n     * {@link JitsiTrackError}.\n     *\n     * @private\n     */\n    _createDesktopTrack(options = {}) {\n        const didHaveVideo = !this.isLocalVideoMuted();\n\n        const getDesktopStreamPromise = options.desktopStream\n            ? Promise.resolve([ options.desktopStream ])\n            : createLocalTracksF({\n                desktopSharingSourceDevice: options.desktopSharingSources\n                    ? null : config._desktopSharingSourceDevice,\n                desktopSharingSources: options.desktopSharingSources,\n                devices: [ 'desktop' ]\n            });\n\n        return getDesktopStreamPromise.then(desktopStreams => {\n            // Stores the \"untoggle\" handler which remembers whether was\n            // there any video before and whether was it muted.\n            this._untoggleScreenSharing\n                = this._turnScreenSharingOff.bind(this, didHaveVideo);\n\n            const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);\n            const dekstopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);\n\n            if (dekstopAudioStream) {\n                dekstopAudioStream.on(\n                    JitsiTrackEvents.LOCAL_TRACK_STOPPED,\n                    () => {\n                        logger.debug(`Local screensharing audio track stopped. ${this.isSharingScreen}`);\n\n                        // Handle case where screen share was stopped from  the browsers 'screen share in progress'\n                        // window. If audio screen sharing is stopped via the normal UX flow this point shouldn't\n                        // be reached.\n                        isScreenAudioShared(APP.store.getState())\n                            && this._untoggleScreenSharing\n                            && this._untoggleScreenSharing();\n                    }\n                );\n            }\n\n            if (desktopVideoStream) {\n                desktopVideoStream.on(\n                    JitsiTrackEvents.LOCAL_TRACK_STOPPED,\n                    () => {\n                        logger.debug(`Local screensharing track stopped. ${this.isSharingScreen}`);\n\n                        // If the stream was stopped during screen sharing\n                        // session then we should switch back to video.\n                        this.isSharingScreen\n                            && this._untoggleScreenSharing\n                            && this._untoggleScreenSharing();\n                    }\n                );\n            }\n\n            return desktopStreams;\n        }, error => {\n            throw error;\n        });\n    },\n\n    /**\n     * Creates a new instance of presenter effect. A new video track is created\n     * using the new set of constraints that are calculated based on\n     * the height of the desktop that is being currently shared.\n     *\n     * @param {number} height - The height of the desktop stream that is being\n     * currently shared.\n     * @param {string} cameraDeviceId - The device id of the camera to be used.\n     * @return {Promise<JitsiStreamPresenterEffect>} - A promise resolved with\n     * {@link JitsiStreamPresenterEffect} if it succeeds.\n     */\n    async _createPresenterStreamEffect(height = null, cameraDeviceId = null) {\n        if (!this.localPresenterVideo) {\n            const camera = cameraDeviceId ?? getUserSelectedCameraDeviceId(APP.store.getState());\n\n            try {\n                this.localPresenterVideo = await createLocalPresenterTrack({ cameraDeviceId: camera }, height);\n            } catch (err) {\n                logger.error('Failed to create a camera track for presenter', err);\n\n                return;\n            }\n            APP.store.dispatch(trackAdded(this.localPresenterVideo));\n        }\n        try {\n            const effect = await createPresenterEffect(this.localPresenterVideo.stream);\n\n            return effect;\n        } catch (err) {\n            logger.error('Failed to create the presenter effect', err);\n        }\n    },\n\n    /**\n     * Tries to turn the presenter video track on or off. If a presenter track\n     * doesn't exist, a new video track is created.\n     *\n     * @param mute - true for mute and false for unmute.\n     *\n     * @private\n     */\n    async _mutePresenterVideo(mute) {\n        const maybeShowErrorDialog = error => {\n            APP.store.dispatch(notifyCameraError(error));\n        };\n\n        // Check for NO-OP\n        if (mute && (!this.localPresenterVideo || this.localPresenterVideo.isMuted())) {\n\n            return;\n        } else if (!mute && this.localPresenterVideo && !this.localPresenterVideo.isMuted()) {\n\n            return;\n        }\n\n        // Create a new presenter track and apply the presenter effect.\n        if (!this.localPresenterVideo && !mute) {\n            const { height, width } = this.localVideo.track.getSettings() ?? this.localVideo.track.getConstraints();\n            const isPortrait = height >= width;\n            const DESKTOP_STREAM_CAP = 720;\n\n            const highResolutionTrack\n                = (isPortrait && width > DESKTOP_STREAM_CAP) || (!isPortrait && height > DESKTOP_STREAM_CAP);\n\n            // Resizing the desktop track for presenter is causing blurriness of the desktop share on chrome.\n            // Disable resizing by default, enable it only when config.js setting is enabled.\n            const resizeDesktopStream = highResolutionTrack && config.videoQuality?.resizeDesktopForPresenter;\n\n            if (resizeDesktopStream) {\n                let desktopResizeConstraints = {};\n\n                if (height && width) {\n                    const advancedConstraints = [ { aspectRatio: (width / height).toPrecision(4) } ];\n                    const constraint = isPortrait ? { width: DESKTOP_STREAM_CAP } : { height: DESKTOP_STREAM_CAP };\n\n                    advancedConstraints.push(constraint);\n                    desktopResizeConstraints.advanced = advancedConstraints;\n                } else {\n                    desktopResizeConstraints = {\n                        width: 1280,\n                        height: 720\n                    };\n                }\n\n                // Apply the constraints on the desktop track.\n                try {\n                    await this.localVideo.track.applyConstraints(desktopResizeConstraints);\n                } catch (err) {\n                    logger.error('Failed to apply constraints on the desktop stream for presenter mode', err);\n\n                    return;\n                }\n            }\n            const trackHeight = resizeDesktopStream\n                ? this.localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP\n                : height;\n            let effect;\n\n            try {\n                effect = await this._createPresenterStreamEffect(trackHeight);\n            } catch (err) {\n                logger.error('Failed to unmute Presenter Video', err);\n                maybeShowErrorDialog(err);\n\n                return;\n            }\n\n            // Replace the desktop track on the peerconnection.\n            try {\n                await this.localVideo.setEffect(effect);\n                APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));\n                this.setVideoMuteStatus();\n            } catch (err) {\n                logger.error('Failed to apply the Presenter effect', err);\n            }\n        } else {\n            APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));\n        }\n    },\n\n    /**\n     * Tries to switch to the screensharing mode by disposing camera stream and\n     * replacing it with a desktop one.\n     *\n     * @param {Object} [options] - Screen sharing options that will be passed to\n     * createLocalTracks.\n     *\n     * @return {Promise} - A Promise resolved if the operation succeeds or\n     * rejected with some unknown type of error in case it fails. Promise will\n     * be rejected immediately if {@link videoSwitchInProgress} is true.\n     *\n     * @private\n     */\n    _switchToScreenSharing(options = {}) {\n        if (this.videoSwitchInProgress) {\n            return Promise.reject('Switch in progress.');\n        }\n\n        this.videoSwitchInProgress = true;\n\n        return this._createDesktopTrack(options)\n            .then(async streams => {\n                let desktopVideoStream = streams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);\n\n                this._desktopAudioStream = streams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);\n\n                const { audioOnly = false } = options;\n\n                // If we're in audio only mode dispose of the video track otherwise the screensharing state will be\n                // inconsistent.\n                if (audioOnly) {\n                    desktopVideoStream.dispose();\n                    desktopVideoStream = undefined;\n\n                    if (!this._desktopAudioStream) {\n                        return Promise.reject(AUDIO_ONLY_SCREEN_SHARE_NO_TRACK);\n                    }\n                }\n\n                if (desktopVideoStream) {\n                    logger.debug(`_switchToScreenSharing is using ${desktopVideoStream} for useVideoStream`);\n                    await this.useVideoStream(desktopVideoStream);\n                }\n\n                if (this._desktopAudioStream) {\n                    // If there is a localAudio stream, mix in the desktop audio stream captured by the screen sharing\n                    // api.\n                    if (this.localAudio) {\n                        this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);\n\n                        await this.localAudio.setEffect(this._mixerEffect);\n                    } else {\n                        // If no local stream is present ( i.e. no input audio devices) we use the screen share audio\n                        // stream as we would use a regular stream.\n                        await this.useAudioStream(this._desktopAudioStream);\n\n                    }\n                    APP.store.dispatch(setScreenAudioShareState(true));\n                }\n            })\n            .then(() => {\n                this.videoSwitchInProgress = false;\n                if (config.enableScreenshotCapture) {\n                    APP.store.dispatch(toggleScreenshotCaptureEffect(true));\n                }\n                sendAnalytics(createScreenSharingEvent('started'));\n                logger.log('Screen sharing started');\n            })\n            .catch(error => {\n                this.videoSwitchInProgress = false;\n\n                // Pawel: With this call I'm trying to preserve the original\n                // behaviour although it is not clear why would we \"untoggle\"\n                // on failure. I suppose it was to restore video in case there\n                // was some problem during \"this.useVideoStream(desktopStream)\".\n                // It's important to note that the handler will not be available\n                // if we fail early on trying to get desktop media (which makes\n                // sense, because the camera video is still being used, so\n                // nothing to \"untoggle\").\n                if (this._untoggleScreenSharing) {\n                    this._untoggleScreenSharing();\n                }\n\n                // FIXME the code inside of _handleScreenSharingError is\n                // asynchronous, but does not return a Promise and is not part\n                // of the current Promise chain.\n                this._handleScreenSharingError(error);\n\n                return Promise.reject(error);\n            });\n    },\n\n    /**\n     * Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when\n     * trying to create screensharing track. It will either do nothing if\n     * the dialog was canceled on user's request or display an error if\n     * screensharing couldn't be started.\n     * @param {JitsiTrackError} error - The error returned by\n     * {@link _createDesktopTrack} Promise.\n     * @private\n     */\n    _handleScreenSharingError(error) {\n        if (error.name === JitsiTrackErrors.SCREENSHARING_USER_CANCELED) {\n            return;\n        }\n\n        logger.error('failed to share local desktop', error);\n\n        // Handling:\n        // JitsiTrackErrors.CONSTRAINT_FAILED\n        // JitsiTrackErrors.PERMISSION_DENIED\n        // JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR\n        // and any other\n        let descriptionKey;\n        let titleKey;\n\n        if (error.name === JitsiTrackErrors.PERMISSION_DENIED) {\n            descriptionKey = 'dialog.screenSharingPermissionDeniedError';\n            titleKey = 'dialog.screenSharingFailedTitle';\n        } else if (error.name === JitsiTrackErrors.CONSTRAINT_FAILED) {\n            descriptionKey = 'dialog.cameraConstraintFailedError';\n            titleKey = 'deviceError.cameraError';\n        } else if (error.name === JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR) {\n            descriptionKey = 'dialog.screenSharingFailed';\n            titleKey = 'dialog.screenSharingFailedTitle';\n        } else if (error === AUDIO_ONLY_SCREEN_SHARE_NO_TRACK) {\n            descriptionKey = 'notify.screenShareNoAudio';\n            titleKey = 'notify.screenShareNoAudioTitle';\n        }\n\n        APP.UI.messageHandler.showError({\n            descriptionKey,\n            titleKey\n        });\n    },\n\n    /**\n     * Setup interaction between conference and UI.\n     */\n    _setupListeners() {\n        // add local streams when joined to the conference\n        room.on(JitsiConferenceEvents.CONFERENCE_JOINED, () => {\n            this._onConferenceJoined();\n        });\n\n        room.on(\n            JitsiConferenceEvents.CONFERENCE_LEFT,\n            (...args) => {\n                APP.store.dispatch(conferenceTimestampChanged(0));\n                APP.store.dispatch(conferenceLeft(room, ...args));\n            });\n\n        room.on(\n            JitsiConferenceEvents.CONFERENCE_UNIQUE_ID_SET,\n            (...args) => {\n                // Preserve the sessionId so that the value is accessible even after room\n                // is disconnected.\n                room.sessionId = room.getMeetingUniqueId();\n                APP.store.dispatch(conferenceUniqueIdSet(room, ...args));\n            });\n\n        room.on(\n            JitsiConferenceEvents.AUTH_STATUS_CHANGED,\n            (authEnabled, authLogin) =>\n                APP.store.dispatch(authStatusChanged(authEnabled, authLogin)));\n\n        room.on(JitsiConferenceEvents.PARTCIPANT_FEATURES_CHANGED, user => {\n            APP.store.dispatch(updateRemoteParticipantFeatures(user));\n        });\n        room.on(JitsiConferenceEvents.USER_JOINED, (id, user) => {\n            // The logic shared between RN and web.\n            commonUserJoinedHandling(APP.store, room, user);\n\n            if (user.isHidden()) {\n                return;\n            }\n\n            APP.store.dispatch(updateRemoteParticipantFeatures(user));\n            logger.log(`USER ${id} connected:`, user);\n            APP.UI.addUser(user);\n        });\n\n        room.on(JitsiConferenceEvents.USER_LEFT, (id, user) => {\n            // The logic shared between RN and web.\n            commonUserLeftHandling(APP.store, room, user);\n\n            if (user.isHidden()) {\n                return;\n            }\n\n            logger.log(`USER ${id} LEFT:`, user);\n        });\n\n        room.on(JitsiConferenceEvents.USER_STATUS_CHANGED, (id, status) => {\n            APP.store.dispatch(participantPresenceChanged(id, status));\n\n            const user = room.getParticipantById(id);\n\n            if (user) {\n                APP.UI.updateUserStatus(user, status);\n            }\n        });\n\n        room.on(JitsiConferenceEvents.USER_ROLE_CHANGED, (id, role) => {\n            if (this.isLocalId(id)) {\n                logger.info(`My role changed, new role: ${role}`);\n\n                APP.store.dispatch(localParticipantRoleChanged(role));\n                APP.API.notifyUserRoleChanged(id, role);\n            } else {\n                APP.store.dispatch(participantRoleChanged(id, role));\n            }\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_ADDED, track => {\n            if (!track || track.isLocal()) {\n                return;\n            }\n\n            APP.store.dispatch(trackAdded(track));\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_REMOVED, track => {\n            if (!track || track.isLocal()) {\n                return;\n            }\n\n            APP.store.dispatch(trackRemoved(track));\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED, (id, lvl) => {\n            let newLvl = lvl;\n\n            if (this.isLocalId(id)\n                && this.localAudio && this.localAudio.isMuted()) {\n                newLvl = 0;\n            }\n\n            if (config.debug) {\n                this.audioLevelsMap[id] = newLvl;\n                if (config.debugAudioLevels) {\n                    logger.log(`AudioLevel:${id}/${newLvl}`);\n                }\n            }\n\n            APP.UI.setAudioLevel(id, newLvl);\n        });\n\n        room.on(JitsiConferenceEvents.TRACK_MUTE_CHANGED, (track, participantThatMutedUs) => {\n            if (participantThatMutedUs) {\n                APP.store.dispatch(participantMutedUs(participantThatMutedUs, track));\n                if (this.isSharingScreen && track.isVideoTrack()) {\n                    logger.debug('TRACK_MUTE_CHANGED while screen sharing');\n                    this._turnScreenSharingOff(false);\n                }\n            }\n        });\n\n        room.on(JitsiConferenceEvents.SUBJECT_CHANGED,\n            subject => APP.store.dispatch(conferenceSubjectChanged(subject)));\n\n        room.on(\n            JitsiConferenceEvents.LAST_N_ENDPOINTS_CHANGED,\n            (leavingIds, enteringIds) =>\n                APP.UI.handleLastNEndpoints(leavingIds, enteringIds));\n\n        room.on(\n            JitsiConferenceEvents.P2P_STATUS,\n            (jitsiConference, p2p) =>\n                APP.store.dispatch(p2pStatusChanged(p2p)));\n\n        room.on(\n            JitsiConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,\n            (id, connectionStatus) => APP.store.dispatch(\n                participantConnectionStatusChanged(id, connectionStatus)));\n\n        room.on(\n            JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,\n            id => APP.store.dispatch(dominantSpeakerChanged(id, room)));\n\n        room.on(\n            JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,\n            conferenceTimestamp => APP.store.dispatch(conferenceTimestampChanged(conferenceTimestamp)));\n\n        room.on(JitsiConferenceEvents.CONNECTION_INTERRUPTED, () => {\n            APP.store.dispatch(localParticipantConnectionStatusChanged(\n                JitsiParticipantConnectionStatus.INTERRUPTED));\n        });\n\n        room.on(JitsiConferenceEvents.CONNECTION_RESTORED, () => {\n            APP.store.dispatch(localParticipantConnectionStatusChanged(\n                JitsiParticipantConnectionStatus.ACTIVE));\n        });\n\n        room.on(\n            JitsiConferenceEvents.DISPLAY_NAME_CHANGED,\n            (id, displayName) => {\n                const formattedDisplayName\n                    = getNormalizedDisplayName(displayName);\n\n                APP.store.dispatch(participantUpdated({\n                    conference: room,\n                    id,\n                    name: formattedDisplayName\n                }));\n                APP.API.notifyDisplayNameChanged(id, {\n                    displayName: formattedDisplayName,\n                    formattedDisplayName:\n                        appendSuffix(\n                            formattedDisplayName\n                                || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)\n                });\n            }\n        );\n        room.on(\n            JitsiConferenceEvents.BOT_TYPE_CHANGED,\n            (id, botType) => {\n\n                APP.store.dispatch(participantUpdated({\n                    conference: room,\n                    id,\n                    botType\n                }));\n            }\n        );\n\n        room.on(\n            JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n            (...args) => {\n                APP.store.dispatch(endpointMessageReceived(...args));\n                if (args && args.length >= 2) {\n                    const [ sender, eventData ] = args;\n\n                    if (eventData.name === ENDPOINT_TEXT_MESSAGE_NAME) {\n                        APP.API.notifyEndpointTextMessageReceived({\n                            senderInfo: {\n                                jid: sender._jid,\n                                id: sender._id\n                            },\n                            eventData\n                        });\n                    }\n                }\n            });\n\n        room.on(\n            JitsiConferenceEvents.LOCK_STATE_CHANGED,\n            (...args) => APP.store.dispatch(lockStateChanged(room, ...args)));\n\n        room.on(JitsiConferenceEvents.KICKED, (participant, reason, isReplaced) => {\n            if (isReplaced) {\n                // this event triggers when the local participant is kicked, `participant`\n                // is the kicker. In replace participant case, kicker is undefined,\n                // as the server initiated it. We mark in store the local participant\n                // as being replaced based on jwt.\n                const localParticipant = getLocalParticipant(APP.store.getState());\n\n                APP.store.dispatch(participantUpdated({\n                    conference: room,\n                    id: localParticipant.id,\n                    isReplaced\n                }));\n\n                // we send readyToClose when kicked participant is replace so that\n                // embedding app can choose to dispose the iframe API on the handler.\n                APP.API.notifyReadyToClose();\n            }\n            APP.store.dispatch(kickedOut(room, participant));\n        });\n\n        room.on(JitsiConferenceEvents.PARTICIPANT_KICKED, (kicker, kicked) => {\n            APP.store.dispatch(participantKicked(kicker, kicked));\n        });\n\n        room.on(JitsiConferenceEvents.SUSPEND_DETECTED, () => {\n            APP.store.dispatch(suspendDetected());\n        });\n\n        APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {\n            this.muteAudio(muted);\n        });\n        APP.UI.addListener(UIEvents.VIDEO_MUTED, muted => {\n            this.muteVideo(muted);\n        });\n\n        room.addCommandListener(this.commands.defaults.ETHERPAD,\n            ({ value }) => {\n                APP.UI.initEtherpad(value);\n            }\n        );\n\n        APP.UI.addListener(UIEvents.EMAIL_CHANGED,\n            this.changeLocalEmail.bind(this));\n        room.addCommandListener(this.commands.defaults.EMAIL, (data, from) => {\n            APP.store.dispatch(participantUpdated({\n                conference: room,\n                id: from,\n                email: data.value\n            }));\n        });\n\n        room.addCommandListener(\n            this.commands.defaults.AVATAR_URL,\n            (data, from) => {\n                APP.store.dispatch(\n                    participantUpdated({\n                        conference: room,\n                        id: from,\n                        avatarURL: data.value\n                    }));\n            });\n\n        APP.UI.addListener(UIEvents.NICKNAME_CHANGED,\n            this.changeLocalDisplayName.bind(this));\n\n        room.on(\n            JitsiConferenceEvents.START_MUTED_POLICY_CHANGED,\n            ({ audio, video }) => {\n                APP.store.dispatch(\n                    onStartMutedPolicyChanged(audio, video));\n            }\n        );\n        room.on(JitsiConferenceEvents.STARTED_MUTED, () => {\n            const audioMuted = room.isStartAudioMuted();\n            const videoMuted = room.isStartVideoMuted();\n            const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);\n            const promises = [];\n\n            APP.store.dispatch(setAudioMuted(audioMuted));\n            APP.store.dispatch(setVideoMuted(videoMuted));\n\n            // Remove the tracks from the peerconnection.\n            for (const track of localTracks) {\n                if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO) {\n                    promises.push(this.useAudioStream(null));\n                }\n                if (videoMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.VIDEO) {\n                    promises.push(this.useVideoStream(null));\n                }\n            }\n\n            Promise.allSettled(promises)\n                .then(() => APP.UI.notifyInitiallyMuted());\n        });\n\n        room.on(\n            JitsiConferenceEvents.DATA_CHANNEL_OPENED, () => {\n                APP.store.dispatch(dataChannelOpened());\n            }\n        );\n\n        // call hangup\n        APP.UI.addListener(UIEvents.HANGUP, () => {\n            this.hangup(true);\n        });\n\n        // logout\n        APP.UI.addListener(UIEvents.LOGOUT, () => {\n            AuthHandler.logout(room).then(url => {\n                if (url) {\n                    UIUtil.redirect(url);\n                } else {\n                    this.hangup(true);\n                }\n            });\n        });\n\n        APP.UI.addListener(UIEvents.AUTH_CLICKED, () => {\n            AuthHandler.authenticate(room);\n        });\n\n        APP.UI.addListener(\n            UIEvents.VIDEO_DEVICE_CHANGED,\n            cameraDeviceId => {\n                const videoWasMuted = this.isLocalVideoMuted();\n\n                sendAnalytics(createDeviceChangedEvent('video', 'input'));\n\n                // If both screenshare and video are in progress, restart the\n                // presenter mode with the new camera device.\n                if (this.isSharingScreen && !videoWasMuted) {\n                    const { height } = this.localVideo.track.getSettings();\n\n                    // dispose the existing presenter track and create a new\n                    // camera track.\n                    // FIXME JitsiLocalTrack.dispose is async and should be waited for\n                    this.localPresenterVideo && this.localPresenterVideo.dispose();\n                    this.localPresenterVideo = null;\n\n                    return this._createPresenterStreamEffect(height, cameraDeviceId)\n                        .then(effect => this.localVideo.setEffect(effect))\n                        .then(() => {\n                            this.setVideoMuteStatus();\n                            logger.log('Switched local video device while screen sharing and the video is unmuted');\n                            this._updateVideoDeviceId();\n                        })\n                        .catch(err => APP.store.dispatch(notifyCameraError(err)));\n\n                // If screenshare is in progress but video is muted, update the default device\n                // id for video, dispose the existing presenter track and create a new effect\n                // that can be applied on un-mute.\n                } else if (this.isSharingScreen && videoWasMuted) {\n                    logger.log('Switched local video device: while screen sharing and the video is muted');\n                    const { height } = this.localVideo.track.getSettings();\n\n                    this._updateVideoDeviceId();\n\n                    // FIXME JitsiLocalTrack.dispose is async and should be waited for\n                    this.localPresenterVideo && this.localPresenterVideo.dispose();\n                    this.localPresenterVideo = null;\n                    this._createPresenterStreamEffect(height, cameraDeviceId);\n\n                // if there is only video, switch to the new camera stream.\n                } else {\n                    createLocalTracksF({\n                        devices: [ 'video' ],\n                        cameraDeviceId,\n                        micDeviceId: null\n                    })\n                    .then(([ stream ]) => {\n                        // if we are in audio only mode or video was muted before\n                        // changing device, then mute\n                        if (this.isAudioOnly() || videoWasMuted) {\n                            return stream.mute()\n                                .then(() => stream);\n                        }\n\n                        return stream;\n                    })\n                    .then(stream => {\n                        logger.log('Switching the local video device.');\n\n                        return this.useVideoStream(stream);\n                    })\n                    .then(() => {\n                        logger.log('Switched local video device.');\n                        this._updateVideoDeviceId();\n                    })\n                    .catch(error => {\n                        logger.error(`Switching the local video device failed: ${error}`);\n\n                        return APP.store.dispatch(notifyCameraError(error));\n                    });\n                }\n            }\n        );\n\n        APP.UI.addListener(\n            UIEvents.AUDIO_DEVICE_CHANGED,\n            micDeviceId => {\n                const audioWasMuted = this.isLocalAudioMuted();\n\n                // When the 'default' mic needs to be selected, we need to\n                // pass the real device id to gUM instead of 'default' in order\n                // to get the correct MediaStreamTrack from chrome because of the\n                // following bug.\n                // https://bugs.chromium.org/p/chromium/issues/detail?id=997689\n                const hasDefaultMicChanged = micDeviceId === 'default';\n\n                sendAnalytics(createDeviceChangedEvent('audio', 'input'));\n                createLocalTracksF({\n                    devices: [ 'audio' ],\n                    cameraDeviceId: null,\n                    micDeviceId: hasDefaultMicChanged\n                        ? getDefaultDeviceId(APP.store.getState(), 'audioInput')\n                        : micDeviceId\n                })\n                .then(([ stream ]) => {\n                    // if audio was muted before changing the device, mute\n                    // with the new device\n                    if (audioWasMuted) {\n                        return stream.mute()\n                            .then(() => stream);\n                    }\n\n                    return stream;\n                })\n                .then(async stream => {\n                    // In case screen sharing audio is also shared we mix it with new input stream. The old _mixerEffect\n                    // will be cleaned up when the existing track is replaced.\n                    if (this._mixerEffect) {\n                        this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);\n\n                        await stream.setEffect(this._mixerEffect);\n                    }\n\n                    return this.useAudioStream(stream);\n                })\n                .then(() => {\n                    if (this.localAudio && hasDefaultMicChanged) {\n                        // workaround for the default device to be shown as selected in the\n                        // settings even when the real device id was passed to gUM because of the\n                        // above mentioned chrome bug.\n                        this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';\n                    }\n                    logger.log(`switched local audio device: ${this.localAudio?.getDeviceId()}`);\n\n                    this._updateAudioDeviceId();\n                })\n                .catch(err => {\n                    APP.store.dispatch(notifyMicError(err));\n                });\n            }\n        );\n\n        APP.UI.addListener(UIEvents.TOGGLE_AUDIO_ONLY, audioOnly => {\n\n            // FIXME On web video track is stored both in redux and in\n            // 'localVideo' field, video is attempted to be unmuted twice when\n            // turning off the audio only mode. This will crash the app with\n            // 'unmute operation is already in progress'.\n            // Because there's no logic in redux about creating new track in\n            // case unmute when not track exists the things have to go through\n            // muteVideo logic in such case.\n            const tracks = APP.store.getState()['features/base/tracks'];\n            const isTrackInRedux\n                = Boolean(\n                    tracks.find(\n                        track => track.jitsiTrack\n                            && track.jitsiTrack.getType() === 'video'));\n\n            if (!isTrackInRedux) {\n                this.muteVideo(audioOnly);\n            }\n\n            // Immediately update the UI by having remote videos and the large\n            // video update themselves instead of waiting for some other event\n            // to cause the update, usually PARTICIPANT_CONN_STATUS_CHANGED.\n            // There is no guarantee another event will trigger the update\n            // immediately and in all situations, for example because a remote\n            // participant is having connection trouble so no status changes.\n            const displayedUserId = APP.UI.getLargeVideoID();\n\n            if (displayedUserId) {\n                APP.UI.updateLargeVideo(displayedUserId, true);\n            }\n        });\n\n        APP.UI.addListener(\n            UIEvents.TOGGLE_SCREENSHARING, ({ enabled, audioOnly }) => {\n                this.toggleScreenSharing(enabled, { audioOnly });\n            }\n        );\n    },\n\n    /**\n     * Cleanups local conference on suspend.\n     */\n    onSuspendDetected() {\n        // After wake up, we will be in a state where conference is left\n        // there will be dialog shown to user.\n        // We do not want video/audio as we show an overlay and after it\n        // user need to rejoin or close, while waking up we can detect\n        // camera wakeup as a problem with device.\n        // We also do not care about device change, which happens\n        // on resume after suspending PC.\n        if (this.deviceChangeListener) {\n            JitsiMeetJS.mediaDevices.removeEventListener(\n                JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                this.deviceChangeListener);\n        }\n\n        this.localVideo = null;\n        this.localAudio = null;\n    },\n\n    /**\n     * Callback invoked when the conference has been successfully joined.\n     * Initializes the UI and various other features.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onConferenceJoined() {\n        APP.UI.initConference();\n\n        if (!config.disableShortcuts) {\n            APP.keyboardshortcut.init();\n        }\n\n        APP.store.dispatch(conferenceJoined(room));\n    },\n\n    /**\n     * Updates the list of current devices.\n     * @param {boolean} setDeviceListChangeHandler - Whether to add the deviceList change handlers.\n     * @private\n     * @returns {Promise}\n     */\n    _initDeviceList(setDeviceListChangeHandler = false) {\n        const { mediaDevices } = JitsiMeetJS;\n\n        if (mediaDevices.isDeviceListAvailable()\n                && mediaDevices.isDeviceChangeAvailable()) {\n            if (setDeviceListChangeHandler) {\n                this.deviceChangeListener = devices =>\n                    window.setTimeout(() => this._onDeviceListChanged(devices), 0);\n                mediaDevices.addEventListener(\n                    JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                    this.deviceChangeListener);\n            }\n\n            const { dispatch } = APP.store;\n\n            return dispatch(getAvailableDevices())\n                .then(devices => {\n                    // Ugly way to synchronize real device IDs with local\n                    // storage and settings menu. This is a workaround until\n                    // getConstraints() method will be implemented in browsers.\n                    this._updateAudioDeviceId();\n\n                    this._updateVideoDeviceId();\n\n                    APP.UI.onAvailableDevicesChanged(devices);\n                });\n        }\n\n        return Promise.resolve();\n    },\n\n    /**\n     * Updates the settings for the currently used video device, extracting\n     * the device id from the used track.\n     * @private\n     */\n    _updateVideoDeviceId() {\n        if (this.localVideo\n            && this.localVideo.videoType === 'camera') {\n            APP.store.dispatch(updateSettings({\n                cameraDeviceId: this.localVideo.getDeviceId()\n            }));\n        }\n\n        // If screenshare is in progress, get the device id from the presenter track.\n        if (this.localPresenterVideo) {\n            APP.store.dispatch(updateSettings({\n                cameraDeviceId: this.localPresenterVideo.getDeviceId()\n            }));\n        }\n    },\n\n    /**\n     * Updates the settings for the currently used audio device, extracting\n     * the device id from the used track.\n     * @private\n     */\n    _updateAudioDeviceId() {\n        if (this.localAudio) {\n            APP.store.dispatch(updateSettings({\n                micDeviceId: this.localAudio.getDeviceId()\n            }));\n        }\n    },\n\n    /**\n     * Event listener for JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED to\n     * handle change of available media devices.\n     * @private\n     * @param {MediaDeviceInfo[]} devices\n     * @returns {Promise}\n     */\n    _onDeviceListChanged(devices) {\n        const oldDevices = APP.store.getState()['features/base/devices'].availableDevices;\n\n        APP.store.dispatch(updateDeviceList(devices));\n\n        const newDevices\n            = mediaDeviceHelper.getNewMediaDevicesAfterDeviceListChanged(\n                devices,\n                this.isSharingScreen,\n                this.localVideo,\n                this.localAudio);\n        const promises = [];\n        const audioWasMuted = this.isLocalAudioMuted();\n        const videoWasMuted = this.isLocalVideoMuted();\n        const requestedInput = {\n            audio: Boolean(newDevices.audioinput),\n            video: Boolean(newDevices.videoinput)\n        };\n\n        if (typeof newDevices.audiooutput !== 'undefined') {\n            const { dispatch } = APP.store;\n            const setAudioOutputPromise\n                = setAudioOutputDeviceId(newDevices.audiooutput, dispatch)\n                    .catch(); // Just ignore any errors in catch block.\n\n\n            promises.push(setAudioOutputPromise);\n        }\n\n        // Handles the use case when the default device is changed (we are always stopping the streams because it's\n        // simpler):\n        // If the default device is changed we need to first stop the local streams and then call GUM. Otherwise GUM\n        // will return a stream using the old default device.\n        if (requestedInput.audio && this.localAudio) {\n            this.localAudio.stopStream();\n        }\n\n        if (requestedInput.video && this.localVideo) {\n            this.localVideo.stopStream();\n        }\n\n        // Let's handle unknown/non-preferred devices\n        const newAvailDevices\n            = APP.store.getState()['features/base/devices'].availableDevices;\n        let newAudioDevices = [];\n        let oldAudioDevices = [];\n\n        if (typeof newDevices.audiooutput === 'undefined') {\n            newAudioDevices = newAvailDevices.audioOutput;\n            oldAudioDevices = oldDevices.audioOutput;\n        }\n\n        if (!requestedInput.audio) {\n            newAudioDevices = newAudioDevices.concat(newAvailDevices.audioInput);\n            oldAudioDevices = oldAudioDevices.concat(oldDevices.audioInput);\n        }\n\n        // check for audio\n        if (newAudioDevices.length > 0) {\n            APP.store.dispatch(\n                checkAndNotifyForNewDevice(newAudioDevices, oldAudioDevices));\n        }\n\n        // check for video\n        if (!requestedInput.video) {\n            APP.store.dispatch(\n                checkAndNotifyForNewDevice(newAvailDevices.videoInput, oldDevices.videoInput));\n        }\n\n        // When the 'default' mic needs to be selected, we need to\n        // pass the real device id to gUM instead of 'default' in order\n        // to get the correct MediaStreamTrack from chrome because of the\n        // following bug.\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=997689\n        const hasDefaultMicChanged = newDevices.audioinput === 'default';\n\n        // This is the case when the local video is muted and a preferred device is connected.\n        if (requestedInput.video && this.isLocalVideoMuted()) {\n            // We want to avoid creating a new video track in order to prevent turning on the camera.\n            requestedInput.video = false;\n            APP.store.dispatch(updateSettings({ // Update the current selected camera for the device selection dialog.\n                cameraDeviceId: newDevices.videoinput\n            }));\n            delete newDevices.videoinput;\n\n            // Removing the current video track in order to force the unmute to select the preferred device.\n            logger.debug('_onDeviceListChanged: Removing the current video track.');\n            this.useVideoStream(null);\n\n        }\n\n        promises.push(\n            mediaDeviceHelper.createLocalTracksAfterDeviceListChanged(\n                    createLocalTracksF,\n                    newDevices.videoinput,\n                    hasDefaultMicChanged\n                        ? getDefaultDeviceId(APP.store.getState(), 'audioInput')\n                        : newDevices.audioinput)\n                .then(tracks => {\n                    // If audio or video muted before, or we unplugged current\n                    // device and selected new one, then mute new track.\n                    const muteSyncPromises = tracks.map(track => {\n                        if ((track.isVideoTrack() && videoWasMuted)\n                            || (track.isAudioTrack() && audioWasMuted)) {\n                            return track.mute();\n                        }\n\n                        return Promise.resolve();\n                    });\n\n                    return Promise.all(muteSyncPromises)\n                        .then(() =>\n                            Promise.all(Object.keys(requestedInput).map(mediaType => {\n                                if (requestedInput[mediaType]) {\n                                    const useStream\n                                        = mediaType === 'audio'\n                                            ? this.useAudioStream.bind(this)\n                                            : this.useVideoStream.bind(this);\n\n                                    // Use the new stream or null if we failed to obtain it.\n                                    return useStream(tracks.find(track => track.getType() === mediaType) || null)\n                                        .then(() => {\n                                            if (this.localAudio && hasDefaultMicChanged) {\n                                                // workaround for the default device to be shown as selected in the\n                                                // settings even when the real device id was passed to gUM because of\n                                                // the above mentioned chrome bug.\n                                                this.localAudio._realDeviceId = this.localAudio.deviceId = 'default';\n                                            }\n                                            mediaType === 'audio'\n                                                ? this._updateAudioDeviceId()\n                                                : this._updateVideoDeviceId();\n                                        });\n                                }\n\n                                return Promise.resolve();\n                            })));\n                })\n                .then(() => {\n                    // Log and sync known mute state.\n                    if (audioWasMuted) {\n                        sendAnalytics(createTrackMutedEvent(\n                            'audio',\n                            'device list changed'));\n                        logger.log('Audio mute: device list changed');\n                        muteLocalAudio(true);\n                    }\n\n                    if (!this.isSharingScreen && videoWasMuted) {\n                        sendAnalytics(createTrackMutedEvent(\n                            'video',\n                            'device list changed'));\n                        logger.log('Video mute: device list changed');\n                        muteLocalVideo(true);\n                    }\n                }));\n\n        return Promise.all(promises)\n            .then(() => {\n                APP.UI.onAvailableDevicesChanged(devices);\n            });\n    },\n\n    /**\n     * Determines whether or not the audio button should be enabled.\n     */\n    updateAudioIconEnabled() {\n        const audioMediaDevices\n            = APP.store.getState()['features/base/devices'].availableDevices.audioInput;\n        const audioDeviceCount\n            = audioMediaDevices ? audioMediaDevices.length : 0;\n\n        // The audio functionality is considered available if there are any\n        // audio devices detected or if the local audio stream already exists.\n        const available = audioDeviceCount > 0 || Boolean(this.localAudio);\n\n        APP.store.dispatch(setAudioAvailable(available));\n        APP.API.notifyAudioAvailabilityChanged(available);\n    },\n\n    /**\n     * Determines whether or not the video button should be enabled.\n     */\n    updateVideoIconEnabled() {\n        const videoMediaDevices\n            = APP.store.getState()['features/base/devices'].availableDevices.videoInput;\n        const videoDeviceCount\n            = videoMediaDevices ? videoMediaDevices.length : 0;\n\n        // The video functionality is considered available if there are any\n        // video devices detected or if there is local video stream already\n        // active which could be either screensharing stream or a video track\n        // created before the permissions were rejected (through browser\n        // config).\n        const available = videoDeviceCount > 0 || Boolean(this.localVideo);\n\n        APP.store.dispatch(setVideoAvailable(available));\n        APP.API.notifyVideoAvailabilityChanged(available);\n    },\n\n    /**\n     * Disconnect from the conference and optionally request user feedback.\n     * @param {boolean} [requestFeedback=false] if user feedback should be\n     * requested\n     */\n    hangup(requestFeedback = false) {\n        APP.store.dispatch(disableReceiver());\n\n        this._stopProxyConnection();\n\n        APP.store.dispatch(destroyLocalTracks());\n        this._localTracksInitialized = false;\n        this.localVideo = null;\n        this.localAudio = null;\n\n        // Remove unnecessary event listeners from firing callbacks.\n        if (this.deviceChangeListener) {\n            JitsiMeetJS.mediaDevices.removeEventListener(\n                JitsiMediaDevicesEvents.DEVICE_LIST_CHANGED,\n                this.deviceChangeListener);\n        }\n\n        APP.UI.removeAllListeners();\n\n        let requestFeedbackPromise;\n\n        if (requestFeedback) {\n            requestFeedbackPromise\n                = APP.store.dispatch(maybeOpenFeedbackDialog(room))\n\n                    // false because the thank you dialog shouldn't be displayed\n                    .catch(() => Promise.resolve(false));\n        } else {\n            requestFeedbackPromise = Promise.resolve(true);\n        }\n\n        Promise.all([\n            requestFeedbackPromise,\n            this.leaveRoomAndDisconnect()\n        ])\n        .then(values => {\n            this._room = undefined;\n            room = undefined;\n\n            /**\n             * Don't call {@code notifyReadyToClose} if the promotional page flag is set\n             * and let the page take care of sending the message, since there will be\n             * a redirect to the page regardlessly.\n             */\n            if (!interfaceConfig.SHOW_PROMOTIONAL_CLOSE_PAGE) {\n                APP.API.notifyReadyToClose();\n            }\n            APP.store.dispatch(maybeRedirectToWelcomePage(values[0]));\n        });\n    },\n\n    /**\n     * Leaves the room and calls JitsiConnection.disconnect.\n     *\n     * @returns {Promise}\n     */\n    leaveRoomAndDisconnect() {\n        APP.store.dispatch(conferenceWillLeave(room));\n\n        if (room && room.isJoined()) {\n            return room.leave().then(disconnect, disconnect);\n        }\n\n        return disconnect();\n    },\n\n    /**\n     * Changes the email for the local user\n     * @param email {string} the new email\n     */\n    changeLocalEmail(email = '') {\n        const localParticipant = getLocalParticipant(APP.store.getState());\n\n        const formattedEmail = String(email).trim();\n\n        if (formattedEmail === localParticipant.email) {\n            return;\n        }\n\n        const localId = localParticipant.id;\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id: localId,\n            local: true,\n            email: formattedEmail\n        }));\n\n        APP.store.dispatch(updateSettings({\n            email: formattedEmail\n        }));\n        APP.API.notifyEmailChanged(localId, {\n            email: formattedEmail\n        });\n        sendData(commands.EMAIL, formattedEmail);\n    },\n\n    /**\n     * Changes the avatar url for the local user\n     * @param url {string} the new url\n     */\n    changeLocalAvatarUrl(url = '') {\n        const { avatarURL, id } = getLocalParticipant(APP.store.getState());\n\n        const formattedUrl = String(url).trim();\n\n        if (formattedUrl === avatarURL) {\n            return;\n        }\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id,\n            local: true,\n            avatarURL: formattedUrl\n        }));\n\n        APP.store.dispatch(updateSettings({\n            avatarURL: formattedUrl\n        }));\n        sendData(commands.AVATAR_URL, url);\n    },\n\n    /**\n     * Sends a message via the data channel.\n     * @param {string} to the id of the endpoint that should receive the\n     * message. If \"\" - the message will be sent to all participants.\n     * @param {object} payload the payload of the message.\n     * @throws NetworkError or InvalidStateError or Error if the operation\n     * fails.\n     */\n    sendEndpointMessage(to, payload) {\n        room.sendEndpointMessage(to, payload);\n    },\n\n    /**\n     * Adds new listener.\n     * @param {String} eventName the name of the event\n     * @param {Function} listener the listener.\n     */\n    addListener(eventName, listener) {\n        eventEmitter.addListener(eventName, listener);\n    },\n\n    /**\n     * Removes listener.\n     * @param {String} eventName the name of the event that triggers the\n     * listener\n     * @param {Function} listener the listener.\n     */\n    removeListener(eventName, listener) {\n        eventEmitter.removeListener(eventName, listener);\n    },\n\n    /**\n     * Changes the display name for the local user\n     * @param nickname {string} the new display name\n     */\n    changeLocalDisplayName(nickname = '') {\n        const formattedNickname = getNormalizedDisplayName(nickname);\n        const { id, name } = getLocalParticipant(APP.store.getState());\n\n        if (formattedNickname === name) {\n            return;\n        }\n\n        APP.store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id,\n            local: true,\n            name: formattedNickname\n        }));\n\n        APP.store.dispatch(updateSettings({\n            displayName: formattedNickname\n        }));\n    },\n\n    /**\n     * Callback invoked by the external api create or update a direct connection\n     * from the local client to an external client.\n     *\n     * @param {Object} event - The object containing information that should be\n     * passed to the {@code ProxyConnectionService}.\n     * @returns {void}\n     */\n    onProxyConnectionEvent(event) {\n        if (!this._proxyConnection) {\n            this._proxyConnection = new JitsiMeetJS.ProxyConnectionService({\n\n                /**\n                 * Pass the {@code JitsiConnection} instance which will be used\n                 * to fetch TURN credentials.\n                 */\n                jitsiConnection: APP.connection,\n\n                /**\n                 * The proxy connection feature is currently tailored towards\n                 * taking a proxied video stream and showing it as a local\n                 * desktop screen.\n                 */\n                convertVideoToDesktop: true,\n\n                /**\n                 * Callback invoked when the connection has been closed\n                 * automatically. Triggers cleanup of screensharing if active.\n                 *\n                 * @returns {void}\n                 */\n                onConnectionClosed: () => {\n                    if (this._untoggleScreenSharing) {\n                        this._untoggleScreenSharing();\n                    }\n                },\n\n                /**\n                 * Callback invoked to pass messages from the local client back\n                 * out to the external client.\n                 *\n                 * @param {string} peerJid - The jid of the intended recipient\n                 * of the message.\n                 * @param {Object} data - The message that should be sent. For\n                 * screensharing this is an iq.\n                 * @returns {void}\n                 */\n                onSendMessage: (peerJid, data) =>\n                    APP.API.sendProxyConnectionEvent({\n                        data,\n                        to: peerJid\n                    }),\n\n                /**\n                 * Callback invoked when the remote peer of the proxy connection\n                 * has provided a video stream, intended to be used as a local\n                 * desktop stream.\n                 *\n                 * @param {JitsiLocalTrack} remoteProxyStream - The media\n                 * stream to use as a local desktop stream.\n                 * @returns {void}\n                 */\n                onRemoteStream: desktopStream => {\n                    if (desktopStream.videoType !== 'desktop') {\n                        logger.warn('Received a non-desktop stream to proxy.');\n                        desktopStream.dispose();\n\n                        return;\n                    }\n\n                    this.toggleScreenSharing(undefined, { desktopStream });\n                }\n            });\n        }\n\n        this._proxyConnection.processMessage(event);\n    },\n\n    /**\n     * Sets the video muted status.\n     */\n    setVideoMuteStatus() {\n        APP.UI.setVideoMuted(this.getMyUserId());\n    },\n\n    /**\n     * Sets the audio muted status.\n     *\n     * @param {boolean} muted - New muted status.\n     */\n    setAudioMuteStatus(muted) {\n        APP.UI.setAudioMuted(this.getMyUserId(), muted);\n        APP.API.notifyAudioMutedStatusChanged(muted);\n    },\n\n    /**\n     * Dispatches the passed in feedback for submission. The submitted score\n     * should be a number inclusively between 1 through 5, or -1 for no score.\n     *\n     * @param {number} score - a number between 1 and 5 (inclusive) or -1 for no\n     * score.\n     * @param {string} message - An optional message to attach to the feedback\n     * in addition to the score.\n     * @returns {void}\n     */\n    submitFeedback(score = -1, message = '') {\n        if (score === -1 || (score >= 1 && score <= 5)) {\n            APP.store.dispatch(submitFeedback(score, message, room));\n        }\n    },\n\n    /**\n     * Terminates any proxy screensharing connection that is active.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopProxyConnection() {\n        if (this._proxyConnection) {\n            this._proxyConnection.stop();\n        }\n\n        this._proxyConnection = null;\n    }\n};\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('amplitude', factory) :\n  (global = global || self, global.amplitude = factory());\n}(this, function () { 'use strict';\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\n    return _typeof(obj);\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\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\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\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\n    return obj;\n  }\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\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\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  /**\n   * Strings that have special meaning when used as an event's type\n   * and have different specifications.\n   */\n  var SpecialEventType;\n  (function (SpecialEventType) {\n      SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n  })(SpecialEventType || (SpecialEventType = {}));\n\n  var IdentifyOperation;\n  (function (IdentifyOperation) {\n      // Base Operations to set values\n      IdentifyOperation[\"SET\"] = \"$set\";\n      IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n      // Operations around modifying existing values\n      IdentifyOperation[\"ADD\"] = \"$add\";\n      IdentifyOperation[\"APPEND\"] = \"$append\";\n      IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n      IdentifyOperation[\"REMOVE\"] = \"$remove\";\n      // Operations around appending values *if* they aren't present\n      IdentifyOperation[\"PREINSERT\"] = \"$preinsert\";\n      IdentifyOperation[\"POSTINSERT\"] = \"$postinsert\";\n      // Operations around removing properties/values\n      IdentifyOperation[\"UNSET\"] = \"$unset\";\n      IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n  })(IdentifyOperation || (IdentifyOperation = {}));\n\n  /** The default identity instance. Needs to match the default instance for the JS SDK */\n\n  /** Console logging verbosity for the SDK. */\n  var LogLevel;\n  (function (LogLevel) {\n      /** No logs will be generated. */\n      LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n      /** Only SDK internal errors will be logged. */\n      LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n      /** Information useful for debugging the SDK will be logged. */\n      LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n      /** All SDK actions will be logged. */\n      LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n  })(LogLevel || (LogLevel = {}));\n\n  /** The status of an event. */\n  var Status;\n  (function (Status) {\n      /** The status could not be determined. */\n      Status[\"Unknown\"] = \"unknown\";\n      /** The event was skipped due to configuration or callbacks. */\n      Status[\"Skipped\"] = \"skipped\";\n      /** The event was sent successfully. */\n      Status[\"Success\"] = \"success\";\n      /** A user or device in the payload is currently rate limited and should try again later. */\n      Status[\"RateLimit\"] = \"rate_limit\";\n      /** The sent payload was too large to be processed. */\n      Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n      /** The event could not be processed. */\n      Status[\"Invalid\"] = \"invalid\";\n      /** A server-side error ocurred during submission. */\n      Status[\"Failed\"] = \"failed\";\n  })(Status || (Status = {}));\n  // tslint:disable:completed-docs\n  // tslint:disable:no-unnecessary-qualifier no-namespace\n  (function (Status) {\n      /**\n       * Converts a HTTP status code into a {@link Status}.\n       *\n       * @param code The HTTP response status code.\n       * @returns The send status or {@link Status.Unknown}.\n       */\n      function fromHttpCode(code) {\n          if (code >= 200 && code < 300) {\n              return Status.Success;\n          }\n          if (code === 429) {\n              return Status.RateLimit;\n          }\n          if (code === 413) {\n              return Status.PayloadTooLarge;\n          }\n          if (code >= 400 && code < 500) {\n              return Status.Invalid;\n          }\n          if (code >= 500) {\n              return Status.Failed;\n          }\n          return Status.Unknown;\n      }\n      Status.fromHttpCode = fromHttpCode;\n  })(Status || (Status = {}));\n\n  /** The Response to expect if a request might have been sent but it was skipped\n   *  e.g. no events to flush, user has opted out and nothing should be sent.\n   */\n  var SKIPPED_RESPONSE = {\n      status: Status.Skipped,\n      statusCode: 0,\n  };\n\n  /**\n   * Checks whether we're in a Node.js environment\n   *\n   * @returns Answer to given question\n   */\n  function isNodeEnv() {\n      var _a;\n      return typeof process === 'object' && ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== undefined;\n  }\n  /**\n   * Checks whether we're in a browser environment\n   *\n   * @returns Answer to given question\n   */\n  function isBrowserEnv() {\n      return typeof window === 'object' && (window === null || window === void 0 ? void 0 : window.document) !== undefined;\n  }\n  var fallbackGlobalObject = {};\n  /**\n   * Safely get global scope object\n   *\n   * @returns Global scope object\n   */\n  var getGlobalObject = function () {\n      return isNodeEnv()\n          ? global\n          : typeof window !== 'undefined'\n              ? window\n              : typeof self !== 'undefined'\n                  ? self\n                  : fallbackGlobalObject;\n  };\n  var getGlobalAmplitudeNamespace = function () {\n      var global = getGlobalObject();\n      global.__AMPLITUDE__ = global.__AMPLITUDE__ || {};\n      return global.__AMPLITUDE__;\n  };\n  /**\n   * Fixes browser edge case where Prototype.js injects Array.prototype.toJSON and breaks the built-in JSON.stringify()\n   *\n   * @returns true if Array.prototype.toJSON was deleted, false if not\n   */\n  var prototypeJsFix = function () {\n      var _a;\n      if (isBrowserEnv()) {\n          var augmentedWindow = window;\n          var augmentedArray = Array;\n          if (augmentedWindow.Prototype !== undefined && ((_a = augmentedArray.prototype) === null || _a === void 0 ? void 0 : _a.toJSON) !== undefined) {\n              delete augmentedArray.prototype.toJSON;\n              return true;\n          }\n      }\n      return false;\n  };\n\n  // TODO: Type the global constant\n  var globalNamespace = getGlobalAmplitudeNamespace();\n  /** Prefix for logging strings */\n  var PREFIX = 'Amplitude Logger ';\n  /** JSDoc */\n  var Logger = /** @class */ (function () {\n      /** JSDoc */\n      function Logger() {\n          this._logLevel = 0;\n      }\n      /** JSDoc */\n      Logger.prototype.disable = function () {\n          this._logLevel = 0;\n      };\n      /** JSDoc */\n      Logger.prototype.enable = function (logLevel) {\n          if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n          this._logLevel = logLevel;\n      };\n      /** JSDoc */\n      Logger.prototype.log = function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n              args[_i] = arguments[_i];\n          }\n          if (this._logLevel < LogLevel.Verbose) {\n              return;\n          }\n          global.console.log(PREFIX + \"[Log]: \" + args.join(' ')); // tslint:disable-line:no-console\n      };\n      /** JSDoc */\n      Logger.prototype.warn = function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n              args[_i] = arguments[_i];\n          }\n          if (this._logLevel < LogLevel.Warn) {\n              return;\n          }\n          global.console.warn(PREFIX + \"[Warn]: \" + args.join(' ')); // tslint:disable-line:no-console\n      };\n      /** JSDoc */\n      Logger.prototype.error = function () {\n          var args = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n              args[_i] = arguments[_i];\n          }\n          if (this._logLevel < LogLevel.Error) {\n              return;\n          }\n          global.console.error(PREFIX + \"[Error]: \" + args.join(' ')); // tslint:disable-line:no-console\n      };\n      return Logger;\n  }());\n  // Ensure we only have a single logger instance, even if multiple versions of @amplitude/utils are being used\n  var logger = globalNamespace.logger || (globalNamespace.logger = new Logger());\n\n  var Constants = {\n    DEFAULT_INSTANCE: '$default_instance',\n    API_VERSION: 2,\n    MAX_STRING_LENGTH: 4096,\n    MAX_PROPERTY_KEYS: 1000,\n    IDENTIFY_EVENT: '$identify',\n    GROUP_IDENTIFY_EVENT: '$groupidentify',\n    // localStorageKeys\n    LAST_EVENT_ID: 'amplitude_lastEventId',\n    LAST_EVENT_TIME: 'amplitude_lastEventTime',\n    LAST_IDENTIFY_ID: 'amplitude_lastIdentifyId',\n    LAST_SEQUENCE_NUMBER: 'amplitude_lastSequenceNumber',\n    SESSION_ID: 'amplitude_sessionId',\n    // Used in cookie as well\n    DEVICE_ID: 'amplitude_deviceId',\n    OPT_OUT: 'amplitude_optOut',\n    USER_ID: 'amplitude_userId',\n    COOKIE_TEST_PREFIX: 'amp_cookie_test',\n    COOKIE_PREFIX: 'amp',\n    // Storage options\n    STORAGE_DEFAULT: '',\n    STORAGE_COOKIES: 'cookies',\n    STORAGE_NONE: 'none',\n    STORAGE_LOCAL: 'localStorage',\n    STORAGE_SESSION: 'sessionStorage',\n    // revenue keys\n    REVENUE_EVENT: 'revenue_amount',\n    REVENUE_PRODUCT_ID: '$productId',\n    REVENUE_QUANTITY: '$quantity',\n    REVENUE_PRICE: '$price',\n    REVENUE_REVENUE_TYPE: '$revenueType',\n    AMP_DEVICE_ID_PARAM: 'amp_device_id',\n    // url param\n    REFERRER: 'referrer',\n    // UTM Params\n    UTM_SOURCE: 'utm_source',\n    UTM_MEDIUM: 'utm_medium',\n    UTM_CAMPAIGN: 'utm_campaign',\n    UTM_TERM: 'utm_term',\n    UTM_CONTENT: 'utm_content',\n    ATTRIBUTION_EVENT: '[Amplitude] Attribution Captured'\n  };\n\n  /*\n   * UTF-8 encoder/decoder\n   * http://www.webtoolkit.info/\n   */\n  var UTF8 = {\n    encode: function encode(s) {\n      var utftext = '';\n\n      for (var n = 0; n < s.length; n++) {\n        var c = s.charCodeAt(n);\n\n        if (c < 128) {\n          utftext += String.fromCharCode(c);\n        } else if (c > 127 && c < 2048) {\n          utftext += String.fromCharCode(c >> 6 | 192);\n          utftext += String.fromCharCode(c & 63 | 128);\n        } else {\n          utftext += String.fromCharCode(c >> 12 | 224);\n          utftext += String.fromCharCode(c >> 6 & 63 | 128);\n          utftext += String.fromCharCode(c & 63 | 128);\n        }\n      }\n\n      return utftext;\n    },\n    decode: function decode(utftext) {\n      var s = '';\n      var i = 0;\n      var c = 0,\n          c1 = 0,\n          c2 = 0;\n\n      while (i < utftext.length) {\n        c = utftext.charCodeAt(i);\n\n        if (c < 128) {\n          s += String.fromCharCode(c);\n          i++;\n        } else if (c > 191 && c < 224) {\n          c1 = utftext.charCodeAt(i + 1);\n          s += String.fromCharCode((c & 31) << 6 | c1 & 63);\n          i += 2;\n        } else {\n          c1 = utftext.charCodeAt(i + 1);\n          c2 = utftext.charCodeAt(i + 2);\n          s += String.fromCharCode((c & 15) << 12 | (c1 & 63) << 6 | c2 & 63);\n          i += 3;\n        }\n      }\n\n      return s;\n    }\n  };\n\n  /*\n   * Base64 encoder/decoder\n   * http://www.webtoolkit.info/\n   */\n\n  var Base64 = {\n    _keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n    encode: function encode(input) {\n      try {\n        if (window.btoa && window.atob) {\n          return window.btoa(unescape(encodeURIComponent(input)));\n        }\n      } catch (e) {//log(e);\n      }\n\n      return Base64._encode(input);\n    },\n    _encode: function _encode(input) {\n      var output = '';\n      var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n      var i = 0;\n      input = UTF8.encode(input);\n\n      while (i < input.length) {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n\n        output = output + Base64._keyStr.charAt(enc1) + Base64._keyStr.charAt(enc2) + Base64._keyStr.charAt(enc3) + Base64._keyStr.charAt(enc4);\n      }\n\n      return output;\n    },\n    decode: function decode(input) {\n      try {\n        if (window.btoa && window.atob) {\n          return decodeURIComponent(escape(window.atob(input)));\n        }\n      } catch (e) {//log(e);\n      }\n\n      return Base64._decode(input);\n    },\n    _decode: function _decode(input) {\n      var output = '';\n      var chr1, chr2, chr3;\n      var enc1, enc2, enc3, enc4;\n      var i = 0;\n      input = input.replace(/[^A-Za-z0-9+/=]/g, '');\n\n      while (i < input.length) {\n        enc1 = Base64._keyStr.indexOf(input.charAt(i++));\n        enc2 = Base64._keyStr.indexOf(input.charAt(i++));\n        enc3 = Base64._keyStr.indexOf(input.charAt(i++));\n        enc4 = Base64._keyStr.indexOf(input.charAt(i++));\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 !== 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n\n        if (enc4 !== 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n      }\n\n      output = UTF8.decode(output);\n      return output;\n    }\n  };\n\n  /**\n   * toString ref.\n   * @private\n   */\n  var toString = Object.prototype.toString;\n  /**\n   * Return the type of `val`.\n   * @private\n   * @param {Mixed} val\n   * @return {String}\n   * @api public\n   */\n\n  function type (val) {\n    switch (toString.call(val)) {\n      case '[object Date]':\n        return 'date';\n\n      case '[object RegExp]':\n        return 'regexp';\n\n      case '[object Arguments]':\n        return 'arguments';\n\n      case '[object Array]':\n        return 'array';\n\n      case '[object Error]':\n        return 'error';\n    }\n\n    if (val === null) {\n      return 'null';\n    }\n\n    if (val === undefined) {\n      return 'undefined';\n    }\n\n    if (val !== val) {\n      return 'nan';\n    }\n\n    if (val && val.nodeType === 1) {\n      return 'element';\n    }\n\n    if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(val)) {\n      return 'buffer';\n    }\n\n    val = val.valueOf ? val.valueOf() : Object.prototype.valueOf.apply(val);\n    return _typeof(val);\n  }\n\n  var logLevels = {\n    DISABLE: 0,\n    ERROR: 1,\n    WARN: 2,\n    INFO: 3\n  };\n  var logLevel = logLevels.WARN;\n\n  var setLogLevel = function setLogLevel(logLevelName) {\n    if (Object.prototype.hasOwnProperty.call(logLevels, logLevelName)) {\n      logLevel = logLevels[logLevelName];\n    }\n  };\n\n  var getLogLevel = function getLogLevel() {\n    return logLevel;\n  };\n\n  var log = {\n    error: function error(s) {\n      if (logLevel >= logLevels.ERROR) {\n        _log(s);\n      }\n    },\n    warn: function warn(s) {\n      if (logLevel >= logLevels.WARN) {\n        _log(s);\n      }\n    },\n    info: function info(s) {\n      if (logLevel >= logLevels.INFO) {\n        _log(s);\n      }\n    }\n  };\n\n  var _log = function _log(s) {\n    try {\n      console.log('[Amplitude] ' + s);\n    } catch (e) {// console logging not available\n    }\n  };\n\n  var isEmptyString = function isEmptyString(str) {\n    return !str || str.length === 0;\n  };\n\n  var sessionStorageEnabled = function sessionStorageEnabled() {\n    try {\n      if (window.sessionStorage) {\n        return true;\n      }\n    } catch (e) {// sessionStorage disabled\n    }\n\n    return false;\n  }; // truncate string values in event and user properties so that request size does not get too large\n\n\n  var truncate = function truncate(value) {\n    if (type(value) === 'array') {\n      for (var i = 0; i < value.length; i++) {\n        value[i] = truncate(value[i]);\n      }\n    } else if (type(value) === 'object') {\n      for (var key in value) {\n        if (key in value) {\n          value[key] = truncate(value[key]);\n        }\n      }\n    } else {\n      value = _truncateValue(value);\n    }\n\n    return value;\n  };\n\n  var _truncateValue = function _truncateValue(value) {\n    if (type(value) === 'string') {\n      return value.length > Constants.MAX_STRING_LENGTH ? value.substring(0, Constants.MAX_STRING_LENGTH) : value;\n    }\n\n    return value;\n  };\n\n  var validateInput = function validateInput(input, name, expectedType) {\n    if (type(input) !== expectedType) {\n      log.error('Invalid ' + name + ' input type. Expected ' + expectedType + ' but received ' + type(input));\n      return false;\n    }\n\n    return true;\n  }; // do some basic sanitization and type checking, also catch property dicts with more than 1000 key/value pairs\n\n\n  var validateProperties = function validateProperties(properties) {\n    var propsType = type(properties);\n\n    if (propsType !== 'object') {\n      log.error('Error: invalid properties format. Expecting Javascript object, received ' + propsType + ', ignoring');\n      return {};\n    }\n\n    if (Object.keys(properties).length > Constants.MAX_PROPERTY_KEYS) {\n      log.error('Error: too many properties (more than 1000), ignoring');\n      return {};\n    }\n\n    var copy = {}; // create a copy with all of the valid properties\n\n    for (var property in properties) {\n      if (!Object.prototype.hasOwnProperty.call(properties, property)) {\n        continue;\n      } // validate key\n\n\n      var key = property;\n      var keyType = type(key);\n\n      if (keyType !== 'string') {\n        key = String(key);\n        log.warn('WARNING: Non-string property key, received type ' + keyType + ', coercing to string \"' + key + '\"');\n      } // validate value\n\n\n      var value = validatePropertyValue(key, properties[property]);\n\n      if (value === null) {\n        continue;\n      }\n\n      copy[key] = value;\n    }\n\n    return copy;\n  };\n\n  var invalidValueTypes = ['nan', 'function', 'arguments', 'regexp', 'element'];\n\n  var validatePropertyValue = function validatePropertyValue(key, value) {\n    var valueType = type(value);\n\n    if (invalidValueTypes.indexOf(valueType) !== -1) {\n      log.warn('WARNING: Property key \"' + key + '\" with invalid value type ' + valueType + ', ignoring');\n      value = null;\n    } else if (valueType === 'undefined') {\n      value = null;\n    } else if (valueType === 'error') {\n      value = String(value);\n      log.warn('WARNING: Property key \"' + key + '\" with value type error, coercing to ' + value);\n    } else if (valueType === 'array') {\n      // check for nested arrays or objects\n      var arrayCopy = [];\n\n      for (var i = 0; i < value.length; i++) {\n        var element = value[i];\n        var elemType = type(element);\n\n        if (elemType === 'array') {\n          log.warn('WARNING: Cannot have ' + elemType + ' nested in an array property value, skipping');\n          continue;\n        } else if (elemType === 'object') {\n          arrayCopy.push(validateProperties(element));\n        } else {\n          arrayCopy.push(validatePropertyValue(key, element));\n        }\n      }\n\n      value = arrayCopy;\n    } else if (valueType === 'object') {\n      value = validateProperties(value);\n    }\n\n    return value;\n  };\n\n  var validateGroups = function validateGroups(groups) {\n    var groupsType = type(groups);\n\n    if (groupsType !== 'object') {\n      log.error('Error: invalid groups format. Expecting Javascript object, received ' + groupsType + ', ignoring');\n      return {};\n    }\n\n    var copy = {}; // create a copy with all of the valid properties\n\n    for (var group in groups) {\n      if (!Object.prototype.hasOwnProperty.call(groups, group)) {\n        continue;\n      } // validate key\n\n\n      var key = group;\n      var keyType = type(key);\n\n      if (keyType !== 'string') {\n        key = String(key);\n        log.warn('WARNING: Non-string groupType, received type ' + keyType + ', coercing to string \"' + key + '\"');\n      } // validate value\n\n\n      var value = validateGroupName(key, groups[group]);\n\n      if (value === null) {\n        continue;\n      }\n\n      copy[key] = value;\n    }\n\n    return copy;\n  };\n\n  var validateGroupName = function validateGroupName(key, groupName) {\n    var groupNameType = type(groupName);\n\n    if (groupNameType === 'string') {\n      return groupName;\n    }\n\n    if (groupNameType === 'date' || groupNameType === 'number' || groupNameType === 'boolean') {\n      groupName = String(groupName);\n      log.warn('WARNING: Non-string groupName, received type ' + groupNameType + ', coercing to string \"' + groupName + '\"');\n      return groupName;\n    }\n\n    if (groupNameType === 'array') {\n      // check for nested arrays or objects\n      var arrayCopy = [];\n\n      for (var i = 0; i < groupName.length; i++) {\n        var element = groupName[i];\n        var elemType = type(element);\n\n        if (elemType === 'array' || elemType === 'object') {\n          log.warn('WARNING: Skipping nested ' + elemType + ' in array groupName');\n          continue;\n        } else if (elemType === 'string') {\n          arrayCopy.push(element);\n        } else if (elemType === 'date' || elemType === 'number' || elemType === 'boolean') {\n          element = String(element);\n          log.warn('WARNING: Non-string groupName, received type ' + elemType + ', coercing to string \"' + element + '\"');\n          arrayCopy.push(element);\n        }\n      }\n\n      return arrayCopy;\n    }\n\n    log.warn('WARNING: Non-string groupName, received type ' + groupNameType + '. Please use strings or array of strings for groupName');\n  }; // parses the value of a url param (for example ?gclid=1234&...)\n\n\n  var getQueryParam = function getQueryParam(name, query) {\n    name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n    var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n    var results = regex.exec(query);\n    return results === null ? undefined : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n  };\n\n  var utils = {\n    setLogLevel: setLogLevel,\n    getLogLevel: getLogLevel,\n    logLevels: logLevels,\n    log: log,\n    isEmptyString: isEmptyString,\n    getQueryParam: getQueryParam,\n    sessionStorageEnabled: sessionStorageEnabled,\n    truncate: truncate,\n    validateGroups: validateGroups,\n    validateInput: validateInput,\n    validateProperties: validateProperties\n  };\n\n  var getLocation = function getLocation() {\n    return window.location;\n  };\n\n  // A URL safe variation on the the list of Base64 characters\n  var base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n  var base64Id = function base64Id() {\n    var str = '';\n\n    for (var i = 0; i < 22; ++i) {\n      str += base64Chars.charAt(Math.floor(Math.random() * 64));\n    }\n\n    return str;\n  };\n\n  var get = function get(name) {\n    try {\n      var ca = document.cookie.split(';');\n      var value = null;\n\n      for (var i = 0; i < ca.length; i++) {\n        var c = ca[i];\n\n        while (c.charAt(0) === ' ') {\n          c = c.substring(1, c.length);\n        }\n\n        if (c.indexOf(name) === 0) {\n          value = c.substring(name.length, c.length);\n          break;\n        }\n      }\n\n      return value;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  var set = function set(name, value, opts) {\n    var expires = value !== null ? opts.expirationDays : -1;\n\n    if (expires) {\n      var date = new Date();\n      date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n      expires = date;\n    }\n\n    var str = name + '=' + value;\n\n    if (expires) {\n      str += '; expires=' + expires.toUTCString();\n    }\n\n    str += '; path=/';\n\n    if (opts.domain) {\n      str += '; domain=' + opts.domain;\n    }\n\n    if (opts.secure) {\n      str += '; Secure';\n    }\n\n    if (opts.sameSite) {\n      str += '; SameSite=' + opts.sameSite;\n    }\n\n    document.cookie = str;\n  }; // test that cookies are enabled - navigator.cookiesEnabled yields false positives in IE, need to test directly\n\n\n  var areCookiesEnabled = function areCookiesEnabled() {\n    var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var cookieName = Constants.COOKIE_TEST_PREFIX + base64Id();\n    var _areCookiesEnabled = false;\n\n    try {\n      var uid = String(new Date());\n      set(cookieName, uid, opts);\n      utils.log.info(\"Testing if cookies available\");\n      _areCookiesEnabled = get(cookieName + '=') === uid;\n    } catch (e) {\n      utils.log.warn(\"Error thrown when checking for cookies. Reason: \\\"\".concat(e, \"\\\"\"));\n    } finally {\n      utils.log.warn(\"Cleaning up cookies availability test\");\n      set(cookieName, null, opts);\n    }\n\n    return _areCookiesEnabled;\n  };\n\n  var baseCookie = {\n    set: set,\n    get: get,\n    areCookiesEnabled: areCookiesEnabled\n  };\n\n  var getHost = function getHost(url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.hostname || location.hostname;\n  };\n\n  var topDomain = function topDomain(url) {\n    var host = getHost(url);\n    var parts = host.split('.');\n    var levels = [];\n    var cname = '_tldtest_' + base64Id();\n\n    for (var i = parts.length - 2; i >= 0; --i) {\n      levels.push(parts.slice(i).join('.'));\n    }\n\n    for (var _i = 0; _i < levels.length; ++_i) {\n      var domain = levels[_i];\n      var opts = {\n        domain: '.' + domain\n      };\n      baseCookie.set(cname, 1, opts);\n\n      if (baseCookie.get(cname)) {\n        baseCookie.set(cname, null, opts);\n        return domain;\n      }\n    }\n\n    return '';\n  };\n\n  /*\n   * Cookie data\n   */\n  var _options = {\n    expirationDays: undefined,\n    domain: undefined\n  };\n\n  var reset = function reset() {\n    _options = {\n      expirationDays: undefined,\n      domain: undefined\n    };\n  };\n\n  var options = function options(opts) {\n    if (arguments.length === 0) {\n      return _options;\n    }\n\n    opts = opts || {};\n    _options.expirationDays = opts.expirationDays;\n    _options.secure = opts.secure;\n    _options.sameSite = opts.sameSite;\n    var domain = !utils.isEmptyString(opts.domain) ? opts.domain : '.' + topDomain(getLocation().href);\n    var token = Math.random();\n    _options.domain = domain;\n    set$1('amplitude_test', token);\n    var stored = get$1('amplitude_test');\n\n    if (!stored || stored !== token) {\n      domain = null;\n    }\n\n    remove('amplitude_test');\n    _options.domain = domain;\n    return _options;\n  };\n\n  var _domainSpecific = function _domainSpecific(name) {\n    // differentiate between cookies on different domains\n    var suffix = '';\n\n    if (_options.domain) {\n      suffix = _options.domain.charAt(0) === '.' ? _options.domain.substring(1) : _options.domain;\n    }\n\n    return name + suffix;\n  };\n\n  var get$1 = function get(name) {\n    var nameEq = _domainSpecific(name) + '=';\n    var value = baseCookie.get(nameEq);\n\n    try {\n      if (value) {\n        return JSON.parse(Base64.decode(value));\n      }\n    } catch (e) {\n      return null;\n    }\n\n    return null;\n  };\n\n  var set$1 = function set(name, value) {\n    try {\n      baseCookie.set(_domainSpecific(name), Base64.encode(JSON.stringify(value)), _options);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  };\n\n  var setRaw = function setRaw(name, value) {\n    try {\n      baseCookie.set(_domainSpecific(name), value, _options);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  };\n\n  var getRaw = function getRaw(name) {\n    var nameEq = _domainSpecific(name) + '=';\n    return baseCookie.get(nameEq);\n  };\n\n  var remove = function remove(name) {\n    try {\n      baseCookie.set(_domainSpecific(name), null, _options);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  };\n\n  var Cookie = {\n    reset: reset,\n    options: options,\n    get: get$1,\n    set: set$1,\n    remove: remove,\n    setRaw: setRaw,\n    getRaw: getRaw\n  };\n\n  /*\n   * Implement localStorage to support Firefox 2-3 and IE 5-7\n   */\n  var localStorage;\n\n  {\n    // test that Window.localStorage is available and works\n    var windowLocalStorageAvailable = function windowLocalStorageAvailable() {\n      var uid = new Date();\n      var result;\n\n      try {\n        window.localStorage.setItem(uid, uid);\n        result = window.localStorage.getItem(uid) === String(uid);\n        window.localStorage.removeItem(uid);\n        return result;\n      } catch (e) {// localStorage not available\n      }\n\n      return false;\n    };\n\n    if (windowLocalStorageAvailable()) {\n      localStorage = window.localStorage;\n    } else if (window.globalStorage) {\n      // Firefox 2-3 use globalStorage\n      // See https://developer.mozilla.org/en/dom/storage#globalStorage\n      try {\n        localStorage = window.globalStorage[window.location.hostname];\n      } catch (e) {// Something bad happened...\n      }\n    } else if (typeof document !== 'undefined') {\n      // IE 5-7 use userData\n      // See http://msdn.microsoft.com/en-us/library/ms531424(v=vs.85).aspx\n      var div = document.createElement('div'),\n          attrKey = 'localStorage';\n      div.style.display = 'none';\n      document.getElementsByTagName('head')[0].appendChild(div);\n\n      if (div.addBehavior) {\n        div.addBehavior('#default#userdata');\n        localStorage = {\n          length: 0,\n          setItem: function setItem(k, v) {\n            div.load(attrKey);\n\n            if (!div.getAttribute(k)) {\n              this.length++;\n            }\n\n            div.setAttribute(k, v);\n            div.save(attrKey);\n          },\n          getItem: function getItem(k) {\n            div.load(attrKey);\n            return div.getAttribute(k);\n          },\n          removeItem: function removeItem(k) {\n            div.load(attrKey);\n\n            if (div.getAttribute(k)) {\n              this.length--;\n            }\n\n            div.removeAttribute(k);\n            div.save(attrKey);\n          },\n          clear: function clear() {\n            div.load(attrKey);\n            var i = 0;\n            var attr;\n\n            while (attr = div.XMLDocument.documentElement.attributes[i++]) {\n              div.removeAttribute(attr.name);\n            }\n\n            div.save(attrKey);\n            this.length = 0;\n          },\n          key: function key(k) {\n            div.load(attrKey);\n            return div.XMLDocument.documentElement.attributes[k];\n          }\n        };\n        div.load(attrKey);\n        localStorage.length = div.XMLDocument.documentElement.attributes.length;\n      }\n    }\n\n    if (!localStorage) {\n      /* eslint-disable no-unused-vars */\n      localStorage = {\n        length: 0,\n        setItem: function setItem(k, v) {},\n        getItem: function getItem(k) {},\n        removeItem: function removeItem(k) {},\n        clear: function clear() {},\n        key: function key(k) {}\n      };\n      /* eslint-enable no-unused-vars */\n    }\n  }\n\n  var ampLocalStorage = localStorage;\n\n  /*\n   * Abstraction layer for cookie storage.\n   * Uses cookie if available, otherwise fallback to localstorage.\n   */\n\n  var cookieStorage = function cookieStorage() {\n    this.storage = null;\n  };\n\n  cookieStorage.prototype.getStorage = function () {\n    if (this.storage !== null) {\n      return this.storage;\n    }\n\n    if (baseCookie.areCookiesEnabled()) {\n      this.storage = Cookie;\n    } else {\n      // if cookies disabled, fallback to localstorage\n      // note: localstorage does not persist across subdomains\n      var keyPrefix = 'amp_cookiestore_';\n      this.storage = {\n        _options: {\n          expirationDays: undefined,\n          domain: undefined,\n          secure: false\n        },\n        reset: function reset() {\n          this._options = {\n            expirationDays: undefined,\n            domain: undefined,\n            secure: false\n          };\n        },\n        options: function options(opts) {\n          if (arguments.length === 0) {\n            return this._options;\n          }\n\n          opts = opts || {};\n          this._options.expirationDays = opts.expirationDays || this._options.expirationDays; // localStorage is specific to subdomains\n\n          this._options.domain = opts.domain || this._options.domain || window && window.location && window.location.hostname;\n          return this._options.secure = opts.secure || false;\n        },\n        get: function get(name) {\n          try {\n            return JSON.parse(ampLocalStorage.getItem(keyPrefix + name));\n          } catch (e) {}\n          /* eslint-disable-line no-empty */\n\n\n          return null;\n        },\n        set: function set(name, value) {\n          try {\n            ampLocalStorage.setItem(keyPrefix + name, JSON.stringify(value));\n            return true;\n          } catch (e) {}\n          /* eslint-disable-line no-empty */\n\n\n          return false;\n        },\n        remove: function remove(name) {\n          try {\n            ampLocalStorage.removeItem(keyPrefix + name);\n          } catch (e) {\n            return false;\n          }\n        }\n      };\n    }\n\n    return this.storage;\n  };\n\n  var _storageOptionExists;\n  var storageOptionExists = (_storageOptionExists = {}, _defineProperty(_storageOptionExists, Constants.STORAGE_COOKIES, true), _defineProperty(_storageOptionExists, Constants.STORAGE_NONE, true), _defineProperty(_storageOptionExists, Constants.STORAGE_LOCAL, true), _defineProperty(_storageOptionExists, Constants.STORAGE_SESSION, true), _storageOptionExists);\n  /**\n   * MetadataStorage involves SDK data persistance\n   * storage priority: cookies -> localStorage -> in memory\n   * This priority can be overriden by setting the storage options.\n   * if in localStorage, unable track users between subdomains\n   * if in memory, then memory can't be shared between different tabs\n   */\n\n  var MetadataStorage =\n  /*#__PURE__*/\n  function () {\n    function MetadataStorage(_ref) {\n      var storageKey = _ref.storageKey,\n          disableCookies = _ref.disableCookies,\n          domain = _ref.domain,\n          secure = _ref.secure,\n          sameSite = _ref.sameSite,\n          expirationDays = _ref.expirationDays,\n          storage = _ref.storage;\n\n      _classCallCheck(this, MetadataStorage);\n\n      this.storageKey = storageKey;\n      this.domain = domain;\n      this.secure = secure;\n      this.sameSite = sameSite;\n      this.expirationDays = expirationDays;\n      this.cookieDomain = '';\n      var writableTopDomain = topDomain(getLocation().href);\n      this.cookieDomain = domain || (writableTopDomain ? '.' + writableTopDomain : null);\n\n      if (storageOptionExists[storage]) {\n        this.storage = storage;\n      } else {\n        var disableCookieStorage = disableCookies || !baseCookie.areCookiesEnabled({\n          domain: this.cookieDomain,\n          secure: this.secure,\n          sameSite: this.sameSite,\n          expirationDays: this.expirationDays\n        });\n\n        if (disableCookieStorage) {\n          this.storage = Constants.STORAGE_LOCAL;\n        } else {\n          this.storage = Constants.STORAGE_COOKIES;\n        }\n      }\n    }\n\n    _createClass(MetadataStorage, [{\n      key: \"getCookieStorageKey\",\n      value: function getCookieStorageKey() {\n        if (!this.domain) {\n          return this.storageKey;\n        }\n\n        var suffix = this.domain.charAt(0) === '.' ? this.domain.substring(1) : this.domain;\n        return \"\".concat(this.storageKey).concat(suffix ? \"_\".concat(suffix) : '');\n      }\n      /*\n       * Data is saved as delimited values rather than JSO to minimize cookie space\n       * Should not change order of the items\n       */\n\n    }, {\n      key: \"save\",\n      value: function save(_ref2) {\n        var deviceId = _ref2.deviceId,\n            userId = _ref2.userId,\n            optOut = _ref2.optOut,\n            sessionId = _ref2.sessionId,\n            lastEventTime = _ref2.lastEventTime,\n            eventId = _ref2.eventId,\n            identifyId = _ref2.identifyId,\n            sequenceNumber = _ref2.sequenceNumber;\n\n        if (this.storage === Constants.STORAGE_NONE) {\n          return;\n        }\n\n        var value = [deviceId, Base64.encode(userId || ''), // used to convert not unicode to alphanumeric since cookies only use alphanumeric\n        optOut ? '1' : '', sessionId ? sessionId.toString(32) : '0', // generated when instantiated, timestamp (but re-uses session id in cookie if not expired) @TODO clients may want custom session id\n        lastEventTime ? lastEventTime.toString(32) : '0', // last time an event was set\n        eventId ? eventId.toString(32) : '0', identifyId ? identifyId.toString(32) : '0', sequenceNumber ? sequenceNumber.toString(32) : '0'].join('.');\n\n        switch (this.storage) {\n          case Constants.STORAGE_SESSION:\n            if (window.sessionStorage) {\n              window.sessionStorage.setItem(this.storageKey, value);\n            }\n\n            break;\n\n          case Constants.STORAGE_LOCAL:\n            ampLocalStorage.setItem(this.storageKey, value);\n            break;\n\n          case Constants.STORAGE_COOKIES:\n            baseCookie.set(this.getCookieStorageKey(), value, {\n              domain: this.cookieDomain,\n              secure: this.secure,\n              sameSite: this.sameSite,\n              expirationDays: this.expirationDays\n            });\n            break;\n        }\n      }\n    }, {\n      key: \"load\",\n      value: function load() {\n        var str;\n\n        if (this.storage === Constants.STORAGE_COOKIES) {\n          str = baseCookie.get(this.getCookieStorageKey() + '=');\n        }\n\n        if (!str) {\n          str = ampLocalStorage.getItem(this.storageKey);\n        }\n\n        if (!str) {\n          try {\n            str = window.sessionStorage && window.sessionStorage.getItem(this.storageKey);\n          } catch (e) {\n            utils.log.info(\"window.sessionStorage unavailable. Reason: \\\"\".concat(e, \"\\\"\"));\n          }\n        }\n\n        if (!str) {\n          return null;\n        }\n\n        var values = str.split('.');\n        var userId = null;\n\n        if (values[1]) {\n          try {\n            userId = Base64.decode(values[1]);\n          } catch (e) {\n            userId = null;\n          }\n        }\n\n        return {\n          deviceId: values[0],\n          userId: userId,\n          optOut: values[2] === '1',\n          sessionId: parseInt(values[3], 32),\n          lastEventTime: parseInt(values[4], 32),\n          eventId: parseInt(values[5], 32),\n          identifyId: parseInt(values[6], 32),\n          sequenceNumber: parseInt(values[7], 32)\n        };\n      }\n    }]);\n\n    return MetadataStorage;\n  }();\n\n  var getUtmData = function getUtmData(rawCookie, query) {\n    // Translate the utmz cookie format into url query string format.\n    var cookie = rawCookie ? '?' + rawCookie.split('.').slice(-1)[0].replace(/\\|/g, '&') : '';\n\n    var fetchParam = function fetchParam(queryName, query, cookieName, cookie) {\n      return utils.getQueryParam(queryName, query) || utils.getQueryParam(cookieName, cookie);\n    };\n\n    var utmSource = fetchParam(Constants.UTM_SOURCE, query, 'utmcsr', cookie);\n    var utmMedium = fetchParam(Constants.UTM_MEDIUM, query, 'utmcmd', cookie);\n    var utmCampaign = fetchParam(Constants.UTM_CAMPAIGN, query, 'utmccn', cookie);\n    var utmTerm = fetchParam(Constants.UTM_TERM, query, 'utmctr', cookie);\n    var utmContent = fetchParam(Constants.UTM_CONTENT, query, 'utmcct', cookie);\n    var utmData = {};\n\n    var addIfNotNull = function addIfNotNull(key, value) {\n      if (!utils.isEmptyString(value)) {\n        utmData[key] = value;\n      }\n    };\n\n    addIfNotNull(Constants.UTM_SOURCE, utmSource);\n    addIfNotNull(Constants.UTM_MEDIUM, utmMedium);\n    addIfNotNull(Constants.UTM_CAMPAIGN, utmCampaign);\n    addIfNotNull(Constants.UTM_TERM, utmTerm);\n    addIfNotNull(Constants.UTM_CONTENT, utmContent);\n    return utmData;\n  };\n\n  /*\n   * Wrapper for a user properties JSON object that supports operations.\n   * Note: if a user property is used in multiple operations on the same Identify object,\n   * only the first operation will be saved, and the rest will be ignored.\n   */\n\n  var AMP_OP_ADD = '$add';\n  var AMP_OP_APPEND = '$append';\n  var AMP_OP_CLEAR_ALL = '$clearAll';\n  var AMP_OP_PREPEND = '$prepend';\n  var AMP_OP_SET = '$set';\n  var AMP_OP_SET_ONCE = '$setOnce';\n  var AMP_OP_UNSET = '$unset';\n  var AMP_OP_PREINSERT = '$preInsert';\n  var AMP_OP_POSTINSERT = '$postInsert';\n  var AMP_OP_REMOVE = '$remove';\n  /**\n   * Identify API - instance constructor. Identify objects are a wrapper for user property operations.\n   * Each method adds a user property operation to the Identify object, and returns the same Identify object,\n   * allowing you to chain multiple method calls together.\n   * Note: if the same user property is used in multiple operations on a single Identify object,\n   * only the first operation on that property will be saved, and the rest will be ignored.\n   * @constructor Identify\n   * @public\n   * @example var identify = new amplitude.Identify();\n   */\n\n  var Identify = function Identify() {\n    this.userPropertiesOperations = {};\n    this.properties = []; // keep track of keys that have been added\n  };\n  /**\n   * Increment a user property by a given value (can also be negative to decrement).\n   * If the user property does not have a value set yet, it will be initialized to 0 before being incremented.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string} value - The amount by which to increment the user property. Allows numbers as strings (ex: '123').\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().add('karma', 1).add('friends', 1);\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.add = function (property, value) {\n    if (type(value) === 'number' || type(value) === 'string') {\n      this._addOperation(AMP_OP_ADD, property, value);\n    } else {\n      utils.log.error('Unsupported type for value: ' + type(value) + ', expecting number or string');\n    }\n\n    return this;\n  };\n  /**\n   * Append a value or values to a user property.\n   * If the user property does not have a value set yet,\n   * it will be initialized to an empty list before the new values are appended.\n   * If the user property has an existing value and it is not a list,\n   * the existing value will be converted into a list with the new values appended.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string|list|object} value - A value or values to append.\n   * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().append('ab-tests', 'new-user-tests');\n   * identify.append('some_list', [1, 2, 3, 4, 'values']);\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.append = function (property, value) {\n    this._addOperation(AMP_OP_APPEND, property, value);\n\n    return this;\n  };\n  /**\n   * Clear all user properties for the current user.\n   * SDK user should instead call amplitude.clearUserProperties() instead of using this.\n   * $clearAll needs to be sent on its own Identify object. If there are already other operations, then don't add $clearAll.\n   * If $clearAll already in an Identify object, don't allow other operations to be added.\n   * @private\n   */\n\n\n  Identify.prototype.clearAll = function () {\n    if (Object.keys(this.userPropertiesOperations).length > 0) {\n      if (!Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, AMP_OP_CLEAR_ALL)) {\n        utils.log.error('Need to send $clearAll on its own Identify object without any other operations, skipping $clearAll');\n      }\n\n      return this;\n    }\n\n    this.userPropertiesOperations[AMP_OP_CLEAR_ALL] = '-';\n    return this;\n  };\n  /**\n   * Prepend a value or values to a user property.\n   * Prepend means inserting the value or values at the front of a list.\n   * If the user property does not have a value set yet,\n   * it will be initialized to an empty list before the new values are prepended.\n   * If the user property has an existing value and it is not a list,\n   * the existing value will be converted into a list with the new values prepended.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string|list|object} value - A value or values to prepend.\n   * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().prepend('ab-tests', 'new-user-tests');\n   * identify.prepend('some_list', [1, 2, 3, 4, 'values']);\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.prepend = function (property, value) {\n    this._addOperation(AMP_OP_PREPEND, property, value);\n\n    return this;\n  };\n  /**\n   * Sets the value of a given user property. If a value already exists, it will be overwriten with the new value.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string|list|boolean|object} value - A value or values to set.\n   * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().set('user_type', 'beta');\n   * identify.set('name', {'first': 'John', 'last': 'Doe'}); // dict is flattened and becomes name.first: John, name.last: Doe\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.set = function (property, value) {\n    this._addOperation(AMP_OP_SET, property, value);\n\n    return this;\n  };\n  /**\n   * Sets the value of a given user property only once. Subsequent setOnce operations on that user property will be ignored;\n   * however, that user property can still be modified through any of the other operations.\n   * Useful for capturing properties such as 'initial_signup_date', 'initial_referrer', etc.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string|list|boolean|object} value - A value or values to set once.\n   * Values can be numbers, strings, lists, or object (key:value dict will be flattened).\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().setOnce('sign_up_date', '2016-04-01');\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.setOnce = function (property, value) {\n    this._addOperation(AMP_OP_SET_ONCE, property, value);\n\n    return this;\n  };\n  /**\n   * Unset and remove a user property. This user property will no longer show up in a user's profile.\n   * @public\n   * @param {string} property - The user property key.\n   * @return {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   * @example var identify = new amplitude.Identify().unset('user_type').unset('age');\n   * amplitude.identify(identify); // send the Identify call\n   */\n\n\n  Identify.prototype.unset = function (property) {\n    this._addOperation(AMP_OP_UNSET, property, '-');\n\n    return this;\n  };\n  /**\n   * Preinsert a value or values to a user property, if it does not exist in the user property already.\n   * Preinsert means inserting the value or values to the beginning of the specified user property.\n   * If the item already exists in the user property, it will be a no-op.\n   * @public\n   * @param {string} property - The user property key.\n   * @param {number|string|list|object} value - A value or values to insert.\n   * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   */\n\n\n  Identify.prototype.preInsert = function (property, value) {\n    this._addOperation(AMP_OP_PREINSERT, property, value);\n\n    return this;\n  };\n  /**\n   * Postinsert a value or values to a user property, if it does not exist in the user property already.\n   * Postinsert means inserting the value or values to the beginning of the specified user property.\n   * If the item already exists in the user property, it will be a no-op.\n   * @param {string} property - The user property key.\n   * @param {number|string|list|object} value - A value or values to insert.\n   * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   */\n\n\n  Identify.prototype.postInsert = function (property, value) {\n    this._addOperation(AMP_OP_POSTINSERT, property, value);\n\n    return this;\n  };\n  /**\n   * Remove a value or values to a user property, if it does exist in the user property.\n   * If the item does not exist in the user property, it will be a no-op.\n   * @param {string} property - The user property key.\n   * @param {number|string|list|object} value - A value or values to remove.\n   * @returns {Identify} Returns the same Identify object, allowing you to chain multiple method calls together.\n   */\n\n\n  Identify.prototype.remove = function (property, value) {\n    this._addOperation(AMP_OP_REMOVE, property, value);\n\n    return this;\n  };\n  /**\n   * Helper function that adds operation to the Identify's object\n   * Handle's filtering of duplicate user property keys, and filtering for clearAll.\n   * @private\n   */\n\n\n  Identify.prototype._addOperation = function (operation, property, value) {\n    // check that the identify doesn't already contain a clearAll\n    if (Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, AMP_OP_CLEAR_ALL)) {\n      utils.log.error('This identify already contains a $clearAll operation, skipping operation ' + operation);\n      return;\n    } // check that property wasn't already used in this Identify\n\n\n    if (this.properties.indexOf(property) !== -1) {\n      utils.log.error('User property \"' + property + '\" already used in this identify, skipping operation ' + operation);\n      return;\n    }\n\n    if (!Object.prototype.hasOwnProperty.call(this.userPropertiesOperations, operation)) {\n      this.userPropertiesOperations[operation] = {};\n    }\n\n    this.userPropertiesOperations[operation][property] = value;\n    this.properties.push(property);\n  };\n\n  var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n  function createCommonjsModule(fn, module) {\n  \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n  }\n\n  var md5 = createCommonjsModule(function (module) {\n  (function ($) {\n\n    /*\n    * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n    * to work around bugs in some JS interpreters.\n    */\n    function safeAdd (x, y) {\n      var lsw = (x & 0xffff) + (y & 0xffff);\n      var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n      return (msw << 16) | (lsw & 0xffff)\n    }\n\n    /*\n    * Bitwise rotate a 32-bit number to the left.\n    */\n    function bitRotateLeft (num, cnt) {\n      return (num << cnt) | (num >>> (32 - cnt))\n    }\n\n    /*\n    * These functions implement the four basic operations the algorithm uses.\n    */\n    function md5cmn (q, a, b, x, s, t) {\n      return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n    }\n    function md5ff (a, b, c, d, x, s, t) {\n      return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n    }\n    function md5gg (a, b, c, d, x, s, t) {\n      return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n    }\n    function md5hh (a, b, c, d, x, s, t) {\n      return md5cmn(b ^ c ^ d, a, b, x, s, t)\n    }\n    function md5ii (a, b, c, d, x, s, t) {\n      return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n    }\n\n    /*\n    * Calculate the MD5 of an array of little-endian words, and a bit length.\n    */\n    function binlMD5 (x, len) {\n      /* append padding */\n      x[len >> 5] |= 0x80 << (len % 32);\n      x[((len + 64) >>> 9 << 4) + 14] = len;\n\n      var i;\n      var olda;\n      var oldb;\n      var oldc;\n      var oldd;\n      var a = 1732584193;\n      var b = -271733879;\n      var c = -1732584194;\n      var d = 271733878;\n\n      for (i = 0; i < x.length; i += 16) {\n        olda = a;\n        oldb = b;\n        oldc = c;\n        oldd = d;\n\n        a = md5ff(a, b, c, d, x[i], 7, -680876936);\n        d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n        c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n        b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n        a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n        d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n        c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n        b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n        a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n        d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n        c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n        b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n        a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n        d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n        c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n        b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n        a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n        d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n        c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n        b = md5gg(b, c, d, a, x[i], 20, -373897302);\n        a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n        d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n        c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n        b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n        a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n        d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n        c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n        b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n        a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n        d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n        c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n        b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n        a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n        d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n        c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n        b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n        a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n        d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n        c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n        b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n        a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n        d = md5hh(d, a, b, c, x[i], 11, -358537222);\n        c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n        b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n        a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n        d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n        c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n        b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n        a = md5ii(a, b, c, d, x[i], 6, -198630844);\n        d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n        c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n        b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n        a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n        d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n        c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n        b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n        a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n        d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n        c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n        b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n        a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n        d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n        c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n        b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n        a = safeAdd(a, olda);\n        b = safeAdd(b, oldb);\n        c = safeAdd(c, oldc);\n        d = safeAdd(d, oldd);\n      }\n      return [a, b, c, d]\n    }\n\n    /*\n    * Convert an array of little-endian words to a string\n    */\n    function binl2rstr (input) {\n      var i;\n      var output = '';\n      var length32 = input.length * 32;\n      for (i = 0; i < length32; i += 8) {\n        output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n      }\n      return output\n    }\n\n    /*\n    * Convert a raw string to an array of little-endian words\n    * Characters >255 have their high-byte silently ignored.\n    */\n    function rstr2binl (input) {\n      var i;\n      var output = [];\n      output[(input.length >> 2) - 1] = undefined;\n      for (i = 0; i < output.length; i += 1) {\n        output[i] = 0;\n      }\n      var length8 = input.length * 8;\n      for (i = 0; i < length8; i += 8) {\n        output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n      }\n      return output\n    }\n\n    /*\n    * Calculate the MD5 of a raw string\n    */\n    function rstrMD5 (s) {\n      return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n    }\n\n    /*\n    * Calculate the HMAC-MD5, of a key and some data (raw strings)\n    */\n    function rstrHMACMD5 (key, data) {\n      var i;\n      var bkey = rstr2binl(key);\n      var ipad = [];\n      var opad = [];\n      var hash;\n      ipad[15] = opad[15] = undefined;\n      if (bkey.length > 16) {\n        bkey = binlMD5(bkey, key.length * 8);\n      }\n      for (i = 0; i < 16; i += 1) {\n        ipad[i] = bkey[i] ^ 0x36363636;\n        opad[i] = bkey[i] ^ 0x5c5c5c5c;\n      }\n      hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n      return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n    }\n\n    /*\n    * Convert a raw string to a hex string\n    */\n    function rstr2hex (input) {\n      var hexTab = '0123456789abcdef';\n      var output = '';\n      var x;\n      var i;\n      for (i = 0; i < input.length; i += 1) {\n        x = input.charCodeAt(i);\n        output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n      }\n      return output\n    }\n\n    /*\n    * Encode a string as utf-8\n    */\n    function str2rstrUTF8 (input) {\n      return unescape(encodeURIComponent(input))\n    }\n\n    /*\n    * Take string arguments and return either raw or hex encoded strings\n    */\n    function rawMD5 (s) {\n      return rstrMD5(str2rstrUTF8(s))\n    }\n    function hexMD5 (s) {\n      return rstr2hex(rawMD5(s))\n    }\n    function rawHMACMD5 (k, d) {\n      return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n    }\n    function hexHMACMD5 (k, d) {\n      return rstr2hex(rawHMACMD5(k, d))\n    }\n\n    function md5 (string, key, raw) {\n      if (!key) {\n        if (!raw) {\n          return hexMD5(string)\n        }\n        return rawMD5(string)\n      }\n      if (!raw) {\n        return hexHMACMD5(key, string)\n      }\n      return rawHMACMD5(key, string)\n    }\n\n    if (module.exports) {\n      module.exports = md5;\n    } else {\n      $.md5 = md5;\n    }\n  })(commonjsGlobal);\n  });\n\n  var strictUriEncode = function (str) {\n  \treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n  \t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n  \t});\n  };\n\n  /*\n  object-assign\n  (c) Sindre Sorhus\n  @license MIT\n  */\n  /* eslint-disable no-unused-vars */\n  var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n  var propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\n  function toObject(val) {\n  \tif (val === null || val === undefined) {\n  \t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n  \t}\n\n  \treturn Object(val);\n  }\n\n  function shouldUseNative() {\n  \ttry {\n  \t\tif (!Object.assign) {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\t// Detect buggy property enumeration order in older V8 versions.\n\n  \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n  \t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n  \t\ttest1[5] = 'de';\n  \t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n  \t\tvar test2 = {};\n  \t\tfor (var i = 0; i < 10; i++) {\n  \t\t\ttest2['_' + String.fromCharCode(i)] = i;\n  \t\t}\n  \t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n  \t\t\treturn test2[n];\n  \t\t});\n  \t\tif (order2.join('') !== '0123456789') {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n  \t\tvar test3 = {};\n  \t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n  \t\t\ttest3[letter] = letter;\n  \t\t});\n  \t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n  \t\t\t\t'abcdefghijklmnopqrst') {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\treturn true;\n  \t} catch (err) {\n  \t\t// We don't expect any of the above to throw, but better to be safe.\n  \t\treturn false;\n  \t}\n  }\n\n  var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {\n  \tvar from;\n  \tvar to = toObject(target);\n  \tvar symbols;\n\n  \tfor (var s = 1; s < arguments.length; s++) {\n  \t\tfrom = Object(arguments[s]);\n\n  \t\tfor (var key in from) {\n  \t\t\tif (hasOwnProperty.call(from, key)) {\n  \t\t\t\tto[key] = from[key];\n  \t\t\t}\n  \t\t}\n\n  \t\tif (getOwnPropertySymbols) {\n  \t\t\tsymbols = getOwnPropertySymbols(from);\n  \t\t\tfor (var i = 0; i < symbols.length; i++) {\n  \t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n  \t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t}\n\n  \treturn to;\n  };\n\n  var token = '%[a-f0-9]{2}';\n  var singleMatcher = new RegExp(token, 'gi');\n  var multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\n  function decodeComponents(components, split) {\n  \ttry {\n  \t\t// Try to decode the entire string first\n  \t\treturn decodeURIComponent(components.join(''));\n  \t} catch (err) {\n  \t\t// Do nothing\n  \t}\n\n  \tif (components.length === 1) {\n  \t\treturn components;\n  \t}\n\n  \tsplit = split || 1;\n\n  \t// Split the array in 2 parts\n  \tvar left = components.slice(0, split);\n  \tvar right = components.slice(split);\n\n  \treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n  }\n\n  function decode(input) {\n  \ttry {\n  \t\treturn decodeURIComponent(input);\n  \t} catch (err) {\n  \t\tvar tokens = input.match(singleMatcher);\n\n  \t\tfor (var i = 1; i < tokens.length; i++) {\n  \t\t\tinput = decodeComponents(tokens, i).join('');\n\n  \t\t\ttokens = input.match(singleMatcher);\n  \t\t}\n\n  \t\treturn input;\n  \t}\n  }\n\n  function customDecodeURIComponent(input) {\n  \t// Keep track of all the replacements and prefill the map with the `BOM`\n  \tvar replaceMap = {\n  \t\t'%FE%FF': '\\uFFFD\\uFFFD',\n  \t\t'%FF%FE': '\\uFFFD\\uFFFD'\n  \t};\n\n  \tvar match = multiMatcher.exec(input);\n  \twhile (match) {\n  \t\ttry {\n  \t\t\t// Decode as big chunks as possible\n  \t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n  \t\t} catch (err) {\n  \t\t\tvar result = decode(match[0]);\n\n  \t\t\tif (result !== match[0]) {\n  \t\t\t\treplaceMap[match[0]] = result;\n  \t\t\t}\n  \t\t}\n\n  \t\tmatch = multiMatcher.exec(input);\n  \t}\n\n  \t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n  \treplaceMap['%C2'] = '\\uFFFD';\n\n  \tvar entries = Object.keys(replaceMap);\n\n  \tfor (var i = 0; i < entries.length; i++) {\n  \t\t// Replace all decoded components\n  \t\tvar key = entries[i];\n  \t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n  \t}\n\n  \treturn input;\n  }\n\n  var decodeUriComponent = function (encodedURI) {\n  \tif (typeof encodedURI !== 'string') {\n  \t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n  \t}\n\n  \ttry {\n  \t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n  \t\t// Try the built in decoder first\n  \t\treturn decodeURIComponent(encodedURI);\n  \t} catch (err) {\n  \t\t// Fallback to a more advanced decoder\n  \t\treturn customDecodeURIComponent(encodedURI);\n  \t}\n  };\n\n  function encoderForArrayFormat(opts) {\n  \tswitch (opts.arrayFormat) {\n  \t\tcase 'index':\n  \t\t\treturn function (key, value, index) {\n  \t\t\t\treturn value === null ? [\n  \t\t\t\t\tencode(key, opts),\n  \t\t\t\t\t'[',\n  \t\t\t\t\tindex,\n  \t\t\t\t\t']'\n  \t\t\t\t].join('') : [\n  \t\t\t\t\tencode(key, opts),\n  \t\t\t\t\t'[',\n  \t\t\t\t\tencode(index, opts),\n  \t\t\t\t\t']=',\n  \t\t\t\t\tencode(value, opts)\n  \t\t\t\t].join('');\n  \t\t\t};\n\n  \t\tcase 'bracket':\n  \t\t\treturn function (key, value) {\n  \t\t\t\treturn value === null ? encode(key, opts) : [\n  \t\t\t\t\tencode(key, opts),\n  \t\t\t\t\t'[]=',\n  \t\t\t\t\tencode(value, opts)\n  \t\t\t\t].join('');\n  \t\t\t};\n\n  \t\tdefault:\n  \t\t\treturn function (key, value) {\n  \t\t\t\treturn value === null ? encode(key, opts) : [\n  \t\t\t\t\tencode(key, opts),\n  \t\t\t\t\t'=',\n  \t\t\t\t\tencode(value, opts)\n  \t\t\t\t].join('');\n  \t\t\t};\n  \t}\n  }\n\n  function parserForArrayFormat(opts) {\n  \tvar result;\n\n  \tswitch (opts.arrayFormat) {\n  \t\tcase 'index':\n  \t\t\treturn function (key, value, accumulator) {\n  \t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n  \t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n  \t\t\t\tif (!result) {\n  \t\t\t\t\taccumulator[key] = value;\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tif (accumulator[key] === undefined) {\n  \t\t\t\t\taccumulator[key] = {};\n  \t\t\t\t}\n\n  \t\t\t\taccumulator[key][result[1]] = value;\n  \t\t\t};\n\n  \t\tcase 'bracket':\n  \t\t\treturn function (key, value, accumulator) {\n  \t\t\t\tresult = /(\\[\\])$/.exec(key);\n  \t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n  \t\t\t\tif (!result) {\n  \t\t\t\t\taccumulator[key] = value;\n  \t\t\t\t\treturn;\n  \t\t\t\t} else if (accumulator[key] === undefined) {\n  \t\t\t\t\taccumulator[key] = [value];\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n  \t\t\t};\n\n  \t\tdefault:\n  \t\t\treturn function (key, value, accumulator) {\n  \t\t\t\tif (accumulator[key] === undefined) {\n  \t\t\t\t\taccumulator[key] = value;\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n  \t\t\t};\n  \t}\n  }\n\n  function encode(value, opts) {\n  \tif (opts.encode) {\n  \t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n  \t}\n\n  \treturn value;\n  }\n\n  function keysSorter(input) {\n  \tif (Array.isArray(input)) {\n  \t\treturn input.sort();\n  \t} else if (typeof input === 'object') {\n  \t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n  \t\t\treturn Number(a) - Number(b);\n  \t\t}).map(function (key) {\n  \t\t\treturn input[key];\n  \t\t});\n  \t}\n\n  \treturn input;\n  }\n\n  function extract(str) {\n  \tvar queryStart = str.indexOf('?');\n  \tif (queryStart === -1) {\n  \t\treturn '';\n  \t}\n  \treturn str.slice(queryStart + 1);\n  }\n\n  function parse(str, opts) {\n  \topts = objectAssign({arrayFormat: 'none'}, opts);\n\n  \tvar formatter = parserForArrayFormat(opts);\n\n  \t// Create an object with no prototype\n  \t// https://github.com/sindresorhus/query-string/issues/47\n  \tvar ret = Object.create(null);\n\n  \tif (typeof str !== 'string') {\n  \t\treturn ret;\n  \t}\n\n  \tstr = str.trim().replace(/^[?#&]/, '');\n\n  \tif (!str) {\n  \t\treturn ret;\n  \t}\n\n  \tstr.split('&').forEach(function (param) {\n  \t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n  \t\t// Firefox (pre 40) decodes `%3D` to `=`\n  \t\t// https://github.com/sindresorhus/query-string/pull/37\n  \t\tvar key = parts.shift();\n  \t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n  \t\t// missing `=` should be `null`:\n  \t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n  \t\tval = val === undefined ? null : decodeUriComponent(val);\n\n  \t\tformatter(decodeUriComponent(key), val, ret);\n  \t});\n\n  \treturn Object.keys(ret).sort().reduce(function (result, key) {\n  \t\tvar val = ret[key];\n  \t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n  \t\t\t// Sort object keys, not values\n  \t\t\tresult[key] = keysSorter(val);\n  \t\t} else {\n  \t\t\tresult[key] = val;\n  \t\t}\n\n  \t\treturn result;\n  \t}, Object.create(null));\n  }\n\n  var extract_1 = extract;\n  var parse_1 = parse;\n\n  var stringify = function (obj, opts) {\n  \tvar defaults = {\n  \t\tencode: true,\n  \t\tstrict: true,\n  \t\tarrayFormat: 'none'\n  \t};\n\n  \topts = objectAssign(defaults, opts);\n\n  \tif (opts.sort === false) {\n  \t\topts.sort = function () {};\n  \t}\n\n  \tvar formatter = encoderForArrayFormat(opts);\n\n  \treturn obj ? Object.keys(obj).sort(opts.sort).map(function (key) {\n  \t\tvar val = obj[key];\n\n  \t\tif (val === undefined) {\n  \t\t\treturn '';\n  \t\t}\n\n  \t\tif (val === null) {\n  \t\t\treturn encode(key, opts);\n  \t\t}\n\n  \t\tif (Array.isArray(val)) {\n  \t\t\tvar result = [];\n\n  \t\t\tval.slice().forEach(function (val2) {\n  \t\t\t\tif (val2 === undefined) {\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tresult.push(formatter(key, val2, result.length));\n  \t\t\t});\n\n  \t\t\treturn result.join('&');\n  \t\t}\n\n  \t\treturn encode(key, opts) + '=' + encode(val, opts);\n  \t}).filter(function (x) {\n  \t\treturn x.length > 0;\n  \t}).join('&') : '';\n  };\n\n  var parseUrl = function (str, opts) {\n  \treturn {\n  \t\turl: str.split('?')[0] || '',\n  \t\tquery: parse(extract(str), opts)\n  \t};\n  };\n\n  var queryString = {\n  \textract: extract_1,\n  \tparse: parse_1,\n  \tstringify: stringify,\n  \tparseUrl: parseUrl\n  };\n\n  /*\n   * Simple AJAX request object\n   */\n\n  var Request = function Request(url, data, headers) {\n    this.url = url;\n    this.data = data || {};\n    this.headers = headers;\n  };\n\n  function setHeaders(xhr, headers) {\n    for (var header in headers) {\n      xhr.setRequestHeader(header, headers[header]);\n    }\n  }\n\n  Request.prototype.send = function (callback) {\n    var isIE = window.XDomainRequest ? true : false;\n\n    if (isIE) {\n      var xdr = new window.XDomainRequest();\n      xdr.open('POST', this.url, true);\n\n      xdr.onload = function () {\n        callback(200, xdr.responseText);\n      };\n\n      xdr.onerror = function () {\n        // status code not available from xdr, try string matching on responseText\n        if (xdr.responseText === 'Request Entity Too Large') {\n          callback(413, xdr.responseText);\n        } else {\n          callback(500, xdr.responseText);\n        }\n      };\n\n      xdr.ontimeout = function () {};\n\n      xdr.onprogress = function () {};\n\n      xdr.send(queryString.stringify(this.data));\n    } else {\n      var xhr = new XMLHttpRequest();\n      xhr.open('POST', this.url, true);\n\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n          callback(xhr.status, xhr.responseText);\n        }\n      };\n\n      setHeaders(xhr, this.headers);\n      xhr.send(queryString.stringify(this.data));\n    } //log('sent request to ' + this.url + ' with data ' + decodeURIComponent(queryString(this.data)));\n\n  };\n\n  /**\n   * Revenue API - instance constructor. Wrapper for logging Revenue data. Revenue objects get passed to amplitude.logRevenueV2 to send to Amplitude servers.\n   * Each method updates a revenue property in the Revenue object, and returns the same Revenue object,\n   * allowing you to chain multiple method calls together.\n   *\n   * Note: price is a required field to log revenue events.\n   * If quantity is not specified then defaults to 1.\n   * @constructor Revenue\n   * @public\n   * @example var revenue = new amplitude.Revenue();\n   */\n\n  var Revenue = function Revenue() {\n    // required fields\n    this._price = null; // optional fields\n\n    this._productId = null;\n    this._quantity = 1;\n    this._revenueType = null;\n    this._properties = null;\n  };\n  /**\n   * Set a value for the product identifer.\n   * @public\n   * @param {string} productId - The value for the product identifier. Empty and invalid strings are ignored.\n   * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n   * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  Revenue.prototype.setProductId = function setProductId(productId) {\n    if (type(productId) !== 'string') {\n      utils.log.error('Unsupported type for productId: ' + type(productId) + ', expecting string');\n    } else if (utils.isEmptyString(productId)) {\n      utils.log.error('Invalid empty productId');\n    } else {\n      this._productId = productId;\n    }\n\n    return this;\n  };\n  /**\n   * Set a value for the quantity. Note revenue amount is calculated as price * quantity.\n   * @public\n   * @param {number} quantity - Integer value for the quantity. If not set, quantity defaults to 1.\n   * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n   * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setQuantity(5);\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  Revenue.prototype.setQuantity = function setQuantity(quantity) {\n    if (type(quantity) !== 'number') {\n      utils.log.error('Unsupported type for quantity: ' + type(quantity) + ', expecting number');\n    } else {\n      this._quantity = parseInt(quantity);\n    }\n\n    return this;\n  };\n  /**\n   * Set a value for the price. This field is required for all revenue being logged.\n   *\n   * Note: revenue amount is calculated as price * quantity.\n   * @public\n   * @param {number} price - Double value for the quantity.\n   * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n   * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  Revenue.prototype.setPrice = function setPrice(price) {\n    if (type(price) !== 'number') {\n      utils.log.error('Unsupported type for price: ' + type(price) + ', expecting number');\n    } else {\n      this._price = price;\n    }\n\n    return this;\n  };\n  /**\n   * Set a value for the revenueType (for example purchase, cost, tax, refund, etc).\n   * @public\n   * @param {string} revenueType - RevenueType to designate.\n   * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n   * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setRevenueType('purchase');\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  Revenue.prototype.setRevenueType = function setRevenueType(revenueType) {\n    if (type(revenueType) !== 'string') {\n      utils.log.error('Unsupported type for revenueType: ' + type(revenueType) + ', expecting string');\n    } else {\n      this._revenueType = revenueType;\n    }\n\n    return this;\n  };\n  /**\n   * Set event properties for the revenue event.\n   * @public\n   * @param {object} eventProperties - Revenue event properties to set.\n   * @return {Revenue} Returns the same Revenue object, allowing you to chain multiple method calls together.\n   * @example var event_properties = {'city': 'San Francisco'};\n   * var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99).setEventProperties(event_properties);\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  Revenue.prototype.setEventProperties = function setEventProperties(eventProperties) {\n    if (type(eventProperties) !== 'object') {\n      utils.log.error('Unsupported type for eventProperties: ' + type(eventProperties) + ', expecting object');\n    } else {\n      this._properties = utils.validateProperties(eventProperties);\n    }\n\n    return this;\n  };\n  /**\n   * @private\n   */\n\n\n  Revenue.prototype._isValidRevenue = function _isValidRevenue() {\n    if (type(this._price) !== 'number') {\n      utils.log.error('Invalid revenue, need to set price field');\n      return false;\n    }\n\n    return true;\n  };\n  /**\n   * @private\n   */\n\n\n  Revenue.prototype._toJSONObject = function _toJSONObject() {\n    var obj = type(this._properties) === 'object' ? this._properties : {};\n\n    if (this._productId !== null) {\n      obj[Constants.REVENUE_PRODUCT_ID] = this._productId;\n    }\n\n    if (this._quantity !== null) {\n      obj[Constants.REVENUE_QUANTITY] = this._quantity;\n    }\n\n    if (this._price !== null) {\n      obj[Constants.REVENUE_PRICE] = this._price;\n    }\n\n    if (this._revenueType !== null) {\n      obj[Constants.REVENUE_REVENUE_TYPE] = this._revenueType;\n    }\n\n    return obj;\n  };\n\n  var uaParser = createCommonjsModule(function (module, exports) {\n  /*!\n   * UAParser.js v0.7.21\n   * Lightweight JavaScript-based User-Agent string parser\n   * https://github.com/faisalman/ua-parser-js\n   *\n   * Copyright © 2012-2019 Faisal Salman <f@faisalman.com>\n   * Licensed under MIT License\n   */\n\n  (function (window, undefined$1) {\n\n      //////////////\n      // Constants\n      /////////////\n\n\n      var LIBVERSION  = '0.7.21',\n          EMPTY       = '',\n          UNKNOWN     = '?',\n          FUNC_TYPE   = 'function',\n          OBJ_TYPE    = 'object',\n          STR_TYPE    = 'string',\n          MAJOR       = 'major', // deprecated\n          MODEL       = 'model',\n          NAME        = 'name',\n          TYPE        = 'type',\n          VENDOR      = 'vendor',\n          VERSION     = 'version',\n          ARCHITECTURE= 'architecture',\n          CONSOLE     = 'console',\n          MOBILE      = 'mobile',\n          TABLET      = 'tablet',\n          SMARTTV     = 'smarttv',\n          WEARABLE    = 'wearable',\n          EMBEDDED    = 'embedded';\n\n\n      ///////////\n      // Helper\n      //////////\n\n\n      var util = {\n          extend : function (regexes, extensions) {\n              var mergedRegexes = {};\n              for (var i in regexes) {\n                  if (extensions[i] && extensions[i].length % 2 === 0) {\n                      mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                  } else {\n                      mergedRegexes[i] = regexes[i];\n                  }\n              }\n              return mergedRegexes;\n          },\n          has : function (str1, str2) {\n            if (typeof str1 === \"string\") {\n              return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n            } else {\n              return false;\n            }\n          },\n          lowerize : function (str) {\n              return str.toLowerCase();\n          },\n          major : function (version) {\n              return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined$1;\n          },\n          trim : function (str) {\n            return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n          }\n      };\n\n\n      ///////////////\n      // Map helper\n      //////////////\n\n\n      var mapper = {\n\n          rgx : function (ua, arrays) {\n\n              var i = 0, j, k, p, q, matches, match;\n\n              // loop through all regexes maps\n              while (i < arrays.length && !matches) {\n\n                  var regex = arrays[i],       // even sequence (0,2,4,..)\n                      props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                  j = k = 0;\n\n                  // try matching uastring with regexes\n                  while (j < regex.length && !matches) {\n\n                      matches = regex[j++].exec(ua);\n\n                      if (!!matches) {\n                          for (p = 0; p < props.length; p++) {\n                              match = matches[++k];\n                              q = props[p];\n                              // check if given property is actually array\n                              if (typeof q === OBJ_TYPE && q.length > 0) {\n                                  if (q.length == 2) {\n                                      if (typeof q[1] == FUNC_TYPE) {\n                                          // assign modified match\n                                          this[q[0]] = q[1].call(this, match);\n                                      } else {\n                                          // assign given value, ignore regex match\n                                          this[q[0]] = q[1];\n                                      }\n                                  } else if (q.length == 3) {\n                                      // check whether function or regex\n                                      if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                          // call function (usually string mapper)\n                                          this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined$1;\n                                      } else {\n                                          // sanitize match using given regex\n                                          this[q[0]] = match ? match.replace(q[1], q[2]) : undefined$1;\n                                      }\n                                  } else if (q.length == 4) {\n                                          this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined$1;\n                                  }\n                              } else {\n                                  this[q] = match ? match : undefined$1;\n                              }\n                          }\n                      }\n                  }\n                  i += 2;\n              }\n          },\n\n          str : function (str, map) {\n\n              for (var i in map) {\n                  // check if array\n                  if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                      for (var j = 0; j < map[i].length; j++) {\n                          if (util.has(map[i][j], str)) {\n                              return (i === UNKNOWN) ? undefined$1 : i;\n                          }\n                      }\n                  } else if (util.has(map[i], str)) {\n                      return (i === UNKNOWN) ? undefined$1 : i;\n                  }\n              }\n              return str;\n          }\n      };\n\n\n      ///////////////\n      // String map\n      //////////////\n\n\n      var maps = {\n\n          browser : {\n              oldsafari : {\n                  version : {\n                      '1.0'   : '/8',\n                      '1.2'   : '/1',\n                      '1.3'   : '/3',\n                      '2.0'   : '/412',\n                      '2.0.2' : '/416',\n                      '2.0.3' : '/417',\n                      '2.0.4' : '/419',\n                      '?'     : '/'\n                  }\n              }\n          },\n\n          device : {\n              amazon : {\n                  model : {\n                      'Fire Phone' : ['SD', 'KF']\n                  }\n              },\n              sprint : {\n                  model : {\n                      'Evo Shift 4G' : '7373KT'\n                  },\n                  vendor : {\n                      'HTC'       : 'APA',\n                      'Sprint'    : 'Sprint'\n                  }\n              }\n          },\n\n          os : {\n              windows : {\n                  version : {\n                      'ME'        : '4.90',\n                      'NT 3.11'   : 'NT3.51',\n                      'NT 4.0'    : 'NT4.0',\n                      '2000'      : 'NT 5.0',\n                      'XP'        : ['NT 5.1', 'NT 5.2'],\n                      'Vista'     : 'NT 6.0',\n                      '7'         : 'NT 6.1',\n                      '8'         : 'NT 6.2',\n                      '8.1'       : 'NT 6.3',\n                      '10'        : ['NT 6.4', 'NT 10.0'],\n                      'RT'        : 'ARM'\n                  }\n              }\n          }\n      };\n\n\n      //////////////\n      // Regex map\n      /////////////\n\n\n      var regexes = {\n\n          browser : [[\n\n              // Presto based\n              /(opera\\smini)\\/([\\w\\.-]+)/i,                                       // Opera Mini\n              /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i,                      // Opera Mobi/Tablet\n              /(opera).+version\\/([\\w\\.]+)/i,                                     // Opera > 9.80\n              /(opera)[\\/\\s]+([\\w\\.]+)/i                                          // Opera < 9.80\n              ], [NAME, VERSION], [\n\n              /(opios)[\\/\\s]+([\\w\\.]+)/i                                          // Opera mini on iphone >= 8.0\n              ], [[NAME, 'Opera Mini'], VERSION], [\n\n              /\\s(opr)\\/([\\w\\.]+)/i                                               // Opera Webkit\n              ], [[NAME, 'Opera'], VERSION], [\n\n              // Mixed\n              /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n              /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i,\n                                                                                  // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n              // Trident based\n              /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n                                                                                  // Avant/IEMobile/SlimBrowser\n              /(bidubrowser|baidubrowser)[\\/\\s]?([\\w\\.]+)/i,                      // Baidu Browser\n              /(?:ms|\\()(ie)\\s([\\w\\.]+)/i,                                        // Internet Explorer\n\n              // Webkit/KHTML based\n              /(rekonq)\\/([\\w\\.]*)/i,                                             // Rekonq\n              /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i\n                                                                                  // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n              ], [NAME, VERSION], [\n\n              /(konqueror)\\/([\\w\\.]+)/i                                           // Konqueror\n              ], [[NAME, 'Konqueror'], VERSION], [\n\n              /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i                         // IE11\n              ], [[NAME, 'IE'], VERSION], [\n\n              /(edge|edgios|edga|edg)\\/((\\d+)?[\\w\\.]+)/i                          // Microsoft Edge\n              ], [[NAME, 'Edge'], VERSION], [\n\n              /(yabrowser)\\/([\\w\\.]+)/i                                           // Yandex\n              ], [[NAME, 'Yandex'], VERSION], [\n\n              /(Avast)\\/([\\w\\.]+)/i                                               // Avast Secure Browser\n              ], [[NAME, 'Avast Secure Browser'], VERSION], [\n\n              /(AVG)\\/([\\w\\.]+)/i                                                 // AVG Secure Browser\n              ], [[NAME, 'AVG Secure Browser'], VERSION], [\n\n              /(puffin)\\/([\\w\\.]+)/i                                              // Puffin\n              ], [[NAME, 'Puffin'], VERSION], [\n\n              /(focus)\\/([\\w\\.]+)/i                                               // Firefox Focus\n              ], [[NAME, 'Firefox Focus'], VERSION], [\n\n              /(opt)\\/([\\w\\.]+)/i                                                 // Opera Touch\n              ], [[NAME, 'Opera Touch'], VERSION], [\n\n              /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i         // UCBrowser\n              ], [[NAME, 'UCBrowser'], VERSION], [\n\n              /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n              ], [[NAME, /_/g, ' '], VERSION], [\n\n              /(windowswechat qbcore)\\/([\\w\\.]+)/i                                // WeChat Desktop for Windows Built-in Browser\n              ], [[NAME, 'WeChat(Win) Desktop'], VERSION], [\n\n              /(micromessenger)\\/([\\w\\.]+)/i                                      // WeChat\n              ], [[NAME, 'WeChat'], VERSION], [\n\n              /(brave)\\/([\\w\\.]+)/i                                               // Brave browser\n              ], [[NAME, 'Brave'], VERSION], [\n\n              /(qqbrowserlite)\\/([\\w\\.]+)/i                                       // QQBrowserLite\n              ], [NAME, VERSION], [\n\n              /(QQ)\\/([\\d\\.]+)/i                                                  // QQ, aka ShouQ\n              ], [NAME, VERSION], [\n\n              /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i                                    // QQBrowser\n              ], [NAME, VERSION], [\n\n              /(baiduboxapp)[\\/\\s]?([\\w\\.]+)/i                                    // Baidu App\n              ], [NAME, VERSION], [\n\n              /(2345Explorer)[\\/\\s]?([\\w\\.]+)/i                                   // 2345 Browser\n              ], [NAME, VERSION], [\n\n              /(MetaSr)[\\/\\s]?([\\w\\.]+)/i                                         // SouGouBrowser\n              ], [NAME], [\n\n              /(LBBROWSER)/i                                                      // LieBao Browser\n              ], [NAME], [\n\n              /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i                                   // MIUI Browser\n              ], [VERSION, [NAME, 'MIUI Browser']], [\n\n              /;fbav\\/([\\w\\.]+);/i                                                // Facebook App for iOS & Android\n              ], [VERSION, [NAME, 'Facebook']], [\n\n              /safari\\s(line)\\/([\\w\\.]+)/i,                                       // Line App for iOS\n              /android.+(line)\\/([\\w\\.]+)\\/iab/i                                  // Line App for Android\n              ], [NAME, VERSION], [\n\n              /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i                                 // Chrome Headless\n              ], [VERSION, [NAME, 'Chrome Headless']], [\n\n              /\\swv\\).+(chrome)\\/([\\w\\.]+)/i                                      // Chrome WebView\n              ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n              /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n              ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [                // Oculus / Samsung Browser\n\n              /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i,                            // Chrome for Android/iOS\n              /android.+(chrome)\\/([\\w\\.]+)\\s+(?:mobile\\s?safari)/i\n              ], [[NAME, 'Chrome Mobile'], VERSION], [\n\n              /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i        // Android Browser\n              ], [VERSION, [NAME, 'Android Browser']], [\n\n              /(sailfishbrowser)\\/([\\w\\.]+)/i                                     // Sailfish Browser\n              ], [[NAME, 'Sailfish Browser'], VERSION], [\n\n              /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n                                                                                  // Chrome/OmniWeb/Arora/Tizen/Nokia\n              ], [NAME, VERSION], [\n\n              /(dolfin)\\/([\\w\\.]+)/i                                              // Dolphin\n              ], [[NAME, 'Dolphin'], VERSION], [\n\n              /(qihu|qhbrowser|qihoobrowser|360browser)/i                         // 360\n              ], [[NAME, '360 Browser']], [\n\n              /(coast)\\/([\\w\\.]+)/i                                               // Opera Coast\n              ], [[NAME, 'Opera Coast'], VERSION], [\n\n              /fxios\\/([\\w\\.-]+)/i                                                // Firefox for iOS\n              ], [VERSION, [NAME, 'Firefox']], [\n\n              /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i                       // Mobile Safari\n              ], [VERSION, [NAME, 'Mobile Safari']], [\n\n              /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i                    // Safari & Safari Mobile\n              ], [VERSION, NAME], [\n\n              /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i  // Google Search Appliance on iOS\n              ], [[NAME, 'GSA'], VERSION], [\n\n              /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i                     // Safari < 3.0\n              ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n              /(webkit|khtml)\\/([\\w\\.]+)/i\n              ], [NAME, VERSION], [\n\n              // Gecko based\n              /(navigator|netscape)\\/([\\w\\.-]+)/i                                 // Netscape\n              ], [[NAME, 'Netscape'], VERSION], [\n              /(swiftfox)/i,                                                      // Swiftfox\n              /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n                                                                                  // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n              /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)/i,\n\n                                                                                  // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n              /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i,                          // Mozilla\n\n              // Other\n              /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n                                                                                  // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n              /(links)\\s\\(([\\w\\.]+)/i,                                            // Links\n              /(gobrowser)\\/?([\\w\\.]*)/i,                                         // GoBrowser\n              /(ice\\s?browser)\\/v?([\\w\\._]+)/i,                                   // ICE Browser\n              /(mosaic)[\\/\\s]([\\w\\.]+)/i                                          // Mosaic\n              ], [NAME, VERSION]\n          ],\n\n          cpu : [[\n\n              /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i                     // AMD64\n              ], [[ARCHITECTURE, 'amd64']], [\n\n              /(ia32(?=;))/i                                                      // IA32 (quicktime)\n              ], [[ARCHITECTURE, util.lowerize]], [\n\n              /((?:i[346]|x)86)[;\\)]/i                                            // IA32\n              ], [[ARCHITECTURE, 'ia32']], [\n\n              // PocketPC mistakenly identified as PowerPC\n              /windows\\s(ce|mobile);\\sppc;/i\n              ], [[ARCHITECTURE, 'arm']], [\n\n              /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i                           // PowerPC\n              ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n              /(sun4\\w)[;\\)]/i                                                    // SPARC\n              ], [[ARCHITECTURE, 'sparc']], [\n\n              /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+[;l]))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n                                                                                  // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n              ], [[ARCHITECTURE, util.lowerize]]\n          ],\n\n          device : [[\n\n              /\\((ipad|playbook);[\\w\\s\\),;-]+(rim|apple)/i                        // iPad/PlayBook\n              ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n              /applecoremedia\\/[\\w\\.]+ \\((ipad)/                                  // iPad\n              ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n              /(apple\\s{0,1}tv)/i                                                 // Apple TV\n              ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [\n\n              /(archos)\\s(gamepad2?)/i,                                           // Archos\n              /(hp).+(touchpad)/i,                                                // HP TouchPad\n              /(hp).+(tablet)/i,                                                  // HP Tablet\n              /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n              /\\s(nook)[\\w\\s]+build\\/(\\w+)/i,                                     // Nook\n              /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i                                  // Dell Streak\n              ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n              /(kf[A-z]+)\\sbuild\\/.+silk\\//i                                      // Kindle Fire HD\n              ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n              /(sd|kf)[0349hijorstuw]+\\sbuild\\/.+silk\\//i                         // Fire Phone\n              ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n              /android.+aft([bms])\\sbuild/i                                       // Fire TV\n              ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n\n              /\\((ip[honed|\\s\\w*]+);.+(apple)/i                                   // iPod/iPhone\n              ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n              /\\((ip[honed|\\s\\w*]+);/i                                            // iPod/iPhone\n              ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n              /(blackberry)[\\s-]?(\\w+)/i,                                         // BlackBerry\n              /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n                                                                                  // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n              /(hp)\\s([\\w\\s]+\\w)/i,                                               // HP iPAQ\n              /(asus)-?(\\w+)/i                                                    // Asus\n              ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n              /\\(bb10;\\s(\\w+)/i                                                   // BlackBerry 10\n              ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n                                                                                  // Asus Tablets\n              /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone|p00c)/i\n              ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n              /(sony)\\s(tablet\\s[ps])\\sbuild\\//i,                                  // Sony\n              /(sony)?(?:sgp.+)\\sbuild\\//i\n              ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n              /android.+\\s([c-g]\\d{4}|so[-l]\\w+)(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n              ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n              /\\s(ouya)\\s/i,                                                      // Ouya\n              /(nintendo)\\s([wids3u]+)/i                                          // Nintendo\n              ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n              /android.+;\\s(shield)\\sbuild/i                                      // Nvidia\n              ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n              /(playstation\\s[34portablevi]+)/i                                   // Playstation\n              ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n              /(sprint\\s(\\w+))/i                                                  // Sprint Phones\n              ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n              /(htc)[;_\\s-]+([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i,                        // HTC\n              /(zte)-(\\w*)/i,                                                     // ZTE\n              /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i\n                                                                                  // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n              ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n              /(nexus\\s9)/i                                                       // HTC Nexus 9\n              ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n              /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n              /(nexus\\s6p|vog-l29|ane-lx1|eml-l29)/i                              // Huawei\n              ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n              /android.+(bah2?-a?[lw]\\d{2})/i                                     // Huawei MediaPad\n              ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n\n              /(microsoft);\\s(lumia[\\s\\w]+)/i                                     // Microsoft Lumia\n              ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n              /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i                                   // Microsoft Xbox\n              ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n              /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n              ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n                                                                                  // Motorola\n              /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)[\\w\\s]+build\\//i,\n              /mot[\\s-]?(\\w*)/i,\n              /(XT\\d{3,4}) build\\//i,\n              /(nexus\\s6)/i\n              ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n              /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n              ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n              /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i            // HbbTV devices\n              ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n              /hbbtv.+maple;(\\d+)/i\n              ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n              /\\(dtv[\\);].+(aquos)/i                                              // Sharp\n              ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n              /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n              /((SM-T\\w+))/i\n              ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [                  // Samsung\n              /smart-tv.+(samsung)/i\n              ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n              /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n              /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)/i,\n              /sec-((sgh\\w+))/i\n              ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n              /sie-(\\w*)/i                                                        // Siemens\n              ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n              /(maemo|nokia).*(n900|lumia\\s\\d+)/i,                                // Nokia\n              /(nokia)[\\s_-]?([\\w-]*)/i\n              ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n              /android[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i                   // Acer\n              ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n              /android.+([vl]k\\-?\\d{3})\\s+build/i                                 // LG Tablet\n              ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n              /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i                     // LG Tablet\n              ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n              /(lg) netcast\\.tv/i                                                 // LG SmartTV\n              ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n              /(nexus\\s[45])/i,                                                   // LG\n              /lg[e;\\s\\/-]+(\\w*)/i,\n              /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n              ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n              /(lenovo)\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+))/i             // Lenovo tablets\n              ], [VENDOR, MODEL, [TYPE, TABLET]], [\n              /android.+(ideatab[a-z0-9\\-\\s]+)/i                                  // Lenovo\n              ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n              /(lenovo)[_\\s-]?([\\w-]+)/i\n              ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n              /linux;.+((jolla));/i                                               // Jolla\n              ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n              /((pebble))app\\/[\\d\\.]+\\s/i                                         // Pebble\n              ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n              /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i                            // OPPO\n              ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n              /crkey/i                                                            // Google Chromecast\n              ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n\n              /android.+;\\s(glass)\\s\\d/i                                          // Google Glass\n              ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n              /android.+;\\s(pixel c)[\\s)]/i                                       // Google Pixel C\n              ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n              /android.+;\\s(pixel( [23])?( xl)?)[\\s)]/i                              // Google Pixel\n              ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n              /android.+;\\s(\\w+)\\s+build\\/hm\\1/i,                                 // Xiaomi Hongmi 'numeric' models\n              /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i,               // Xiaomi Hongmi\n              /android.+(mi[\\s\\-_]*(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d?\\w?)[\\s_]*(?:plus)?)\\s+build/i,    \n                                                                                  // Xiaomi Mi\n              /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+))\\s+build/i       // Redmi Phones\n              ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n              /android.+(mi[\\s\\-_]*(?:pad)(?:[\\s_]*[\\w\\s]+))\\s+build/i            // Mi Pad tablets\n              ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n              /android.+;\\s(m[1-5]\\snote)\\sbuild/i                                // Meizu\n              ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n              /(mz)-([\\w-]{2,})/i\n              ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [\n\n              /android.+a000(1)\\s+build/i,                                        // OnePlus\n              /android.+oneplus\\s(a\\d{4})[\\s)]/i\n              ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n              /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i                            // RCA Tablets\n              ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n              /android.+[;\\/\\s]+(Venue[\\d\\s]{2,7})\\s+build/i                      // Dell Venue Tablets\n              ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i                         // Verizon Tablet\n              ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i     // Barnes & Noble Tablet\n              ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i                           // Barnes & Noble Tablet\n              ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n              /android.+;\\s(k88)\\sbuild/i                                         // ZTE K Series Tablet\n              ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i                         // Swiss GEN Mobile\n              ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n              /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i                              // Swiss ZUR Tablet\n              ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i                         // Zeki Tablets\n              ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n              /(android).+[;\\/]\\s+([YR]\\d{2})\\s+build/i,\n              /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(\\w{5})\\sbuild/i        // Dragon Touch Tablet\n              ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(NS-?\\w{0,9})\\sbuild/i                            // Insignia Tablets\n              ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*((NX|Next)-?\\w{0,9})\\s+build/i                    // NextBook Tablets\n              ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(Xtreme\\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n              ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [                    // Voice Xtreme Phones\n\n              /android.+[;\\/]\\s*(LVTEL\\-)?(V1[12])\\s+build/i                     // LvTel Phones\n              ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n              /android.+;\\s(PH-1)\\s/i\n              ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [                // Essential PH-1\n\n              /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i          // Envizen Tablets\n              ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(\\w{1,9})\\s+build/i          // Le Pan Tablets\n              ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i                         // MachSpeed Tablets\n              ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i                // Trinity Tablets\n              ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n              /android.+[;\\/]\\s*TU_(1491)\\s+build/i                               // Rotor Tablets\n              ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n              /android.+(KS(.+))\\s+build/i                                        // Amazon Kindle Tablets\n              ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n              /android.+(Gigaset)[\\s\\-]+(Q\\w{1,9})\\s+build/i                      // Gigaset Tablets\n              ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n              /\\s(tablet|tab)[;\\/]/i,                                             // Unidentifiable Tablet\n              /\\s(mobile)(?:[;\\/]|\\ssafari)/i                                     // Unidentifiable Mobile\n              ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n              /[\\s\\/\\(](smart-?tv)[;\\)]/i                                         // SmartTV\n              ], [[TYPE, SMARTTV]], [\n\n              /(android[\\w\\.\\s\\-]{0,9});.+build/i                                 // Generic Android Device\n              ], [MODEL, [VENDOR, 'Generic']]\n          ],\n\n          engine : [[\n\n              /windows.+\\sedge\\/([\\w\\.]+)/i                                       // EdgeHTML\n              ], [VERSION, [NAME, 'EdgeHTML']], [\n\n              /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n              ], [VERSION, [NAME, 'Blink']], [\n\n              /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n              /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i,     \n                                                                                  // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n              /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i,                          // KHTML/Tasman/Links\n              /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i                                      // iCab\n              ], [NAME, VERSION], [\n\n              /rv\\:([\\w\\.]{1,9}).+(gecko)/i                                       // Gecko\n              ], [VERSION, NAME]\n          ],\n\n          os : [[\n\n              // Windows based\n              /microsoft\\s(windows)\\s(vista|xp)/i                                 // Windows (iTunes)\n              ], [NAME, VERSION], [\n              /(windows)\\snt\\s6\\.2;\\s(arm)/i,                                     // Windows RT\n              /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i,                   // Windows Phone\n              /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n              ], [[NAME, mapper.str, maps.os.windows.name], [VERSION, mapper.str, maps.os.windows.version]], [\n              /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n              ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n              // Mobile/Embedded OS\n              /\\((bb)(10);/i                                                      // BlackBerry 10\n              ], [[NAME, 'BlackBerry'], VERSION], [\n              /(blackberry)\\w*\\/?([\\w\\.]*)/i,                                     // Blackberry\n              /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i,                                    // Tizen/KaiOS\n              /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i\n                                                                                  // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n              ], [NAME, VERSION], [\n              /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]*)/i                  // Symbian\n              ], [[NAME, 'Symbian'], VERSION], [\n              /\\((series40);/i                                                    // Series 40\n              ], [NAME], [\n              /mozilla.+\\(mobile;.+gecko.+firefox/i                               // Firefox OS\n              ], [[NAME, 'Firefox OS'], VERSION], [\n\n              // Console\n              /(nintendo|playstation)\\s([wids34portablevu]+)/i,                   // Nintendo/Playstation\n\n              // GNU/Linux based\n              /(mint)[\\/\\s\\(]?(\\w*)/i,                                            // Mint\n              /(mageia|vectorlinux)[;\\s]/i,                                       // Mageia/VectorLinux\n              /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]*)/i,\n                                                                                  // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n                                                                                  // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n              /(hurd|linux)\\s?([\\w\\.]*)/i,                                        // Hurd/Linux\n              /(gnu)\\s?([\\w\\.]*)/i                                                // GNU\n              ], [[NAME, 'Linux'], VERSION], [\n\n              /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i                                       // Chromium OS\n              ], [[NAME, 'Chromium OS'], VERSION],[\n\n              // Solaris\n              /(sunos)\\s?([\\w\\.\\d]*)/i                                            // Solaris\n              ], [[NAME, 'Solaris'], VERSION], [\n\n              // BSD based\n              /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]*)/i                    // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n              ], [[NAME, 'Linux'], VERSION],[\n\n              /(iphone)(?:.*os\\s*([\\w]*)\\slike\\smac|;\\sopera)/i                  // iOS\n              ], [[NAME, 'iPhone'], [VERSION, /_/g, '.']], [\n\n              /(ipad)(?:.*os\\s*([\\w]*)\\slike\\smac|;\\sopera)/i                    // iOS\n              ], [[NAME, 'iPad'], [VERSION, /_/g, '.']], [\n\n              /(haiku)\\s(\\w+)/i                                                   // Haiku\n              ], [NAME, VERSION],[\n\n              /cfnetwork\\/.+darwin/i,\n              /ip[honead]{2,4}(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i             // iOS\n              ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n              /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n              /(macintosh|mac(?=_powerpc)\\s)/i                                    // Mac OS\n              ], [[NAME, 'Mac'], [VERSION, /_/g, '.']], [\n\n              // Other\n              /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i,                             // Solaris\n              /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i,                                // AIX\n              /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i,\n                                                                                  // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n              /(unix)\\s?([\\w\\.]*)/i                                               // UNIX\n              ], [NAME, VERSION]\n          ]\n      };\n\n\n      /////////////////\n      // Constructor\n      ////////////////\n      var UAParser = function (uastring, extensions) {\n\n          if (typeof uastring === 'object') {\n              extensions = uastring;\n              uastring = undefined$1;\n          }\n\n          if (!(this instanceof UAParser)) {\n              return new UAParser(uastring, extensions).getResult();\n          }\n\n          var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n          var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n          this.getBrowser = function () {\n              var browser = { name: undefined$1, version: undefined$1 };\n              mapper.rgx.call(browser, ua, rgxmap.browser);\n              browser.major = util.major(browser.version); // deprecated\n              return browser;\n          };\n          this.getCPU = function () {\n              var cpu = { architecture: undefined$1 };\n              mapper.rgx.call(cpu, ua, rgxmap.cpu);\n              return cpu;\n          };\n          this.getDevice = function () {\n              var device = { vendor: undefined$1, model: undefined$1, type: undefined$1 };\n              mapper.rgx.call(device, ua, rgxmap.device);\n              return device;\n          };\n          this.getEngine = function () {\n              var engine = { name: undefined$1, version: undefined$1 };\n              mapper.rgx.call(engine, ua, rgxmap.engine);\n              return engine;\n          };\n          this.getOS = function () {\n              var os = { name: undefined$1, version: undefined$1 };\n              mapper.rgx.call(os, ua, rgxmap.os);\n              return os;\n          };\n          this.getResult = function () {\n              return {\n                  ua      : this.getUA(),\n                  browser : this.getBrowser(),\n                  engine  : this.getEngine(),\n                  os      : this.getOS(),\n                  device  : this.getDevice(),\n                  cpu     : this.getCPU()\n              };\n          };\n          this.getUA = function () {\n              return ua;\n          };\n          this.setUA = function (uastring) {\n              ua = uastring;\n              return this;\n          };\n          return this;\n      };\n\n      UAParser.VERSION = LIBVERSION;\n      UAParser.BROWSER = {\n          NAME    : NAME,\n          MAJOR   : MAJOR, // deprecated\n          VERSION : VERSION\n      };\n      UAParser.CPU = {\n          ARCHITECTURE : ARCHITECTURE\n      };\n      UAParser.DEVICE = {\n          MODEL   : MODEL,\n          VENDOR  : VENDOR,\n          TYPE    : TYPE,\n          CONSOLE : CONSOLE,\n          MOBILE  : MOBILE,\n          SMARTTV : SMARTTV,\n          TABLET  : TABLET,\n          WEARABLE: WEARABLE,\n          EMBEDDED: EMBEDDED\n      };\n      UAParser.ENGINE = {\n          NAME    : NAME,\n          VERSION : VERSION\n      };\n      UAParser.OS = {\n          NAME    : NAME,\n          VERSION : VERSION\n      };\n\n      ///////////\n      // Export\n      //////////\n\n\n      // check js environment\n      {\n          // nodejs env\n          if (module.exports) {\n              exports = module.exports = UAParser;\n          }\n          exports.UAParser = UAParser;\n      }\n\n      // jQuery/Zepto specific (optional)\n      // Note:\n      //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n      //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n      //   and we should catch that.\n      var $ = window && (window.jQuery || window.Zepto);\n      if ($ && !$.ua) {\n          var parser = new UAParser();\n          $.ua = parser.getResult();\n          $.ua.get = function () {\n              return parser.getUA();\n          };\n          $.ua.set = function (uastring) {\n              parser.setUA(uastring);\n              var result = parser.getResult();\n              for (var prop in result) {\n                  $.ua[prop] = result[prop];\n              }\n          };\n      }\n\n  })(typeof window === 'object' ? window : commonjsGlobal);\n  });\n  var uaParser_1 = uaParser.UAParser;\n\n  /**\n   * Source: [jed's gist]{@link https://gist.github.com/982883}.\n   * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n   * where each x is replaced with a random hexadecimal digit from 0 to f, and\n   * y is replaced with a random hexadecimal digit from 8 to b.\n   * Used to generate UUIDs for deviceIds.\n   * @private\n   */\n  var uuid = function uuid(a) {\n    return a // if the placeholder was passed, return\n    ? // a random number from 0 to 15\n    (a ^ // unless b is 8,\n    Math.random() * // in which case\n    16 >> // a random number from\n    a / 4). // 8 to 11\n    toString(16) // in hexadecimal\n    : // or otherwise a concatenated string:\n    ([1e7] + // 10000000 +\n    -1e3 + // -1000 +\n    -4e3 + // -4000 +\n    -8e3 + // -80000000 +\n    -1e11). // -100000000000,\n    replace( // replacing\n    /[018]/g, // zeroes, ones, and eights with\n    uuid // random hex digits\n    );\n  };\n\n  var version = \"8.2.1\";\n\n  var getLanguage = function getLanguage() {\n    return navigator && (navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage) || '';\n  };\n\n  var language = {\n    getLanguage: getLanguage\n  };\n\n  /**\n   * Options used when initializing Amplitude\n   * @typedef {Object} Options\n   * @property {string} [apiEndpoint=`api.amplitude.com`] - Endpoint to send amplitude event requests to.\n   * @property {boolean} [batchEvents=`false`] -  If `true`, then events are batched together and uploaded only when the number of unsent events is greater than or equal to eventUploadThreshold or after eventUploadPeriodMillis milliseconds have passed since the first unsent event was logged.\n   * @property {number} [cookieExpiration=`365`] - The number of days after which the Amplitude cookie will expire. 12 months is for GDPR compliance.\n   * @property {string} [cookieName=`amplitude_id`] - *DEPRECATED*\n   * @property {string} [sameSiteCookie='None'] -  Sets the SameSite flag on the amplitude cookie. Decides cookie privacy policy.\n   * @property {boolean} [cookieForceUpgrade=`false`] - Forces pre-v6.0.0 instances to adopt post-v6.0.0 compat cookie formats.\n   * @property {boolean} [deferInitialization=`null`] -  If `true`, disables the core functionality of the sdk, including saving a cookie and all logging, until explicitly enabled. To enable tracking, please call `amplitude.getInstance().enableTracking()` *Note: This will not affect users who already have an amplitude cookie. The decision to track events is determined by whether or not a user has an amplitude analytics cookie. If the `cookieExpiration</code> is manually defined to be a short lifespan, you may need to run `amplitude.getInstance().enableTracking()` upon the cookie expiring or upon logging in.*\n   * @property {boolean} [disableCookies=`false`] -  Disable Ampllitude cookies altogether.\n   * @property {string} [deviceId=A randomly generated UUID.] -  The custom Device ID to set. *Note: This is not recommended unless you know what you are doing (e.g. you have your own system for tracking user devices).*\n   * @property {boolean} [deviceIdFromUrlParam=`false`] -  If `true`, then the SDK will parse Device ID values from the URL parameter amp_device_id if available. Device IDs defined in the configuration options during init will take priority over Device IDs from URL parameters.\n   * @property {string} [domain=The top domain of the current page's URL. ('https://amplitude.com')] -  Set a custom domain for the Amplitude cookie. To include subdomains, add a preceding period, eg: `.amplitude.com`.\n   * @property {number} [eventUploadPeriodMillis=`30000` (30 sec)] -  Amount of time in milliseconds that the SDK waits before uploading events if batchEvents is true.\n   * @property {number} [eventUploadThreshold=`30`] -  Minimum number of events to batch together per request if batchEvents is true.\n   * @property {boolean} [forceHttps=`true`] -  If `true`, the events will always be uploaded to HTTPS endpoint. Otherwise, it will use the embedding site's protocol.\n   * @property {boolean} [includeFbclid=`false`] -  If `true`, captures the fbclid URL parameter as well as the user's initial_fbclid via a setOnce operation.\n   * @property {boolean} [includeGclid=`false`] -  If `true`, captures the gclid URL parameter as well as the user's initial_gclid via a setOnce operation.\n   * @property {boolean} [includeReferrer=`false`] -  If `true`, captures the referrer and referring_domain for each session, as well as the user's initial_referrer and initial_referring_domain via a setOnce operation.\n   * @property {boolean} [includeUtm=`false`] -  If `true`, finds UTM parameters in the query string or the _utmz cookie, parses, and includes them as user properties on all events uploaded. This also captures initial UTM parameters for each session via a setOnce operation.\n   * @property {string} [language=The language determined by the browser] -  Custom language to set.\n   * @property {string} [logLevel=`WARN`] -  Level of logs to be printed in the developer console. Valid values are 'DISABLE', 'ERROR', 'WARN', 'INFO'. To learn more about the different options, see below.\n   * @property {boolean} [logAttributionCapturedEvent=`false`] - If `true`, the SDK will log an Amplitude event anytime new attribution values are captured from the user. **Note: These events count towards your event volume.** Event name being logged: [Amplitude] Attribution Captured. Event Properties that can be logged: `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`, `referrer`, `referring_domain`, `gclid`, `fbclid`. For UTM properties to be logged, `includeUtm` must be set to `true`. For the `referrer` and `referring_domain` properties to be logged, `includeReferrer` must be set to `true`. For the `gclid` property to be logged, `includeGclid` must be set to `true`. For the `fbclid` property to be logged, `includeFbclid` must be set to `true`.\n   * @property {boolean} [optOut=`false`] -  Whether or not to disable tracking for the current user.\n   * @property {function} [onError=`() => {}`] - Function to call on error.\n   * @property {string} [platform=`Web`] -  Platform device is running on. Defaults to `Web` (browser, including mobile browsers).\n   * @property {number} [savedMaxCount=`1000`] -  Maximum number of events to save in localStorage. If more events are logged while offline, then old events are removed.\n   * @property {boolean} [saveEvents=`true`] -  If `true`, saves events to localStorage and removes them upon successful upload. *Note: Without saving events, events may be lost if the user navigates to another page before the events are uploaded.*\n   * @property {boolean} [saveParamsReferrerOncePerSession=`true`] -  If `true`, then includeGclid, includeFbclid, includeReferrer, and includeUtm will only track their respective properties once per session. New values that come in during the middle of the user's session will be ignored. Set to false to always capture new values.\n   * @property {boolean} [secureCookie=`false`] -  If `true`, the amplitude cookie will be set with the Secure flag.\n   * @property {number} [sessionTimeout=`30*60*1000` (30 min)] -  The time between logged events before a new session starts in milliseconds.\n   * @property {string[]} [storage=`''`] - Sets storage strategy.  Options are 'cookies', 'localStorage', 'sessionStorage', or `none`. Will override `disableCookies` option\n   * @property {Object} [trackingOptions=`{ city: true, country: true, carrier: true, device_manufacturer: true, device_model: true, dma: true, ip_address: true, language: true, os_name: true, os_version: true, platform: true, region: true, version_name: true}`] - Type of data associated with a user.\n   * @property {boolean} [unsetParamsReferrerOnNewSession=`false`] -  If `false`, the existing `referrer` and `utm_parameter` values will be carried through each new session. If set to `true`, the `referrer` and `utm_parameter` user properties, which include `referrer`, `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, and `utm_content`, will be set to `null` upon instantiating a new session. Note: This only works if `includeReferrer` or `includeUtm` is set to `true`.\n   * @property {string} [unsentKey=`amplitude_unsent`] - localStorage key that stores unsent events.\n   * @property {string} [unsentIdentifyKey=`amplitude_unsent_identify`] - localStorage key that stores unsent identifies.\n   * @property {number} [uploadBatchSize=`100`] -  The maximum number of events to send to the server per request.\n   * @property {Object} [headers=`{ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }`] - Headers attached to an event(s) upload network request. Custom header properties are merged with this object.\n   */\n\n  var DEFAULT_OPTIONS = {\n    apiEndpoint: 'api.amplitude.com',\n    batchEvents: false,\n    cookieExpiration: 365,\n    // 12 months is for GDPR compliance\n    cookieName: 'amplitude_id',\n    // this is a deprecated option\n    sameSiteCookie: 'Lax',\n    // cookie privacy policy\n    cookieForceUpgrade: false,\n    deferInitialization: false,\n    disableCookies: false,\n    // this is a deprecated option\n    deviceIdFromUrlParam: false,\n    domain: '',\n    eventUploadPeriodMillis: 30 * 1000,\n    // 30s\n    eventUploadThreshold: 30,\n    forceHttps: true,\n    includeFbclid: false,\n    includeGclid: false,\n    includeReferrer: false,\n    includeUtm: false,\n    language: language.getLanguage(),\n    logLevel: 'WARN',\n    logAttributionCapturedEvent: false,\n    optOut: false,\n    onError: function onError() {},\n    platform: 'Web',\n    savedMaxCount: 1000,\n    saveEvents: true,\n    saveParamsReferrerOncePerSession: true,\n    secureCookie: false,\n    sessionTimeout: 30 * 60 * 1000,\n    storage: Constants.STORAGE_DEFAULT,\n    trackingOptions: {\n      city: true,\n      country: true,\n      carrier: true,\n      device_manufacturer: true,\n      device_model: true,\n      dma: true,\n      ip_address: true,\n      language: true,\n      os_name: true,\n      os_version: true,\n      platform: true,\n      region: true,\n      version_name: true\n    },\n    unsetParamsReferrerOnNewSession: false,\n    unsentKey: 'amplitude_unsent',\n    unsentIdentifyKey: 'amplitude_unsent_identify',\n    uploadBatchSize: 100,\n    headers: {\n      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n    }\n  };\n\n  /**\n   * AmplitudeClient SDK API - instance constructor.\n   * The Amplitude class handles creation of client instances, all you need to do is call amplitude.getInstance()\n   * @constructor AmplitudeClient\n   * @public\n   * @example var amplitudeClient = new AmplitudeClient();\n   */\n\n  var AmplitudeClient = function AmplitudeClient(instanceName) {\n    if (!isBrowserEnv()) {\n      utils.log.warn('amplitude-js will not work in a non-browser environment. If you are planning to add Amplitude to a node environment, please use @amplitude/node');\n    }\n\n    this._instanceName = utils.isEmptyString(instanceName) ? Constants.DEFAULT_INSTANCE : instanceName.toLowerCase();\n    this._unsentEvents = [];\n    this._unsentIdentifys = [];\n    this._ua = new uaParser(navigator.userAgent).getResult();\n    this.options = _objectSpread({}, DEFAULT_OPTIONS, {\n      trackingOptions: _objectSpread({}, DEFAULT_OPTIONS.trackingOptions)\n    });\n    this.cookieStorage = new cookieStorage().getStorage();\n    this._q = []; // queue for proxied functions before script load\n\n    this._sending = false;\n    this._updateScheduled = false;\n    this._onInit = []; // event meta data\n\n    this._eventId = 0;\n    this._identifyId = 0;\n    this._lastEventTime = null;\n    this._newSession = false; // sequence used for by frontend for prioritizing event send retries\n\n    this._sequenceNumber = 0;\n    this._sessionId = null;\n    this._isInitialized = false;\n    this._userAgent = navigator && navigator.userAgent || null;\n  };\n\n  AmplitudeClient.prototype.Identify = Identify;\n  AmplitudeClient.prototype.Revenue = Revenue;\n  /**\n   * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n   * This is required before any other methods can be called.\n   * @public\n   * @param {string} apiKey - The API key for your app.\n   * @param {string} opt_userId - (optional) An identifier for this user.\n   * @param {object} opt_config - (optional) Configuration options.\n   * See [options.js](https://amplitude.github.io/Amplitude-JavaScript/Options) for a list of options and default values.\n   * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n   * @example amplitudeClient.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n   */\n\n  AmplitudeClient.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n    var _this = this;\n\n    if (type(apiKey) !== 'string' || utils.isEmptyString(apiKey)) {\n      utils.log.error('Invalid apiKey. Please re-initialize with a valid apiKey');\n      return;\n    }\n\n    try {\n      _parseConfig(this.options, opt_config);\n\n      if (isBrowserEnv() && window.Prototype !== undefined && Array.prototype.toJSON) {\n        prototypeJsFix();\n        utils.log.warn('Prototype.js injected Array.prototype.toJSON. Deleting Array.prototype.toJSON to prevent double-stringify');\n      }\n\n      if (this.options.cookieName !== DEFAULT_OPTIONS.cookieName) {\n        utils.log.warn('The cookieName option is deprecated. We will be ignoring it for newer cookies');\n      }\n\n      this.options.apiKey = apiKey;\n      this._storageSuffix = '_' + apiKey + (this._instanceName === Constants.DEFAULT_INSTANCE ? '' : '_' + this._instanceName);\n      this._storageSuffixV5 = apiKey.slice(0, 6);\n      this._oldCookiename = this.options.cookieName + this._storageSuffix;\n      this._unsentKey = this.options.unsentKey + this._storageSuffix;\n      this._unsentIdentifyKey = this.options.unsentIdentifyKey + this._storageSuffix;\n      this._cookieName = Constants.COOKIE_PREFIX + '_' + this._storageSuffixV5;\n      this.cookieStorage.options({\n        expirationDays: this.options.cookieExpiration,\n        domain: this.options.domain,\n        secure: this.options.secureCookie,\n        sameSite: this.options.sameSiteCookie\n      });\n      this._metadataStorage = new MetadataStorage({\n        storageKey: this._cookieName,\n        disableCookies: this.options.disableCookies,\n        expirationDays: this.options.cookieExpiration,\n        domain: this.options.domain,\n        secure: this.options.secureCookie,\n        sameSite: this.options.sameSiteCookie,\n        storage: this.options.storage\n      });\n      var hasOldCookie = !!this.cookieStorage.get(this._oldCookiename);\n      var hasNewCookie = !!this._metadataStorage.load();\n      this._useOldCookie = !hasNewCookie && hasOldCookie && !this.options.cookieForceUpgrade;\n      var hasCookie = hasNewCookie || hasOldCookie;\n      this.options.domain = this.cookieStorage.options().domain;\n\n      if (this.options.deferInitialization && !hasCookie) {\n        this._deferInitialization(apiKey, opt_userId, opt_config, opt_callback);\n\n        return;\n      }\n\n      if (type(this.options.logLevel) === 'string') {\n        utils.setLogLevel(this.options.logLevel);\n      }\n\n      var trackingOptions = _generateApiPropertiesTrackingConfig(this);\n\n      this._apiPropertiesTrackingOptions = Object.keys(trackingOptions).length > 0 ? {\n        tracking_options: trackingOptions\n      } : {};\n\n      if (this.options.cookieForceUpgrade && hasOldCookie) {\n        if (!hasNewCookie) {\n          _upgradeCookieData(this);\n        }\n\n        this.cookieStorage.remove(this._oldCookiename);\n      }\n\n      _loadCookieData(this);\n\n      this._pendingReadStorage = true;\n\n      var initFromStorage = function initFromStorage(storedDeviceId) {\n        _this.options.deviceId = _this._getInitialDeviceId(opt_config && opt_config.deviceId, storedDeviceId);\n        _this.options.userId = type(opt_userId) === 'string' && !utils.isEmptyString(opt_userId) && opt_userId || type(opt_userId) === 'number' && opt_userId.toString() || _this.options.userId || null;\n        var now = new Date().getTime();\n\n        if (!_this._sessionId || !_this._lastEventTime || now - _this._lastEventTime > _this.options.sessionTimeout) {\n          if (_this.options.unsetParamsReferrerOnNewSession) {\n            _this._unsetUTMParams();\n          }\n\n          _this._newSession = true;\n          _this._sessionId = now; // only capture UTM params and referrer if new session\n\n          if (_this.options.saveParamsReferrerOncePerSession) {\n            _this._trackParamsAndReferrer();\n          }\n        }\n\n        if (!_this.options.saveParamsReferrerOncePerSession) {\n          _this._trackParamsAndReferrer();\n        } // load unsent events and identifies before any attempt to log new ones\n\n\n        if (_this.options.saveEvents) {\n          _validateUnsentEventQueue(_this._unsentEvents);\n\n          _validateUnsentEventQueue(_this._unsentIdentifys);\n        }\n\n        _this._lastEventTime = now;\n\n        _saveCookieData(_this);\n\n        _this._pendingReadStorage = false;\n\n        _this._sendEventsIfReady(); // try sending unsent events\n\n\n        for (var i = 0; i < _this._onInit.length; i++) {\n          _this._onInit[i](_this);\n        }\n\n        _this._onInit = [];\n        _this._isInitialized = true;\n      };\n\n      if (this.options.saveEvents) {\n        this._unsentEvents = this._loadSavedUnsentEvents(this.options.unsentKey).map(function (event) {\n          return {\n            event: event\n          };\n        }).concat(this._unsentEvents);\n        this._unsentIdentifys = this._loadSavedUnsentEvents(this.options.unsentIdentifyKey).map(function (event) {\n          return {\n            event: event\n          };\n        }).concat(this._unsentIdentifys);\n      }\n\n      initFromStorage();\n      this.runQueuedFunctions();\n\n      if (type(opt_callback) === 'function') {\n        opt_callback(this);\n      }\n    } catch (err) {\n      utils.log.error(err);\n\n      if (type(opt_config.onError) === 'function') {\n        opt_config.onError(err);\n      }\n    }\n  };\n\n  AmplitudeClient.prototype.deleteLowerLevelDomainCookies = function () {\n    var host = getHost();\n    var cookieHost = this.options.domain && this.options.domain[0] === '.' ? this.options.domain.slice(1) : this.options.domain;\n\n    if (!cookieHost) {\n      return;\n    }\n\n    if (host !== cookieHost) {\n      if (new RegExp(cookieHost + '$').test(host)) {\n        var hostParts = host.split('.');\n        var cookieHostParts = cookieHost.split('.');\n\n        for (var i = hostParts.length; i > cookieHostParts.length; --i) {\n          var deleteDomain = hostParts.slice(hostParts.length - i).join('.');\n          baseCookie.set(this._cookieName, null, {\n            domain: '.' + deleteDomain\n          });\n        }\n\n        baseCookie.set(this._cookieName, null, {});\n      }\n    }\n  };\n\n  AmplitudeClient.prototype._getInitialDeviceId = function (configDeviceId, storedDeviceId) {\n    if (configDeviceId) {\n      return configDeviceId;\n    }\n\n    if (this.options.deviceIdFromUrlParam) {\n      var deviceIdFromUrlParam = this._getDeviceIdFromUrlParam(this._getUrlParams());\n\n      if (deviceIdFromUrlParam) {\n        return deviceIdFromUrlParam;\n      }\n    }\n\n    if (this.options.deviceId) {\n      return this.options.deviceId;\n    }\n\n    if (storedDeviceId) {\n      return storedDeviceId;\n    }\n\n    return base64Id();\n  }; // validate properties for unsent events\n\n\n  var _validateUnsentEventQueue = function _validateUnsentEventQueue(queue) {\n    for (var i = 0; i < queue.length; i++) {\n      var userProperties = queue[i].event.user_properties;\n      var eventProperties = queue[i].event.event_properties;\n      var groups = queue[i].event.groups;\n      queue[i].event.user_properties = utils.validateProperties(userProperties);\n      queue[i].event.event_properties = utils.validateProperties(eventProperties);\n      queue[i].event.groups = utils.validateGroups(groups);\n    }\n  };\n  /**\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._trackParamsAndReferrer = function _trackParamsAndReferrer() {\n    var utmProperties;\n    var referrerProperties;\n    var gclidProperties;\n    var fbclidProperties;\n\n    if (this.options.includeUtm) {\n      utmProperties = this._initUtmData();\n    }\n\n    if (this.options.includeReferrer) {\n      referrerProperties = this._saveReferrer(this._getReferrer());\n    }\n\n    if (this.options.includeGclid) {\n      gclidProperties = this._saveGclid(this._getUrlParams());\n    }\n\n    if (this.options.includeFbclid) {\n      fbclidProperties = this._saveFbclid(this._getUrlParams());\n    }\n\n    if (this.options.logAttributionCapturedEvent) {\n      var attributionProperties = _objectSpread({}, utmProperties, referrerProperties, gclidProperties, fbclidProperties);\n\n      if (Object.keys(attributionProperties).length > 0) {\n        this.logEvent(Constants.ATTRIBUTION_EVENT, attributionProperties);\n      }\n    }\n  };\n  /**\n   * Parse and validate user specified config values and overwrite existing option value\n   * DEFAULT_OPTIONS provides list of all config keys that are modifiable, as well as expected types for values\n   * @private\n   */\n\n\n  var _parseConfig = function _parseConfig(options, config) {\n    if (type(config) !== 'object') {\n      return;\n    } // Add exception in headers\n\n\n    var freeFormObjectKeys = new Set(['headers']); // validates config value is defined, is the correct type, and some additional value sanity checks\n\n    var parseValidateAndLoad = function parseValidateAndLoad(key) {\n      if (!Object.prototype.hasOwnProperty.call(options, key)) {\n        return; // skip bogus config values\n      }\n\n      var inputValue = config[key];\n      var expectedType = type(options[key]);\n\n      if (!utils.validateInput(inputValue, key + ' option', expectedType)) {\n        return;\n      }\n\n      if (expectedType === 'boolean') {\n        options[key] = !!inputValue;\n      } else if (expectedType === 'string' && !utils.isEmptyString(inputValue) || expectedType === 'number' && inputValue > 0 || expectedType === 'function') {\n        options[key] = inputValue;\n      } else if (expectedType === 'object') {\n        _parseConfig(options[key], inputValue);\n      }\n    };\n\n    for (var key in config) {\n      if (freeFormObjectKeys.has(key)) {\n        options[key] = _objectSpread({}, options[key], config[key]);\n      } else if (Object.prototype.hasOwnProperty.call(config, key)) {\n        parseValidateAndLoad(key);\n      }\n    }\n  };\n  /**\n   * Run functions queued up by proxy loading snippet\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.runQueuedFunctions = function () {\n    var queue = this._q;\n    this._q = [];\n\n    for (var i = 0; i < queue.length; i++) {\n      var fn = this[queue[i][0]];\n\n      if (type(fn) === 'function') {\n        fn.apply(this, queue[i].slice(1));\n      }\n    }\n  };\n  /**\n   * Check that the apiKey is set before calling a function. Logs a warning message if not set.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._apiKeySet = function _apiKeySet(methodName) {\n    if (utils.isEmptyString(this.options.apiKey)) {\n      utils.log.error('Invalid apiKey. Please set a valid apiKey with init() before calling ' + methodName);\n      return false;\n    }\n\n    return true;\n  };\n  /**\n   * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._loadSavedUnsentEvents = function _loadSavedUnsentEvents(unsentKey) {\n    var savedUnsentEventsString = this._getFromStorage(ampLocalStorage, unsentKey);\n\n    var unsentEvents = this._parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey);\n\n    this._setInStorage(ampLocalStorage, unsentKey, JSON.stringify(unsentEvents));\n\n    return unsentEvents;\n  };\n  /**\n   * Load saved events from localStorage. JSON deserializes event array. Handles case where string is corrupted.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._parseSavedUnsentEventsString = function _parseSavedUnsentEventsString(savedUnsentEventsString, unsentKey) {\n    if (utils.isEmptyString(savedUnsentEventsString)) {\n      return []; // new app, does not have any saved events\n    }\n\n    if (type(savedUnsentEventsString) === 'string') {\n      try {\n        var events = JSON.parse(savedUnsentEventsString);\n\n        if (type(events) === 'array') {\n          // handle case where JSON dumping of unsent events is corrupted\n          return events;\n        }\n      } catch (e) {}\n      /* eslint-disable-line no-empty */\n\n    }\n\n    utils.log.error('Unable to load ' + unsentKey + ' events. Restart with a new empty queue.');\n    return [];\n  };\n  /**\n   * Returns true if a new session was created during initialization, otherwise false.\n   * @public\n   * @return {boolean} Whether a new session was created during initialization.\n   */\n\n\n  AmplitudeClient.prototype.isNewSession = function isNewSession() {\n    return this._newSession;\n  };\n  /**\n   * Add callbacks to call after init. Useful for users who load Amplitude through a snippet.\n   * @public\n   */\n\n\n  AmplitudeClient.prototype.onInit = function (callback) {\n    if (this._isInitialized) {\n      callback(this);\n    } else {\n      this._onInit.push(callback);\n    }\n  };\n  /**\n   * Returns the id of the current session.\n   * @public\n   * @return {number} Id of the current session.\n   */\n\n\n  AmplitudeClient.prototype.getSessionId = function getSessionId() {\n    return this._sessionId;\n  };\n  /**\n   * Increments the eventId and returns it.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.nextEventId = function nextEventId() {\n    this._eventId++;\n    return this._eventId;\n  };\n  /**\n   * Increments the identifyId and returns it.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.nextIdentifyId = function nextIdentifyId() {\n    this._identifyId++;\n    return this._identifyId;\n  };\n  /**\n   * Increments the sequenceNumber and returns it.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.nextSequenceNumber = function nextSequenceNumber() {\n    this._sequenceNumber++;\n    return this._sequenceNumber;\n  };\n  /**\n   * Returns the total count of unsent events and identifys\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._unsentCount = function _unsentCount() {\n    return this._unsentEvents.length + this._unsentIdentifys.length;\n  };\n  /**\n   * Send events if ready. Returns true if events are sent.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._sendEventsIfReady = function _sendEventsIfReady() {\n    if (this._unsentCount() === 0) {\n      return false;\n    } // if batching disabled, send any unsent events immediately\n\n\n    if (!this.options.batchEvents) {\n      this.sendEvents();\n      return true;\n    } // if batching enabled, check if min threshold met for batch size\n\n\n    if (this._unsentCount() >= this.options.eventUploadThreshold) {\n      this.sendEvents();\n      return true;\n    } // otherwise schedule an upload after 30s\n\n\n    if (!this._updateScheduled) {\n      // make sure we only schedule 1 upload\n      this._updateScheduled = true;\n      setTimeout(function () {\n        this._updateScheduled = false;\n        this.sendEvents();\n      }.bind(this), this.options.eventUploadPeriodMillis);\n    }\n\n    return false; // an upload was scheduled, no events were uploaded\n  };\n  /**\n   * Helper function to fetch values from storage\n   * Storage argument allows for localStoraoge and sessionStoraoge\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._getFromStorage = function _getFromStorage(storage, key) {\n    return storage.getItem(key + this._storageSuffix);\n  };\n  /**\n   * Helper function to set values in storage\n   * Storage argument allows for localStoraoge and sessionStoraoge\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._setInStorage = function _setInStorage(storage, key, value) {\n    storage.setItem(key + this._storageSuffix, value);\n  };\n  /**\n   * Fetches deviceId, userId, event meta data from amplitude cookie\n   * @private\n   */\n\n\n  var _loadCookieData = function _loadCookieData(scope) {\n    if (!scope._useOldCookie) {\n      var props = scope._metadataStorage.load();\n\n      if (type(props) === 'object') {\n        _loadCookieDataProps(scope, props);\n      }\n\n      return;\n    }\n\n    var cookieData = scope.cookieStorage.get(scope._oldCookiename);\n\n    if (type(cookieData) === 'object') {\n      _loadCookieDataProps(scope, cookieData);\n\n      return;\n    }\n  };\n\n  var _upgradeCookieData = function _upgradeCookieData(scope) {\n    var cookieData = scope.cookieStorage.get(scope._oldCookiename);\n\n    if (type(cookieData) === 'object') {\n      _loadCookieDataProps(scope, cookieData);\n\n      _saveCookieData(scope);\n    }\n  };\n\n  var _loadCookieDataProps = function _loadCookieDataProps(scope, cookieData) {\n    if (cookieData.deviceId) {\n      scope.options.deviceId = cookieData.deviceId;\n    }\n\n    if (cookieData.userId) {\n      scope.options.userId = cookieData.userId;\n    }\n\n    if (cookieData.optOut !== null && cookieData.optOut !== undefined) {\n      // Do not clobber config opt out value if cookieData has optOut as false\n      if (cookieData.optOut !== false) {\n        scope.options.optOut = cookieData.optOut;\n      }\n    }\n\n    if (cookieData.sessionId) {\n      scope._sessionId = parseInt(cookieData.sessionId, 10);\n    }\n\n    if (cookieData.lastEventTime) {\n      scope._lastEventTime = parseInt(cookieData.lastEventTime, 10);\n    }\n\n    if (cookieData.eventId) {\n      scope._eventId = parseInt(cookieData.eventId, 10);\n    }\n\n    if (cookieData.identifyId) {\n      scope._identifyId = parseInt(cookieData.identifyId, 10);\n    }\n\n    if (cookieData.sequenceNumber) {\n      scope._sequenceNumber = parseInt(cookieData.sequenceNumber, 10);\n    }\n  };\n  /**\n   * Saves deviceId, userId, event meta data to amplitude cookie\n   * @private\n   */\n\n\n  var _saveCookieData = function _saveCookieData(scope) {\n    var cookieData = {\n      deviceId: scope.options.deviceId,\n      userId: scope.options.userId,\n      optOut: scope.options.optOut,\n      sessionId: scope._sessionId,\n      lastEventTime: scope._lastEventTime,\n      eventId: scope._eventId,\n      identifyId: scope._identifyId,\n      sequenceNumber: scope._sequenceNumber\n    };\n\n    if (scope._useOldCookie) {\n      scope.cookieStorage.set(scope.options.cookieName + scope._storageSuffix, cookieData);\n    } else {\n      scope._metadataStorage.save(cookieData);\n    }\n  };\n  /**\n   * Parse the utm properties out of cookies and query for adding to user properties.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._initUtmData = function _initUtmData(queryParams, cookieParams) {\n    queryParams = queryParams || this._getUrlParams();\n    cookieParams = cookieParams || this.cookieStorage.get('__utmz');\n    var utmProperties = getUtmData(cookieParams, queryParams);\n\n    _sendParamsReferrerUserProperties(this, utmProperties);\n\n    return utmProperties;\n  };\n  /**\n   * Unset the utm params from the Amplitude instance and update the identify.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._unsetUTMParams = function _unsetUTMParams() {\n    var identify = new Identify();\n    identify.unset(Constants.REFERRER);\n    identify.unset(Constants.UTM_SOURCE);\n    identify.unset(Constants.UTM_MEDIUM);\n    identify.unset(Constants.UTM_CAMPAIGN);\n    identify.unset(Constants.UTM_TERM);\n    identify.unset(Constants.UTM_CONTENT);\n    this.identify(identify);\n  };\n  /**\n   * The calling function should determine when it is appropriate to send these user properties. This function\n   * will no longer contain any session storage checking logic.\n   * @private\n   */\n\n\n  var _sendParamsReferrerUserProperties = function _sendParamsReferrerUserProperties(scope, userProperties) {\n    if (type(userProperties) !== 'object' || Object.keys(userProperties).length === 0) {\n      return;\n    } // setOnce the initial user properties\n\n\n    var identify = new Identify();\n\n    for (var key in userProperties) {\n      if (Object.prototype.hasOwnProperty.call(userProperties, key)) {\n        identify.setOnce('initial_' + key, userProperties[key]);\n        identify.set(key, userProperties[key]);\n      }\n    }\n\n    scope.identify(identify);\n  };\n  /**\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._getReferrer = function _getReferrer() {\n    return document.referrer;\n  };\n  /**\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._getUrlParams = function _getUrlParams() {\n    return location.search;\n  };\n  /**\n   * Try to fetch Google Gclid from url params.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._saveGclid = function _saveGclid(urlParams) {\n    var gclid = utils.getQueryParam('gclid', urlParams);\n\n    if (utils.isEmptyString(gclid)) {\n      return;\n    }\n\n    var gclidProperties = {\n      gclid: gclid\n    };\n\n    _sendParamsReferrerUserProperties(this, gclidProperties);\n\n    return gclidProperties;\n  };\n  /**\n   * Try to fetch Facebook Fbclid from url params.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._saveFbclid = function _saveFbclid(urlParams) {\n    var fbclid = utils.getQueryParam('fbclid', urlParams);\n\n    if (utils.isEmptyString(fbclid)) {\n      return;\n    }\n\n    var fbclidProperties = {\n      fbclid: fbclid\n    };\n\n    _sendParamsReferrerUserProperties(this, fbclidProperties);\n\n    return fbclidProperties;\n  };\n  /**\n   * Try to fetch Amplitude device id from url params.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._getDeviceIdFromUrlParam = function _getDeviceIdFromUrlParam(urlParams) {\n    return utils.getQueryParam(Constants.AMP_DEVICE_ID_PARAM, urlParams);\n  };\n  /**\n   * Parse the domain from referrer info\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._getReferringDomain = function _getReferringDomain(referrer) {\n    if (utils.isEmptyString(referrer)) {\n      return null;\n    }\n\n    var parts = referrer.split('/');\n\n    if (parts.length >= 3) {\n      return parts[2];\n    }\n\n    return null;\n  };\n  /**\n   * Fetch the referrer information, parse the domain and send.\n   * Since user properties are propagated on the server, only send once per session, don't need to send with every event\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._saveReferrer = function _saveReferrer(referrer) {\n    if (utils.isEmptyString(referrer)) {\n      return;\n    }\n\n    var referrerInfo = {\n      referrer: referrer,\n      referring_domain: this._getReferringDomain(referrer)\n    };\n\n    _sendParamsReferrerUserProperties(this, referrerInfo);\n\n    return referrerInfo;\n  };\n  /**\n   * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n   * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.saveEvents = function saveEvents() {\n    try {\n      var serializedUnsentEvents = JSON.stringify(this._unsentEvents.map(function (_ref) {\n        var event = _ref.event;\n        return event;\n      }));\n\n      this._setInStorage(ampLocalStorage, this.options.unsentKey, serializedUnsentEvents);\n    } catch (e) {}\n    /* eslint-disable-line no-empty */\n\n\n    try {\n      var serializedIdentifys = JSON.stringify(this._unsentIdentifys.map(function (unsentIdentify) {\n        return unsentIdentify.event;\n      }));\n\n      this._setInStorage(ampLocalStorage, this.options.unsentIdentifyKey, serializedIdentifys);\n    } catch (e) {}\n    /* eslint-disable-line no-empty */\n\n  };\n  /**\n   * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n   * @public\n   * @param {string} domain to set.\n   * @example amplitudeClient.setDomain('.amplitude.com');\n   */\n\n\n  AmplitudeClient.prototype.setDomain = function setDomain(domain) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setDomain'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!utils.validateInput(domain, 'domain', 'string')) {\n      return;\n    }\n\n    try {\n      this.cookieStorage.options({\n        expirationDays: this.options.cookieExpiration,\n        secure: this.options.secureCookie,\n        domain: domain,\n        sameSite: this.options.sameSiteCookie\n      });\n      this.options.domain = this.cookieStorage.options().domain;\n\n      _loadCookieData(this);\n\n      _saveCookieData(this);\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n  /**\n   * Sets an identifier for the current user.\n   * @public\n   * @param {string} userId - identifier to set. Can be null.\n   * @example amplitudeClient.setUserId('joe@gmail.com');\n   */\n\n\n  AmplitudeClient.prototype.setUserId = function setUserId(userId) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setUserId'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    try {\n      this.options.userId = userId !== undefined && userId !== null && '' + userId || null;\n\n      _saveCookieData(this);\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n  /**\n   * Add user to a group or groups. You need to specify a groupType and groupName(s).\n   *\n   * For example you can group people by their organization.\n   * In that case, groupType is \"orgId\" and groupName would be the actual ID(s).\n   * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n   * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n   *\n   * Note: this will also set groupType: groupName as a user property.\n   * See the [advanced topics article](https://developers.amplitude.com/docs/setting-user-groups) for more information.\n   * @public\n   * @param {string} groupType - the group type (ex: orgId)\n   * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n   * @example amplitudeClient.setGroup('orgId', 15); // this adds the current user to orgId 15.\n   */\n\n\n  AmplitudeClient.prototype.setGroup = function (groupType, groupName) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setGroup'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('setGroup()') || !utils.validateInput(groupType, 'groupType', 'string') || utils.isEmptyString(groupType)) {\n      return;\n    }\n\n    var groups = {};\n    groups[groupType] = groupName;\n    var identify = new Identify().set(groupType, groupName);\n\n    this._logEvent(Constants.IDENTIFY_EVENT, null, null, identify.userPropertiesOperations, groups, null, null, null);\n  };\n  /**\n   * Sets whether to opt current user out of tracking.\n   * @public\n   * @param {boolean} enable - if true then no events will be logged or sent.\n   * @example: amplitude.setOptOut(true);\n   */\n\n\n  AmplitudeClient.prototype.setOptOut = function setOptOut(enable) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setOptOut'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!utils.validateInput(enable, 'enable', 'boolean')) {\n      return;\n    }\n\n    try {\n      this.options.optOut = enable;\n\n      _saveCookieData(this);\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n\n  AmplitudeClient.prototype.setSessionId = function setSessionId(sessionId) {\n    if (!utils.validateInput(sessionId, 'sessionId', 'number')) {\n      return;\n    }\n\n    try {\n      this._sessionId = sessionId;\n\n      _saveCookieData(this);\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n\n  AmplitudeClient.prototype.resetSessionId = function resetSessionId() {\n    this.setSessionId(new Date().getTime());\n  };\n  /**\n   * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n   * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n   * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n   * This uses src/uuid.js to regenerate the deviceId.\n   * @public\n   */\n\n\n  AmplitudeClient.prototype.regenerateDeviceId = function regenerateDeviceId() {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['regenerateDeviceId'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    this.setDeviceId(base64Id());\n  };\n  /**\n   * Sets a custom deviceId for current user. Note: this is not recommended unless you know what you are doing\n   * (like if you have your own system for managing deviceIds). Make sure the deviceId you set is sufficiently unique\n   * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n   * @public\n   * @param {string} deviceId - custom deviceId for current user.\n   * @example amplitudeClient.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n   */\n\n\n  AmplitudeClient.prototype.setDeviceId = function setDeviceId(deviceId) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setDeviceId'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!utils.validateInput(deviceId, 'deviceId', 'string')) {\n      return;\n    }\n\n    try {\n      if (!utils.isEmptyString(deviceId)) {\n        this.options.deviceId = '' + deviceId;\n\n        _saveCookieData(this);\n      }\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n  /**\n   * Sets user properties for the current user.\n   * @public\n   * @param {object} - object with string keys and values for the user properties to set.\n   * @param {boolean} - DEPRECATED opt_replace: in earlier versions of the JS SDK the user properties object was kept in\n   * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n   * @example amplitudeClient.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n   */\n\n\n  AmplitudeClient.prototype.setUserProperties = function setUserProperties(userProperties) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setUserProperties'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('setUserProperties()') || !utils.validateInput(userProperties, 'userProperties', 'object')) {\n      return;\n    } // sanitize the userProperties dict before converting into identify\n\n\n    var sanitized = utils.truncate(utils.validateProperties(userProperties));\n\n    if (Object.keys(sanitized).length === 0) {\n      return;\n    } // convert userProperties into an identify call\n\n\n    var identify = new Identify();\n\n    for (var property in sanitized) {\n      if (Object.prototype.hasOwnProperty.call(sanitized, property)) {\n        identify.set(property, sanitized[property]);\n      }\n    }\n\n    this.identify(identify);\n  };\n  /**\n   * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n   * @public\n   * @example amplitudeClient.clearUserProperties();\n   */\n\n\n  AmplitudeClient.prototype.clearUserProperties = function clearUserProperties() {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['clearUserProperties'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('clearUserProperties()')) {\n      return;\n    }\n\n    var identify = new Identify();\n    identify.clearAll();\n    this.identify(identify);\n  };\n  /**\n   * Applies the proxied functions on the proxied object to an instance of the real object.\n   * Used to convert proxied Identify and Revenue objects.\n   * @private\n   */\n\n\n  var _convertProxyObjectToRealObject = function _convertProxyObjectToRealObject(instance, proxy) {\n    for (var i = 0; i < proxy._q.length; i++) {\n      var fn = instance[proxy._q[i][0]];\n\n      if (type(fn) === 'function') {\n        fn.apply(instance, proxy._q[i].slice(1));\n      }\n    }\n\n    return instance;\n  };\n  /**\n   * Send an identify call containing user property operations to Amplitude servers.\n   * See the [Identify](https://amplitude.github.io/Amplitude-JavaScript/Identify/)\n   * reference page for more information on the Identify API and user property operations.\n   * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n   * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n   * Note: the server response code and response body from the identify event upload are passed to the callback function.\n   * @example\n   * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n   * amplitude.identify(identify);\n   */\n\n\n  AmplitudeClient.prototype.identify = function (identify_obj, opt_callback) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['identify'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('identify()')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'API key is not set'\n        });\n      }\n\n      return;\n    } // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n\n\n    if (type(identify_obj) === 'object' && Object.prototype.hasOwnProperty.call(identify_obj, '_q')) {\n      identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n    }\n\n    if (identify_obj instanceof Identify) {\n      // only send if there are operations\n      if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n        return this._logEvent(Constants.IDENTIFY_EVENT, null, null, identify_obj.userPropertiesOperations, null, null, null, opt_callback);\n      } else {\n        if (type(opt_callback) === 'function') {\n          opt_callback(0, 'No request sent', {\n            reason: 'No user property operations'\n          });\n        }\n      }\n    } else {\n      utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid identify input type'\n        });\n      }\n    }\n  };\n\n  AmplitudeClient.prototype.groupIdentify = function (group_type, group_name, identify_obj, opt_callback) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['groupIdentify'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('groupIdentify()')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'API key is not set'\n        });\n      }\n\n      return;\n    }\n\n    if (!utils.validateInput(group_type, 'group_type', 'string') || utils.isEmptyString(group_type)) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid group type'\n        });\n      }\n\n      return;\n    }\n\n    if (group_name === null || group_name === undefined) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid group name'\n        });\n      }\n\n      return;\n    } // if identify input is a proxied object created by the async loading snippet, convert it into an identify object\n\n\n    if (type(identify_obj) === 'object' && Object.prototype.hasOwnProperty.call(identify_obj, '_q')) {\n      identify_obj = _convertProxyObjectToRealObject(new Identify(), identify_obj);\n    }\n\n    if (identify_obj instanceof Identify) {\n      // only send if there are operations\n      if (Object.keys(identify_obj.userPropertiesOperations).length > 0) {\n        return this._logEvent(Constants.GROUP_IDENTIFY_EVENT, null, null, null, _defineProperty({}, group_type, group_name), identify_obj.userPropertiesOperations, null, opt_callback);\n      } else {\n        if (type(opt_callback) === 'function') {\n          opt_callback(0, 'No request sent', {\n            reason: 'No group property operations'\n          });\n        }\n      }\n    } else {\n      utils.log.error('Invalid identify input type. Expected Identify object but saw ' + type(identify_obj));\n\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid identify input type'\n        });\n      }\n    }\n  };\n  /**\n   * Set a versionName for your application.\n   * @public\n   * @param {string} versionName - The version to set for your application.\n   * @example amplitudeClient.setVersionName('1.12.3');\n   */\n\n\n  AmplitudeClient.prototype.setVersionName = function setVersionName(versionName) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['setVersionName'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!utils.validateInput(versionName, 'versionName', 'string')) {\n      return;\n    }\n\n    this.options.versionName = versionName;\n  };\n  /**\n   * Private logEvent method. Keeps apiProperties from being publicly exposed.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._logEvent = function _logEvent(eventType, eventProperties, apiProperties, userProperties, groups, groupProperties, timestamp, callback) {\n    _loadCookieData(this); // reload cookie before each log event to sync event meta-data between windows and tabs\n\n\n    if (!eventType) {\n      if (type(callback) === 'function') {\n        callback(0, 'No request sent', {\n          reason: 'Missing eventType'\n        });\n      }\n\n      return;\n    }\n\n    if (this.options.optOut) {\n      if (type(callback) === 'function') {\n        callback(0, 'No request sent', {\n          reason: 'optOut is set to true'\n        });\n      }\n\n      return;\n    }\n\n    try {\n      var eventId;\n\n      if (eventType === Constants.IDENTIFY_EVENT || eventType === Constants.GROUP_IDENTIFY_EVENT) {\n        eventId = this.nextIdentifyId();\n      } else {\n        eventId = this.nextEventId();\n      }\n\n      var sequenceNumber = this.nextSequenceNumber();\n      var eventTime = type(timestamp) === 'number' ? timestamp : new Date().getTime();\n\n      if (!this._sessionId || !this._lastEventTime || eventTime - this._lastEventTime > this.options.sessionTimeout) {\n        this._sessionId = eventTime;\n      }\n\n      this._lastEventTime = eventTime;\n\n      _saveCookieData(this);\n\n      var osName = this._ua.browser.name;\n      var osVersion = this._ua.browser.major;\n      var deviceModel = this._ua.os.name;\n      userProperties = userProperties || {};\n\n      var trackingOptions = _objectSpread({}, this._apiPropertiesTrackingOptions);\n\n      apiProperties = _objectSpread({}, apiProperties || {}, trackingOptions);\n      eventProperties = eventProperties || {};\n      groups = groups || {};\n      groupProperties = groupProperties || {};\n      var event = {\n        device_id: this.options.deviceId,\n        user_id: this.options.userId,\n        timestamp: eventTime,\n        event_id: eventId,\n        session_id: this._sessionId || -1,\n        event_type: eventType,\n        version_name: this.options.versionName || null,\n        platform: _shouldTrackField(this, 'platform') ? this.options.platform : null,\n        os_name: _shouldTrackField(this, 'os_name') ? osName || null : null,\n        os_version: _shouldTrackField(this, 'os_version') ? osVersion || null : null,\n        device_model: _shouldTrackField(this, 'device_model') ? deviceModel || null : null,\n        language: _shouldTrackField(this, 'language') ? this.options.language : null,\n        api_properties: apiProperties,\n        event_properties: utils.truncate(utils.validateProperties(eventProperties)),\n        user_properties: utils.truncate(utils.validateProperties(userProperties)),\n        uuid: uuid(),\n        library: {\n          name: 'amplitude-js',\n          version: version\n        },\n        sequence_number: sequenceNumber,\n        // for ordering events and identifys\n        groups: utils.truncate(utils.validateGroups(groups)),\n        group_properties: utils.truncate(utils.validateProperties(groupProperties)),\n        user_agent: this._userAgent\n      };\n\n      if (eventType === Constants.IDENTIFY_EVENT || eventType === Constants.GROUP_IDENTIFY_EVENT) {\n        this._unsentIdentifys.push({\n          event: event,\n          callback: callback\n        });\n\n        this._limitEventsQueued(this._unsentIdentifys);\n      } else {\n        this._unsentEvents.push({\n          event: event,\n          callback: callback\n        });\n\n        this._limitEventsQueued(this._unsentEvents);\n      }\n\n      if (this.options.saveEvents) {\n        this.saveEvents();\n      }\n\n      this._sendEventsIfReady();\n\n      return eventId;\n    } catch (e) {\n      utils.log.error(e);\n    }\n  };\n\n  var _shouldTrackField = function _shouldTrackField(scope, field) {\n    return !!scope.options.trackingOptions[field];\n  };\n\n  var _generateApiPropertiesTrackingConfig = function _generateApiPropertiesTrackingConfig(scope) {\n    // to limit size of config payload, only send fields that have been disabled\n    var fields = ['city', 'country', 'dma', 'ip_address', 'region'];\n    var config = {};\n\n    for (var i = 0; i < fields.length; i++) {\n      var field = fields[i];\n\n      if (!_shouldTrackField(scope, field)) {\n        config[field] = false;\n      }\n    }\n\n    return config;\n  };\n  /**\n   * Remove old events from the beginning of the array if too many have accumulated. Default limit is 1000 events.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._limitEventsQueued = function _limitEventsQueued(queue) {\n    if (queue.length > this.options.savedMaxCount) {\n      var deletedEvents = queue.splice(0, queue.length - this.options.savedMaxCount);\n      deletedEvents.forEach(function (event) {\n        if (type(event.callback) === 'function') {\n          event.callback(0, 'No request sent', {\n            reason: 'Event dropped because options.savedMaxCount exceeded. User may be offline or have a content blocker'\n          });\n        }\n      });\n    }\n  };\n  /**\n   * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n   * and the server response code and response body from the upload request are passed to the callback function.\n   * @callback Amplitude~eventCallback\n   * @param {number} responseCode - Server response code for the event / identify upload request.\n   * @param {string} responseBody - Server response body for the event / identify upload request.\n   * @param {object} details - (optional) Additional information associated with sending event.\n   */\n\n  /**\n   * Log an event with eventType and eventProperties\n   * @public\n   * @param {string} eventType - name of event\n   * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n   * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n   * Note: the server response code and response body from the event upload are passed to the callback function.\n   * @example amplitudeClient.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n   */\n\n\n  AmplitudeClient.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['logEvent'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    return this.logEventWithTimestamp(eventType, eventProperties, null, opt_callback);\n  };\n  /**\n   * Log an event with eventType and eventProperties and a custom timestamp\n   * @public\n   * @param {string} eventType - name of event\n   * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n   * @param {number} timestamp - (optional) the custom timestamp as milliseconds since epoch.\n   * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n   * Note: the server response code and response body from the event upload are passed to the callback function.\n   * @example amplitudeClient.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n   */\n\n\n  AmplitudeClient.prototype.logEventWithTimestamp = function logEvent(eventType, eventProperties, timestamp, opt_callback) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['logEventWithTimestamp'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('logEvent()')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'API key not set'\n        });\n      }\n\n      return -1;\n    }\n\n    if (!utils.validateInput(eventType, 'eventType', 'string')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid type for eventType'\n        });\n      }\n\n      return -1;\n    }\n\n    if (utils.isEmptyString(eventType)) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Missing eventType'\n        });\n      }\n\n      return -1;\n    }\n\n    return this._logEvent(eventType, eventProperties, null, null, null, null, timestamp, opt_callback);\n  };\n  /**\n   * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n   * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n   * (unless you explicitly set it with setGroup).\n   *\n   * See the [advanced topics article](https://developers.amplitude.com/docs/setting-user-groups) for more information.\n   * about groups and Count by Distinct on the Amplitude platform.\n   * @public\n   * @param {string} eventType - name of event\n   * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n   * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n   * groupName can be a string or an array of strings.\n   * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n   * Note: the server response code and response body from the event upload are passed to the callback function.\n   * @example amplitudeClient.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n   */\n\n\n  AmplitudeClient.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['logEventWithGroups'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('logEventWithGroups()')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'API key not set'\n        });\n      }\n\n      return -1;\n    }\n\n    if (!utils.validateInput(eventType, 'eventType', 'string')) {\n      if (type(opt_callback) === 'function') {\n        opt_callback(0, 'No request sent', {\n          reason: 'Invalid type for eventType'\n        });\n      }\n\n      return -1;\n    }\n\n    return this._logEvent(eventType, eventProperties, null, null, groups, null, null, opt_callback);\n  };\n  /**\n   * Test that n is a number or a numeric value.\n   * @private\n   */\n\n\n  var _isNumber = function _isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n  };\n  /**\n   * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n   * revenueType and event properties.\n   *\n   * See the [Revenue](https://amplitude.github.io/Amplitude-JavaScript/Revenue/)\n   * reference page for more information on the Revenue interface and logging revenue.\n   * @public\n   * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n   * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n   * amplitude.logRevenueV2(revenue);\n   */\n\n\n  AmplitudeClient.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n    if (this._shouldDeferCall()) {\n      return this._q.push(['logRevenueV2'].concat(Array.prototype.slice.call(arguments, 0)));\n    }\n\n    if (!this._apiKeySet('logRevenueV2()')) {\n      return;\n    } // if revenue input is a proxied object created by the async loading snippet, convert it into an revenue object\n\n\n    if (type(revenue_obj) === 'object' && Object.prototype.hasOwnProperty.call(revenue_obj, '_q')) {\n      revenue_obj = _convertProxyObjectToRealObject(new Revenue(), revenue_obj);\n    }\n\n    if (revenue_obj instanceof Revenue) {\n      // only send if revenue is valid\n      if (revenue_obj && revenue_obj._isValidRevenue()) {\n        return this.logEvent(Constants.REVENUE_EVENT, revenue_obj._toJSONObject());\n      }\n    } else {\n      utils.log.error('Invalid revenue input type. Expected Revenue object but saw ' + type(revenue_obj));\n    }\n  };\n\n  {\n    /**\n     * Log revenue event with a price, quantity, and product identifier. DEPRECATED - use logRevenueV2\n     * @public\n     * @deprecated\n     * @param {number} price - price of revenue event\n     * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n     * @param {string} product - (optional) product identifier\n     * @example amplitudeClient.logRevenue(3.99, 1, 'product_1234');\n     */\n    AmplitudeClient.prototype.logRevenue = function logRevenue(price, quantity, product) {\n      if (this._shouldDeferCall()) {\n        return this._q.push(['logRevenue'].concat(Array.prototype.slice.call(arguments, 0)));\n      } // Test that the parameters are of the right type.\n\n\n      if (!this._apiKeySet('logRevenue()') || !_isNumber(price) || quantity !== undefined && !_isNumber(quantity)) {\n        // utils.log('Price and quantity arguments to logRevenue must be numbers');\n        return -1;\n      }\n\n      return this._logEvent(Constants.REVENUE_EVENT, {}, {\n        productId: product,\n        special: 'revenue_amount',\n        quantity: quantity || 1,\n        price: price\n      }, null, null, null, null, null);\n    };\n  }\n  /**\n   * Remove events in storage with event ids up to and including maxEventId.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId, status, response) {\n    _removeEvents(this, '_unsentEvents', maxEventId, status, response);\n\n    _removeEvents(this, '_unsentIdentifys', maxIdentifyId, status, response);\n  };\n  /**\n   * Helper function to remove events up to maxId from a single queue.\n   * Does a true filter in case events get out of order or old events are removed.\n   * @private\n   */\n\n\n  var _removeEvents = function _removeEvents(scope, eventQueue, maxId, status, response) {\n    if (maxId < 0) {\n      return;\n    }\n\n    var filteredEvents = [];\n\n    for (var i = 0; i < scope[eventQueue].length || 0; i++) {\n      var unsentEvent = scope[eventQueue][i];\n\n      if (unsentEvent.event.event_id > maxId) {\n        filteredEvents.push(unsentEvent);\n      } else {\n        if (unsentEvent.callback) {\n          unsentEvent.callback(status, response);\n        }\n      }\n    }\n\n    scope[eventQueue] = filteredEvents;\n  };\n  /**\n   * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n   * If batchEvents is true, then events are only sent when batch criterias are met.\n   * @private\n   */\n\n\n  AmplitudeClient.prototype.sendEvents = function sendEvents() {\n    if (!this._apiKeySet('sendEvents()')) {\n      this.removeEvents(Infinity, Infinity, 0, 'No request sent', {\n        reason: 'API key not set'\n      });\n      return;\n    }\n\n    if (this.options.optOut) {\n      this.removeEvents(Infinity, Infinity, 0, 'No request sent', {\n        reason: 'Opt out is set to true'\n      });\n      return;\n    } // How is it possible to get into this state?\n\n\n    if (this._unsentCount() === 0) {\n      return;\n    } // We only make one request at a time. sendEvents will be invoked again once\n    // the last request completes.\n\n\n    if (this._sending) {\n      return;\n    }\n\n    this._sending = true;\n    var protocol = this.options.forceHttps ? 'https' : 'https:' === window.location.protocol ? 'https' : 'http';\n    var url = protocol + '://' + this.options.apiEndpoint; // fetch events to send\n\n    var numEvents = Math.min(this._unsentCount(), this.options.uploadBatchSize);\n\n    var mergedEvents = this._mergeEventsAndIdentifys(numEvents);\n\n    var maxEventId = mergedEvents.maxEventId;\n    var maxIdentifyId = mergedEvents.maxIdentifyId;\n    var events = JSON.stringify(mergedEvents.eventsToSend.map(function (_ref2) {\n      var event = _ref2.event;\n      return event;\n    }));\n    var uploadTime = new Date().getTime();\n    var data = {\n      client: this.options.apiKey,\n      e: events,\n      v: Constants.API_VERSION,\n      upload_time: uploadTime,\n      checksum: md5(Constants.API_VERSION + this.options.apiKey + events + uploadTime)\n    };\n    var scope = this;\n    new Request(url, data, this.options.headers).send(function (status, response) {\n      scope._sending = false;\n\n      try {\n        if (status === 200 && response === 'success') {\n          scope.removeEvents(maxEventId, maxIdentifyId, status, response); // Update the event cache after the removal of sent events.\n\n          if (scope.options.saveEvents) {\n            scope.saveEvents();\n          } // Send more events if any queued during previous send.\n\n\n          scope._sendEventsIfReady(); // handle payload too large\n\n        } else if (status === 413) {\n          // utils.log('request too large');\n          // Can't even get this one massive event through. Drop it, even if it is an identify.\n          if (scope.options.uploadBatchSize === 1) {\n            scope.removeEvents(maxEventId, maxIdentifyId, status, response);\n          } // The server complained about the length of the request. Backoff and try again.\n\n\n          scope.options.uploadBatchSize = Math.ceil(numEvents / 2);\n          scope.sendEvents();\n        } // else {\n        //  all the events are still queued, and will be retried when the next\n        //  event is sent In the interest of debugging, it would be nice to have\n        //  something like an event emitter for a better debugging experince\n        //  here.\n        // }\n\n      } catch (e) {// utils.log.error('failed upload');\n      }\n    });\n  };\n  /**\n   * Merge unsent events and identifys together in sequential order based on their sequence number, for uploading.\n   * Identifys given higher priority than Events. Also earlier sequence given priority\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._mergeEventsAndIdentifys = function _mergeEventsAndIdentifys(numEvents) {\n    // coalesce events from both queues\n    var eventsToSend = [];\n    var eventIndex = 0;\n    var maxEventId = -1;\n    var identifyIndex = 0;\n    var maxIdentifyId = -1;\n\n    while (eventsToSend.length < numEvents) {\n      var unsentEvent = void 0;\n      var noIdentifys = identifyIndex >= this._unsentIdentifys.length;\n      var noEvents = eventIndex >= this._unsentEvents.length; // case 0: no events or identifys left\n      // note this should not happen, this means we have less events and identifys than expected\n\n      if (noEvents && noIdentifys) {\n        utils.log.error('Merging Events and Identifys, less events and identifys than expected');\n        break;\n      } // case 1: no identifys - grab from events\n      else if (noIdentifys) {\n          unsentEvent = this._unsentEvents[eventIndex++];\n          maxEventId = unsentEvent.event.event_id; // case 2: no events - grab from identifys\n        } else if (noEvents) {\n          unsentEvent = this._unsentIdentifys[identifyIndex++];\n          maxIdentifyId = unsentEvent.event.event_id; // case 3: need to compare sequence numbers\n        } else {\n          // events logged before v2.5.0 won't have a sequence number, put those first\n          if (!('sequence_number' in this._unsentEvents[eventIndex].event) || this._unsentEvents[eventIndex].event.sequence_number < this._unsentIdentifys[identifyIndex].event.sequence_number) {\n            unsentEvent = this._unsentEvents[eventIndex++];\n            maxEventId = unsentEvent.event.event_id;\n          } else {\n            unsentEvent = this._unsentIdentifys[identifyIndex++];\n            maxIdentifyId = unsentEvent.event.event_id;\n          }\n        }\n\n      eventsToSend.push(unsentEvent);\n    }\n\n    return {\n      eventsToSend: eventsToSend,\n      maxEventId: maxEventId,\n      maxIdentifyId: maxIdentifyId\n    };\n  };\n\n  {\n    /**\n     * Set global user properties. Note this is deprecated, and we recommend using setUserProperties\n     * @public\n     * @deprecated\n     */\n    AmplitudeClient.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n      this.setUserProperties(userProperties);\n    };\n  }\n  /**\n   * Get the current version of Amplitude's Javascript SDK.\n   * @public\n   * @returns {number} version number\n   * @example var amplitudeVersion = amplitude.__VERSION__;\n   */\n\n\n  AmplitudeClient.prototype.__VERSION__ = version;\n  /**\n   * Determines whether or not to push call to this._q or invoke it\n   * @private\n   */\n\n  AmplitudeClient.prototype._shouldDeferCall = function _shouldDeferCall() {\n    return this._pendingReadStorage || this._initializationDeferred;\n  };\n  /**\n   * Defers Initialization by putting all functions into storage until users\n   * have accepted terms for tracking\n   * @private\n   */\n\n\n  AmplitudeClient.prototype._deferInitialization = function _deferInitialization() {\n    this._initializationDeferred = true;\n\n    this._q.push(['init'].concat(Array.prototype.slice.call(arguments, 0)));\n  };\n  /**\n   * Enable tracking via logging events and dropping a cookie\n   * Intended to be used with the deferInitialization configuration flag\n   * This will drop a cookie and reset initialization deferred\n   * @public\n   */\n\n\n  AmplitudeClient.prototype.enableTracking = function enableTracking() {\n    // This will call init (which drops the cookie) and will run any pending tasks\n    this._initializationDeferred = false;\n\n    _saveCookieData(this);\n\n    this.runQueuedFunctions();\n  };\n\n  /**\n   * Deprecated legacy API of the Amplitude JS SDK - instance manager.\n   *\n   * Wraps around the current [AmplitudeClient](https://amplitude.github.io/Amplitude-JavaScript/) which provides more features\n   * Function calls directly on amplitude have been deprecated. Please call methods on the default shared instance: amplitude.getInstance() instead.\n   *\n   * See the [3.0.0 changelog](https://github.com/amplitude/Amplitude-JavaScript/blob/ed405afb5f06d5cf5b72539a5d09179abcf7e1fe/README.md#300-update-and-logging-events-to-multiple-amplitude-apps) for more information about this change.\n   * @constructor Amplitude\n   * @public\n   * @deprecated\n   * @example var amplitude = new Amplitude();\n   */\n\n  var Amplitude = function Amplitude() {\n    this.options = _objectSpread({}, DEFAULT_OPTIONS);\n    this._q = [];\n    this._instances = {}; // mapping of instance names to instances\n  };\n\n  Amplitude.prototype.Identify = Identify;\n  Amplitude.prototype.Revenue = Revenue;\n\n  Amplitude.prototype.getInstance = function getInstance(instance) {\n    instance = utils.isEmptyString(instance) ? Constants.DEFAULT_INSTANCE : instance.toLowerCase();\n    var client = this._instances[instance];\n\n    if (client === undefined) {\n      client = new AmplitudeClient(instance);\n      this._instances[instance] = client;\n    }\n\n    return client;\n  };\n\n  {\n    /**\n     * Run functions queued up by proxy loading snippet\n     * @private\n     */\n    Amplitude.prototype.runQueuedFunctions = function () {\n      // run queued up old versions of functions\n      for (var i = 0; i < this._q.length; i++) {\n        var fn = this[this._q[i][0]];\n\n        if (type(fn) === 'function') {\n          fn.apply(this, this._q[i].slice(1));\n        }\n      }\n\n      this._q = []; // clear function queue after running\n      // run queued up functions on instances\n\n      for (var instance in this._instances) {\n        if (Object.prototype.hasOwnProperty.call(this._instances, instance)) {\n          this._instances[instance].runQueuedFunctions();\n        }\n      }\n    };\n  }\n\n  {\n    /**\n     * Initializes the Amplitude Javascript SDK with your apiKey and any optional configurations.\n     * This is required before any other methods can be called.\n     * @public\n     * @param {string} apiKey - The API key for your app.\n     * @param {string} opt_userId - (optional) An identifier for this user.\n     * @param {object} opt_config - (optional) Configuration options.\n     * See [options.js](https://github.com/amplitude/Amplitude-JavaScript/blob/master/src/options.js#L14) for list of options and default values.\n     * @param {function} opt_callback - (optional) Provide a callback function to run after initialization is complete.\n     * @deprecated Please use amplitude.getInstance().init(apiKey, opt_userId, opt_config, opt_callback);\n     * @example amplitude.init('API_KEY', 'USER_ID', {includeReferrer: true, includeUtm: true}, function() { alert('init complete'); });\n     */\n    Amplitude.prototype.init = function init(apiKey, opt_userId, opt_config, opt_callback) {\n      this.getInstance().init(apiKey, opt_userId, opt_config, function (instance) {\n        // make options such as deviceId available for callback functions\n        this.options = instance.options;\n\n        if (type(opt_callback) === 'function') {\n          opt_callback(instance);\n        }\n      }.bind(this));\n    };\n    /**\n     * Returns true if a new session was created during initialization, otherwise false.\n     * @public\n     * @return {boolean} Whether a new session was created during initialization.\n     * @deprecated Please use amplitude.getInstance().isNewSession();\n     */\n\n\n    Amplitude.prototype.isNewSession = function isNewSession() {\n      return this.getInstance().isNewSession();\n    };\n    /**\n     * Returns the id of the current session.\n     * @public\n     * @return {number} Id of the current session.\n     * @deprecated Please use amplitude.getInstance().getSessionId();\n     */\n\n\n    Amplitude.prototype.getSessionId = function getSessionId() {\n      return this.getInstance().getSessionId();\n    };\n    /**\n     * Increments the eventId and returns it.\n     * @private\n     */\n\n\n    Amplitude.prototype.nextEventId = function nextEventId() {\n      return this.getInstance().nextEventId();\n    };\n    /**\n     * Increments the identifyId and returns it.\n     * @private\n     */\n\n\n    Amplitude.prototype.nextIdentifyId = function nextIdentifyId() {\n      return this.getInstance().nextIdentifyId();\n    };\n    /**\n     * Increments the sequenceNumber and returns it.\n     * @private\n     */\n\n\n    Amplitude.prototype.nextSequenceNumber = function nextSequenceNumber() {\n      return this.getInstance().nextSequenceNumber();\n    };\n    /**\n     * Saves unsent events and identifies to localStorage. JSON stringifies event queues before saving.\n     * Note: this is called automatically every time events are logged, unless you explicitly set option saveEvents to false.\n     * @private\n     */\n\n\n    Amplitude.prototype.saveEvents = function saveEvents() {\n      this.getInstance().saveEvents();\n    };\n    /**\n     * Sets a customer domain for the amplitude cookie. Useful if you want to support cross-subdomain tracking.\n     * @public\n     * @param {string} domain to set.\n     * @deprecated Please use amplitude.getInstance().setDomain(domain);\n     * @example amplitude.setDomain('.amplitude.com');\n     */\n\n\n    Amplitude.prototype.setDomain = function setDomain(domain) {\n      this.getInstance().setDomain(domain);\n    };\n    /**\n     * Sets an identifier for the current user.\n     * @public\n     * @param {string} userId - identifier to set. Can be null.\n     * @deprecated Please use amplitude.getInstance().setUserId(userId);\n     * @example amplitude.setUserId('joe@gmail.com');\n     */\n\n\n    Amplitude.prototype.setUserId = function setUserId(userId) {\n      this.getInstance().setUserId(userId);\n    };\n    /**\n     * Add user to a group or groups. You need to specify a groupType and groupName(s).\n     * For example you can group people by their organization.\n     * In that case groupType is \"orgId\" and groupName would be the actual ID(s).\n     * groupName can be a string or an array of strings to indicate a user in multiple gruups.\n     * You can also call setGroup multiple times with different groupTypes to track multiple types of groups (up to 5 per app).\n     * Note: this will also set groupType: groupName as a user property.\n     * See the [advanced topics article](https://developers.amplitude.com/docs/setting-user-groups) for more information.\n     * @public\n     * @param {string} groupType - the group type (ex: orgId)\n     * @param {string|list} groupName - the name of the group (ex: 15), or a list of names of the groups\n     * @deprecated Please use amplitude.getInstance().setGroup(groupType, groupName);\n     * @example amplitude.setGroup('orgId', 15); // this adds the current user to orgId 15.\n     */\n\n\n    Amplitude.prototype.setGroup = function (groupType, groupName) {\n      this.getInstance().setGroup(groupType, groupName);\n    };\n    /**\n     * Sets whether to opt current user out of tracking.\n     * @public\n     * @param {boolean} enable - if true then no events will be logged or sent.\n     * @deprecated Please use amplitude.getInstance().setOptOut(enable);\n     * @example: amplitude.setOptOut(true);\n     */\n\n\n    Amplitude.prototype.setOptOut = function setOptOut(enable) {\n      this.getInstance().setOptOut(enable);\n    };\n    /**\n     * Regenerates a new random deviceId for current user. Note: this is not recommended unless you know what you\n     * are doing. This can be used in conjunction with `setUserId(null)` to anonymize users after they log out.\n     * With a null userId and a completely new deviceId, the current user would appear as a brand new user in dashboard.\n     * This uses src/uuid.js to regenerate the deviceId.\n     * @public\n     * @deprecated Please use amplitude.getInstance().regenerateDeviceId();\n     */\n\n\n    Amplitude.prototype.regenerateDeviceId = function regenerateDeviceId() {\n      this.getInstance().regenerateDeviceId();\n    };\n    /**\n     * Sets a custom deviceId for current user. Note: this is not recommended unless you know what you are doing\n     * (like if you have your own system for managing deviceIds).\n     *\n     * Make sure the deviceId you set is sufficiently unique\n     * (we recommend something like a UUID - see src/uuid.js for an example of how to generate) to prevent conflicts with other devices in our system.\n     * @public\n     * @param {string} deviceId - custom deviceId for current user.\n     * @deprecated Please use amplitude.getInstance().setDeviceId(deviceId);\n     * @example amplitude.setDeviceId('45f0954f-eb79-4463-ac8a-233a6f45a8f0');\n     */\n\n\n    Amplitude.prototype.setDeviceId = function setDeviceId(deviceId) {\n      this.getInstance().setDeviceId(deviceId);\n    };\n    /**\n     * Sets user properties for the current user.\n     * @public\n     * @param {object} userProperties - object with string keys and values for the user properties to set.\n     * @param {boolean} opt_replace - Deprecated. In earlier versions of the JS SDK the user properties object was kept in\n     * memory and replace = true would replace the object in memory. Now the properties are no longer stored in memory, so replace is deprecated.\n     * @deprecated Please use amplitude.getInstance().setUserProperties(userProperties);\n     * @example amplitude.setUserProperties({'gender': 'female', 'sign_up_complete': true})\n     */\n\n\n    Amplitude.prototype.setUserProperties = function setUserProperties(userProperties) {\n      this.getInstance().setUserProperties(userProperties);\n    };\n    /**\n     * Clear all of the user properties for the current user. Note: clearing user properties is irreversible!\n     * @public\n     * @deprecated Please use amplitude.getInstance().clearUserProperties();\n     * @example amplitude.clearUserProperties();\n     */\n\n\n    Amplitude.prototype.clearUserProperties = function clearUserProperties() {\n      this.getInstance().clearUserProperties();\n    };\n    /**\n     * Send an identify call containing user property operations to Amplitude servers.\n     * See the [Identify](https://amplitude.github.io/Amplitude-JavaScript/Identify/)\n     * reference page for more information on the Identify API and user property operations.\n     * @param {Identify} identify_obj - the Identify object containing the user property operations to send.\n     * @param {Amplitude~eventCallback} opt_callback - (optional) callback function to run when the identify event has been sent.\n     * Note: the server response code and response body from the identify event upload are passed to the callback function.\n     * @deprecated Please use amplitude.getInstance().identify(identify);\n     * @example\n     * var identify = new amplitude.Identify().set('colors', ['rose', 'gold']).add('karma', 1).setOnce('sign_up_date', '2016-03-31');\n     * amplitude.identify(identify);\n     */\n\n\n    Amplitude.prototype.identify = function (identify_obj, opt_callback) {\n      this.getInstance().identify(identify_obj, opt_callback);\n    };\n    /**\n     * Set a versionName for your application.\n     * @public\n     * @param {string} versionName - The version to set for your application.\n     * @deprecated Please use amplitude.getInstance().setVersionName(versionName);\n     * @example amplitude.setVersionName('1.12.3');\n     */\n\n\n    Amplitude.prototype.setVersionName = function setVersionName(versionName) {\n      this.getInstance().setVersionName(versionName);\n    };\n    /**\n     * This is the callback for logEvent and identify calls. It gets called after the event/identify is uploaded,\n     * and the server response code and response body from the upload request are passed to the callback function.\n     * @callback Amplitude~eventCallback\n     * @param {number} responseCode - Server response code for the event / identify upload request.\n     * @param {string} responseBody - Server response body for the event / identify upload request.\n     */\n\n    /**\n     * Log an event with eventType and eventProperties\n     * @public\n     * @param {string} eventType - name of event\n     * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n     * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n     * Note: the server response code and response body from the event upload are passed to the callback function.\n     * @deprecated Please use amplitude.getInstance().logEvent(eventType, eventProperties, opt_callback);\n     * @example amplitude.logEvent('Clicked Homepage Button', {'finished_flow': false, 'clicks': 15});\n     */\n\n\n    Amplitude.prototype.logEvent = function logEvent(eventType, eventProperties, opt_callback) {\n      return this.getInstance().logEvent(eventType, eventProperties, opt_callback);\n    };\n    /**\n     * Log an event with eventType, eventProperties, and groups. Use this to set event-level groups.\n     *\n     * Note: the group(s) set only apply for the specific event type being logged and does not persist on the user\n     * (unless you explicitly set it with setGroup).\n     *\n     * See the [advanced topics article](https://developers.amplitude.com/docs/setting-user-groups) for more information.\n     * about groups and Count by Distinct on the Amplitude platform.\n     * @public\n     * @param {string} eventType - name of event\n     * @param {object} eventProperties - (optional) an object with string keys and values for the event properties.\n     * @param {object} groups - (optional) an object with string groupType: groupName values for the event being logged.\n     * groupName can be a string or an array of strings.\n     * @param {Amplitude~eventCallback} opt_callback - (optional) a callback function to run after the event is logged.\n     * Note: the server response code and response body from the event upload are passed to the callback function.\n     * @deprecated Please use amplitude.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n     * @example amplitude.logEventWithGroups('Clicked Button', null, {'orgId': 24});\n     */\n\n\n    Amplitude.prototype.logEventWithGroups = function (eventType, eventProperties, groups, opt_callback) {\n      return this.getInstance().logEventWithGroups(eventType, eventProperties, groups, opt_callback);\n    };\n    /**\n     * Log revenue with Revenue interface. The new revenue interface allows for more revenue fields like\n     * revenueType and event properties.\n     *\n     * See the [Revenue](https://amplitude.github.io/Amplitude-JavaScript/Revenue/)\n     * reference page for more information on the Revenue interface and logging revenue.\n     * @public\n     * @param {Revenue} revenue_obj - the revenue object containing the revenue data being logged.\n     * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n     * @example var revenue = new amplitude.Revenue().setProductId('productIdentifier').setPrice(10.99);\n     * amplitude.logRevenueV2(revenue);\n     */\n\n\n    Amplitude.prototype.logRevenueV2 = function logRevenueV2(revenue_obj) {\n      return this.getInstance().logRevenueV2(revenue_obj);\n    };\n    /**\n     * Log revenue event with a price, quantity, and product identifier.\n     * @public\n     * @param {number} price - price of revenue event\n     * @param {number} quantity - (optional) quantity of products in revenue event. If no quantity specified default to 1.\n     * @param {string} product - (optional) product identifier\n     * @deprecated Please use amplitude.getInstance().logRevenueV2(revenue_obj);\n     * @example amplitude.logRevenue(3.99, 1, 'product_1234');\n     */\n\n\n    Amplitude.prototype.logRevenue = function logRevenue(price, quantity, product) {\n      return this.getInstance().logRevenue(price, quantity, product);\n    };\n    /**\n     * Remove events in storage with event ids up to and including maxEventId.\n     * @private\n     */\n\n\n    Amplitude.prototype.removeEvents = function removeEvents(maxEventId, maxIdentifyId) {\n      this.getInstance().removeEvents(maxEventId, maxIdentifyId);\n    };\n    /**\n     * Send unsent events. Note: this is called automatically after events are logged if option batchEvents is false.\n     * If batchEvents is true, then events are only sent when batch criterias are met.\n     * @private\n     * @param {Amplitude~eventCallback} callback - (optional) callback to run after events are sent.\n     * Note the server response code and response body are passed to the callback as input arguments.\n     */\n\n\n    Amplitude.prototype.sendEvents = function sendEvents(callback) {\n      this.getInstance().sendEvents(callback);\n    };\n    /**\n     * Set global user properties.\n     * @public\n     * @deprecated Please use amplitudeClient.setUserProperties\n     */\n\n\n    Amplitude.prototype.setGlobalUserProperties = function setGlobalUserProperties(userProperties) {\n      this.getInstance().setUserProperties(userProperties);\n    };\n  }\n  /**\n   * Get the current version of Amplitude's Javascript SDK.\n   * @public\n   * @returns {number} version number\n   * @example var amplitudeVersion = amplitude.__VERSION__;\n   */\n\n\n  Amplitude.prototype.__VERSION__ = version;\n\n  // Entry point\n  var old = window.amplitude || {};\n  var newInstance = new Amplitude();\n  newInstance._q = old._q || [];\n  /**\n   * Instantiates Amplitude object and runs all queued function logged by stubbed methods provided by snippets\n   * Event queue allows async loading of SDK to not blocking client's app\n   */\n\n  for (var instance in old._iq) {\n    // migrate each instance's queue\n    if (Object.prototype.hasOwnProperty.call(old._iq, instance)) {\n      newInstance.getInstance(instance)._q = old._iq[instance]._q || [];\n    }\n  } // If SDK is enabled as snippet, process the events queued by stubbed function\n\n\n  {\n    newInstance.runQueuedFunctions();\n  } // export the instance\n\n  return newInstance;\n\n}));\n","module.exports = {\n    parse: require('./lib/parse'),\n    stringify: require('./lib/stringify')\n};\n","'use strict';\n\nexports.__esModule = true;\nfunction createThunkMiddleware(extraArgument) {\n  return function (_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        if (typeof action === 'function') {\n          return action(dispatch, getState, extraArgument);\n        }\n\n        return next(action);\n      };\n    };\n  };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexports['default'] = thunk;","/* eslint no-var: 0 */\nvar main = require('./dist/commonjs/index.js').default;\n\nmodule.exports = main;\nmodule.exports.default = main;\n","'use strict';\n\nmodule.exports = pixelmatch;\n\nconst defaultOptions = {\n    threshold: 0.1,         // matching threshold (0 to 1); smaller is more sensitive\n    includeAA: false,       // whether to skip anti-aliasing detection\n    alpha: 0.1,             // opacity of original image in diff ouput\n    aaColor: [255, 255, 0], // color of anti-aliased pixels in diff output\n    diffColor: [255, 0, 0],  // color of different pixels in diff output\n    diffMask: false         // draw the diff over a transparent background (a mask)\n};\n\nfunction pixelmatch(img1, img2, output, width, height, options) {\n\n    if (!isPixelData(img1) || !isPixelData(img2) || (output && !isPixelData(output)))\n        throw new Error('Image data: Uint8Array, Uint8ClampedArray or Buffer expected.');\n\n    if (img1.length !== img2.length || (output && output.length !== img1.length))\n        throw new Error('Image sizes do not match.');\n\n    if (img1.length !== width * height * 4) throw new Error('Image data size does not match width/height.');\n\n    options = Object.assign({}, defaultOptions, options);\n\n    // check if images are identical\n    const len = width * height;\n    const a32 = new Uint32Array(img1.buffer, img1.byteOffset, len);\n    const b32 = new Uint32Array(img2.buffer, img2.byteOffset, len);\n    let identical = true;\n\n    for (let i = 0; i < len; i++) {\n        if (a32[i] !== b32[i]) { identical = false; break; }\n    }\n    if (identical) { // fast path if identical\n        if (output && !options.diffMask) {\n            for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);\n        }\n        return 0;\n    }\n\n    // maximum acceptable square distance between two colors;\n    // 35215 is the maximum possible value for the YIQ difference metric\n    const maxDelta = 35215 * options.threshold * options.threshold;\n\n    let diff = 0;\n    const [aaR, aaG, aaB] = options.aaColor;\n    const [diffR, diffG, diffB] = options.diffColor;\n\n    // compare each pixel of one image against the other one\n    for (let y = 0; y < height; y++) {\n        for (let x = 0; x < width; x++) {\n\n            const pos = (y * width + x) * 4;\n\n            // squared YUV distance between colors at this pixel position\n            const delta = colorDelta(img1, img2, pos, pos);\n\n            // the color difference is above the threshold\n            if (delta > maxDelta) {\n                // check it's a real rendering difference or just anti-aliasing\n                if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||\n                                           antialiased(img2, x, y, width, height, img1))) {\n                    // one of the pixels is anti-aliasing; draw as yellow and do not count as difference\n                    // note that we do not include such pixels in a mask\n                    if (output && !options.diffMask) drawPixel(output, pos, aaR, aaG, aaB);\n\n                } else {\n                    // found substantial difference not caused by anti-aliasing; draw it as red\n                    if (output) drawPixel(output, pos, diffR, diffG, diffB);\n                    diff++;\n                }\n\n            } else if (output) {\n                // pixels are similar; draw background as grayscale image blended with white\n                if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);\n            }\n        }\n    }\n\n    // return the number of different pixels\n    return diff;\n}\n\nfunction isPixelData(arr) {\n    // work around instanceof Uint8Array not working properly in some Jest environments\n    return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;\n}\n\n// check if a pixel is likely a part of anti-aliasing;\n// based on \"Anti-aliased Pixel and Intensity Slope Detector\" paper by V. Vysniauskas, 2009\n\nfunction antialiased(img, x1, y1, width, height, img2) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n    let min = 0;\n    let max = 0;\n    let minX, minY, maxX, maxY;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            // brightness delta between the center pixel and adjacent one\n            const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);\n\n            // count the number of equal, darker and brighter adjacent pixels\n            if (delta === 0) {\n                zeroes++;\n                // if found more than 2 equal siblings, it's definitely not anti-aliasing\n                if (zeroes > 2) return false;\n\n            // remember the darkest pixel\n            } else if (delta < min) {\n                min = delta;\n                minX = x;\n                minY = y;\n\n            // remember the brightest pixel\n            } else if (delta > max) {\n                max = delta;\n                maxX = x;\n                maxY = y;\n            }\n        }\n    }\n\n    // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing\n    if (min === 0 || max === 0) return false;\n\n    // if either the darkest or the brightest pixel has 3+ equal siblings in both images\n    // (definitely not anti-aliased), this pixel is anti-aliased\n    return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||\n           (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));\n}\n\n// check if a pixel has 3+ adjacent pixels of the same color.\nfunction hasManySiblings(img, x1, y1, width, height) {\n    const x0 = Math.max(x1 - 1, 0);\n    const y0 = Math.max(y1 - 1, 0);\n    const x2 = Math.min(x1 + 1, width - 1);\n    const y2 = Math.min(y1 + 1, height - 1);\n    const pos = (y1 * width + x1) * 4;\n    let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;\n\n    // go through 8 adjacent pixels\n    for (let x = x0; x <= x2; x++) {\n        for (let y = y0; y <= y2; y++) {\n            if (x === x1 && y === y1) continue;\n\n            const pos2 = (y * width + x) * 4;\n            if (img[pos] === img[pos2] &&\n                img[pos + 1] === img[pos2 + 1] &&\n                img[pos + 2] === img[pos2 + 2] &&\n                img[pos + 3] === img[pos2 + 3]) zeroes++;\n\n            if (zeroes > 2) return true;\n        }\n    }\n\n    return false;\n}\n\n// calculate color difference according to the paper \"Measuring perceived color difference\n// using YIQ NTSC transmission color space in mobile applications\" by Y. Kotsarenko and F. Ramos\n\nfunction colorDelta(img1, img2, k, m, yOnly) {\n    let r1 = img1[k + 0];\n    let g1 = img1[k + 1];\n    let b1 = img1[k + 2];\n    let a1 = img1[k + 3];\n\n    let r2 = img2[m + 0];\n    let g2 = img2[m + 1];\n    let b2 = img2[m + 2];\n    let a2 = img2[m + 3];\n\n    if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;\n\n    if (a1 < 255) {\n        a1 /= 255;\n        r1 = blend(r1, a1);\n        g1 = blend(g1, a1);\n        b1 = blend(b1, a1);\n    }\n\n    if (a2 < 255) {\n        a2 /= 255;\n        r2 = blend(r2, a2);\n        g2 = blend(g2, a2);\n        b2 = blend(b2, a2);\n    }\n\n    const y = rgb2y(r1, g1, b1) - rgb2y(r2, g2, b2);\n\n    if (yOnly) return y; // brightness difference only\n\n    const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);\n    const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);\n\n    return 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;\n}\n\nfunction rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }\nfunction rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }\nfunction rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }\n\n// blend semi-transparent color with white\nfunction blend(c, a) {\n    return 255 + (c - 255) * a;\n}\n\nfunction drawPixel(output, pos, r, g, b) {\n    output[pos + 0] = r;\n    output[pos + 1] = g;\n    output[pos + 2] = b;\n    output[pos + 3] = 255;\n}\n\nfunction drawGrayPixel(img, i, alpha, output) {\n    const r = img[i + 0];\n    const g = img[i + 1];\n    const b = img[i + 2];\n    const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);\n    drawPixel(output, i, val, val, val);\n}\n","\nvar createTFLiteModule = (function() {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(createTFLiteModule) {\n  createTFLiteModule = createTFLiteModule || {};\n\nvar Module=typeof createTFLiteModule!==\"undefined\"?createTFLiteModule:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!==\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tflite.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=Module[\"asm\"][\"q\"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module[\"asm\"][\"D\"];removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _abort(){abort()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process[\"hrtime\"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!==\"undefined\"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function _dlopen(filename,flag){abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")}function _dlsym(handle,symbol){abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}var ENV={};function getExecutableName(){return thisProgram||\"./this.program\"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator===\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={\"USER\":\"web_user\",\"LOGNAME\":\"web_user\",\"PATH\":\"/\",\"PWD\":\"/\",\"HOME\":\"/home/web_user\",\"LANG\":lang,\"_\":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+\"=\"+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){SYSCALLS.printChar(fd,HEAPU8[ptr+j])}num+=len}HEAP32[pnum>>2]=num;return 0}function _pthread_create(){return 6}function _pthread_join(){return 28}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}var asmLibraryArg={\"a\":_abort,\"n\":_clock_gettime,\"i\":_dlopen,\"e\":_dlsym,\"l\":_emscripten_memcpy_big,\"m\":_emscripten_resize_heap,\"o\":_emscripten_thread_sleep,\"p\":_environ_get,\"g\":_environ_sizes_get,\"j\":_exit,\"h\":_fd_close,\"k\":_fd_seek,\"c\":_fd_write,\"d\":_pthread_create,\"f\":_pthread_join,\"b\":_sysconf};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"r\"]).apply(null,arguments)};var _getModelBufferMemoryOffset=Module[\"_getModelBufferMemoryOffset\"]=function(){return(_getModelBufferMemoryOffset=Module[\"_getModelBufferMemoryOffset\"]=Module[\"asm\"][\"s\"]).apply(null,arguments)};var _getInputMemoryOffset=Module[\"_getInputMemoryOffset\"]=function(){return(_getInputMemoryOffset=Module[\"_getInputMemoryOffset\"]=Module[\"asm\"][\"t\"]).apply(null,arguments)};var _getInputHeight=Module[\"_getInputHeight\"]=function(){return(_getInputHeight=Module[\"_getInputHeight\"]=Module[\"asm\"][\"u\"]).apply(null,arguments)};var _getInputWidth=Module[\"_getInputWidth\"]=function(){return(_getInputWidth=Module[\"_getInputWidth\"]=Module[\"asm\"][\"v\"]).apply(null,arguments)};var _getInputChannelCount=Module[\"_getInputChannelCount\"]=function(){return(_getInputChannelCount=Module[\"_getInputChannelCount\"]=Module[\"asm\"][\"w\"]).apply(null,arguments)};var _getOutputMemoryOffset=Module[\"_getOutputMemoryOffset\"]=function(){return(_getOutputMemoryOffset=Module[\"_getOutputMemoryOffset\"]=Module[\"asm\"][\"x\"]).apply(null,arguments)};var _getOutputHeight=Module[\"_getOutputHeight\"]=function(){return(_getOutputHeight=Module[\"_getOutputHeight\"]=Module[\"asm\"][\"y\"]).apply(null,arguments)};var _getOutputWidth=Module[\"_getOutputWidth\"]=function(){return(_getOutputWidth=Module[\"_getOutputWidth\"]=Module[\"asm\"][\"z\"]).apply(null,arguments)};var _getOutputChannelCount=Module[\"_getOutputChannelCount\"]=function(){return(_getOutputChannelCount=Module[\"_getOutputChannelCount\"]=Module[\"asm\"][\"A\"]).apply(null,arguments)};var _loadModel=Module[\"_loadModel\"]=function(){return(_loadModel=Module[\"_loadModel\"]=Module[\"asm\"][\"B\"]).apply(null,arguments)};var _runInference=Module[\"_runInference\"]=function(){return(_runInference=Module[\"_runInference\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n  return createTFLiteModule.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = createTFLiteModule;\nelse if (typeof define === 'function' && define['amd'])\n  define([], function() { return createTFLiteModule; });\nelse if (typeof exports === 'object')\n  exports[\"createTFLiteModule\"] = createTFLiteModule;\n","\nvar createTFLiteSIMDModule = (function() {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(createTFLiteSIMDModule) {\n  createTFLiteSIMDModule = createTFLiteSIMDModule || {};\n\nvar Module=typeof createTFLiteSIMDModule!==\"undefined\"?createTFLiteSIMDModule:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require(\"path\").dirname(scriptDirectory)+\"/\"}else{scriptDirectory=__dirname+\"/\"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);return nodeFS[\"readFileSync\"](filename,binary?null:\"utf8\")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process[\"on\"](\"unhandledRejection\",abort);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!==\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){abort(\"no native wasm support detected\")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str=\"\";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix=\"file://\";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile=\"tflite-simd.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch===\"function\"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;wasmMemory=Module[\"asm\"][\"q\"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module[\"asm\"][\"D\"];removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch===\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _abort(){abort()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process[\"hrtime\"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!==\"undefined\"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};var _emscripten_get_now_is_monotonic=true;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}function _dlopen(filename,flag){abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")}function _dlsym(handle,symbol){abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}var ENV={};function getExecutableName(){return thisProgram||\"./this.program\"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator===\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\";var env={\"USER\":\"web_user\",\"LOGNAME\":\"web_user\",\"PATH\":\"/\",\"PWD\":\"/\",\"HOME\":\"/home/web_user\",\"LANG\":lang,\"_\":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+\"=\"+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _exit(status){exit(status)}function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){SYSCALLS.printChar(fd,HEAPU8[ptr+j])}num+=len}HEAP32[pnum>>2]=num;return 0}function _pthread_create(){return 6}function _pthread_join(){return 28}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}setErrNo(28);return-1}var asmLibraryArg={\"a\":_abort,\"n\":_clock_gettime,\"i\":_dlopen,\"e\":_dlsym,\"l\":_emscripten_memcpy_big,\"m\":_emscripten_resize_heap,\"o\":_emscripten_thread_sleep,\"p\":_environ_get,\"g\":_environ_sizes_get,\"j\":_exit,\"h\":_fd_close,\"k\":_fd_seek,\"c\":_fd_write,\"d\":_pthread_create,\"f\":_pthread_join,\"b\":_sysconf};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"r\"]).apply(null,arguments)};var _getModelBufferMemoryOffset=Module[\"_getModelBufferMemoryOffset\"]=function(){return(_getModelBufferMemoryOffset=Module[\"_getModelBufferMemoryOffset\"]=Module[\"asm\"][\"s\"]).apply(null,arguments)};var _getInputMemoryOffset=Module[\"_getInputMemoryOffset\"]=function(){return(_getInputMemoryOffset=Module[\"_getInputMemoryOffset\"]=Module[\"asm\"][\"t\"]).apply(null,arguments)};var _getInputHeight=Module[\"_getInputHeight\"]=function(){return(_getInputHeight=Module[\"_getInputHeight\"]=Module[\"asm\"][\"u\"]).apply(null,arguments)};var _getInputWidth=Module[\"_getInputWidth\"]=function(){return(_getInputWidth=Module[\"_getInputWidth\"]=Module[\"asm\"][\"v\"]).apply(null,arguments)};var _getInputChannelCount=Module[\"_getInputChannelCount\"]=function(){return(_getInputChannelCount=Module[\"_getInputChannelCount\"]=Module[\"asm\"][\"w\"]).apply(null,arguments)};var _getOutputMemoryOffset=Module[\"_getOutputMemoryOffset\"]=function(){return(_getOutputMemoryOffset=Module[\"_getOutputMemoryOffset\"]=Module[\"asm\"][\"x\"]).apply(null,arguments)};var _getOutputHeight=Module[\"_getOutputHeight\"]=function(){return(_getOutputHeight=Module[\"_getOutputHeight\"]=Module[\"asm\"][\"y\"]).apply(null,arguments)};var _getOutputWidth=Module[\"_getOutputWidth\"]=function(){return(_getOutputWidth=Module[\"_getOutputWidth\"]=Module[\"asm\"][\"z\"]).apply(null,arguments)};var _getOutputChannelCount=Module[\"_getOutputChannelCount\"]=function(){return(_getOutputChannelCount=Module[\"_getOutputChannelCount\"]=Module[\"asm\"][\"A\"]).apply(null,arguments)};var _loadModel=Module[\"_loadModel\"]=function(){return(_loadModel=Module[\"_loadModel\"]=Module[\"asm\"][\"B\"]).apply(null,arguments)};var _runInference=Module[\"_runInference\"]=function(){return(_runInference=Module[\"_runInference\"]=Module[\"asm\"][\"C\"]).apply(null,arguments)};var ___errno_location=Module[\"___errno_location\"]=function(){return(___errno_location=Module[\"___errno_location\"]=Module[\"asm\"][\"E\"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n  return createTFLiteSIMDModule.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n  module.exports = createTFLiteSIMDModule;\nelse if (typeof define === 'function' && define['amd'])\n  define([], function() { return createTFLiteSIMDModule; });\nelse if (typeof exports === 'object')\n  exports[\"createTFLiteSIMDModule\"] = createTFLiteSIMDModule;\n","/**\n * Copyright (c) 2013-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 * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = require('./hyphenate');\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","var superPropBase = require(\"./superPropBase\");\n\nfunction _get(target, property, receiver) {\n  if (typeof Reflect !== \"undefined\" && Reflect.get) {\n    module.exports = _get = Reflect.get;\n  } else {\n    module.exports = _get = function _get(target, property, receiver) {\n      var base = superPropBase(target, property);\n      if (!base) return;\n      var desc = Object.getOwnPropertyDescriptor(base, property);\n\n      if (desc.get) {\n        return desc.get.call(receiver);\n      }\n\n      return desc.value;\n    };\n  }\n\n  return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar CrossIcon = function CrossIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 10.586L6.707 5.293a1 1 0 0 0-1.414 1.414L10.586 12l-5.293 5.293a1 1 0 0 0 1.414 1.414L12 13.414l5.293 5.293a1 1 0 0 0 1.414-1.414L13.414 12l5.293-5.293a1 1 0 1 0-1.414-1.414L12 10.586z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nCrossIcon.displayName = 'CrossIcon';\nvar _default = CrossIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar ChevronUpIcon = function ChevronUpIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M11.221 9.322l-2.929 2.955a1.009 1.009 0 0 0 0 1.419.986.986 0 0 0 1.405 0l2.298-2.317 2.307 2.327a.989.989 0 0 0 1.407 0 1.01 1.01 0 0 0 0-1.419l-2.94-2.965A1.106 1.106 0 0 0 11.991 9c-.279 0-.557.107-.77.322z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nChevronUpIcon.displayName = 'ChevronUpIcon';\nvar _default = ChevronUpIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar EditorInfoIcon = function EditorInfoIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 20a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm0-8.5a1 1 0 0 0-1 1V15a1 1 0 0 0 2 0v-2.5a1 1 0 0 0-1-1zm0-1.125a1.375 1.375 0 1 0 0-2.75 1.375 1.375 0 0 0 0 2.75z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nEditorInfoIcon.displayName = 'EditorInfoIcon';\nvar _default = EditorInfoIcon;\nexports.default = _default;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bind_1 = require(\"./bind\");\nObject.defineProperty(exports, \"bind\", { enumerable: true, get: function () { return bind_1.bind; } });\nvar bind_all_1 = require(\"./bind-all\");\nObject.defineProperty(exports, \"bindAll\", { enumerable: true, get: function () { return bind_all_1.bindAll; } });\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.1\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Linkify = require('./components/Linkify');\n\nvar _Linkify2 = _interopRequireDefault(_Linkify);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Linkify2.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _base = require(\"@atlaskit/icon/base\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst CheckboxIcon = props => /*#__PURE__*/_react.default.createElement(_base.Icon, Object.assign({\n  dangerouslySetGlyph: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" role=\"presentation\"><g fill-rule=\"evenodd\"><rect fill=\"currentColor\" x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M9.707 11.293a1 1 0 10-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 10-1.414-1.414L11 12.586l-1.293-1.293z\" fill=\"inherit\"/></g></svg>`\n}, props));\n\nCheckboxIcon.displayName = 'CheckboxIcon';\nvar _default = CheckboxIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _base = require(\"@atlaskit/icon/base\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst RadioIcon = props => /*#__PURE__*/_react.default.createElement(_base.Icon, Object.assign({\n  dangerouslySetGlyph: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" role=\"presentation\"><g fill-rule=\"evenodd\"><circle fill=\"currentColor\" cx=\"12\" cy=\"12\" r=\"6\"/><circle fill=\"inherit\" cx=\"12\" cy=\"12\" r=\"2\"/></g></svg>`\n}, props));\n\nRadioIcon.displayName = 'RadioIcon';\nvar _default = RadioIcon;\nexports.default = _default;","import LegacyAnalyticsContext from './LegacyAnalyticsContext';\nimport ModernAnalyticsContext from './ModernAnalyticsContext';\nvar ExportedAnalyticsContext;\n\nif (typeof process !== 'undefined' && process.env['ANALYTICS_NEXT_MODERN_CONTEXT']) {\n  ExportedAnalyticsContext = ModernAnalyticsContext;\n} else {\n  ExportedAnalyticsContext = LegacyAnalyticsContext;\n}\n\nexport default ExportedAnalyticsContext;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport React, { useCallback, useMemo } from 'react';\nimport { default as AnalyticsReactContext } from '@atlaskit/analytics-next-stable-react-context';\nimport { useAnalyticsContext } from '../../hooks/useAnalyticsContext';\nimport { useTrackedRef } from '../../hooks/useTrackedRef';\n\nvar AnalyticsContext = function AnalyticsContext(_ref) {\n  var data = _ref.data,\n      children = _ref.children;\n  var dataRef = useTrackedRef(data);\n  var analyticsContext = useAnalyticsContext();\n  var getAtlaskitAnalyticsContext = useCallback(function () {\n    return [].concat(_toConsumableArray(analyticsContext.getAtlaskitAnalyticsContext()), [dataRef.current]);\n  }, [analyticsContext, dataRef]);\n  var value = useMemo(function () {\n    return {\n      getAtlaskitAnalyticsContext: getAtlaskitAnalyticsContext,\n      getAtlaskitAnalyticsEventHandlers: analyticsContext.getAtlaskitAnalyticsEventHandlers\n    };\n  }, [analyticsContext, getAtlaskitAnalyticsContext]);\n  return /*#__PURE__*/React.createElement(AnalyticsReactContext.Provider, {\n    value: value\n  }, children);\n};\n\nexport default AnalyticsContext;","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { default as AnalyticsReactContext } from '@atlaskit/analytics-next-stable-react-context';\nvar ContextTypes = {\n  getAtlaskitAnalyticsContext: PropTypes.func,\n  getAtlaskitAnalyticsEventHandlers: PropTypes.func\n};\n\nvar noop = function noop() {\n  return [];\n}; // eslint-disable-next-line @repo/internal/react/no-class-components\n\n\nvar AnalyticsContext = /*#__PURE__*/function (_Component) {\n  _inherits(AnalyticsContext, _Component);\n\n  var _super = _createSuper(AnalyticsContext);\n\n  function AnalyticsContext(props) {\n    var _this;\n\n    _classCallCheck(this, AnalyticsContext);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"getChildContext\", function () {\n      return {\n        getAtlaskitAnalyticsContext: _this.getAnalyticsContext\n      };\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAnalyticsContext\", function () {\n      var data = _this.props.data;\n      var _this$context$getAtla = _this.context.getAtlaskitAnalyticsContext,\n          getAtlaskitAnalyticsContext = _this$context$getAtla === void 0 ? noop : _this$context$getAtla;\n      return [].concat(_toConsumableArray(getAtlaskitAnalyticsContext()), [data]);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAnalyticsEventHandlers\", function () {\n      var _this$context$getAtla2 = _this.context.getAtlaskitAnalyticsEventHandlers,\n          getAtlaskitAnalyticsEventHandlers = _this$context$getAtla2 === void 0 ? noop : _this$context$getAtla2;\n      return getAtlaskitAnalyticsEventHandlers();\n    });\n\n    _this.contextValue = {\n      getAtlaskitAnalyticsContext: _this.getAnalyticsContext,\n      getAtlaskitAnalyticsEventHandlers: _this.getAnalyticsEventHandlers\n    };\n    return _this;\n  }\n\n  _createClass(AnalyticsContext, [{\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      return /*#__PURE__*/React.createElement(AnalyticsReactContext.Provider, {\n        value: this.contextValue\n      }, children);\n    }\n  }]);\n\n  return AnalyticsContext;\n}(Component);\n\n_defineProperty(AnalyticsContext, \"contextTypes\", ContextTypes);\n\n_defineProperty(AnalyticsContext, \"childContextTypes\", ContextTypes);\n\nexport default AnalyticsContext;","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\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\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (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\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _NodeResolver = require('./NodeResolver');\n\nObject.defineProperty(exports, 'default', {\n  enumerable: true,\n  get: function get() {\n    return _interopRequireDefault(_NodeResolver).default;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }","/**\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\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n  var printWarning = function printWarning(format, args) {\n    var len = arguments.length;\n    args = new Array(len > 1 ? len - 1 : 0);\n    for (var key = 1; key < len; key++) {\n      args[key - 1] = arguments[key];\n    }\n    var argIndex = 0;\n    var message = 'Warning: ' +\n      format.replace(/%s/g, function() {\n        return args[argIndex++];\n      });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  }\n\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n          '`warning(condition, format, ...args)` requires a warning ' +\n          'message argument'\n      );\n    }\n    if (!condition) {\n      printWarning.apply(null, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _base = require(\"@atlaskit/icon/base\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst EditorCloseIcon = props => /*#__PURE__*/_react.default.createElement(_base.Icon, Object.assign({\n  dangerouslySetGlyph: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" role=\"presentation\"><path d=\"M15.185 7.4l-3.184 3.185-3.186-3.186a.507.507 0 00-.712.003l-.7.701a.496.496 0 00-.004.712l3.185 3.184L7.4 15.185a.507.507 0 00.004.712l.7.7c.206.207.516.2.712.004l3.186-3.185 3.184 3.185a.507.507 0 00.712-.004l.701-.7a.496.496 0 00.003-.712l-3.186-3.186 3.186-3.184a.507.507 0 00-.003-.712l-.7-.7a.508.508 0 00-.36-.153.5.5 0 00-.353.15z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>`\n}, props));\n\nEditorCloseIcon.displayName = 'EditorCloseIcon';\nvar _default = EditorCloseIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar EditorDoneIcon = function EditorDoneIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M7.356 10.942a.497.497 0 0 0-.713 0l-.7.701a.501.501 0 0 0-.003.71l3.706 3.707a.501.501 0 0 0 .705.003l7.712-7.712a.493.493 0 0 0-.006-.708l-.7-.7a.504.504 0 0 0-.714 0l-6.286 6.286a.506.506 0 0 1-.713 0l-2.288-2.287z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nEditorDoneIcon.displayName = 'EditorDoneIcon';\nvar _default = EditorDoneIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar EditorCloseIcon = function EditorCloseIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M15.185 7.4l-3.184 3.185-3.186-3.186a.507.507 0 0 0-.712.003l-.7.701a.496.496 0 0 0-.004.712l3.185 3.184L7.4 15.185a.507.507 0 0 0 .004.712l.7.7c.206.207.516.2.712.004l3.186-3.185 3.184 3.185a.507.507 0 0 0 .712-.004l.701-.7a.496.496 0 0 0 .003-.712l-3.186-3.186 3.186-3.184a.507.507 0 0 0-.003-.712l-.7-.7a.508.508 0 0 0-.36-.153.5.5 0 0 0-.353.15z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nEditorCloseIcon.displayName = 'EditorCloseIcon';\nvar _default = EditorCloseIcon;\nexports.default = _default;","/**\n * generates a UID factory\n * @internal\n * @example\n * const uid = generateUID();\n * uid(object) = 1;\n * uid(object) = 1;\n * uid(anotherObject) = 2;\n */\nexport var generateUID = function () {\n    var counter = 1;\n    var map = new WeakMap();\n    /**\n     * @borrows {uid}\n     */\n    var uid = function (item, index) {\n        if (typeof item === 'number' ||\n            typeof item === 'string') {\n            return index ? \"idx-\" + index : \"val-\" + item;\n        }\n        if (!map.has(item)) {\n            map.set(item, counter++);\n            return uid(item);\n        }\n        return 'uid' + map.get(item);\n    };\n    return uid;\n};\n/**\n * @name uid\n * returns an UID associated with {item}\n * @param {Object} item - object to generate UID for\n * @param {Number} index, a fallback index\n * @example\n * uid(object) == 1;\n * uid(object) == 1;\n * uid(anotherObject) == 2;\n * uid(\"not object\", 42) == 42\n *\n * @see {@link useUID}\n */\nexport var uid = generateUID();\n","// @flow\n\ndeclare var APP: Object;\n\nexport default {\n\n    /**\n     * Show notification that external auth is required (using provided url).\n     * @param {string} url - URL to use for external auth.\n     * @param {function} callback - callback to invoke when auth popup is closed.\n     * @returns auth dialog\n     */\n    showExternalAuthDialog(url: string, callback: ?Function) {\n        const dialog = APP.UI.messageHandler.openCenteredPopup(\n            url, 910, 660,\n\n            // On closed\n            callback\n        );\n\n        if (!dialog) {\n            APP.UI.messageHandler.showWarning({\n                descriptionKey: 'dialog.popupError',\n                titleKey: 'dialog.popupErrorTitle'\n            });\n        }\n\n        return dialog;\n    }\n};\n","/* global APP, config */\n\n/**\n * The (name of the) command which transports the recorder info.\n */\nconst _USER_INFO_COMMAND = 'userinfo';\n\n/**\n * The Recorder class is meant to take care of recorder related presence\n * commands.\n */\nclass Recorder {\n    /**\n     * Creates new recorder instance.\n     */\n    constructor() {\n        if (config.iAmRecorder) {\n            this._sendRecorderInfo();\n        }\n    }\n\n    /**\n     * Sends the information that this is a recorder through the presence.\n     * @private\n     */\n    _sendRecorderInfo() {\n        const commands = APP.conference.commands;\n\n        // XXX The \"Follow Me\" command represents a snapshot of all states\n        // which are to be followed so don't forget to removeCommand before\n        // sendCommand!\n        commands.removeCommand(_USER_INFO_COMMAND);\n        commands.sendCommand(\n            _USER_INFO_COMMAND,\n            {\n                attributes: {\n                    xmlns: 'http://jitsi.org/jitmeet/userinfo',\n                    robot: true\n                }\n            });\n    }\n}\n\nexport default Recorder;\n","const logger = require('jitsi-meet-logger').getLogger(__filename);\n\n/**\n * Manages a queue of functions where the current function in progress will\n * automatically execute the next queued function.\n */\nexport class TaskQueue {\n    /**\n     * Creates a new instance of {@link TaskQueue} and sets initial instance\n     * variable values.\n     */\n    constructor() {\n        this._queue = [];\n        this._currentTask = null;\n\n        this._onTaskComplete = this._onTaskComplete.bind(this);\n    }\n\n    /**\n     * Adds a new function to the queue. It will be immediately invoked if no\n     * other functions are queued.\n     *\n     * @param {Function} taskFunction - The function to be queued for execution.\n     * @private\n     * @returns {void}\n     */\n    enqueue(taskFunction) {\n        this._queue.push(taskFunction);\n        this._executeNext();\n    }\n\n    /**\n     * If no queued task is currently executing, invokes the first task in the\n     * queue if any.\n     *\n     * @private\n     * @returns {void}\n     */\n    _executeNext() {\n        if (this._currentTask) {\n            logger.warn('Task queued while a task is in progress.');\n\n            return;\n        }\n\n        this._currentTask = this._queue.shift() || null;\n\n        if (this._currentTask) {\n            logger.debug('Executing a task.');\n\n            try {\n                this._currentTask(this._onTaskComplete);\n            } catch (error) {\n                logger.error(`Task execution failed: ${error}`);\n                this._onTaskComplete();\n            }\n        }\n    }\n\n    /**\n     * Prepares to invoke the next function in the queue.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onTaskComplete() {\n        this._currentTask = null;\n        logger.debug('Task completed.');\n        this._executeNext();\n    }\n}\n","\nvar Module = (function() {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  \n  return (\nfunction(Module) {\n  Module = Module || {};\n\nnull;var Module=typeof Module!==\"undefined\"?Module:{};var readyPromiseResolve,readyPromiseReject;Module[\"ready\"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(typeof WebAssembly!==\"object\"){err(\"no native wasm support detected\")}var wasmMemory;var wasmTable=new WebAssembly.Table({\"initial\":1,\"maximum\":1+0,\"element\":\"anyfunc\"});var ABORT=false;var EXITSTATUS=0;var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5340496,DYNAMICTOP_PTR=97456;var INITIAL_INITIAL_MEMORY=Module[\"INITIAL_MEMORY\"]||16777216;if(Module[\"wasmMemory\"]){wasmMemory=Module[\"wasmMemory\"]}else{wasmMemory=new WebAssembly.Memory({\"initial\":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback(Module);continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;what=\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile=\"rnnoise.wasm\";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw\"both async and sync fetching of the wasm failed\"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\"}return response[\"arrayBuffer\"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={\"a\":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module[\"asm\"]=exports;removeRunDependency(\"wasm-instantiate\")}addRunDependency(\"wasm-instantiate\");function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&typeof fetch===\"function\"){fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module[\"instantiateWasm\"]){try{var exports=Module[\"instantiateWasm\"](info,receiveInstance);return exports}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false}}instantiateAsync();return{}}__ATINIT__.push({func:function(){___wasm_call_ctors()}});function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var asmLibraryArg={\"a\":_emscripten_memcpy_big,\"b\":_emscripten_resize_heap,\"memory\":wasmMemory,\"table\":wasmTable};var asm=createWasm();var ___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=function(){return(___wasm_call_ctors=Module[\"___wasm_call_ctors\"]=Module[\"asm\"][\"c\"]).apply(null,arguments)};var _rnnoise_init=Module[\"_rnnoise_init\"]=function(){return(_rnnoise_init=Module[\"_rnnoise_init\"]=Module[\"asm\"][\"d\"]).apply(null,arguments)};var _rnnoise_create=Module[\"_rnnoise_create\"]=function(){return(_rnnoise_create=Module[\"_rnnoise_create\"]=Module[\"asm\"][\"e\"]).apply(null,arguments)};var _malloc=Module[\"_malloc\"]=function(){return(_malloc=Module[\"_malloc\"]=Module[\"asm\"][\"f\"]).apply(null,arguments)};var _rnnoise_destroy=Module[\"_rnnoise_destroy\"]=function(){return(_rnnoise_destroy=Module[\"_rnnoise_destroy\"]=Module[\"asm\"][\"g\"]).apply(null,arguments)};var _free=Module[\"_free\"]=function(){return(_free=Module[\"_free\"]=Module[\"asm\"][\"h\"]).apply(null,arguments)};var _rnnoise_process_frame=Module[\"_rnnoise_process_frame\"]=function(){return(_rnnoise_process_frame=Module[\"_rnnoise_process_frame\"]=Module[\"asm\"][\"i\"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n  return Module.ready\n}\n);\n})();\nexport default Module;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar StarFilledIcon = function StarFilledIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12.072 17.284l-3.905 2.053a1 1 0 0 1-1.451-1.054l.745-4.349-3.159-3.08a1 1 0 0 1 .554-1.705l4.366-.635 1.953-3.956a1 1 0 0 1 1.794 0l1.952 3.956 4.366.635a1 1 0 0 1 .555 1.705l-3.16 3.08.746 4.349a1 1 0 0 1-1.45 1.054l-3.906-2.053z\\\" fill=\\\"currentColor\\\" fill-rule=\\\"evenodd\\\"/></svg>\"\n  }, props));\n};\n\nStarFilledIcon.displayName = 'StarFilledIcon';\nvar _default = StarFilledIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar StarIcon = function StarIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><path d=\\\"M12 16.373l3.98 2.193-.76-4.655 3.276-3.347-4.524-.69L12 5.687l-1.972 4.189-4.524.689L8.78 13.91l-.762 4.655L12 16.373zm0 2.283l-3.016 1.662a2 2 0 0 1-2.939-2.075l.599-3.656-2.57-2.624a2 2 0 0 1 1.129-3.377l3.47-.528 1.518-3.224a2 2 0 0 1 3.618 0l1.519 3.224 3.47.528a2 2 0 0 1 1.127 3.377l-2.569 2.624.599 3.656a2 2 0 0 1-2.94 2.075L12 18.656z\\\" fill=\\\"currentColor\\\"/></svg>\"\n  }, props));\n};\n\nStarIcon.displayName = 'StarIcon';\nvar _default = StarIcon;\nexports.default = _default;","// @flow\n\nexport * from './actions';\nexport * from './actionTypes';\n","/* eslint-disable */\n\n// Ofiginally: https://github.com/adtile/postis\n//\n// The MIT License\n// \n// Copyright (c) 2015-2015 Adtile Technologies Inc. http://www.adtile.me\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nfunction Postis(options) {\n  var scope = options.scope;\n  var targetWindow = options.window;\n  var windowForEventListening = options.windowForEventListening || window;\n  var allowedOrigin = options.allowedOrigin;\n  var listeners = {};\n  var sendBuffer = [];\n  var listenBuffer = {};\n  var ready = false;\n  var readyMethod = \"__ready__\";\n  var readynessCheck;\n\n  var listener = function(event) {\n    var data;\n    try {\n      data = JSON.parse(event.data);\n    } catch (e) {\n      return;\n    }\n\n    if (allowedOrigin && event.origin !== allowedOrigin) {\n        return;\n    }\n\n    if (data && data.postis && data.scope === scope) {\n      var listenersForMethod = listeners[data.method];\n      if (listenersForMethod) {\n        for (var i = 0; i < listenersForMethod.length; i++) {\n          listenersForMethod[i].call(null, data.params);\n        }\n      } else {\n        listenBuffer[data.method] = listenBuffer[data.method] || [];\n        listenBuffer[data.method].push(data.params);\n      }\n    }\n  };\n\n  windowForEventListening.addEventListener(\"message\", listener, false);\n\n  var postis = {\n    listen: function (method, callback) {\n      listeners[method] = listeners[method] || [];\n      listeners[method].push(callback);\n\n      var listenBufferForMethod = listenBuffer[method];\n      if (listenBufferForMethod) {\n        var listenersForMethod = listeners[method];\n        for (var i = 0; i < listenersForMethod.length; i++) {\n          for (var j = 0; j < listenBufferForMethod.length; j++) {\n            listenersForMethod[i].call(null, listenBufferForMethod[j]);\n          }\n        }\n      }\n      delete listenBuffer[method];\n    },\n\n    send: function (opts) {\n      var method = opts.method;\n\n      if ((ready || opts.method === readyMethod) && (targetWindow && typeof targetWindow.postMessage === \"function\")) {\n        targetWindow.postMessage(JSON.stringify({\n          postis: true,\n          scope: scope,\n          method: method,\n          params: opts.params\n        }), \"*\");\n      } else {\n        sendBuffer.push(opts);\n      }\n    },\n\n    ready: function (callback) {\n      if (ready) {\n        callback();\n      } else {\n        setTimeout(function () { postis.ready(callback); }, 50);\n      }\n    },\n\n    destroy: function (callback) {\n      clearInterval(readynessCheck);\n      ready = false;\n      if (windowForEventListening && typeof windowForEventListening.removeEventListener === \"function\") {\n        windowForEventListening.removeEventListener(\"message\", listener);\n      }\n      callback && callback();\n    }\n  };\n\n  var readyCheckID = +new Date() + Math.random() + \"\";\n\n  readynessCheck = setInterval(function () {\n    postis.send({\n      method: readyMethod,\n      params: readyCheckID\n    });\n  }, 50);\n\n  postis.listen(readyMethod, function (id) {\n    if (id === readyCheckID) {\n      clearInterval(readynessCheck);\n      ready = true;\n\n      for (var i = 0; i < sendBuffer.length; i++) {\n        postis.send(sendBuffer[i]);\n      }\n      sendBuffer = [];\n    } else {\n      postis.send({\n        method: readyMethod,\n        params: id\n      });\n    }\n  });\n\n  return postis;\n}\n\nmodule.exports = Postis;\n","'use strict';\n\nfunction find(array, predicate, context) {\n  if (typeof Array.prototype.find === 'function') {\n    return array.find(predicate, context);\n  }\n\n  context = context || this;\n  var length = array.length;\n  var i;\n\n  if (typeof predicate !== 'function') {\n    throw new TypeError(predicate + ' is not a function');\n  }\n\n  for (i = 0; i < length; i++) {\n    if (predicate.call(context, array[i], i, array)) {\n      return array[i];\n    }\n  }\n}\n\nmodule.exports = find;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar CheckCircleIcon = function CheckCircleIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><circle fill=\\\"currentColor\\\" cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\\\" fill=\\\"inherit\\\"/></g></svg>\"\n  }, props));\n};\n\nCheckCircleIcon.displayName = 'CheckCircleIcon';\nvar _default = CheckCircleIcon;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Icon = _interopRequireDefault(require(\"../cjs/components/Icon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nvar InfoIcon = function InfoIcon(props) {\n  return _react.default.createElement(_Icon.default, _extends({\n    dangerouslySetGlyph: \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" focusable=\\\"false\\\" role=\\\"presentation\\\"><g fill-rule=\\\"evenodd\\\"><path d=\\\"M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10S17.523 2 12 2 2 6.477 2 12z\\\" fill=\\\"currentColor\\\"/><rect fill=\\\"inherit\\\" x=\\\"11\\\" y=\\\"10\\\" width=\\\"2\\\" height=\\\"7\\\" rx=\\\"1\\\"/><circle fill=\\\"inherit\\\" cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"1\\\"/></g></svg>\"\n  }, props));\n};\n\nInfoIcon.displayName = 'InfoIcon';\nvar _default = InfoIcon;\nexports.default = _default;","\"use strict\";\nexports.__esModule = true;\nvar enums_1 = require(\"./enums\");\nvar time_zone_map_1 = require(\"./time-zone-map\");\nexports.findIana = function (windowsTimeZone, territory) {\n    if (territory === void 0) { territory = enums_1.Territory[\"001\"]; }\n    var entry = time_zone_map_1.map.find(function (_a) {\n        var itemName = _a.windowsName, itemTerritory = _a.territory;\n        return itemName === windowsTimeZone && itemTerritory === territory;\n    });\n    if (typeof entry === \"undefined\")\n        return undefined;\n    return entry.iana;\n};\nexports.findOneIana = function (windowsTimeZone, territory) {\n    if (territory === void 0) { territory = enums_1.Territory[\"001\"]; }\n    var result = exports.findIana(windowsTimeZone, territory);\n    if (typeof result === \"undefined\")\n        return undefined;\n    return result[0];\n};\nexports.findWindows = function (ianaTimeZone) {\n    var entry = time_zone_map_1.map.find(function (_a) {\n        var itemName = _a.iana;\n        return itemName.includes(ianaTimeZone);\n    });\n    if (typeof entry === \"undefined\")\n        return undefined;\n    return entry.windowsName;\n};\n//# sourceMappingURL=index.js.map","/* global interfaceConfig */\n\nimport UIUtil from '../util/UIUtil';\n\n/**\n * Responsible for drawing audio levels.\n */\nconst AudioLevels = {\n    /**\n     * Updates the audio level of the large video.\n     *\n     * @param audioLevel the new audio level to set.\n     */\n    updateLargeVideoAudioLevel(elementId, audioLevel) {\n        const element = document.getElementById(elementId);\n\n        if (!UIUtil.isVisible(element)) {\n            return;\n        }\n\n        let level = parseFloat(audioLevel);\n\n        level = isNaN(level) ? 0 : level;\n\n        let shadowElement = element.getElementsByClassName('dynamic-shadow');\n\n        if (shadowElement && shadowElement.length > 0) {\n            shadowElement = shadowElement[0];\n        }\n\n        shadowElement.style.boxShadow = this._updateLargeVideoShadow(level);\n    },\n\n    /**\n     * Updates the large video shadow effect.\n     */\n    _updateLargeVideoShadow(level) {\n        const scale = 2;\n\n        // Internal circle audio level.\n        const int = {\n            level: level > 0.15 ? 20 : 0,\n            color: interfaceConfig.AUDIO_LEVEL_PRIMARY_COLOR\n        };\n\n        // External circle audio level.\n        const ext = {\n            level: parseFloat(\n                ((int.level * scale * level) + int.level).toFixed(0)),\n            color: interfaceConfig.AUDIO_LEVEL_SECONDARY_COLOR\n        };\n\n        // Internal blur.\n        int.blur = int.level ? 2 : 0;\n\n        // External blur.\n        ext.blur = ext.level ? 6 : 0;\n\n        return [\n            `0 0 ${int.blur}px ${int.level}px ${int.color}`,\n            `0 0 ${ext.blur}px ${ext.level}px ${ext.color}`\n        ].join(', ');\n    }\n};\n\nexport default AudioLevels;\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _sister = require('sister');\n\nvar _sister2 = _interopRequireDefault(_sister);\n\nvar _loadYouTubeIframeApi = require('./loadYouTubeIframeApi');\n\nvar _loadYouTubeIframeApi2 = _interopRequireDefault(_loadYouTubeIframeApi);\n\nvar _YouTubePlayer = require('./YouTubePlayer');\n\nvar _YouTubePlayer2 = _interopRequireDefault(_YouTubePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @typedef YT.Player\n * @see https://developers.google.com/youtube/iframe_api_reference\n * */\n\n/**\n * @see https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player\n */\nvar youtubeIframeAPI = void 0;\n\n/**\n * A factory function used to produce an instance of YT.Player and queue function calls and proxy events of the resulting object.\n *\n * @param maybeElementId Either An existing YT.Player instance,\n * the DOM element or the id of the HTML element where the API will insert an <iframe>.\n * @param options See `options` (Ignored when using an existing YT.Player instance).\n * @param strictState A flag designating whether or not to wait for\n * an acceptable state when calling supported functions. Default: `false`.\n * See `FunctionStateMap.js` for supported functions and acceptable states.\n */\n\nexports.default = function (maybeElementId) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var strictState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var emitter = (0, _sister2.default)();\n\n  if (!youtubeIframeAPI) {\n    youtubeIframeAPI = (0, _loadYouTubeIframeApi2.default)(emitter);\n  }\n\n  if (options.events) {\n    throw new Error('Event handlers cannot be overwritten.');\n  }\n\n  if (typeof maybeElementId === 'string' && !document.getElementById(maybeElementId)) {\n    throw new Error('Element \"' + maybeElementId + '\" does not exist.');\n  }\n\n  options.events = _YouTubePlayer2.default.proxyEvents(emitter);\n\n  var playerAPIReady = new Promise(function (resolve) {\n    if ((typeof maybeElementId === 'undefined' ? 'undefined' : _typeof(maybeElementId)) === 'object' && maybeElementId.playVideo instanceof Function) {\n      var player = maybeElementId;\n\n      resolve(player);\n    } else {\n      // asume maybeElementId can be rendered inside\n      // eslint-disable-next-line promise/catch-or-return\n      youtubeIframeAPI.then(function (YT) {\n        // eslint-disable-line promise/prefer-await-to-then\n        var player = new YT.Player(maybeElementId, options);\n\n        emitter.on('ready', function () {\n          resolve(player);\n        });\n\n        return null;\n      });\n    }\n  });\n\n  var playerApi = _YouTubePlayer2.default.promisifyPlayer(playerAPIReady, strictState);\n\n  playerApi.on = emitter.on;\n  playerApi.off = emitter.off;\n\n  return playerApi;\n};\n\nmodule.exports = exports['default'];","/* global APP, $, config */\n\n\nconst UI = {};\n\nimport EventEmitter from 'events';\nimport Logger from 'jitsi-meet-logger';\n\nimport { isMobileBrowser } from '../../react/features/base/environment/utils';\nimport { setColorAlpha } from '../../react/features/base/util';\nimport { setDocumentUrl } from '../../react/features/etherpad';\nimport { setFilmstripVisible } from '../../react/features/filmstrip';\nimport { joinLeaveNotificationsDisabled, setNotificationsEnabled } from '../../react/features/notifications';\nimport {\n    dockToolbox,\n    setToolboxEnabled,\n    showToolbox\n} from '../../react/features/toolbox/actions.web';\nimport UIEvents from '../../service/UI/UIEvents';\n\nimport EtherpadManager from './etherpad/Etherpad';\nimport messageHandler from './util/MessageHandler';\nimport UIUtil from './util/UIUtil';\nimport VideoLayout from './videolayout/VideoLayout';\n\nconst logger = Logger.getLogger(__filename);\n\nUI.messageHandler = messageHandler;\n\nconst eventEmitter = new EventEmitter();\n\nUI.eventEmitter = eventEmitter;\n\nlet etherpadManager;\n\nconst UIListeners = new Map([\n    [\n        UIEvents.ETHERPAD_CLICKED,\n        () => etherpadManager && etherpadManager.toggleEtherpad()\n    ], [\n        UIEvents.TOGGLE_FILMSTRIP,\n        () => UI.toggleFilmstrip()\n    ]\n]);\n\n/**\n * Indicates if we're currently in full screen mode.\n *\n * @return {boolean} {true} to indicate that we're currently in full screen\n * mode, {false} otherwise\n */\nUI.isFullScreen = function() {\n    return UIUtil.isFullScreen();\n};\n\n/**\n * Notify user that server has shut down.\n */\nUI.notifyGracefulShutdown = function() {\n    messageHandler.showError({\n        descriptionKey: 'dialog.gracefulShutdown',\n        titleKey: 'dialog.serviceUnavailable'\n    });\n};\n\n/**\n * Notify user that reservation error happened.\n */\nUI.notifyReservationError = function(code, msg) {\n    messageHandler.showError({\n        descriptionArguments: {\n            code,\n            msg\n        },\n        descriptionKey: 'dialog.reservationErrorMsg',\n        titleKey: 'dialog.reservationError'\n    });\n};\n\n/**\n * Initialize conference UI.\n */\nUI.initConference = function() {\n    UI.showToolbar();\n};\n\n/**\n * Starts the UI module and initializes all related components.\n *\n * @returns {boolean} true if the UI is ready and the conference should be\n * established, false - otherwise (for example in the case of welcome page)\n */\nUI.start = function() {\n    VideoLayout.initLargeVideo();\n\n    // Do not animate the video area on UI start (second argument passed into\n    // resizeVideoArea) because the animation is not visible anyway. Plus with\n    // the current dom layout, the quality label is part of the video layout and\n    // will be seen animating in.\n    VideoLayout.resizeVideoArea();\n\n    if (isMobileBrowser()) {\n        $('body').addClass('mobile-browser');\n    } else {\n        $('body').addClass('desktop-browser');\n\n        if (config.backgroundAlpha !== undefined) {\n            const backgroundColor = $('body').css('background-color');\n            const alphaColor = setColorAlpha(backgroundColor, config.backgroundAlpha);\n\n            $('body').css('background-color', alphaColor);\n        }\n    }\n\n    if (config.iAmRecorder) {\n        // in case of iAmSipGateway keep local video visible\n        if (!config.iAmSipGateway) {\n            APP.store.dispatch(setNotificationsEnabled(false));\n        }\n\n        APP.store.dispatch(setToolboxEnabled(false));\n    }\n};\n\n/**\n * Setup some UI event listeners.\n */\nUI.registerListeners\n    = () => UIListeners.forEach((value, key) => UI.addListener(key, value));\n\n/**\n * Setup some DOM event listeners.\n */\nUI.bindEvents = () => {\n    /**\n     *\n     */\n    function onResize() {\n        VideoLayout.onResize();\n    }\n\n    // Resize and reposition videos in full screen mode.\n    $(document).on(\n            'webkitfullscreenchange mozfullscreenchange fullscreenchange',\n            onResize);\n\n    $(window).resize(onResize);\n};\n\n/**\n * Unbind some DOM event listeners.\n */\nUI.unbindEvents = () => {\n    $(document).off(\n            'webkitfullscreenchange mozfullscreenchange fullscreenchange');\n\n    $(window).off('resize');\n};\n\n/**\n * Setup and show Etherpad.\n * @param {string} name etherpad id\n */\nUI.initEtherpad = name => {\n    if (etherpadManager || !config.etherpad_base || !name) {\n        return;\n    }\n    logger.log('Etherpad is enabled');\n\n    etherpadManager = new EtherpadManager(eventEmitter);\n\n    const url = new URL(name, config.etherpad_base);\n\n    APP.store.dispatch(setDocumentUrl(url.toString()));\n\n    if (config.openSharedDocumentOnJoin) {\n        etherpadManager.toggleEtherpad();\n    }\n};\n\n/**\n * Returns the shared document manager object.\n * @return {EtherpadManager} the shared document manager object\n */\nUI.getSharedDocumentManager = () => etherpadManager;\n\n/**\n * Show user on UI.\n * @param {JitsiParticipant} user\n */\nUI.addUser = function(user) {\n    const status = user.getStatus();\n\n    if (status) {\n        // FIXME: move updateUserStatus in participantPresenceChanged action\n        UI.updateUserStatus(user, status);\n    }\n};\n\n/**\n * Updates the user status.\n *\n * @param {JitsiParticipant} user - The user which status we need to update.\n * @param {string} status - The new status.\n */\nUI.updateUserStatus = (user, status) => {\n    const reduxState = APP.store.getState() || {};\n    const { calleeInfoVisible } = reduxState['features/invite'] || {};\n\n    // We hide status updates when join/leave notifications are disabled,\n    // as jigasi is the component with statuses and they are seen as join/leave notifications.\n    if (!status || calleeInfoVisible || joinLeaveNotificationsDisabled()) {\n        return;\n    }\n\n    const displayName = user.getDisplayName();\n\n    messageHandler.participantNotification(\n        displayName,\n        '',\n        'connected',\n        'dialOut.statusMessage',\n        { status: UIUtil.escapeHtml(status) });\n};\n\n/**\n * Toggles filmstrip.\n */\nUI.toggleFilmstrip = function() {\n    const { visible } = APP.store.getState()['features/filmstrip'];\n\n    APP.store.dispatch(setFilmstripVisible(!visible));\n};\n\n/**\n * Sets muted audio state for participant\n */\nUI.setAudioMuted = function(id) {\n    // FIXME: Maybe this can be removed!\n    if (APP.conference.isLocalId(id)) {\n        APP.conference.updateAudioIconEnabled();\n    }\n};\n\n/**\n * Sets muted video state for participant\n */\nUI.setVideoMuted = function(id) {\n    VideoLayout._updateLargeVideoIfDisplayed(id, true);\n\n    if (APP.conference.isLocalId(id)) {\n        APP.conference.updateVideoIconEnabled();\n    }\n};\n\nUI.updateLargeVideo = (id, forceUpdate) => VideoLayout.updateLargeVideo(id, forceUpdate);\n\n/**\n * Adds a listener that would be notified on the given type of event.\n *\n * @param type the type of the event we're listening for\n * @param listener a function that would be called when notified\n */\nUI.addListener = function(type, listener) {\n    eventEmitter.on(type, listener);\n};\n\n/**\n * Removes the all listeners for all events.\n *\n * @returns {void}\n */\nUI.removeAllListeners = function() {\n    eventEmitter.removeAllListeners();\n};\n\n/**\n * Emits the event of given type by specifying the parameters in options.\n *\n * @param type the type of the event we're emitting\n * @param options the parameters for the event\n */\nUI.emitEvent = (type, ...options) => eventEmitter.emit(type, ...options);\n\n// Used by torture.\nUI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout));\n\n// Used by torture.\nUI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));\n\n/**\n * Updates the displayed avatar for participant.\n *\n * @param {string} id - User id whose avatar should be updated.\n * @param {string} avatarURL - The URL to avatar image to display.\n * @returns {void}\n */\nUI.refreshAvatarDisplay = function(id) {\n    VideoLayout.changeUserAvatar(id);\n};\n\n/**\n * Notify user that connection failed.\n * @param {string} stropheErrorMsg raw Strophe error message\n */\nUI.notifyConnectionFailed = function(stropheErrorMsg) {\n    let descriptionKey;\n    let descriptionArguments;\n\n    if (stropheErrorMsg) {\n        descriptionKey = 'dialog.connectErrorWithMsg';\n        descriptionArguments = { msg: stropheErrorMsg };\n    } else {\n        descriptionKey = 'dialog.connectError';\n    }\n\n    messageHandler.showError({\n        descriptionArguments,\n        descriptionKey,\n        titleKey: 'connection.CONNFAIL'\n    });\n};\n\n\n/**\n * Notify user that maximum users limit has been reached.\n */\nUI.notifyMaxUsersLimitReached = function() {\n    messageHandler.showError({\n        hideErrorSupportLink: true,\n        descriptionKey: 'dialog.maxUsersLimitReached',\n        titleKey: 'dialog.maxUsersLimitReachedTitle'\n    });\n};\n\n/**\n * Notify user that he was automatically muted when joned the conference.\n */\nUI.notifyInitiallyMuted = function() {\n    messageHandler.participantNotification(\n        null,\n        'notify.mutedTitle',\n        'connected',\n        'notify.muted',\n        null);\n};\n\nUI.handleLastNEndpoints = function(leavingIds, enteringIds) {\n    VideoLayout.onLastNEndpointsChanged(leavingIds, enteringIds);\n};\n\n/**\n * Update audio level visualization for specified user.\n * @param {string} id user id\n * @param {number} lvl audio level\n */\nUI.setAudioLevel = (id, lvl) => VideoLayout.setAudioLevel(id, lvl);\n\nUI.notifyTokenAuthFailed = function() {\n    messageHandler.showError({\n        descriptionKey: 'dialog.tokenAuthFailed',\n        titleKey: 'dialog.tokenAuthFailedTitle'\n    });\n};\n\nUI.notifyFocusDisconnected = function(focus, retrySec) {\n    messageHandler.participantNotification(\n        null, 'notify.focus',\n        'disconnected', 'notify.focusFail',\n        { component: focus,\n            ms: retrySec }\n    );\n};\n\n/**\n * Update list of available physical devices.\n */\nUI.onAvailableDevicesChanged = function() {\n    APP.conference.updateAudioIconEnabled();\n    APP.conference.updateVideoIconEnabled();\n};\n\n/**\n * Returns the id of the current video shown on large.\n * Currently used by tests (torture).\n */\nUI.getLargeVideoID = function() {\n    return VideoLayout.getLargeVideoID();\n};\n\n/**\n * Returns the current video shown on large.\n * Currently used by tests (torture).\n */\nUI.getLargeVideo = function() {\n    return VideoLayout.getLargeVideo();\n};\n\n// TODO: Export every function separately. For now there is no point of doing\n// this because we are importing everything.\nexport default UI;\n","/* global $, APP, interfaceConfig */\n\nimport { getSharedDocumentUrl, setDocumentEditingState } from '../../../react/features/etherpad';\nimport { getToolboxHeight } from '../../../react/features/toolbox/functions.web';\nimport Filmstrip from '../videolayout/Filmstrip';\nimport LargeContainer from '../videolayout/LargeContainer';\nimport VideoLayout from '../videolayout/VideoLayout';\n\n/**\n *\n */\nfunction bubbleIframeMouseMove(iframe) {\n    const existingOnMouseMove = iframe.contentWindow.onmousemove;\n\n    iframe.contentWindow.onmousemove = function(e) {\n        if (existingOnMouseMove) {\n            existingOnMouseMove(e);\n        }\n        const evt = document.createEvent('MouseEvents');\n        const boundingClientRect = iframe.getBoundingClientRect();\n\n        evt.initMouseEvent(\n            'mousemove',\n            true, // bubbles\n            false, // not cancelable\n            window,\n            e.detail,\n            e.screenX,\n            e.screenY,\n            e.clientX + boundingClientRect.left,\n            e.clientY + boundingClientRect.top,\n            e.ctrlKey,\n            e.altKey,\n            e.shiftKey,\n            e.metaKey,\n            e.button,\n            null // no related element\n        );\n        iframe.dispatchEvent(evt);\n    };\n}\n\n/**\n * Default Etherpad frame width.\n */\nconst DEFAULT_WIDTH = 640;\n\n/**\n * Default Etherpad frame height.\n */\nconst DEFAULT_HEIGHT = 480;\n\nconst ETHERPAD_CONTAINER_TYPE = 'etherpad';\n\n/**\n * Container for Etherpad iframe.\n */\nclass Etherpad extends LargeContainer {\n    /**\n     * Creates new Etherpad object\n     */\n    constructor(url) {\n        super();\n\n        const iframe = document.createElement('iframe');\n\n        iframe.id = 'etherpadIFrame';\n        iframe.src = url;\n        iframe.frameBorder = 0;\n        iframe.scrolling = 'no';\n        iframe.width = DEFAULT_WIDTH;\n        iframe.height = DEFAULT_HEIGHT;\n        iframe.setAttribute('style', 'visibility: hidden;');\n\n        this.container.appendChild(iframe);\n\n        iframe.onload = function() {\n            // eslint-disable-next-line no-self-assign\n            document.domain = document.domain;\n            bubbleIframeMouseMove(iframe);\n\n            setTimeout(() => {\n                const doc = iframe.contentDocument;\n\n                // the iframes inside of the etherpad are\n                // not yet loaded when the etherpad iframe is loaded\n                const outer = doc.getElementsByName('ace_outer')[0];\n\n                bubbleIframeMouseMove(outer);\n\n                const inner = doc.getElementsByName('ace_inner')[0];\n\n                bubbleIframeMouseMove(inner);\n            }, 2000);\n        };\n\n        this.iframe = iframe;\n    }\n\n    /**\n     *\n     */\n    get isOpen() {\n        return Boolean(this.iframe);\n    }\n\n    /**\n     *\n     */\n    get container() {\n        return document.getElementById('etherpad');\n    }\n\n    /**\n     *\n     */\n    resize(containerWidth, containerHeight) {\n        let height, width;\n\n        if (interfaceConfig.VERTICAL_FILMSTRIP) {\n            height = containerHeight - getToolboxHeight();\n            width = containerWidth - Filmstrip.getVerticalFilmstripWidth();\n        } else {\n            height = containerHeight - Filmstrip.getFilmstripHeight();\n            width = containerWidth;\n        }\n\n        $(this.iframe)\n            .width(width)\n            .height(height);\n    }\n\n    /**\n     *\n     */\n    show() {\n        const $iframe = $(this.iframe);\n        const $container = $(this.container);\n        const self = this;\n\n        return new Promise(resolve => {\n            $iframe.fadeIn(300, () => {\n                self.bodyBackground = document.body.style.background;\n                document.body.style.background = '#eeeeee';\n                $iframe.css({ visibility: 'visible' });\n                $container.css({ zIndex: 2 });\n\n                APP.store.dispatch(setDocumentEditingState(true));\n\n                resolve();\n            });\n        });\n    }\n\n    /**\n     *\n     */\n    hide() {\n        const $iframe = $(this.iframe);\n        const $container = $(this.container);\n\n        document.body.style.background = this.bodyBackground;\n\n        return new Promise(resolve => {\n            $iframe.fadeOut(300, () => {\n                $iframe.css({ visibility: 'hidden' });\n                $container.css({ zIndex: 0 });\n\n                APP.store.dispatch(setDocumentEditingState(false));\n\n                resolve();\n            });\n        });\n    }\n\n    /**\n     * @return {boolean} do not switch on dominant speaker event if on stage.\n     */\n    stayOnStage() {\n        return true;\n    }\n}\n\n/**\n * Manager of the Etherpad frame.\n */\nexport default class EtherpadManager {\n    /**\n     *\n     */\n    constructor(eventEmitter) {\n        this.eventEmitter = eventEmitter;\n        this.etherpad = null;\n    }\n\n    /**\n     *\n     */\n    get isOpen() {\n        return Boolean(this.etherpad);\n    }\n\n    /**\n     *\n     */\n    isVisible() {\n        return VideoLayout.isLargeContainerTypeVisible(ETHERPAD_CONTAINER_TYPE);\n    }\n\n    /**\n     * Create new Etherpad frame.\n     */\n    openEtherpad() {\n        this.etherpad = new Etherpad(getSharedDocumentUrl(APP.store.getState));\n        VideoLayout.addLargeVideoContainer(\n            ETHERPAD_CONTAINER_TYPE,\n            this.etherpad\n        );\n    }\n\n    /**\n     * Toggle Etherpad frame visibility.\n     * Open new Etherpad frame if there is no Etherpad frame yet.\n     */\n    toggleEtherpad() {\n        if (!this.isOpen) {\n            this.openEtherpad();\n        }\n\n        const isVisible = this.isVisible();\n\n        VideoLayout.showLargeVideoContainer(\n            ETHERPAD_CONTAINER_TYPE, !isVisible);\n\n        APP.store.dispatch(setDocumentEditingState(!isVisible));\n    }\n}\n","module.exports = require('./dist/commonjs/index.js').default;\n","// Generated by CoffeeScript 1.10.0\nvar feedback, matching, scoring, time, time_estimates, zxcvbn;\n\nmatching = require('./matching');\n\nscoring = require('./scoring');\n\ntime_estimates = require('./time_estimates');\n\nfeedback = require('./feedback');\n\ntime = function() {\n  return (new Date()).getTime();\n};\n\nzxcvbn = function(password, user_inputs) {\n  var arg, attack_times, i, len, matches, prop, ref, result, sanitized_inputs, start, val;\n  if (user_inputs == null) {\n    user_inputs = [];\n  }\n  start = time();\n  sanitized_inputs = [];\n  for (i = 0, len = user_inputs.length; i < len; i++) {\n    arg = user_inputs[i];\n    if ((ref = typeof arg) === \"string\" || ref === \"number\" || ref === \"boolean\") {\n      sanitized_inputs.push(arg.toString().toLowerCase());\n    }\n  }\n  matching.set_user_input_dictionary(sanitized_inputs);\n  matches = matching.omnimatch(password);\n  result = scoring.most_guessable_match_sequence(password, matches);\n  result.calc_time = time() - start;\n  attack_times = time_estimates.estimate_attack_times(result.guesses);\n  for (prop in attack_times) {\n    val = attack_times[prop];\n    result[prop] = val;\n  }\n  result.feedback = feedback.get_feedback(result.score, result.sequence);\n  return result;\n};\n\nmodule.exports = zxcvbn;\n\n//# sourceMappingURL=main.js.map\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport var keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nexport default function createBreakpoints(breakpoints) {\n  var _breakpoints$values = breakpoints.values,\n      values = _breakpoints$values === void 0 ? {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920\n  } : _breakpoints$values,\n      _breakpoints$unit = breakpoints.unit,\n      unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n      _breakpoints$step = breakpoints.step,\n      step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n      other = _objectWithoutProperties(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n  function up(key) {\n    var value = typeof values[key] === 'number' ? values[key] : key;\n    return \"@media (min-width:\".concat(value).concat(unit, \")\");\n  }\n\n  function down(key) {\n    var endIndex = keys.indexOf(key) + 1;\n    var upperbound = values[keys[endIndex]];\n\n    if (endIndex === keys.length) {\n      // xl down applies to all sizes\n      return up('xs');\n    }\n\n    var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n    return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n  }\n\n  function between(start, end) {\n    var endIndex = keys.indexOf(end);\n\n    if (endIndex === keys.length - 1) {\n      return up(start);\n    }\n\n    return \"@media (min-width:\".concat(typeof values[start] === 'number' ? values[start] : start).concat(unit, \") and \") + \"(max-width:\".concat((endIndex !== -1 && typeof values[keys[endIndex + 1]] === 'number' ? values[keys[endIndex + 1]] : end) - step / 100).concat(unit, \")\");\n  }\n\n  function only(key) {\n    return between(key, key);\n  }\n\n  function width(key) {\n    return values[key];\n  }\n\n  return _extends({\n    keys: keys,\n    values: values,\n    up: up,\n    down: down,\n    between: between,\n    only: only,\n    width: width\n  }, other);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function createMixins(breakpoints, spacing, mixins) {\n  var _toolbar;\n\n  return _extends({\n    gutters: function gutters() {\n      var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      // To deprecate in v4.1\n      //       warning(\n      //         false,\n      //         [\n      //           'Material-UI: Theme.mixins.gutters() is deprecated.',\n      //           'You can use the source of the mixin directly:',\n      //           `\n      // paddingLeft: theme.spacing(2),\n      // paddingRight: theme.spacing(2),\n      // [theme.breakpoints.up('sm')]: {\n      //   paddingLeft: theme.spacing(3),\n      //   paddingRight: theme.spacing(3),\n      // },\n      // `,\n      //         ].join('\\n'),\n      //       );\n      return _extends({\n        paddingLeft: spacing(2),\n        paddingRight: spacing(2)\n      }, styles, _defineProperty({}, breakpoints.up('sm'), _extends({\n        paddingLeft: spacing(3),\n        paddingRight: spacing(3)\n      }, styles[breakpoints.up('sm')])));\n    },\n    toolbar: (_toolbar = {\n      minHeight: 56\n    }, _defineProperty(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n      minHeight: 48\n    }), _defineProperty(_toolbar, breakpoints.up('sm'), {\n      minHeight: 64\n    }), _toolbar)\n  }, mixins);\n}","/**\n * WARNING: Don't import this directly.\n * Use `MuiError` from `@material-ui/utils/macros/MuiError.macro` instead.\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code) {\n  // Apply babel-plugin-transform-template-literals in loose mode\n  // loose mode is safe iff we're concatenating primitives\n  // see https://babeljs.io/docs/en/babel-plugin-transform-template-literals#loose\n\n  /* eslint-disable prefer-template */\n  var url = 'https://material-ui.com/production-error/?code=' + code;\n\n  for (var i = 1; i < arguments.length; i += 1) {\n    // rest params over-transpile for this case\n    // eslint-disable-next-line prefer-rest-params\n    url += '&args[]=' + encodeURIComponent(arguments[i]);\n  }\n\n  return 'Minified Material-UI error #' + code + '; visit ' + url + ' for the full message.';\n  /* eslint-enable prefer-template */\n}","var common = {\n  black: '#000',\n  white: '#fff'\n};\nexport default common;","var grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#d5d5d5',\n  A200: '#aaaaaa',\n  A400: '#303030',\n  A700: '#616161'\n};\nexport default grey;","var indigo = {\n  50: '#e8eaf6',\n  100: '#c5cae9',\n  200: '#9fa8da',\n  300: '#7986cb',\n  400: '#5c6bc0',\n  500: '#3f51b5',\n  600: '#3949ab',\n  700: '#303f9f',\n  800: '#283593',\n  900: '#1a237e',\n  A100: '#8c9eff',\n  A200: '#536dfe',\n  A400: '#3d5afe',\n  A700: '#304ffe'\n};\nexport default indigo;","var pink = {\n  50: '#fce4ec',\n  100: '#f8bbd0',\n  200: '#f48fb1',\n  300: '#f06292',\n  400: '#ec407a',\n  500: '#e91e63',\n  600: '#d81b60',\n  700: '#c2185b',\n  800: '#ad1457',\n  900: '#880e4f',\n  A100: '#ff80ab',\n  A200: '#ff4081',\n  A400: '#f50057',\n  A700: '#c51162'\n};\nexport default pink;","var red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nexport default red;","var orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nexport default orange;","var blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nexport default blue;","var green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nexport default green;","import { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@material-ui/utils\";\n\n/* eslint-disable no-use-before-define */\n\n/**\n * Returns a number whose value is limited to the given range.\n *\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(value) {\n  var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(\"Material-UI: The value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\"));\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n *\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\n\n\nexport function hexToRgb(color) {\n  color = color.substr(1);\n  var re = new RegExp(\".{1,\".concat(color.length >= 6 ? 2 : 1, \"}\"), 'g');\n  var colors = color.match(re);\n\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(function (n) {\n      return n + n;\n    });\n  }\n\n  return colors ? \"rgb\".concat(colors.length === 4 ? 'a' : '', \"(\").concat(colors.map(function (n, index) {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', '), \")\") : '';\n}\n\nfunction intToHex(int) {\n  var hex = int.toString(16);\n  return hex.length === 1 ? \"0\".concat(hex) : hex;\n}\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n *\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\n\n\nexport function rgbToHex(color) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  var _decomposeColor = decomposeColor(color),\n      values = _decomposeColor.values;\n\n  return \"#\".concat(values.map(function (n) {\n    return intToHex(n);\n  }).join(''));\n}\n/**\n * Converts a color from hsl format to rgb format.\n *\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\n\nexport function hslToRgb(color) {\n  color = decomposeColor(color);\n  var _color = color,\n      values = _color.values;\n  var h = values[0];\n  var s = values[1] / 100;\n  var l = values[2] / 100;\n  var a = s * Math.min(l, 1 - l);\n\n  var f = function f(n) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n    return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  };\n\n  var type = 'rgb';\n  var rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({\n    type: type,\n    values: rgb\n  });\n}\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\n\nexport function decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  var marker = color.indexOf('(');\n  var type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? \"Material-UI: Unsupported `\".concat(color, \"` color.\\nWe support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().\") : _formatMuiErrorMessage(3, color));\n  }\n\n  var values = color.substring(marker + 1, color.length - 1).split(',');\n  values = values.map(function (value) {\n    return parseFloat(value);\n  });\n  return {\n    type: type,\n    values: values\n  };\n}\n/**\n * Converts a color object with type and values to a string.\n *\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\n\nexport function recomposeColor(color) {\n  var type = color.type;\n  var values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map(function (n, i) {\n      return i < 3 ? parseInt(n, 10) : n;\n    });\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = \"\".concat(values[1], \"%\");\n    values[2] = \"\".concat(values[2], \"%\");\n  }\n\n  return \"\".concat(type, \"(\").concat(values.join(', '), \")\");\n}\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\n\nexport function getContrastRatio(foreground, background) {\n  var lumA = getLuminance(foreground);\n  var lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\n\nexport function getLuminance(color) {\n  color = decomposeColor(color);\n  var rgb = color.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(function (val) {\n    val /= 255; // normalized\n\n    return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n  }); // Truncate at 3 digits\n\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function emphasize(color) {\n  var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} value - value to set the alpha channel to in the range 0 -1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function fade(color, value) {\n  color = decomposeColor(color);\n  value = clamp(value);\n\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n\n  color.values[3] = value;\n  return recomposeColor(color);\n}\n/**\n * Darkens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}\n/**\n * Lightens a color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\n\nexport function lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (color.type.indexOf('hsl') !== -1) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.indexOf('rgb') !== -1) {\n    for (var i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(color);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@material-ui/utils\";\nimport { deepmerge } from '@material-ui/utils';\nimport common from '../colors/common';\nimport grey from '../colors/grey';\nimport indigo from '../colors/indigo';\nimport pink from '../colors/pink';\nimport red from '../colors/red';\nimport orange from '../colors/orange';\nimport blue from '../colors/blue';\nimport green from '../colors/green';\nimport { darken, getContrastRatio, lighten } from './colorManipulator';\nexport var light = {\n  // The colors used to style the text.\n  text: {\n    // The most important text.\n    primary: 'rgba(0, 0, 0, 0.87)',\n    // Secondary text.\n    secondary: 'rgba(0, 0, 0, 0.54)',\n    // Disabled text have even lower visual prominence.\n    disabled: 'rgba(0, 0, 0, 0.38)',\n    // Text hints.\n    hint: 'rgba(0, 0, 0, 0.38)'\n  },\n  // The color used to divide different elements.\n  divider: 'rgba(0, 0, 0, 0.12)',\n  // The background colors used to style the surfaces.\n  // Consistency between these values is important.\n  background: {\n    paper: common.white,\n    default: grey[50]\n  },\n  // The colors used to style the action elements.\n  action: {\n    // The color of an active action like an icon button.\n    active: 'rgba(0, 0, 0, 0.54)',\n    // The color of an hovered action.\n    hover: 'rgba(0, 0, 0, 0.04)',\n    hoverOpacity: 0.04,\n    // The color of a selected action.\n    selected: 'rgba(0, 0, 0, 0.08)',\n    selectedOpacity: 0.08,\n    // The color of a disabled action.\n    disabled: 'rgba(0, 0, 0, 0.26)',\n    // The background color of a disabled action.\n    disabledBackground: 'rgba(0, 0, 0, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(0, 0, 0, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.12\n  }\n};\nexport var dark = {\n  text: {\n    primary: common.white,\n    secondary: 'rgba(255, 255, 255, 0.7)',\n    disabled: 'rgba(255, 255, 255, 0.5)',\n    hint: 'rgba(255, 255, 255, 0.5)',\n    icon: 'rgba(255, 255, 255, 0.5)'\n  },\n  divider: 'rgba(255, 255, 255, 0.12)',\n  background: {\n    paper: grey[800],\n    default: '#303030'\n  },\n  action: {\n    active: common.white,\n    hover: 'rgba(255, 255, 255, 0.08)',\n    hoverOpacity: 0.08,\n    selected: 'rgba(255, 255, 255, 0.16)',\n    selectedOpacity: 0.16,\n    disabled: 'rgba(255, 255, 255, 0.3)',\n    disabledBackground: 'rgba(255, 255, 255, 0.12)',\n    disabledOpacity: 0.38,\n    focus: 'rgba(255, 255, 255, 0.12)',\n    focusOpacity: 0.12,\n    activatedOpacity: 0.24\n  }\n};\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  var tonalOffsetLight = tonalOffset.light || tonalOffset;\n  var tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = lighten(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = darken(intent.main, tonalOffsetDark);\n    }\n  }\n}\n\nexport default function createPalette(palette) {\n  var _palette$primary = palette.primary,\n      primary = _palette$primary === void 0 ? {\n    light: indigo[300],\n    main: indigo[500],\n    dark: indigo[700]\n  } : _palette$primary,\n      _palette$secondary = palette.secondary,\n      secondary = _palette$secondary === void 0 ? {\n    light: pink.A200,\n    main: pink.A400,\n    dark: pink.A700\n  } : _palette$secondary,\n      _palette$error = palette.error,\n      error = _palette$error === void 0 ? {\n    light: red[300],\n    main: red[500],\n    dark: red[700]\n  } : _palette$error,\n      _palette$warning = palette.warning,\n      warning = _palette$warning === void 0 ? {\n    light: orange[300],\n    main: orange[500],\n    dark: orange[700]\n  } : _palette$warning,\n      _palette$info = palette.info,\n      info = _palette$info === void 0 ? {\n    light: blue[300],\n    main: blue[500],\n    dark: blue[700]\n  } : _palette$info,\n      _palette$success = palette.success,\n      success = _palette$success === void 0 ? {\n    light: green[300],\n    main: green[500],\n    dark: green[700]\n  } : _palette$success,\n      _palette$type = palette.type,\n      type = _palette$type === void 0 ? 'light' : _palette$type,\n      _palette$contrastThre = palette.contrastThreshold,\n      contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n      _palette$tonalOffset = palette.tonalOffset,\n      tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n      other = _objectWithoutProperties(palette, [\"primary\", \"secondary\", \"error\", \"warning\", \"info\", \"success\", \"type\", \"contrastThreshold\", \"tonalOffset\"]); // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n\n\n  function getContrastText(background) {\n    var contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n    if (process.env.NODE_ENV !== 'production') {\n      var contrast = getContrastRatio(background, contrastText);\n\n      if (contrast < 3) {\n        console.error([\"Material-UI: The contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n\n    return contrastText;\n  }\n\n  var augmentColor = function augmentColor(color) {\n    var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n    var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n    var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n    color = _extends({}, color);\n\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n\n    if (!color.main) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\nThe color object needs to have a `main` property or a `\".concat(mainShade, \"` property.\") : _formatMuiErrorMessage(4, mainShade));\n    }\n\n    if (typeof color.main !== 'string') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? \"Material-UI: The color provided to augmentColor(color) is invalid.\\n`color.main` should be a string, but `\".concat(JSON.stringify(color.main), \"` was provided instead.\\n\\nDid you intend to use one of the following approaches?\\n\\nimport {\\xA0green } from \\\"@material-ui/core/colors\\\";\\n\\nconst theme1 = createMuiTheme({ palette: {\\n  primary: green,\\n} });\\n\\nconst theme2 = createMuiTheme({ palette: {\\n  primary: { main: green[500] },\\n} });\") : _formatMuiErrorMessage(5, JSON.stringify(color.main)));\n    }\n\n    addLightOrDark(color, 'light', lightShade, tonalOffset);\n    addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n\n    return color;\n  };\n\n  var types = {\n    dark: dark,\n    light: light\n  };\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (!types[type]) {\n      console.error(\"Material-UI: The palette type `\".concat(type, \"` is not supported.\"));\n    }\n  }\n\n  var paletteOutput = deepmerge(_extends({\n    // A collection of common colors.\n    common: common,\n    // The palette type, can be light or dark.\n    type: type,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor(primary),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor(error),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor(warning),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor(info),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor(success),\n    // The grey colors.\n    grey: grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold: contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText: getContrastText,\n    // Generate a rich color object.\n    augmentColor: augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset: tonalOffset\n  }, types[type]), other);\n  return paletteOutput;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { deepmerge } from '@material-ui/utils';\n\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n  textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\n * @see @link{https://material.io/design/typography/the-type-system.html}\n * @see @link{https://material.io/design/typography/understanding-typography.html}\n */\n\nexport default function createTypography(palette, typography) {\n  var _ref = typeof typography === 'function' ? typography(palette) : typography,\n      _ref$fontFamily = _ref.fontFamily,\n      fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n      _ref$fontSize = _ref.fontSize,\n      fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n      _ref$fontWeightLight = _ref.fontWeightLight,\n      fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n      _ref$fontWeightRegula = _ref.fontWeightRegular,\n      fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n      _ref$fontWeightMedium = _ref.fontWeightMedium,\n      fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n      _ref$fontWeightBold = _ref.fontWeightBold,\n      fontWeightBold = _ref$fontWeightBold === void 0 ? 700 : _ref$fontWeightBold,\n      _ref$htmlFontSize = _ref.htmlFontSize,\n      htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n      allVariants = _ref.allVariants,\n      pxToRem2 = _ref.pxToRem,\n      other = _objectWithoutProperties(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"fontWeightBold\", \"htmlFontSize\", \"allVariants\", \"pxToRem\"]);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('Material-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Material-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  var coef = fontSize / 14;\n\n  var pxToRem = pxToRem2 || function (size) {\n    return \"\".concat(size / htmlFontSize * coef, \"rem\");\n  };\n\n  var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n    return _extends({\n      fontFamily: fontFamily,\n      fontWeight: fontWeight,\n      fontSize: pxToRem(size),\n      // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n      lineHeight: lineHeight\n    }, fontFamily === defaultFontFamily ? {\n      letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n    } : {}, casing, allVariants);\n  };\n\n  var variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n  };\n  return deepmerge(_extends({\n    htmlFontSize: htmlFontSize,\n    pxToRem: pxToRem,\n    round: round,\n    // TODO v5: remove\n    fontFamily: fontFamily,\n    fontSize: fontSize,\n    fontWeightLight: fontWeightLight,\n    fontWeightRegular: fontWeightRegular,\n    fontWeightMedium: fontWeightMedium,\n    fontWeightBold: fontWeightBold\n  }, variants), other, {\n    clone: false // No need to clone deep\n\n  });\n}","var shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n  return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n} // Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\n\n\nvar shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","var shape = {\n  borderRadius: 4\n};\nexport default shape;","import { deepmerge } from '@material-ui/utils';\n\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n\n  return deepmerge(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n\n  });\n}\n\nexport default merge;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport PropTypes from 'prop-types';\nimport merge from './merge'; // The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\n\nvar values = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920\n};\nvar defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: function up(key) {\n    return \"@media (min-width:\".concat(values[key], \"px)\");\n  }\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!props.theme) {\n      console.error('Material-UI: You are calling a style function without a theme value.');\n    }\n  }\n\n  if (Array.isArray(propValue)) {\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce(function (acc, item, index) {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n\n  if (_typeof(propValue) === 'object') {\n    var _themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n\n    return Object.keys(propValue).reduce(function (acc, breakpoint) {\n      acc[_themeBreakpoints.up(breakpoint)] = styleFromPropValue(propValue[breakpoint]);\n      return acc;\n    }, {});\n  }\n\n  var output = styleFromPropValue(propValue);\n  return output;\n}\n\nfunction breakpoints(styleFunction) {\n  var newStyleFunction = function newStyleFunction(props) {\n    var base = styleFunction(props);\n    var themeBreakpoints = props.theme.breakpoints || defaultBreakpoints;\n    var extended = themeBreakpoints.keys.reduce(function (acc, key) {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction(_extends({\n          theme: props.theme\n        }, props[key]));\n      }\n\n      return acc;\n    }, null);\n    return merge(base, extended);\n  };\n\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? _extends({}, styleFunction.propTypes, {\n    xs: PropTypes.object,\n    sm: PropTypes.object,\n    md: PropTypes.object,\n    lg: PropTypes.object,\n    xl: PropTypes.object\n  }) : {};\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl'].concat(_toConsumableArray(styleFunction.filterProps));\n  return newStyleFunction;\n}\n\nexport default breakpoints;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport responsivePropType from './responsivePropType';\nimport { handleBreakpoints } from './breakpoints';\nimport merge from './merge';\nimport memoize from './memoize';\nvar properties = {\n  m: 'margin',\n  p: 'padding'\n};\nvar directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nvar aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n}; // memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\n\nvar getCssProperties = memoize(function (prop) {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n\n  var _prop$split = prop.split(''),\n      _prop$split2 = _slicedToArray(_prop$split, 2),\n      a = _prop$split2[0],\n      b = _prop$split2[1];\n\n  var property = properties[a];\n  var direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(function (dir) {\n    return property + dir;\n  }) : [property + direction];\n});\nvar spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY'];\nexport function createUnarySpacing(theme) {\n  var themeSpacing = theme.spacing || 8;\n\n  if (typeof themeSpacing === 'number') {\n    return function (abs) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof abs !== 'number') {\n          console.error(\"Material-UI: Expected spacing argument to be a number, got \".concat(abs, \".\"));\n        }\n      }\n\n      return themeSpacing * abs;\n    };\n  }\n\n  if (Array.isArray(themeSpacing)) {\n    return function (abs) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (abs > themeSpacing.length - 1) {\n          console.error([\"Material-UI: The value provided (\".concat(abs, \") overflows.\"), \"The supported values are: \".concat(JSON.stringify(themeSpacing), \".\"), \"\".concat(abs, \" > \").concat(themeSpacing.length - 1, \", you need to add the missing values.\")].join('\\n'));\n        }\n      }\n\n      return themeSpacing[abs];\n    };\n  }\n\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    console.error([\"Material-UI: The `theme.spacing` value (\".concat(themeSpacing, \") is invalid.\"), 'It should be a number, an array or a function.'].join('\\n'));\n  }\n\n  return function () {\n    return undefined;\n  };\n}\n\nfunction getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n\n  var abs = Math.abs(propValue);\n  var transformed = transformer(abs);\n\n  if (propValue >= 0) {\n    return transformed;\n  }\n\n  if (typeof transformed === 'number') {\n    return -transformed;\n  }\n\n  return \"-\".concat(transformed);\n}\n\nfunction getStyleFromPropValue(cssProperties, transformer) {\n  return function (propValue) {\n    return cssProperties.reduce(function (acc, cssProperty) {\n      acc[cssProperty] = getValue(transformer, propValue);\n      return acc;\n    }, {});\n  };\n}\n\nfunction spacing(props) {\n  var theme = props.theme;\n  var transformer = createUnarySpacing(theme);\n  return Object.keys(props).map(function (prop) {\n    // Using a hash computation over an array iteration could be faster, but with only 28 items,\n    // it's doesn't worth the bundle size.\n    if (spacingKeys.indexOf(prop) === -1) {\n      return null;\n    }\n\n    var cssProperties = getCssProperties(prop);\n    var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n    var propValue = props[prop];\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  }).reduce(merge, {});\n}\n\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce(function (obj, key) {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n\n    return cache[arg];\n  };\n}","import { createUnarySpacing } from '@material-ui/system';\nvar warnOnce;\nexport default function createSpacing() {\n  var spacingInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 8;\n\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  } // Material Design layouts are visually balanced. Most measurements align to an 8dp grid applied, which aligns both spacing and the overall layout.\n  // Smaller components, such as icons and type, can align to a 4dp grid.\n  // https://material.io/design/layout/understanding-layout.html#usage\n\n\n  var transform = createUnarySpacing({\n    spacing: spacingInput\n  });\n\n  var spacing = function spacing() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(args.length <= 4)) {\n        console.error(\"Material-UI: Too many arguments provided, expected between 0 and 4, got \".concat(args.length));\n      }\n    }\n\n    if (args.length === 0) {\n      return transform(1);\n    }\n\n    if (args.length === 1) {\n      return transform(args[0]);\n    }\n\n    return args.map(function (argument) {\n      if (typeof argument === 'string') {\n        return argument;\n      }\n\n      var output = transform(argument);\n      return typeof output === 'number' ? \"\".concat(output, \"px\") : output;\n    }).join(' ');\n  }; // Backward compatibility, to remove in v5.\n\n\n  Object.defineProperty(spacing, 'unit', {\n    get: function get() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!warnOnce || process.env.NODE_ENV === 'test') {\n          console.error(['Material-UI: theme.spacing.unit usage has been deprecated.', 'It will be removed in v5.', 'You can replace `theme.spacing.unit * y` with `theme.spacing(y)`.', '', 'You can use the `https://github.com/mui-org/material-ui/tree/master/packages/material-ui-codemod/README.md#theme-spacing-api` migration helper to make the process smoother.'].join('\\n'));\n        }\n\n        warnOnce = true;\n      }\n\n      return spacingInput;\n    }\n  });\n  spacing.mui = true;\n  return spacing;\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport var easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nexport var duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\n\nfunction formatMs(milliseconds) {\n  return \"\".concat(Math.round(milliseconds), \"ms\");\n}\n/**\n * @param {string|Array} props\n * @param {object} param\n * @param {string} param.prop\n * @param {number} param.duration\n * @param {string} param.easing\n * @param {number} param.delay\n */\n\n\nexport default {\n  easing: easing,\n  duration: duration,\n  create: function create() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var _options$duration = options.duration,\n        durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n        _options$easing = options.easing,\n        easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n        _options$delay = options.delay,\n        delay = _options$delay === void 0 ? 0 : _options$delay,\n        other = _objectWithoutProperties(options, [\"duration\", \"easing\", \"delay\"]);\n\n    if (process.env.NODE_ENV !== 'production') {\n      var isString = function isString(value) {\n        return typeof value === 'string';\n      };\n\n      var isNumber = function isNumber(value) {\n        return !isNaN(parseFloat(value));\n      };\n\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('Material-UI: Argument \"props\" must be a string or Array.');\n      }\n\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(\"Material-UI: Argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\"));\n      }\n\n      if (!isString(easingOption)) {\n        console.error('Material-UI: Argument \"easing\" must be a string.');\n      }\n\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('Material-UI: Argument \"delay\" must be a number or a string.');\n      }\n\n      if (Object.keys(other).length !== 0) {\n        console.error(\"Material-UI: Unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"].\"));\n      }\n    }\n\n    return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n      return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n    }).join(',');\n  },\n  getAutoHeightDuration: function getAutoHeightDuration(height) {\n    if (!height) {\n      return 0;\n    }\n\n    var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n    return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n  }\n};","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n  mobileStepper: 1000,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nexport default zIndex;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { deepmerge } from '@material-ui/utils';\nimport createBreakpoints from './createBreakpoints';\nimport createMixins from './createMixins';\nimport createPalette from './createPalette';\nimport createTypography from './createTypography';\nimport shadows from './shadows';\nimport shape from './shape';\nimport createSpacing from './createSpacing';\nimport transitions from './transitions';\nimport zIndex from './zIndex';\n\nfunction createMuiTheme() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var _options$breakpoints = options.breakpoints,\n      breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n      _options$mixins = options.mixins,\n      mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n      _options$palette = options.palette,\n      paletteInput = _options$palette === void 0 ? {} : _options$palette,\n      spacingInput = options.spacing,\n      _options$typography = options.typography,\n      typographyInput = _options$typography === void 0 ? {} : _options$typography,\n      other = _objectWithoutProperties(options, [\"breakpoints\", \"mixins\", \"palette\", \"spacing\", \"typography\"]);\n\n  var palette = createPalette(paletteInput);\n  var breakpoints = createBreakpoints(breakpointsInput);\n  var spacing = createSpacing(spacingInput);\n  var muiTheme = deepmerge({\n    breakpoints: breakpoints,\n    direction: 'ltr',\n    mixins: createMixins(breakpoints, spacing, mixinsInput),\n    overrides: {},\n    // Inject custom styles\n    palette: palette,\n    props: {},\n    // Provide default props\n    shadows: shadows,\n    typography: createTypography(palette, typographyInput),\n    spacing: spacing,\n    shape: shape,\n    transitions: transitions,\n    zIndex: zIndex\n  }, other);\n\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  muiTheme = args.reduce(function (acc, argument) {\n    return deepmerge(acc, argument);\n  }, muiTheme);\n\n  if (process.env.NODE_ENV !== 'production') {\n    var pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected'];\n\n    var traverse = function traverse(node, parentKey) {\n      var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n      for (key in node) {\n        var child = node[key];\n\n        if (depth === 1) {\n          if (key.indexOf('Mui') === 0 && child) {\n            traverse(child, key, depth + 1);\n          }\n        } else if (pseudoClasses.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            console.error([\"Material-UI: The `\".concat(parentKey, \"` component increases \") + \"the CSS specificity of the `\".concat(key, \"` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify({\n              root: _defineProperty({}, \"&$\".concat(key), child)\n            }, null, 2), '', 'https://material-ui.com/r/pseudo-classes-guide'].join('\\n'));\n          } // Remove the style to prevent global conflicts.\n\n\n          node[key] = {};\n        }\n      }\n    };\n\n    traverse(muiTheme.overrides);\n  }\n\n  return muiTheme;\n}\n\nexport default createMuiTheme;","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/desktop-picker');\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n\n/**\n * The type of the React {@code Component} props of\n * {@link DesktopSourcePreview}.\n */\ntype Props = {\n\n    /**\n     * The callback to invoke when the component is clicked. The id of the\n     * clicked on DesktopCapturerSource will be passed in.\n     */\n    onClick: Function,\n\n    /**\n     * The callback to invoke when the component is double clicked. The id of\n     * the DesktopCapturerSource will be passed in.\n     */\n    onDoubleClick: Function,\n\n    /**\n     * The indicator which determines whether this DesktopSourcePreview is\n     * selected. If true, the 'is-selected' CSS class will be added to the root\n     * of Component.\n     */\n    selected: boolean,\n\n    /**\n     * The DesktopCapturerSource to display.\n     */\n    source: Object,\n\n    /**\n     * The source type of the DesktopCapturerSources to display.\n     */\n    type: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React component for displaying a preview of a DesktopCapturerSource.\n *\n * @extends Component\n */\nclass DesktopSourcePreview extends Component<Props> {\n    /**\n     * Initializes a new DesktopSourcePreview instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n        this._onDoubleClick = this._onDoubleClick.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const selectedClass = this.props.selected ? 'is-selected' : '';\n        const displayClasses = `desktop-picker-source ${selectedClass}`;\n\n        return (\n            <div\n                className = { displayClasses }\n                onClick = { this._onClick }\n                onDoubleClick = { this._onDoubleClick }>\n                <div className = 'desktop-source-preview-image-container'>\n                    <img\n                        alt = { this.props.t('welcomepage.logo.desktopPreviewThumbnail') }\n                        className = 'desktop-source-preview-thumbnail'\n                        src = { this.props.source.thumbnail.toDataURL() } />\n                </div>\n                <div className = 'desktop-source-preview-label'>\n                    { this.props.source.name }\n                </div>\n            </div>\n        );\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Invokes the passed in onClick callback.\n     *\n     * @returns {void}\n     */\n    _onClick() {\n        const { source, type } = this.props;\n\n        this.props.onClick(source.id, type);\n    }\n\n    _onDoubleClick: () => void;\n\n    /**\n     * Invokes the passed in onDoubleClick callback.\n     *\n     * @returns {void}\n     */\n    _onDoubleClick() {\n        const { source, type } = this.props;\n\n        this.props.onDoubleClick(source.id, type);\n    }\n}\n\nexport default translate(DesktopSourcePreview);\n","/* @flow */\n\nimport { Checkbox } from '@atlaskit/checkbox';\nimport Spinner from '@atlaskit/spinner';\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Platform } from '../../base/react';\n\nimport DesktopSourcePreview from './DesktopSourcePreview';\n\n/**\n * The type of the React {@code Component} props of {@link DesktopPickerPane}.\n */\ntype Props = {\n\n    /**\n     * The handler to be invoked when a DesktopSourcePreview is clicked.\n     */\n    onClick: Function,\n\n    /**\n     * The handler to be invoked when a DesktopSourcePreview is double clicked.\n     */\n    onDoubleClick: Function,\n\n    /**\n     * The handler to be invoked if the users checks the audio screen sharing checkbox.\n     */\n    onShareAudioChecked: Function,\n\n    /**\n     * The id of the DesktopCapturerSource that is currently selected.\n     */\n    selectedSourceId: string,\n\n    /**\n     * An array of DesktopCapturerSources.\n     */\n    sources: Array<Object>,\n\n    /**\n     * The source type of the DesktopCapturerSources to display.\n     */\n    type: string,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * React component for showing a grid of DesktopSourcePreviews.\n *\n * @extends Component\n */\nclass DesktopPickerPane extends Component<Props> {\n\n    /**\n     * Initializes a new DesktopPickerPane instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onShareAudioCheck = this._onShareAudioCheck.bind(this);\n    }\n\n    _onShareAudioCheck: (Object) => void;\n\n    /**\n     * Function to be called when the Checkbox is used.\n     *\n     * @param {boolean} checked - Checkbox status (checked or not).\n     * @returns {void}\n     */\n    _onShareAudioCheck({ target: { checked } }) {\n        this.props.onShareAudioChecked(checked);\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            onClick,\n            onDoubleClick,\n            selectedSourceId,\n            sources,\n            type,\n            t\n        } = this.props;\n\n        const classNames\n            = `desktop-picker-pane default-scrollbar source-type-${type}`;\n        const previews\n            = sources\n                ? sources.map(source => (\n                    <DesktopSourcePreview\n                        key = { source.id }\n                        onClick = { onClick }\n                        onDoubleClick = { onDoubleClick }\n                        selected = { source.id === selectedSourceId }\n                        source = { source }\n                        type = { type } />))\n                : (\n                    <div className = 'desktop-picker-pane-spinner'>\n                        <Spinner\n                            isCompleting = { false }\n                            size = 'medium' />\n                    </div>\n                );\n\n        let checkBox;\n\n        // Only display the share audio checkbox if we're on windows and on\n        // desktop sharing tab.\n        // App window and Mac OS screen sharing doesn't work with system audio.\n        if (type === 'screen' && Platform.OS === 'windows') {\n            checkBox = (<Checkbox\n                label = { t('dialog.screenSharingAudio') }\n                name = 'share-system-audio'\n                onChange = { this._onShareAudioCheck } />);\n        }\n\n        return (\n            <div className = { classNames }>\n                { previews }\n                { checkBox }\n            </div>\n        );\n    }\n}\n\nexport default translate(DesktopPickerPane);\n","// @flow\n\nimport Tabs from '@atlaskit/tabs';\nimport React, { PureComponent } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { Dialog, hideDialog } from '../../base/dialog';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { obtainDesktopSources } from '../functions';\n\nimport DesktopPickerPane from './DesktopPickerPane';\n\n/**\n * The size of the requested thumbnails.\n *\n * @type {Object}\n */\nconst THUMBNAIL_SIZE = {\n    height: 300,\n    width: 300\n};\n\n/**\n * The sources polling interval in ms.\n *\n * @type {int}\n */\nconst UPDATE_INTERVAL = 2000;\n\n/**\n * The default selected tab.\n *\n * @type {string}\n */\nconst DEFAULT_TAB_TYPE = 'screen';\n\nconst TAB_LABELS = {\n    screen: 'dialog.yourEntireScreen',\n    window: 'dialog.applicationWindow'\n};\n\nconst VALID_TYPES = Object.keys(TAB_LABELS);\n\n/**\n * The type of the React {@code Component} props of {@link DesktopPicker}.\n */\ntype Props = {\n\n    /**\n     * An array with desktop sharing sources to be displayed.\n     */\n    desktopSharingSources: Array<string>,\n\n    /**\n     * Used to request DesktopCapturerSources.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The callback to be invoked when the component is closed or when a\n     * DesktopCapturerSource has been chosen.\n     */\n    onSourceChoose: Function,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link DesktopPicker}.\n */\ntype State = {\n\n    /**\n     * The state of the audio screen share checkbox.\n     */\n    screenShareAudio: boolean,\n\n    /**\n     * The currently highlighted DesktopCapturerSource.\n     */\n    selectedSource: Object,\n\n    /**\n     * The desktop source type currently being displayed.\n     */\n    selectedTab: number,\n\n    /**\n     * An object containing all the DesktopCapturerSources.\n     */\n    sources: Object,\n\n    /**\n     * The desktop source types to fetch previews for.\n     */\n    types: Array<string>\n};\n\n\n/**\n * React component for DesktopPicker.\n *\n * @extends Component\n */\nclass DesktopPicker extends PureComponent<Props, State> {\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props) {\n        return {\n            types: DesktopPicker._getValidTypes(props.desktopSharingSources)\n        };\n    }\n\n    /**\n     * Extracts only the valid types from the passed {@code types}.\n     *\n     * @param {Array<string>} types - The types to filter.\n     * @private\n     * @returns {Array<string>} The filtered types.\n     */\n    static _getValidTypes(types = []) {\n        return types.filter(\n            type => VALID_TYPES.includes(type));\n    }\n\n    _poller = null;\n\n    state = {\n        screenShareAudio: false,\n        selectedSource: {},\n        selectedTab: 0,\n        sources: {},\n        types: []\n    };\n\n    /**\n     * Stores the type of the selected tab.\n     *\n     * @type {string}\n     */\n    _selectedTabType = DEFAULT_TAB_TYPE;\n\n    /**\n     * Initializes a new DesktopPicker instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onCloseModal = this._onCloseModal.bind(this);\n        this._onPreviewClick = this._onPreviewClick.bind(this);\n        this._onShareAudioChecked = this._onShareAudioChecked.bind(this);\n        this._onSubmit = this._onSubmit.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n        this._updateSources = this._updateSources.bind(this);\n\n        this.state.types\n            = DesktopPicker._getValidTypes(this.props.desktopSharingSources);\n    }\n\n    /**\n     * Starts polling.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._startPolling();\n    }\n\n    /**\n     * Clean up component and DesktopCapturerSource store state.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._stopPolling();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        return (\n            <Dialog\n                isModal = { false }\n                okDisabled = { Boolean(!this.state.selectedSource.id) }\n                okKey = 'dialog.Share'\n                onCancel = { this._onCloseModal }\n                onSubmit = { this._onSubmit }\n                titleKey = 'dialog.shareYourScreen'\n                width = 'medium' >\n                { this._renderTabs() }\n            </Dialog>\n        );\n    }\n\n    /**\n     * Computates the selected source.\n     *\n     * @param {Object} sources - The available sources.\n     * @returns {Object} The selectedSource value.\n     */\n    _getSelectedSource(sources = {}) {\n        const { selectedSource } = this.state;\n\n        /**\n         * If there are no sources for this type (or no sources for any type)\n         * we can't select anything.\n         */\n        if (!Array.isArray(sources[this._selectedTabType])\n                || sources[this._selectedTabType].length <= 0) {\n            return {};\n        }\n\n        /**\n         * Select the first available source for this type in the following\n         * scenarios:\n         * 1) Nothing is yet selected.\n         * 2) Tab change.\n         * 3) The selected source is no longer available.\n         */\n        if (!selectedSource // scenario 1)\n                || selectedSource.type !== this._selectedTabType // scenario 2)\n                || !sources[this._selectedTabType].some( // scenario 3)\n                        source => source.id === selectedSource.id)) {\n            return {\n                id: sources[this._selectedTabType][0].id,\n                type: this._selectedTabType\n            };\n        }\n\n        /**\n         * For all other scenarios don't change the selection.\n         */\n        return selectedSource;\n    }\n\n    _onCloseModal: (?string, string, ?boolean) => void;\n\n    /**\n     * Dispatches an action to hide the DesktopPicker and invokes the passed in\n     * callback with a selectedSource, if any.\n     *\n     * @param {string} [id] - The id of the DesktopCapturerSource to pass into\n     * the onSourceChoose callback.\n     * @param {string} type - The type of the DesktopCapturerSource to pass into\n     * the onSourceChoose callback.\n     * @param {boolean} screenShareAudio - Whether or not to add system audio to\n     * screen sharing session.\n     * @returns {void}\n     */\n    _onCloseModal(id = '', type, screenShareAudio = false) {\n        this.props.onSourceChoose(id, type, screenShareAudio);\n        this.props.dispatch(hideDialog());\n    }\n\n    _onPreviewClick: (string, string) => void;\n\n    /**\n     * Sets the currently selected DesktopCapturerSource.\n     *\n     * @param {string} id - The id of DesktopCapturerSource.\n     * @param {string} type - The type of DesktopCapturerSource.\n     * @returns {void}\n     */\n    _onPreviewClick(id, type) {\n        this.setState({\n            selectedSource: {\n                id,\n                type\n            }\n        });\n    }\n\n    _onSubmit: () => void;\n\n    /**\n     * Request to close the modal and execute callbacks with the selected source\n     * id.\n     *\n     * @returns {void}\n     */\n    _onSubmit() {\n        const { selectedSource: { id, type }, screenShareAudio } = this.state;\n\n        this._onCloseModal(id, type, screenShareAudio);\n    }\n\n    _onTabSelected: () => void;\n\n    /**\n     * Stores the selected tab and updates the selected source via\n     * {@code _getSelectedSource}.\n     *\n     * @param {Object} tab - The configuration passed into atlaskit tabs to\n     * describe how to display the selected tab.\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @returns {void}\n     */\n    _onTabSelected(tab, tabIndex) { // eslint-disable-line no-unused-vars\n        const { types, sources } = this.state;\n\n        this._selectedTabType = types[tabIndex];\n\n        // When we change tabs also reset the screenShareAudio state so we don't\n        // use the option from one tab when sharing from another.\n        this.setState({\n            screenShareAudio: false,\n            selectedSource: this._getSelectedSource(sources),\n            selectedTab: tabIndex\n        });\n    }\n\n    _onShareAudioChecked: (boolean) => void;\n\n    /**\n     * Set the screenSharingAudio state indicating whether or not to also share\n     * system audio.\n     *\n     * @param {boolean} checked - Share audio or not.\n     * @returns {void}\n     */\n    _onShareAudioChecked(checked) {\n        this.setState({ screenShareAudio: checked });\n    }\n\n    /**\n     * Configures and renders the tabs for display.\n     *\n     * @private\n     * @returns {ReactElement}\n     */\n    _renderTabs() {\n        const { selectedSource, sources, types } = this.state;\n        const { t } = this.props;\n        const tabs\n            = types.map(\n                type => {\n                    return {\n                        content: <DesktopPickerPane\n                            key = { type }\n                            onClick = { this._onPreviewClick }\n                            onDoubleClick = { this._onSubmit }\n                            onShareAudioChecked = { this._onShareAudioChecked }\n                            selectedSourceId = { selectedSource.id }\n                            sources = { sources[type] }\n                            type = { type } />,\n                        label: t(TAB_LABELS[type])\n                    };\n                });\n\n        return (\n            <Tabs\n                onSelect = { this._onTabSelected }\n                selected = { this.state.selectedTab }\n                tabs = { tabs } />);\n    }\n\n    /**\n     * Create an interval to update known available DesktopCapturerSources.\n     *\n     * @private\n     * @returns {void}\n     */\n    _startPolling() {\n        this._stopPolling();\n        this._updateSources();\n        this._poller = window.setInterval(this._updateSources, UPDATE_INTERVAL);\n    }\n\n    /**\n     * Cancels the interval to update DesktopCapturerSources.\n     *\n     * @private\n     * @returns {void}\n     */\n    _stopPolling() {\n        window.clearInterval(this._poller);\n        this._poller = null;\n    }\n\n    _updateSources: () => void;\n\n    /**\n     * Obtains the desktop sources and updates state with them.\n     *\n     * @private\n     * @returns {void}\n     */\n    _updateSources() {\n        const { types } = this.state;\n\n        if (types.length > 0) {\n            obtainDesktopSources(\n                this.state.types,\n                { thumbnailSize: THUMBNAIL_SIZE }\n            )\n            .then(sources => {\n                const selectedSource = this._getSelectedSource(sources);\n\n                // TODO: Maybe check if we have stopped the timer and unmounted\n                // the component.\n                this.setState({\n                    sources,\n                    selectedSource\n                });\n            })\n            .catch(() => { /* ignore */ });\n        }\n    }\n}\n\nexport default translate(connect()(DesktopPicker));\n","\nimport logger from './logger';\n\n/**\n * Begins a request to get available DesktopCapturerSources.\n *\n * @param {Array} types - An array with DesktopCapturerSource type strings.\n * @param {Object} options - Additional configuration for getting a list of\n * sources.\n * @param {Object} options.thumbnailSize - The desired height and width of the\n * return native image object used for the preview image of the source.\n * @returns {Function}\n */\nexport function obtainDesktopSources(types, options = {}) {\n    const capturerOptions = {\n        types\n    };\n\n    if (options.thumbnailSize) {\n        capturerOptions.thumbnailSize = options.thumbnailSize;\n    }\n\n    return new Promise((resolve, reject) => {\n        const { JitsiMeetElectron } = window;\n\n        if (JitsiMeetElectron && JitsiMeetElectron.obtainDesktopStreams) {\n            JitsiMeetElectron.obtainDesktopStreams(\n                sources => resolve(_seperateSourcesByType(sources)),\n                error => {\n                    logger.error(\n                        `Error while obtaining desktop sources: ${error}`);\n                    reject(error);\n                },\n                capturerOptions\n            );\n        } else {\n            const reason = 'Called JitsiMeetElectron.obtainDesktopStreams'\n                + ' but it is not defined';\n\n            logger.error(reason);\n\n            return Promise.reject(new Error(reason));\n        }\n    });\n}\n\n\n/**\n * Converts an array of DesktopCapturerSources to an object with types for keys\n * and values being an array with sources of the key's type.\n *\n * @param {Array} sources - DesktopCapturerSources.\n * @private\n * @returns {Object} An object with the sources split into separate arrays based\n * on source type.\n */\nfunction _seperateSourcesByType(sources = []) {\n    const sourcesByType = {\n        screen: [],\n        window: []\n    };\n\n    sources.forEach(source => {\n        const idParts = source.id.split(':');\n        const type = idParts[0];\n\n        if (sourcesByType[type]) {\n            sourcesByType[type].push(source);\n        }\n    });\n\n    return sourcesByType;\n}\n","import { openDialog } from '../base/dialog';\n\nimport { DesktopPicker } from './components';\n\n/**\n * Signals to open a dialog with the DesktopPicker component.\n *\n * @param {Object} options - Desktop sharing settings.\n * @param {Function} onSourceChoose - The callback to invoke when\n * a DesktopCapturerSource has been chosen.\n * @returns {Object}\n */\nexport function showDesktopPicker(options = {}, onSourceChoose) {\n    const { desktopSharingSources } = options;\n\n    return openDialog(DesktopPicker, {\n        desktopSharingSources,\n        onSourceChoose\n    });\n}\n","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  \", \";\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport styled from 'styled-components';\nexport default styled.div(_templateObject(), function (_ref) {\n  var shouldFitContainer = _ref.shouldFitContainer;\n  return shouldFitContainer ? '' : 'max-width: 300px;';\n});","var prefix = function prefix(key) {\n  return \"@atlaskit-private-do-not-use/dropdown-menu:\".concat(key);\n};\n\nexport var focusManagerContext = prefix('focus-manager');\nexport var selectionCacheContext = prefix('selection-cache');\nexport var selectionManagerContext = prefix('selection-manager');\nexport var clickManagerContext = prefix('click-manager');","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { clickManagerContext } from '../../util/contextNamespace';\n\nvar DropdownItemClickManager = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownItemClickManager, _Component);\n\n  var _super = _createSuper(DropdownItemClickManager);\n\n  function DropdownItemClickManager() {\n    var _this;\n\n    _classCallCheck(this, DropdownItemClickManager);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemClicked\", function (event) {\n      _this.props.onItemClicked(event);\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemClickManager, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return _defineProperty({}, clickManagerContext, {\n        itemClicked: this.handleItemClicked\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return DropdownItemClickManager;\n}(Component);\n\n_defineProperty(DropdownItemClickManager, \"childContextTypes\", _defineProperty({}, clickManagerContext, PropTypes.object));\n\nexport { DropdownItemClickManager as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { focusManagerContext } from '../../util/contextNamespace';\nimport { KEY_DOWN, KEY_TAB, KEY_UP } from '../../util/keys';\n\nvar DropdownItemFocusManager = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownItemFocusManager, _Component);\n\n  var _super = _createSuper(DropdownItemFocusManager);\n\n  function DropdownItemFocusManager() {\n    var _this;\n\n    _classCallCheck(this, DropdownItemFocusManager);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"registeredItems\", []);\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemRegistered\", function (itemId, itemNode) {\n      _this.registeredItems.push({\n        itemId: itemId,\n        itemNode: itemNode\n      });\n\n      if (_this.props.autoFocus && _this.registeredItems.length === 1) {\n        _this.focusedItemId = itemId;\n        itemNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemDeregistered\", function (itemId) {\n      _this.registeredItems = _this.registeredItems.filter(function (item) {\n        return item.itemId !== itemId;\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemFocused\", function (itemId) {\n      _this.focusedItemId = itemId;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemUpdated\", function (itemId, itemNode) {\n      var matchingIndex = -1;\n\n      for (var i = 0; i < _this.registeredItems.length; i++) {\n        if (_this.registeredItems[i].itemId === itemId) {\n          matchingIndex = i;\n          break;\n        }\n      }\n\n      if (matchingIndex === -1) {\n        _this.handleItemRegistered(itemId, itemNode);\n\n        return;\n      }\n\n      _this.registeredItems[matchingIndex].itemNode = itemNode;\n\n      if (_this.focusedItemIndex() === matchingIndex) {\n        itemNode.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusedItemIndex\", function () {\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          focusedItemId = _assertThisInitialize.focusedItemId,\n          registeredItems = _assertThisInitialize.registeredItems;\n\n      for (var i = 0; i < registeredItems.length; i++) {\n        if (registeredItems[i].itemId === focusedItemId) {\n          return i;\n        }\n      }\n\n      return -1;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyboard\", function (event) {\n      var key = event.key,\n          shiftKey = event.shiftKey;\n\n      var focusedItemIndex = _this.focusedItemIndex();\n\n      if (key === KEY_UP || key === KEY_DOWN) {\n        // We prevent default here to avoid page scrolling when up/down\n        // pressed while dropdown is focused.\n        event.preventDefault();\n\n        if (focusedItemIndex < 0) {\n          return;\n        }\n\n        var nextItemIndex = key === KEY_UP ? Math.max(0, focusedItemIndex - 1) : Math.min(_this.registeredItems.length - 1, focusedItemIndex + 1);\n\n        _this.registeredItems[nextItemIndex].itemNode.focus();\n      }\n\n      if (key === KEY_TAB) {\n        if (!shiftKey && focusedItemIndex === _this.registeredItems.length - 1) {\n          if (_this.props.close) {\n            _this.props.close({\n              event: event,\n              source: 'keydown'\n            });\n          }\n        }\n\n        if (shiftKey && focusedItemIndex === 0) {\n          if (_this.props.close) {\n            _this.props.close({\n              event: event,\n              source: 'keydown'\n            });\n          }\n        }\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemFocusManager, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return _defineProperty({}, focusManagerContext, {\n        itemFocused: this.handleItemFocused,\n        registerItem: this.handleItemRegistered,\n        deregisterItem: this.handleItemDeregistered,\n        updateItem: this.handleItemUpdated\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n      return /*#__PURE__*/React.createElement(\"div\", {\n        onKeyDown: this.handleKeyboard\n      }, this.props.children);\n    }\n  }]);\n\n  return DropdownItemFocusManager;\n}(Component);\n\n_defineProperty(DropdownItemFocusManager, \"childContextTypes\", _defineProperty({}, focusManagerContext, PropTypes.object));\n\nexport { DropdownItemFocusManager as default };","export var KEY_UP = 'ArrowUp';\nexport var KEY_DOWN = 'ArrowDown';\nexport var KEY_SPACE = ' ';\nexport var KEY_ENTER = 'Enter';\nexport var KEY_TAB = 'Tab';\nexport var KEY_ESC = 'Escape';","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport find from 'array-find';\nimport PropTypes from 'prop-types';\nimport { selectionCacheContext } from '../../util/contextNamespace';\n\nvar isItemInList = function isItemInList(itemList, itemId, groupId) {\n  return Boolean(find(itemList, function (item) {\n    return item.id === itemId && item.groupId === groupId;\n  }));\n};\n\nvar DropdownItemSelectionCache = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownItemSelectionCache, _Component);\n\n  var _super = _createSuper(DropdownItemSelectionCache);\n\n  function DropdownItemSelectionCache() {\n    var _this;\n\n    _classCallCheck(this, DropdownItemSelectionCache);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      lastCacheUpdate: 0\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"selectedItems\", []);\n\n    _defineProperty(_assertThisInitialized(_this), \"alreadyDefaultedItems\", []);\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemSelectionsChanged\", function (groupId, newGroupSelections) {\n      var newSelectedItems = [].concat(_toConsumableArray(_this.selectedItems.filter(function (item) {\n        return item.groupId !== groupId;\n      })), _toConsumableArray(newGroupSelections));\n      _this.selectedItems = newSelectedItems; // We store selectedItems in an instance variable (this.selectedItems) instead of state,\n      // because if multiple children update the cache at the same time it causes unexpected\n      // behaviour due to the asynchronous behaviour of setState. So we need to trigger setState\n      // with a different value to cause the children to be updated with their new selection values.\n\n      _this.setState({\n        lastCacheUpdate: Date.now()\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownItemSelectionCache, [{\n    key: \"getChildContext\",\n    // eslint-disable-line react/sort-comp\n    value: function getChildContext() {\n      var _this2 = this;\n\n      return _defineProperty({}, selectionCacheContext, {\n        // This function returns true/false describing whether the supplied navigation item\n        // (which must have a unique item and group ID) is currently selected - this is used\n        // by radio and checkbox dropdown items to retreive their 'selected' state when they\n        // re-mount, which happens when the dropdown is closed and then re-opened.\n        isItemSelected: function isItemSelected(groupId, itemId) {\n          return isItemInList(_this2.selectedItems, itemId, groupId);\n        },\n        itemsInGroup: function itemsInGroup(groupId) {\n          return _this2.selectedItems.filter(function (item) {\n            return item.groupId === groupId;\n          });\n        },\n        itemSelectionsChanged: this.handleItemSelectionsChanged,\n        hasItemAlreadyHadDefaultSelectedApplied: function hasItemAlreadyHadDefaultSelectedApplied(groupId, itemId) {\n          return isItemInList(_this2.alreadyDefaultedItems, itemId, groupId);\n        },\n        markItemAsDefaultApplied: function markItemAsDefaultApplied(groupId, itemId) {\n          _this2.alreadyDefaultedItems.push({\n            id: itemId,\n            groupId: groupId\n          });\n        }\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(\"div\", null, this.props.children);\n    }\n  }]);\n\n  return DropdownItemSelectionCache;\n}(Component);\n\n_defineProperty(DropdownItemSelectionCache, \"childContextTypes\", _defineProperty({}, selectionCacheContext, PropTypes.shape({\n  isItemSelected: PropTypes.func,\n  itemsInGroup: PropTypes.func,\n  itemSelectionsChanged: PropTypes.func\n})));\n\nexport { DropdownItemSelectionCache as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/no-array-index-key */\nimport React, { Component, Fragment } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport { uid } from 'react-uid';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport Button from '@atlaskit/button/custom-theme-button';\nimport Droplist, { Group, Item } from '@atlaskit/droplist';\nimport ExpandIcon from '@atlaskit/icon/glyph/chevron-down';\nimport WidthConstrainer from '../styled/WidthConstrainer';\nimport { KEY_DOWN, KEY_ENTER, KEY_SPACE } from '../util/keys';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport DropdownItemClickManager from './context/DropdownItemClickManager';\nimport DropdownItemFocusManager from './context/DropdownItemFocusManager';\nimport DropdownItemSelectionCache from './context/DropdownItemSelectionCache';\nexport var DropdownMenuStateless = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownMenuStateless, _Component);\n\n  var _super = _createSuper(DropdownMenuStateless);\n\n  function DropdownMenuStateless() {\n    var _this;\n\n    _classCallCheck(this, DropdownMenuStateless);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"dropdownListPositioned\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      id: uid({\n        id: _this.constructor.name\n      }),\n      autoFocusDropdownItems: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidMount\", function () {\n      if (_this.isUsingDeprecatedAPI()) {\n        if (process.env.NODE_ENV !== 'test' && process.env.NODE_ENV !== 'production' && !process.env.CI) {\n          // eslint-disable-next-line no-console\n          console.log('DropdownMenu.items is deprecated. Please switch to the declarative API.');\n        }\n\n        if (_this.domItemsList) {\n          _this.focusFirstItem();\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidUpdate\", function (prevProp) {\n      if (_this.isUsingDeprecatedAPI() && _this.props.isOpen && !prevProp.isOpen) {\n        _this.focusFirstItem();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getNextFocusable\", function (indexItem, available) {\n      if (!_this.domItemsList) {\n        return null;\n      }\n\n      var currentItem = typeof indexItem !== 'number' ? -1 : indexItem;\n      var latestAvailable = typeof available !== 'number' ? currentItem : available;\n\n      if (currentItem < _this.domItemsList.length - 1) {\n        currentItem++;\n\n        if (_this.domItemsList[currentItem].getAttribute('aria-hidden') !== 'true') {\n          return currentItem;\n        }\n\n        return _this.getNextFocusable(currentItem, latestAvailable);\n      }\n\n      return latestAvailable;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getPrevFocusable\", function (indexItem, available) {\n      if (!_this.domItemsList) {\n        return null;\n      }\n\n      var currentItem = typeof indexItem !== 'number' ? -1 : indexItem;\n      var latestAvailable = typeof available !== 'number' ? currentItem : available;\n\n      if (currentItem && currentItem > 0) {\n        currentItem--;\n\n        if (_this.domItemsList[currentItem].getAttribute('aria-hidden') !== 'true') {\n          return currentItem;\n        }\n\n        return _this.getPrevFocusable(currentItem, latestAvailable);\n      }\n\n      return latestAvailable || currentItem;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusFirstItem\", function () {\n      if (_this.sourceOfIsOpen === 'keydown') {\n        _this.focusItem(_this.getNextFocusable());\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusNextItem\", function () {\n      _this.focusItem(_this.getNextFocusable(_this.focusedItem));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusPreviousItem\", function () {\n      _this.focusItem(_this.getPrevFocusable(_this.focusedItem));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"focusItem\", function (index) {\n      if (!_this.domItemsList || !index) {\n        return;\n      }\n\n      _this.focusedItem = index;\n\n      _this.domItemsList[_this.focusedItem].focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"isTargetChildItem\", function (target) {\n      if (!target) {\n        return false;\n      }\n\n      var isDroplistItem = target.getAttribute('data-role') === 'droplistItem'; // eslint-disable-next-line react/no-find-dom-node\n\n      var thisDom = findDOMNode(_assertThisInitialized(_this));\n      return isDroplistItem && thisDom ? thisDom.contains(target) : false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyboardInteractionForClosed\", function (event) {\n      if (_this.props.isOpen) {\n        return;\n      }\n\n      switch (event.key) {\n        case KEY_DOWN:\n        case KEY_SPACE:\n        case KEY_ENTER:\n          event.preventDefault();\n\n          _this.open({\n            event: event,\n            source: 'keydown'\n          });\n\n          break;\n\n        default:\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyboardInteractionsDeprecated\", function (event) {\n      if (_this.props.isOpen) {\n        if (_this.isTargetChildItem(event.target)) {\n          switch (event.key) {\n            case 'ArrowUp':\n              event.preventDefault();\n\n              _this.focusPreviousItem();\n\n              break;\n\n            case 'ArrowDown':\n              event.preventDefault();\n\n              _this.focusNextItem();\n\n              break;\n\n            case 'Tab':\n              event.preventDefault();\n\n              _this.close({\n                event: event\n              });\n\n              break;\n\n            default:\n              break;\n          }\n        } else if (event.key === 'ArrowDown') {\n          _this.sourceOfIsOpen = 'keydown';\n\n          _this.focusFirstItem();\n        } else if (event.key === 'Tab') {\n          _this.close({\n            event: event\n          });\n        }\n      } else {\n        switch (event.key) {\n          case KEY_DOWN:\n          case KEY_SPACE:\n          case KEY_ENTER:\n            event.preventDefault();\n\n            _this.open({\n              event: event,\n              source: 'keydown'\n            });\n\n            break;\n\n          default:\n            break;\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"domMenuContainer\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"isUsingDeprecatedAPI\", function () {\n      return Boolean(_this.props.items.length);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOpenChange\", function (args) {\n      _this.props.onOpenChange(args);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"triggerContent\", function () {\n      var _this$props = _this.props,\n          children = _this$props.children,\n          trigger = _this$props.trigger,\n          isOpen = _this$props.isOpen,\n          triggerButtonProps = _this$props.triggerButtonProps,\n          triggerType = _this$props.triggerType,\n          testId = _this$props.testId;\n      var insideTriggerContent = _this.isUsingDeprecatedAPI() ? children : trigger;\n\n      if (triggerType !== 'button') {\n        return insideTriggerContent;\n      } // we probably don't need to object copying\n      // ts doesn't like destructuring copy - so converting to object.assign\n\n\n      var triggerProps = Object.assign({}, triggerButtonProps);\n      var defaultButtonProps = {\n        'aria-controls': _this.state.id,\n        'aria-expanded': isOpen,\n        'aria-haspopup': true,\n        isSelected: isOpen\n      };\n\n      if (!triggerProps.iconAfter && !triggerProps.iconBefore) {\n        triggerProps.iconAfter = /*#__PURE__*/React.createElement(ExpandIcon, {\n          size: \"medium\",\n          label: \"\"\n        });\n      }\n\n      return /*#__PURE__*/React.createElement(Button, _extends({}, defaultButtonProps, triggerProps, {\n        testId: testId && \"\".concat(testId, \"--trigger\")\n      }), insideTriggerContent);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"open\", function (attrs) {\n      _this.sourceOfIsOpen = attrs.source;\n\n      _this.props.onOpenChange({\n        isOpen: true,\n        event: attrs.event\n      }); // Dropdown opened via keyboard gets auto focussed\n\n\n      _this.setState({\n        autoFocusDropdownItems: _this.sourceOfIsOpen === 'keydown'\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"close\", function (attrs) {\n      _this.sourceOfIsOpen = null;\n\n      _this.props.onOpenChange({\n        isOpen: false,\n        event: attrs.event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"toggle\", function (attrs) {\n      if (attrs.source === 'keydown') {\n        return;\n      }\n\n      if (_this.props.isOpen) {\n        _this.close(attrs);\n      } else {\n        _this.open(attrs);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderTrigger\", function () {\n      var triggerContent = _this.triggerContent();\n\n      return _this.isUsingDeprecatedAPI() ? triggerContent : /*#__PURE__*/React.createElement(\"div\", {\n        ref: function ref(_ref) {\n          _this.triggerContainer = _ref;\n        }\n      }, triggerContent);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderItems\", function (items) {\n      return items.map(function (item, itemIndex) {\n        return /*#__PURE__*/React.createElement(Item, _extends({}, item, {\n          key: itemIndex,\n          onActivate: function onActivate(_ref2) {\n            var event = _ref2.event;\n\n            _this.props.onItemActivated({\n              item: item,\n              event: event\n            });\n          }\n        }), item.content);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderGroups\", function (groups) {\n      return groups.map(function (group, groupIndex) {\n        return /*#__PURE__*/React.createElement(Group, {\n          heading: group.heading,\n          elemAfter: group.elemAfter,\n          key: groupIndex\n        }, _this.renderItems(group.items));\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderDeprecated\", function () {\n      var _this$props2 = _this.props,\n          items = _this$props2.items,\n          shouldFitContainer = _this$props2.shouldFitContainer;\n      var id = _this.state.id;\n      return /*#__PURE__*/React.createElement(\"div\", {\n        id: id,\n        ref: function ref(_ref3) {\n          _this.domMenuContainer = _ref3;\n          _this.domItemsList = _ref3 ? _ref3.querySelectorAll('[data-role=\"droplistItem\"]') : null;\n        },\n        role: \"menu\",\n        style: shouldFitContainer ? undefined : {\n          maxWidth: 300\n        }\n      }, _this.renderGroups(items));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDroplistPositioned\", function () {\n      _this.dropdownListPositioned = true; // Trigger render so item focus manager can auto focus for keyboard trigger\n\n      _this.setState({\n        autoFocusDropdownItems: _this.sourceOfIsOpen === 'keydown'\n      });\n\n      if (_this.props.onPositioned) {\n        _this.props.onPositioned();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderDropdownItems\", function () {\n      if (_this.sourceOfIsOpen === 'keydown' && _this.dropdownListPositioned) {\n        return /*#__PURE__*/React.createElement(DropdownItemFocusManager, {\n          autoFocus: _this.state.autoFocusDropdownItems,\n          close: _this.close\n        }, _this.props.children);\n      }\n\n      return /*#__PURE__*/React.createElement(Fragment, null, _this.props.children);\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownMenuStateless, [{\n    key: \"handleClickDeprecated\",\n    value: function handleClickDeprecated(event) {\n      var menuContainer = this.domMenuContainer;\n\n      if (!menuContainer || menuContainer && !menuContainer.contains(event.target)) {\n        this.toggle({\n          source: 'click',\n          event: event\n        });\n      }\n    }\n  }, {\n    key: \"handleClick\",\n    value: function handleClick(event) {\n      // For any clicks we don't want autofocus\n      this.setState({\n        autoFocusDropdownItems: false\n      });\n\n      if (this.isUsingDeprecatedAPI()) {\n        this.handleClickDeprecated(event);\n        return;\n      }\n\n      if (this.triggerContainer && this.triggerContainer.contains(event.target) && event.target.disabled !== true) {\n        var isOpen = this.props.isOpen;\n        this.sourceOfIsOpen = 'mouse';\n        this.props.onOpenChange({\n          isOpen: !isOpen,\n          event: event\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props3 = this.props,\n          appearance = _this$props3.appearance,\n          boundariesElement = _this$props3.boundariesElement,\n          isLoading = _this$props3.isLoading,\n          isOpen = _this$props3.isOpen,\n          onOpenChange = _this$props3.onOpenChange,\n          position = _this$props3.position,\n          isMenuFixed = _this$props3.isMenuFixed,\n          shouldAllowMultilineItems = _this$props3.shouldAllowMultilineItems,\n          shouldFitContainer = _this$props3.shouldFitContainer,\n          shouldFlip = _this$props3.shouldFlip,\n          testId = _this$props3.testId;\n      var id = this.state.id;\n      var isDeprecated = this.isUsingDeprecatedAPI();\n      var deprecatedProps = isDeprecated ? {\n        onKeyDown: this.handleKeyboardInteractionsDeprecated,\n        shouldAllowMultilineItems: shouldAllowMultilineItems\n      } : {\n        onKeyDown: this.handleKeyboardInteractionForClosed\n      };\n      return /*#__PURE__*/React.createElement(DropdownItemSelectionCache, null, /*#__PURE__*/React.createElement(Droplist, _extends({\n        appearance: appearance,\n        boundariesElement: boundariesElement,\n        isLoading: isLoading,\n        isOpen: isOpen,\n        onClick: function onClick(e) {\n          return _this2.handleClick(e);\n        },\n        onOpenChange: this.handleOpenChange,\n        position: position,\n        isMenuFixed: isMenuFixed,\n        shouldFitContainer: shouldFitContainer,\n        shouldFlip: shouldFlip,\n        trigger: this.renderTrigger(),\n        onPositioned: this.onDroplistPositioned\n      }, deprecatedProps, {\n        analyticsContext: {\n          componentName: 'dropdownMenu',\n          packageName: packageName,\n          packageVersion: packageVersion\n        },\n        testId: testId\n      }), isDeprecated ? this.renderDeprecated() : /*#__PURE__*/React.createElement(WidthConstrainer, {\n        id: id,\n        role: \"menu\",\n        shouldFitContainer: shouldFitContainer\n      }, /*#__PURE__*/React.createElement(DropdownItemClickManager, {\n        onItemClicked: function onItemClicked(event) {\n          return onOpenChange({\n            isOpen: false,\n            event: event\n          });\n        }\n      }, this.renderDropdownItems()))));\n    }\n  }]);\n\n  return DropdownMenuStateless;\n}(Component);\n\n_defineProperty(DropdownMenuStateless, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  onItemActivated: function onItemActivated() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  triggerType: 'default',\n  onPositioned: function onPositioned() {}\n});\n\nexport { DropdownMenuStateless as DropdownMenuStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'dropdownMenu',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onOpenChange: createAndFireEventOnAtlaskit({\n    action: 'toggled',\n    actionSubject: 'dropdownMenu',\n    attributes: {\n      componentName: 'dropdownMenu',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(DropdownMenuStateless));","import { themed } from '@atlaskit/theme/components';\nimport * as colors from '@atlaskit/theme/colors'; // The following are the name for color mappings in @atlaskit/themes\n// The exports are the functions, not the objects, so could not be used here\n\nvar disabled = {\n  light: colors.N20,\n  dark: colors.DN20\n}; // For validation red is the new 'yellow' which was { light: colors.Y300, dark: colors.Y300 }\n\nvar red = {\n  light: colors.R400,\n  dark: colors.R400\n}; // The following do not yet have a darkmode 'map': N20A, N10\n\nexport var getBackgroundColor = themed('appearance', {\n  standard: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N10,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorFocus = themed('appearance', {\n  standard: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  subtle: {\n    light: colors.N0,\n    dark: colors.DN10\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBackgroundColorHover = themed('appearance', {\n  standard: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  disabled: disabled,\n  invalid: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  subtle: {\n    light: colors.N30,\n    dark: colors.DN30\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColor = themed('appearance', {\n  standard: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  disabled: {\n    light: colors.N40,\n    dark: colors.DN40\n  },\n  invalid: red,\n  subtle: {\n    light: 'transparent',\n    dark: 'transparent'\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});\nexport var getBorderColorFocus = themed('appearance', {\n  standard: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  disabled: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  invalid: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  subtle: {\n    light: colors.B100,\n    dark: colors.B75\n  },\n  none: {\n    light: 'transparent',\n    dark: 'transparent'\n  }\n});","import styled, { css } from 'styled-components';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize, fontSize } from '@atlaskit/theme/constants';\nimport { N70, DN90, N900, DN600 } from '@atlaskit/theme/colors';\nimport { getBackgroundColor, getBackgroundColorFocus, getBackgroundColorHover, getBorderColor, getBorderColorFocus } from './theme';\nvar borderRadius = '3px';\nvar borderWidth = 2;\nvar grid = gridSize();\nvar lineHeightBase = grid * 2.5;\nvar lineHeightCompact = grid * 2;\nvar heightBase = grid * 5;\nvar heightCompact = grid * 4;\nvar horizontalPadding = grid;\nvar innerHeight = grid * 3;\nvar transitionDuration = '0.2s';\n\nvar getBorderAndPadding = function getBorderAndPadding(_ref) {\n  var paddingDisabled = _ref.paddingDisabled,\n      compact = _ref.compact;\n  var height = compact ? heightCompact : heightBase;\n  var padding = paddingDisabled ? \"0\" : \"\".concat((height - 2 * borderWidth - innerHeight) / 2, \"px \").concat(horizontalPadding - borderWidth, \"px\");\n  return css([\"\\n    border-width: \", \"px;\\n    padding: \", \";\\n  \"], borderWidth, padding);\n};\n\nvar getLineHeight = function getLineHeight(props) {\n  var currentLineHeight = props.compact ? lineHeightCompact : lineHeightBase;\n  return currentLineHeight / fontSize();\n};\n\nvar getDisabledColor = themed({\n  light: N70,\n  dark: DN90\n});\n\nvar getDisabledState = function getDisabledState(props) {\n  return props.disabled && css([\"\\n    color: \", \";\\n    pointer-events: none;\\n  \"], getDisabledColor(props));\n};\n\nvar getHoverState = function getHoverState(props) {\n  if (props.readOnly || props.isFocused || props.none) return null;\n  return css([\"\\n    &:hover {\\n      background-color: \", \";\\n    }\\n  \"], getBackgroundColorHover(props));\n};\n\nvar getBorderStyle = function getBorderStyle(props) {\n  return props.appearance === 'none' ? 'none' : 'solid';\n};\n\nvar getMinHeight = function getMinHeight(_ref2) {\n  var compact = _ref2.compact;\n  var minHeight = compact ? heightCompact : heightBase;\n  return css([\"\\n    min-height: \", \"px;\\n  \"], minHeight);\n}; // need an element wrapping the children because IE11 doesn't apply min-height correctly\n// to flex-elements. See https://github.com/philipwalton/flexbugs#3-min-height-on-a-flex-container-wont-apply-to-its-flex-items\n\n\nexport var ChildWrapper = styled.div.withConfig({\n  displayName: \"Content__ChildWrapper\",\n  componentId: \"ve26fj-0\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex: 1 0 auto;\\n  max-width: 100%;\\n  \", \";\\n\"], function (p) {\n  return getMinHeight(p);\n});\nvar getColor = themed({\n  light: N900,\n  dark: DN600\n});\nexport var Content = styled.div.withConfig({\n  displayName: \"Content\",\n  componentId: \"ve26fj-1\"\n})([\"\\n  align-items: center;\\n  background-color: \", \";\\n  border-color: \", \";\\n  border-radius: \", \";\\n  border-style: \", \";\\n  box-sizing: border-box;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 0 auto;\\n  font-size: \", \"px;\\n  justify-content: space-between;\\n  line-height: \", \";\\n  max-width: 100%;\\n  overflow: hidden;\\n  transition: background-color \", \" ease-in-out,\\n    border-color \", \" ease-in-out;\\n  word-wrap: break-word;\\n  \", \" \", \" \", \";\\n\"], function (props) {\n  return props.isFocused ? getBackgroundColorFocus(props) : getBackgroundColor(props);\n}, function (props) {\n  return props.isFocused ? getBorderColorFocus(props) : getBorderColor(props);\n}, borderRadius, getBorderStyle, getColor, fontSize, getLineHeight, transitionDuration, transitionDuration, getBorderAndPadding, getHoverState, getDisabledState);\n\nvar getMaxWidth = function getMaxWidth(maxWidth) {\n  return maxWidth ? \"\".concat(maxWidth, \"px\") : '100%';\n};\n/* IE11 does not respect max-width when using flex-grow + nested flex content, similar to https://github.com/philipwalton/flexbugs#flexbug-11\n * and https://github.com/philipwalton/flexbugs#flexbug-17.\n * This can be fixed by setting the basis to 100%, allowing shrinking and setting the min-width to the original flex-basis value\n * (or 0 if it was auto).\n * Alternatively since we're just setting the contents to fit parent container when grow is set to true, we can just change flex-basis\n * to 100% and not worry about shrinking or growing.\n * See AK-4285.\n */\n\n\nexport var ContentWrapper = styled.div.withConfig({\n  displayName: \"Content__ContentWrapper\",\n  componentId: \"ve26fj-2\"\n})([\"\\n  \", \" \", \" \", \" max-width: \", \";\\n\"], function (props) {\n  return props.disabled && \"\\n      cursor: not-allowed;\\n    \";\n}, function (props) {\n  return props.grow ? css([\"\\n          flex: 0 0 \", \";\\n        \"], getMaxWidth(props.maxWidth)) : \"\\n          flex: 0 0 auto;\\n        \";\n}, function (props) {\n  return props.grow ? \"\\n          display: block;\\n        \" : \"\\n          display: inline-block;\\n          vertical-align: top;\\n        \";\n}, function (props) {\n  return getMaxWidth(props.maxWidth);\n});","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport styled from 'styled-components';\nimport React, { Component } from 'react';\nimport { yellow } from '@atlaskit/theme/colors';\nimport Spinner from '@atlaskit/spinner';\nimport Icon from '@atlaskit/icon/glyph/warning'; // exported for testing\n\nexport var WarningIcon = styled.div.withConfig({\n  displayName: \"ValidationElement__WarningIcon\",\n  componentId: \"sc-1fk9yms-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex-shrink: 0;\\n\"], yellow); // Spinner needs set height to avoid height jumping\n// Also needs a margin so there is space between it and preceding text\n\nvar SpinnerParent = styled.div.withConfig({\n  displayName: \"ValidationElement__SpinnerParent\",\n  componentId: \"sc-1fk9yms-1\"\n})([\"\\n  height: 20px;\\n  margin-left: 10px;\\n\"]);\n\nvar ValidationElement = /*#__PURE__*/function (_Component) {\n  _inherits(ValidationElement, _Component);\n\n  var _super = _createSuper(ValidationElement);\n\n  function ValidationElement() {\n    _classCallCheck(this, ValidationElement);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ValidationElement, [{\n    key: \"render\",\n    value: function render() {\n      if (!this.props.isDisabled && this.props.isInvalid) {\n        return /*#__PURE__*/React.createElement(WarningIcon, null, /*#__PURE__*/React.createElement(Icon, {\n          label: \"warning\"\n        }));\n      }\n\n      return this.props.isLoading ? /*#__PURE__*/React.createElement(SpinnerParent, null, /*#__PURE__*/React.createElement(Spinner, {\n        size: \"small\"\n      })) : null;\n    }\n  }]);\n\n  return ValidationElement;\n}(Component);\n\n_defineProperty(ValidationElement, \"defaultProps\", {\n  isDisabled: false,\n  isInvalid: false,\n  isLoading: false\n});\n\nexport { ValidationElement as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\n\n/* eslint-disable import/no-named-as-default-member */\nimport React, { Component } from 'react';\nimport InlineDialog from '@atlaskit/inline-dialog';\nimport { Content, ContentWrapper, ChildWrapper } from '../styled/Content'; // eslint-disable-next-line import/no-named-as-default\n\nimport ValidationElement from './ValidationElement';\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('The @atlaskit/field-base package has been deprecated. Please use the Form/Textfield/Textarea/etc packages instead.');\n}\n\nvar FieldBaseStateless = /*#__PURE__*/function (_Component) {\n  _inherits(FieldBaseStateless, _Component);\n\n  var _super = _createSuper(FieldBaseStateless);\n\n  function FieldBaseStateless() {\n    _classCallCheck(this, FieldBaseStateless);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(FieldBaseStateless, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      if (this.props.shouldReset) {\n        this.props.onBlur();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          invalidMessage = _this$props.invalidMessage,\n          isCompact = _this$props.isCompact,\n          isDialogOpen = _this$props.isDialogOpen,\n          isDisabled = _this$props.isDisabled,\n          isFitContainerWidthEnabled = _this$props.isFitContainerWidthEnabled,\n          isFocused = _this$props.isFocused,\n          isInvalid = _this$props.isInvalid,\n          isLoading = _this$props.isLoading,\n          isPaddingDisabled = _this$props.isPaddingDisabled,\n          isReadOnly = _this$props.isReadOnly,\n          maxWidth = _this$props.maxWidth,\n          onBlur = _this$props.onBlur,\n          onDialogBlur = _this$props.onDialogBlur,\n          onDialogClick = _this$props.onDialogClick,\n          onDialogFocus = _this$props.onDialogFocus,\n          onFocus = _this$props.onFocus,\n          isValidationHidden = _this$props.isValidationHidden;\n\n      function getAppearance(a) {\n        if (isDisabled) return 'disabled';\n        if (isInvalid) return 'invalid';\n        return a;\n      }\n\n      return /*#__PURE__*/React.createElement(ContentWrapper, {\n        disabled: isDisabled,\n        maxWidth: maxWidth,\n        grow: isFitContainerWidthEnabled\n      }, /*#__PURE__*/React.createElement(InlineDialog, {\n        content: invalidMessage,\n        isOpen: isDialogOpen && !!invalidMessage && !isValidationHidden,\n        onContentBlur: onDialogBlur,\n        onContentClick: onDialogClick,\n        onContentFocus: onDialogFocus,\n        placement: \"right\"\n      }, /*#__PURE__*/React.createElement(ChildWrapper, {\n        compact: isCompact\n      }, /*#__PURE__*/React.createElement(Content, {\n        appearance: getAppearance(appearance),\n        compact: isCompact,\n        disabled: isDisabled,\n        isFocused: isFocused,\n        invalid: isInvalid && !isFocused,\n        none: appearance === 'none',\n        onBlurCapture: onBlur,\n        onFocusCapture: onFocus,\n        paddingDisabled: isPaddingDisabled,\n        readOnly: isReadOnly,\n        subtle: appearance === 'subtle'\n      }, children, !isValidationHidden ? /*#__PURE__*/React.createElement(ValidationElement, {\n        isDisabled: isDisabled,\n        isInvalid: isInvalid,\n        isLoading: isLoading\n      }) : null))));\n    }\n  }]);\n\n  return FieldBaseStateless;\n}(Component);\n\n_defineProperty(FieldBaseStateless, \"defaultProps\", {\n  appearance: 'standard',\n  invalidMessage: '',\n  isCompact: false,\n  isDialogOpen: false,\n  isDisabled: false,\n  isFitContainerWidthEnabled: false,\n  isFocused: false,\n  isInvalid: false,\n  isLoading: false,\n  isPaddingDisabled: false,\n  isReadOnly: false,\n  onDialogBlur: function onDialogBlur() {},\n  onDialogClick: function onDialogClick() {},\n  onDialogFocus: function onDialogFocus() {},\n  shouldReset: false,\n  isValidationHidden: false\n});\n\nexport { FieldBaseStateless as default };","// @flow\n\n/**\n * SET_INTERVAL constant is used to set interval and it is set in\n * the id property of the request.data property. timeMs property must\n * also be set. request.data example:\n *\n * {\n *      id: SET_INTERVAL,\n *      timeMs: 33\n * }\n */\nexport const SET_INTERVAL = 1;\n\n/**\n * CLEAR_INTERVAL constant is used to clear the interval and it is set in\n * the id property of the request.data property.\n *\n * {\n *      id: CLEAR_INTERVAL\n * }\n */\nexport const CLEAR_INTERVAL = 2;\n\n/**\n * INTERVAL_TIMEOUT constant is used as response and it is set in the id\n * property.\n *\n * {\n *      id: INTERVAL_TIMEOUT\n * }\n */\nexport const INTERVAL_TIMEOUT = 3;\n\n/**\n * The following code is needed as string to create a URL from a Blob.\n * The URL is then passed to a WebWorker. Reason for this is to enable\n * use of setInterval that is not throttled when tab is inactive.\n */\nconst code = `\n    var timer;\n\n    onmessage = function(request) {\n        switch (request.data.id) {\n        case ${SET_INTERVAL}: {\n            timer = setInterval(() => {\n                postMessage({ id: ${INTERVAL_TIMEOUT} });\n            }, request.data.timeMs);\n            break;\n        }\n        case ${CLEAR_INTERVAL}: {\n            if (timer) {\n                clearInterval(timer);\n            }\n            break;\n        }\n        }\n    };\n`;\n\nexport const timerWorkerScript\n    = URL.createObjectURL(new Blob([ code ], { type: 'application/javascript' }));\n","// @flow\n\nimport {\n    CLEAR_INTERVAL,\n    INTERVAL_TIMEOUT,\n    SET_INTERVAL,\n    timerWorkerScript\n} from './TimeWorker';\n\n/**\n * Represents a modified MediaStream that adds video as pip on a desktop stream.\n * <tt>JitsiStreamPresenterEffect</tt> does the processing of the original\n * desktop stream.\n */\nexport default class JitsiStreamPresenterEffect {\n    _canvas: HTMLCanvasElement;\n    _ctx: CanvasRenderingContext2D;\n    _desktopElement: HTMLVideoElement;\n    _desktopStream: MediaStream;\n    _frameRate: number;\n    _onVideoFrameTimer: Function;\n    _onVideoFrameTimerWorker: Function;\n    _renderVideo: Function;\n    _videoFrameTimerWorker: Worker;\n    _videoElement: HTMLVideoElement;\n    isEnabled: Function;\n    startEffect: Function;\n    stopEffect: Function;\n\n    /**\n     * Represents a modified MediaStream that adds a camera track at the\n     * bottom right corner of the desktop track using a HTML canvas.\n     * <tt>JitsiStreamPresenterEffect</tt> does the processing of the original\n     * video stream.\n     *\n     * @param {MediaStream} videoStream - The video stream which is user for\n     * creating the canvas.\n     */\n    constructor(videoStream: MediaStream) {\n        const videoDiv = document.createElement('div');\n        const firstVideoTrack = videoStream.getVideoTracks()[0];\n        const { height, width, frameRate } = firstVideoTrack.getSettings() ?? firstVideoTrack.getConstraints();\n\n        this._canvas = document.createElement('canvas');\n        this._ctx = this._canvas.getContext('2d');\n\n        this._desktopElement = document.createElement('video');\n        this._videoElement = document.createElement('video');\n        videoDiv.appendChild(this._videoElement);\n        videoDiv.appendChild(this._desktopElement);\n        if (document.body !== null) {\n            document.body.appendChild(videoDiv);\n        }\n\n        // Set the video element properties\n        this._frameRate = parseInt(frameRate, 10);\n        this._videoElement.width = parseInt(width, 10);\n        this._videoElement.height = parseInt(height, 10);\n        this._videoElement.autoplay = true;\n        this._videoElement.srcObject = videoStream;\n\n        // autoplay is not enough to start the video on Safari, it's fine to call play() on other platforms as well\n        this._videoElement.play();\n\n        // set the style attribute of the div to make it invisible\n        videoDiv.style.display = 'none';\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onVideoFrameTimer = this._onVideoFrameTimer.bind(this);\n    }\n\n    /**\n     * EventHandler onmessage for the videoFrameTimerWorker WebWorker.\n     *\n     * @private\n     * @param {EventHandler} response - The onmessage EventHandler parameter.\n     * @returns {void}\n     */\n    _onVideoFrameTimer(response) {\n        if (response.data.id === INTERVAL_TIMEOUT) {\n            this._renderVideo();\n        }\n    }\n\n    /**\n     * Loop function to render the video frame input and draw presenter effect.\n     *\n     * @private\n     * @returns {void}\n     */\n    _renderVideo() {\n        // adjust the canvas width/height on every frame incase the window has been resized.\n        const [ track ] = this._desktopStream.getVideoTracks();\n        const { height, width } = track.getSettings() ?? track.getConstraints();\n\n        this._canvas.width = parseInt(width, 10);\n        this._canvas.height = parseInt(height, 10);\n        this._ctx.drawImage(this._desktopElement, 0, 0, this._canvas.width, this._canvas.height);\n        this._ctx.drawImage(this._videoElement, this._canvas.width - this._videoElement.width, this._canvas.height\n            - this._videoElement.height, this._videoElement.width, this._videoElement.height);\n\n        // draw a border around the video element.\n        this._ctx.beginPath();\n        this._ctx.lineWidth = 2;\n        this._ctx.strokeStyle = '#A9A9A9'; // dark grey\n        this._ctx.rect(this._canvas.width - this._videoElement.width, this._canvas.height - this._videoElement.height,\n            this._videoElement.width, this._videoElement.height);\n        this._ctx.stroke();\n    }\n\n    /**\n     * Checks if the local track supports this effect.\n     *\n     * @param {JitsiLocalTrack} jitsiLocalTrack - Track to apply effect.\n     * @returns {boolean} - Returns true if this effect can run on the\n     * specified track, false otherwise.\n     */\n    isEnabled(jitsiLocalTrack: Object) {\n        return jitsiLocalTrack.isVideoTrack() && jitsiLocalTrack.videoType === 'desktop';\n    }\n\n    /**\n     * Starts loop to capture video frame and render presenter effect.\n     *\n     * @param {MediaStream} desktopStream - Stream to be used for processing.\n     * @returns {MediaStream} - The stream with the applied effect.\n     */\n    startEffect(desktopStream: MediaStream) {\n        const firstVideoTrack = desktopStream.getVideoTracks()[0];\n        const { height, width } = firstVideoTrack.getSettings() ?? firstVideoTrack.getConstraints();\n\n        // set the desktop element properties.\n        this._desktopStream = desktopStream;\n        this._desktopElement.width = parseInt(width, 10);\n        this._desktopElement.height = parseInt(height, 10);\n        this._desktopElement.autoplay = true;\n        this._desktopElement.srcObject = desktopStream;\n\n        // autoplay is not enough to start the video on Safari, it's fine to call play() on other platforms as well\n        this._desktopElement.play();\n\n        this._canvas.width = parseInt(width, 10);\n        this._canvas.height = parseInt(height, 10);\n        this._videoFrameTimerWorker = new Worker(timerWorkerScript, { name: 'Presenter effect worker' });\n        this._videoFrameTimerWorker.onmessage = this._onVideoFrameTimer;\n        this._videoFrameTimerWorker.postMessage({\n            id: SET_INTERVAL,\n            timeMs: 1000 / this._frameRate\n        });\n\n        return this._canvas.captureStream(this._frameRate);\n    }\n\n    /**\n     * Stops the capture and render loop.\n     *\n     * @returns {void}\n     */\n    stopEffect() {\n        this._videoFrameTimerWorker.postMessage({\n            id: CLEAR_INTERVAL\n        });\n        this._videoFrameTimerWorker.terminate();\n    }\n\n}\n","// @flow\n\nimport JitsiStreamPresenterEffect from './JitsiStreamPresenterEffect';\n\n/**\n * Creates a new instance of JitsiStreamPresenterEffect.\n *\n * @param {MediaStream} stream - The video stream which will be used for\n * creating the presenter effect.\n * @returns {Promise<JitsiStreamPresenterEffect>}\n */\nexport function createPresenterEffect(stream: MediaStream) {\n    if (!MediaStreamTrack.prototype.getSettings\n        && !MediaStreamTrack.prototype.getConstraints) {\n        return Promise.reject(new Error('JitsiStreamPresenterEffect not supported!'));\n    }\n\n    return Promise.resolve(new JitsiStreamPresenterEffect(stream));\n}\n","import React, { Children, createContext, useContext, useMemo, useRef } from 'react';\nimport { isReducedMotion } from '../utils/accessibility';\nimport { useForceRender } from '../utils/use-force-render';\n/**\n * Internally we will be playing with an element that will always have a key defined.\n */\n\n// We define empty context here so the object doesn't change.\nvar emptyContext = {\n  // Motions will always appear if not inside a exiting persistence component.\n  appear: true,\n  isExiting: false\n};\nvar ExitingContext = /*#__PURE__*/createContext(emptyContext);\n\nvar isAnyPreviousKeysMissingFromCurrent = function isAnyPreviousKeysMissingFromCurrent(currentMap, previous) {\n  for (var i = 0; i < previous.length; i++) {\n    var element = previous[i];\n    var _key = element.key;\n\n    if (!currentMap[_key]) {\n      return true;\n    }\n  }\n\n  return false;\n};\n/**\n * This method will wrap any React element with a context provider. We're using context (instead of\n * cloneElement) so we can communicate between multiple elements without the need of prop drilling\n * (results in a better API for consumers).\n */\n\n\nvar wrapChildWithContextProvider = function wrapChildWithContextProvider(child) {\n  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : emptyContext;\n  return /*#__PURE__*/React.createElement(ExitingContext.Provider, {\n    key: \"\".concat(child.key, \"-provider\"),\n    value: value\n  }, child);\n};\n\nvar childrenToObj = function childrenToObj(children) {\n  return children.reduce(function (acc, child) {\n    acc[child.key] = child;\n    return acc;\n  }, {});\n};\n\nvar spliceNewElementsIntoPrevious = function spliceNewElementsIntoPrevious(current, previous) {\n  var splicedChildren = previous.concat([]);\n  var previousMap = childrenToObj(previous);\n\n  for (var i = 0; i < current.length; i++) {\n    var child = current[i];\n    var childIsNew = !previousMap[child.key];\n\n    if (childIsNew) {\n      // This will insert the new element after the previous element.\n      splicedChildren.splice(i + 1, 0, child);\n    }\n  }\n\n  return splicedChildren;\n};\n/**\n * This function will convert all children types to an array while also filtering out non-valid React elements.\n */\n\n\nvar childrenToArray = function childrenToArray(children) {\n  var childrenAsArray = []; // We convert children to an array using this helper method as it will add keys to children that do not\n  // have them, such as when we have hardcoded children that are conditionally rendered.\n\n  Children.toArray(children).forEach(function (child) {\n    // We ignore any boolean children to make our code a little more simple later on,\n    // and also filter out any falsies (empty strings, nulls, and undefined).\n    if (typeof child !== 'boolean' && Boolean(child)) {\n      // Children WILL have a key after being forced into an array using the React.Children helper.\n      childrenAsArray.push(child);\n    }\n  });\n  return childrenAsArray;\n};\n/**\n * This handles the case when a render updates during an exit motion.\n * If any child is mounted again we removed them from the exiting children object and return true.\n */\n\n\nvar hasAnyExitingChildMountedAgain = function hasAnyExitingChildMountedAgain(exitingChildren, children) {\n  var exitingChildMountedAgain = false;\n  children.forEach(function (child) {\n    if (exitingChildren.current[child.key]) {\n      exitingChildMountedAgain = true;\n      delete exitingChildren.current[child.key];\n    }\n  });\n  return exitingChildMountedAgain;\n};\n\nvar ExitingPersistence = function ExitingPersistence(_ref) {\n  var _ref$appear = _ref.appear,\n      appearFromProp = _ref$appear === void 0 ? false : _ref$appear,\n      childs = _ref.children,\n      exitThenEnter = _ref.exitThenEnter;\n  var children = childrenToArray(childs);\n  var childrenObj = childrenToObj(children);\n  var previousChildren = useRef([]);\n  var persistedChildren = useRef([]);\n  var forceRender = useForceRender();\n  var exitingChildren = useRef({});\n  var appear = useRef(appearFromProp);\n  var defaultContextValue = useMemo(function () {\n    return {\n      appear: appear.current,\n      isExiting: false\n    };\n  }, // React rules of hooks says this isn't needed because mutating appear won't cause a re-render.\n  // While technically true - it will trigger this to make a new object on the _next_ render which is what we want.\n  // Remove this or use appear instead of appear.current and you will notice a test breaks.\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  [appear.current]);\n\n  if (isReducedMotion()) {\n    return children;\n  }\n\n  if (!appear.current) {\n    // We always want child motions to appear after the initial mount.\n    appear.current = true;\n  } // This entire block can't be an effect because we need it to run synchronously during a render\n  // else when elements are being removed they will be remounted instead of being updated.\n\n\n  if (previousChildren.current.length && isAnyPreviousKeysMissingFromCurrent(childrenObj, previousChildren.current)) {\n    if (persistedChildren.current.length === 0 || hasAnyExitingChildMountedAgain(exitingChildren, children)) {\n      persistedChildren.current = previousChildren.current;\n    } // We have persisted children now set from previous children.\n    // Let's update previous children so we have it available next render.\n\n\n    previousChildren.current = children;\n    return (exitThenEnter ? persistedChildren.current : spliceNewElementsIntoPrevious(children, persistedChildren.current)).map(function (child) {\n      var currentChild = childrenObj[child.key];\n\n      if (!currentChild) {\n        // We've found an exiting child - mark it!\n        exitingChildren.current[child.key] = true;\n        return wrapChildWithContextProvider(child, {\n          isExiting: true,\n          appear: true,\n          onFinish: function onFinish() {\n            delete exitingChildren.current[child.key]; // We will only remove the exiting elements when any subsequent exiting elements have also finished.\n            // Think of removing many items from a todo list - when removing a few over a few clicks we don't\n            // want the list jumping around when they exit.\n\n            if (Object.keys(exitingChildren.current).length === 0) {\n              // Set previous children to nothing.\n              // This let's us skip the next render check as it's assumed children and previous will be the same.\n              previousChildren.current = [];\n              persistedChildren.current = []; // Re-render after the element(s) have animated away which will end up rendering the latest children.\n\n              forceRender();\n            }\n          }\n        });\n      } // This element isn't exiting.\n      // Wrap context and let's continue on our way.\n\n\n      return wrapChildWithContextProvider(currentChild, defaultContextValue);\n    });\n  } else {\n    previousChildren.current = children;\n  }\n\n  return children.map(function (child) {\n    return wrapChildWithContextProvider(child, defaultContextValue);\n  });\n};\n\nexport var useExitingPersistence = function useExitingPersistence() {\n  return useContext(ExitingContext);\n};\nexport default ExitingPersistence;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { useCallback, useState } from 'react';\nexport var useForceRender = function useForceRender() {\n  var _useState = useState({}),\n      _useState2 = _slicedToArray(_useState, 2),\n      updateState = _useState2[1];\n\n  var forceRender = useCallback(function () {\n    return updateState({});\n  }, []);\n  return forceRender;\n};","module.exports = global[\"$\"] = require(\"-!/home/ubuntu/jitsi-meet/node_modules/expose-loader/index.js?jQuery!./jquery.min.js\");","module.exports = global[\"jQuery\"] = require(\"-!./jquery.min.js\");","/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.5.1\",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),\"function\"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S=\"sizzle\"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",F=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",B=new RegExp(M+\"+\",\"g\"),$=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp(F),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+F),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\"+M+\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),ne=function(e,t){var n=\"0x\"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?\"#\"+s:\":scope\")+\" \"+xe(l[o]);c=l.join(\",\")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute(\"id\")}}}return g(t.replace($,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement(\"div\")),\"undefined\"!=typeof e.querySelectorAll&&!e.querySelectorAll(\":scope fieldset div\").length}),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML=\"<a id='\"+S+\"'></a><select id='\"+S+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+S+\"-]\").length||v.push(\"~=\"),(t=C.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name='']\").length||v.push(\"\\\\[\"+M+\"*name\"+M+\"*=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+S+\"+*\").length||v.push(\".#.+[+~]\"),e.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",F)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&m(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(B,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[S]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,\"$1\"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace($,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split(\"\").sort(D).join(\"\")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[\":\"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,\"string\"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,\"parentNode\")},parentsUntil:function(e,t,n){return h(e,\"parentNode\",n)},next:function(e){return O(e,\"nextSibling\")},prev:function(e){return O(e,\"previousSibling\")},nextAll:function(e){return h(e,\"nextSibling\")},prevAll:function(e){return h(e,\"previousSibling\")},nextUntil:function(e,t,n){return h(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return h(e,\"previousSibling\",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\\x20\\t\\r\\n\\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",S.Callbacks(\"memory\"),S.Callbacks(\"memory\"),2],[\"resolve\",\"done\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",S.Callbacks(\"once memory\"),S.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),S.ready()}S.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,\"ms-\").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(K,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks(\"once memory\").add(function(){Y.remove(e,[t+\"queue\",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Y.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,te=new RegExp(\"^(?:([+-])=|)(\"+ee+\")([a-z%]*)$\",\"i\"),ne=[\"Top\",\"Right\",\"Bottom\",\"Left\"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&ie(e)&&\"none\"===S.css(e,\"display\")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,\"\")},u=s(),l=n&&n[3]||(S.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(S.cssNumber[t]||\"px\"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Y.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ue[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Y.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(fe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),fe.setAttribute(\"checked\",\"checked\"),fe.setAttribute(\"name\",\"t\"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML=\"<option></option>\",y.option=!!ce.lastChild;var ge={thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],\"globalEval\",!t||Y.get(t[n],\"globalEval\"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,\"<select multiple='multiple'>\",\"</select>\"]);var me=/<|&#?\\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function ke(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(P)||[\"\"]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(P)||[\"\"]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,\"events\")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Ae(t,\"click\",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Ae(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Y.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\\s*(?:[^=]|=\\s*.checked.)/i,je=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function qe(e,t){return A(e,\"table\")&&A(11!==t.nodeType?t:t.firstChild,\"tr\")&&S(e).children(\"tbody\")[0]||e}function Le(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function He(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,\"handle events\"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,\"script\"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Y.access(u,\"globalEval\")&&S.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")},l):b(u.textContent.replace(je,\"\"),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp(\"^(\"+ee+\")(?!px)[a-z%]+$\",\"i\"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join(\"|\"),\"i\");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",l.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n=\"1%\"!==e.top,s=12===t(e.marginLeft),l.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),l.style.position=\"absolute\",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement(\"div\"),l=E.createElement(\"div\");l.style&&(l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement(\"table\"),t=E.createElement(\"tr\"),n=E.createElement(\"div\"),e.style.cssText=\"position:absolute;left:-11111px\",t.style.height=\"1px\",n.style.height=\"9px\",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=[\"Webkit\",\"Moz\",\"ms\"],ze=E.createElement(\"div\").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Qe={letterSpacing:\"0\",fontWeight:\"400\"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function Ke(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?(\"content\"===n&&(u-=S.css(e,\"padding\"+ne[a],!0,i)),\"margin\"!==n&&(u-=S.css(e,\"border\"+ne[a]+\"Width\",!0,i))):(u+=S.css(e,\"padding\"+ne[a],!0,i),\"padding\"!==n?u+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i):s+=S.css(e,\"border\"+ne[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,r),o=i,a=Be(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,\"tr\")||\"auto\"===a||!parseFloat(a)&&\"inline\"===S.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===S.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),\"normal\"===i&&t in Qe&&(i=Qe[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each([\"height\",\"width\"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===S.css(e,\"boxSizing\",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,\"border\",!1,i)-.5)),s&&(r=te.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,\"marginLeft\"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),S.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?\"\":\"px\")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=ne[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,\"fxshow\");for(r in n.queue||(null==(a=S._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,\"display\")),\"none\"===(c=S.css(e,\"display\"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,\"display\"),le([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===S.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Y.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,\"fxshow\"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&\"object\"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Y.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt(\"show\"),slideUp:lt(\"hide\"),slideToggle:lt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement(\"input\"),it=E.createElement(\"select\").appendChild(E.createElement(\"option\")),rt.type=\"checkbox\",y.checkOn=\"\"!==rt.value,y.optSelected=it.selected,(rt=E.createElement(\"input\")).value=\"t\",rt.type=\"radio\",y.radioValue=\"t\"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(\" \")}function yt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function mt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,\"tabindex\");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&\" \"+vt(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=vt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=yt(this))&&Y.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Y.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+vt(yt(n))+\" \").indexOf(t))return!0;return!1}});var xt=/\\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?\"\":e+\"\"})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(xt,\"\"):null==e?\"\":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,\"value\");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each([\"radio\",\"checkbox\"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[S.expando]?e:new S.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,\"events\")||Object.create(null))[e.type]&&Y.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\\?/;S.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||S.error(\"Invalid XML: \"+e),t};var St=/\\[\\]$/,kt=/\\r?\\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)Dt(n+\"[\"+t+\"]\",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join(\"&\")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,\"elements\");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(\":disabled\")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,\"\\r\\n\")}}):{name:t.name,value:n.replace(kt,\"\\r\\n\")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\\/\\//,Rt={},Mt={},It=\"*/\".concat(\"*\"),Wt=E.createElement(\"a\");function Ft(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":It,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+\"\").replace(Pt,Tt.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(P)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+\"//\"+Wt.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(jt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(Et.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,\"$1\"),o=(Et.test(f)?\"&\":\"?\")+\"_=\"+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",S.lastModified[f]),S.etag[f]&&T.setRequestHeader(\"If-None-Match\",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+It+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray(\"script\",v.dataTypes)&&(v.converters[\"text script\"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(S.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(S.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--S.active||S.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,\"json\")},getScript:function(e,t){return S.get(e,void 0,t,\"script\")}}),S.each([\"get\",\"post\"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)\"content-type\"===t.toLowerCase()&&(e.contentType=e.headers[t]||\"\")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&\"withCredentials\"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),S.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\\?(?=&|$)|\\?\\?/;S.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Xt.pop()||S.expando+\"_\"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Vt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||S.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&S.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?S(\"<div>\").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,\"position\"),c=S(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=S.css(e,\"top\"),u=S.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):(\"number\"==typeof f.top&&(f.top+=\"px\"),\"number\"==typeof f.left&&(f.left+=\"px\"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===S.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===S.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,\"borderTopWidth\",!0),i.left+=S.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-S.css(r,\"marginTop\",!0),left:t.left-i.left-S.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===S.css(e,\"position\"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each([\"top\",\"left\"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+\"px\":t})}),S.each({Height:\"height\",Width:\"width\"},function(a,s){S.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.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(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?\"\":(e+\"\").replace(Gt,\"\")},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},\"undefined\"==typeof e&&(C.jQuery=C.$=S),S});\n","var Olm = (function() {\nvar olm_exports = {};\nvar onInitSuccess;\nvar onInitFail;\n\n\nvar Module = (function() {\n  var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\n  if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;\n  return (\nfunction(Module) {\n  Module = Module || {};\n\n\nvar a;a||(a=typeof Module !== 'undefined' ? Module : {});var aa;a.ready=new Promise(function(b){aa=b});var g;if(\"undefined\"!==typeof window)g=function(b){window.crypto.getRandomValues(b)};else if(module.exports){var ba=require(\"crypto\");g=function(b){var c=ba.randomBytes(b.length);b.set(c)};process=global.process}else throw Error(\"Cannot find global to attach library to\");if(\"undefined\"!==typeof OLM_OPTIONS)for(var ca in OLM_OPTIONS)OLM_OPTIONS.hasOwnProperty(ca)&&(a[ca]=OLM_OPTIONS[ca]);\na.onRuntimeInitialized=function(){h=a._olm_error();olm_exports.PRIVATE_KEY_LENGTH=a._olm_pk_private_key_length();onInitSuccess&&onInitSuccess()};a.onAbort=function(b){onInitFail&&onInitFail(b)};var da={},l;for(l in a)a.hasOwnProperty(l)&&(da[l]=a[l]);var ea=!1,m=!1,fa=!1,ia=!1;ea=\"object\"===typeof window;m=\"function\"===typeof importScripts;fa=\"object\"===typeof process&&\"object\"===typeof process.versions&&\"string\"===typeof process.versions.node;ia=!ea&&!fa&&!m;var n=\"\",ja,ka,la,ma;\nif(fa)n=m?require(\"path\").dirname(n)+\"/\":__dirname+\"/\",ja=function(b,c){la||(la=require(\"fs\"));ma||(ma=require(\"path\"));b=ma.normalize(b);return la.readFileSync(b,c?null:\"utf8\")},ka=function(b){b=ja(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||q(\"Assertion failed: undefined\");return b},1<process.argv.length&&process.argv[1].replace(/\\\\/g,\"/\"),process.argv.slice(2),process.on(\"uncaughtException\",function(b){throw b;}),process.on(\"unhandledRejection\",q),a.inspect=function(){return\"[Emscripten Module object]\"};\nelse if(ia)\"undefined\"!=typeof read&&(ja=function(b){return read(b)}),ka=function(b){if(\"function\"===typeof readbuffer)return new Uint8Array(readbuffer(b));b=read(b,\"binary\");\"object\"===typeof b||q(\"Assertion failed: undefined\");return b},\"undefined\"!==typeof print&&(\"undefined\"===typeof console&&(console={}),console.log=print,console.warn=console.error=\"undefined\"!==typeof printErr?printErr:print);else if(ea||m)m?n=self.location.href:document.currentScript&&(n=document.currentScript.src),_scriptDir&&\n(n=_scriptDir),0!==n.indexOf(\"blob:\")?n=n.substr(0,n.lastIndexOf(\"/\")+1):n=\"\",ja=function(b){var c=new XMLHttpRequest;c.open(\"GET\",b,!1);c.send(null);return c.responseText},m&&(ka=function(b){var c=new XMLHttpRequest;c.open(\"GET\",b,!1);c.responseType=\"arraybuffer\";c.send(null);return new Uint8Array(c.response)});var na=a.print||console.log.bind(console),oa=a.printErr||console.warn.bind(console);for(l in da)da.hasOwnProperty(l)&&(a[l]=da[l]);da=null;var pa;a.wasmBinary&&(pa=a.wasmBinary);var noExitRuntime;\na.noExitRuntime&&(noExitRuntime=a.noExitRuntime);\"object\"!==typeof WebAssembly&&q(\"no native wasm support detected\");\nfunction r(b){var c=\"i8\";\"*\"===c.charAt(c.length-1)&&(c=\"i32\");switch(c){case \"i1\":t[b>>0]=0;break;case \"i8\":t[b>>0]=0;break;case \"i16\":qa[b>>1]=0;break;case \"i32\":u[b>>2]=0;break;case \"i64\":ra=[0,(w=0,1<=+sa(w)?0<w?(ta(+ua(w/4294967296),4294967295)|0)>>>0:~~+va((w-+(~~w>>>0))/4294967296)>>>0:0)];u[b>>2]=ra[0];u[b+4>>2]=ra[1];break;case \"float\":wa[b>>2]=0;break;case \"double\":xa[b>>3]=0;break;default:q(\"invalid type for setValue: \"+c)}}\nfunction ya(b,c){c=c||\"i8\";\"*\"===c.charAt(c.length-1)&&(c=\"i32\");switch(c){case \"i1\":return t[b>>0];case \"i8\":return t[b>>0];case \"i16\":return qa[b>>1];case \"i32\":return u[b>>2];case \"i64\":return u[b>>2];case \"float\":return wa[b>>2];case \"double\":return xa[b>>3];default:q(\"invalid type for getValue: \"+c)}return null}var za,Aa=new WebAssembly.Table({initial:9,maximum:9,element:\"anyfunc\"}),Ba=!1,Ca=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;\nfunction x(b,c){if(b){var d=y,e=b+c;for(c=b;d[c]&&!(c>=e);)++c;if(16<c-b&&d.subarray&&Ca)b=Ca.decode(d.subarray(b,c));else{for(e=\"\";b<c;){var f=d[b++];if(f&128){var k=d[b++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|k);else{var p=d[b++]&63;f=224==(f&240)?(f&15)<<12|k<<6|p:(f&7)<<18|k<<12|p<<6|d[b++]&63;65536>f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}b=e}}else b=\"\";return b}\nfunction z(b,c,d,e){if(!(0<e))return 0;var f=d;e=d+e-1;for(var k=0;k<b.length;++k){var p=b.charCodeAt(k);if(55296<=p&&57343>=p){var v=b.charCodeAt(++k);p=65536+((p&1023)<<10)|v&1023}if(127>=p){if(d>=e)break;c[d++]=p}else{if(2047>=p){if(d+1>=e)break;c[d++]=192|p>>6}else{if(65535>=p){if(d+2>=e)break;c[d++]=224|p>>12}else{if(d+3>=e)break;c[d++]=240|p>>18;c[d++]=128|p>>12&63}c[d++]=128|p>>6&63}c[d++]=128|p&63}}c[d]=0;return d-f}\nfunction A(b){for(var c=0,d=0;d<b.length;++d){var e=b.charCodeAt(d);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|b.charCodeAt(++d)&1023);127>=e?++c:c=2047>=e?c+2:65535>=e?c+3:c+4}return c}function Da(b,c){for(var d=0;d<b.length;++d)t[c++>>0]=b.charCodeAt(d)}var Ea,t,y,qa,u,wa,xa,Ga=a.INITIAL_MEMORY||262144;a.wasmMemory?za=a.wasmMemory:za=new WebAssembly.Memory({initial:Ga/65536,maximum:Ga/65536});za&&(Ea=za.buffer);Ga=Ea.byteLength;var B=Ea;Ea=B;a.HEAP8=t=new Int8Array(B);a.HEAP16=qa=new Int16Array(B);\na.HEAP32=u=new Int32Array(B);a.HEAPU8=y=new Uint8Array(B);a.HEAPU16=new Uint16Array(B);a.HEAPU32=new Uint32Array(B);a.HEAPF32=wa=new Float32Array(B);a.HEAPF64=xa=new Float64Array(B);u[9584]=104032;function Ha(b){for(;0<b.length;){var c=b.shift();if(\"function\"==typeof c)c(a);else{var d=c.Nb;\"number\"===typeof d?void 0===c.Mb?a.dynCall_v(d):a.dynCall_vi(d,c.Mb):d(void 0===c.Mb?null:c.Mb)}}}var Ia=[],Ja=[],Ka=[],La=[];function Ma(){var b=a.preRun.shift();Ia.unshift(b)}\nvar sa=Math.abs,va=Math.ceil,ua=Math.floor,ta=Math.min,C=0,Na=null,Oa=null;a.preloadedImages={};a.preloadedAudios={};function q(b){if(a.onAbort)a.onAbort(b);na(b);oa(b);Ba=!0;throw new WebAssembly.RuntimeError(\"abort(\"+b+\"). Build with -s ASSERTIONS=1 for more info.\");}function Pa(b){var c=D;return String.prototype.startsWith?c.startsWith(b):0===c.indexOf(b)}function Qa(){return Pa(\"data:application/octet-stream;base64,\")}var D=\"olm.wasm\";if(!Qa()){var Ra=D;D=a.locateFile?a.locateFile(Ra,n):n+Ra}\nfunction Sa(){try{if(pa)return new Uint8Array(pa);if(ka)return ka(D);throw\"both async and sync fetching of the wasm failed\";}catch(b){q(b)}}function Ta(){return pa||!ea&&!m||\"function\"!==typeof fetch||Pa(\"file://\")?new Promise(function(b){b(Sa())}):fetch(D,{credentials:\"same-origin\"}).then(function(b){if(!b.ok)throw\"failed to load wasm binary file at '\"+D+\"'\";return b.arrayBuffer()}).catch(function(){return Sa()})}var w,ra;Ja.push({Nb:function(){Ua()}});\nvar Va={a:function(b,c,d){y.copyWithin(b,c,c+d)},b:function(){q(\"OOM\")},memory:za,table:Aa};\n(function(){function b(f){a.asm=f.exports;C--;a.monitorRunDependencies&&a.monitorRunDependencies(C);0==C&&(null!==Na&&(clearInterval(Na),Na=null),Oa&&(f=Oa,Oa=null,f()))}function c(f){b(f.instance)}function d(f){return Ta().then(function(k){return WebAssembly.instantiate(k,e)}).then(f,function(k){oa(\"failed to asynchronously prepare wasm: \"+k);q(k)})}var e={a:Va};C++;a.monitorRunDependencies&&a.monitorRunDependencies(C);if(a.instantiateWasm)try{return a.instantiateWasm(e,b)}catch(f){return oa(\"Module.instantiateWasm callback failed with error: \"+\nf),!1}(function(){if(pa||\"function\"!==typeof WebAssembly.instantiateStreaming||Qa()||Pa(\"file://\")||\"function\"!==typeof fetch)return d(c);fetch(D,{credentials:\"same-origin\"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(k){oa(\"wasm streaming compile failed: \"+k);oa(\"falling back to ArrayBuffer instantiation\");return d(c)})})})();return{}})();var Ua=a.___wasm_call_ctors=function(){return(Ua=a.___wasm_call_ctors=a.asm.c).apply(null,arguments)};\na._olm_pk_encryption_last_error=function(){return(a._olm_pk_encryption_last_error=a.asm.d).apply(null,arguments)};a._olm_pk_encryption_size=function(){return(a._olm_pk_encryption_size=a.asm.e).apply(null,arguments)};a._olm_pk_encryption=function(){return(a._olm_pk_encryption=a.asm.f).apply(null,arguments)};a._olm_clear_pk_encryption=function(){return(a._olm_clear_pk_encryption=a.asm.g).apply(null,arguments)};\na._olm_pk_encryption_set_recipient_key=function(){return(a._olm_pk_encryption_set_recipient_key=a.asm.h).apply(null,arguments)};a._olm_pk_key_length=function(){return(a._olm_pk_key_length=a.asm.i).apply(null,arguments)};a._olm_pk_ciphertext_length=function(){return(a._olm_pk_ciphertext_length=a.asm.j).apply(null,arguments)};a._olm_pk_mac_length=function(){return(a._olm_pk_mac_length=a.asm.k).apply(null,arguments)};\na._olm_pk_encrypt_random_length=function(){return(a._olm_pk_encrypt_random_length=a.asm.l).apply(null,arguments)};a._olm_pk_encrypt=function(){return(a._olm_pk_encrypt=a.asm.m).apply(null,arguments)};a._olm_pk_decryption_last_error=function(){return(a._olm_pk_decryption_last_error=a.asm.n).apply(null,arguments)};a._olm_pk_decryption_size=function(){return(a._olm_pk_decryption_size=a.asm.o).apply(null,arguments)};a._olm_pk_decryption=function(){return(a._olm_pk_decryption=a.asm.p).apply(null,arguments)};\na._olm_clear_pk_decryption=function(){return(a._olm_clear_pk_decryption=a.asm.q).apply(null,arguments)};a._olm_pk_private_key_length=function(){return(a._olm_pk_private_key_length=a.asm.r).apply(null,arguments)};a._olm_pk_generate_key_random_length=function(){return(a._olm_pk_generate_key_random_length=a.asm.s).apply(null,arguments)};a._olm_pk_key_from_private=function(){return(a._olm_pk_key_from_private=a.asm.t).apply(null,arguments)};\na._olm_pk_generate_key=function(){return(a._olm_pk_generate_key=a.asm.u).apply(null,arguments)};a._olm_pickle_pk_decryption_length=function(){return(a._olm_pickle_pk_decryption_length=a.asm.v).apply(null,arguments)};a._olm_pickle_pk_decryption=function(){return(a._olm_pickle_pk_decryption=a.asm.w).apply(null,arguments)};a._olm_unpickle_pk_decryption=function(){return(a._olm_unpickle_pk_decryption=a.asm.x).apply(null,arguments)};\na._olm_pk_max_plaintext_length=function(){return(a._olm_pk_max_plaintext_length=a.asm.y).apply(null,arguments)};a._olm_pk_decrypt=function(){return(a._olm_pk_decrypt=a.asm.z).apply(null,arguments)};a._olm_pk_get_private_key=function(){return(a._olm_pk_get_private_key=a.asm.A).apply(null,arguments)};a._olm_pk_signing_size=function(){return(a._olm_pk_signing_size=a.asm.B).apply(null,arguments)};a._olm_pk_signing=function(){return(a._olm_pk_signing=a.asm.C).apply(null,arguments)};\na._olm_pk_signing_last_error=function(){return(a._olm_pk_signing_last_error=a.asm.D).apply(null,arguments)};a._olm_clear_pk_signing=function(){return(a._olm_clear_pk_signing=a.asm.E).apply(null,arguments)};a._olm_pk_signing_seed_length=function(){return(a._olm_pk_signing_seed_length=a.asm.F).apply(null,arguments)};a._olm_pk_signing_public_key_length=function(){return(a._olm_pk_signing_public_key_length=a.asm.G).apply(null,arguments)};\na._olm_pk_signing_key_from_seed=function(){return(a._olm_pk_signing_key_from_seed=a.asm.H).apply(null,arguments)};a._olm_pk_signature_length=function(){return(a._olm_pk_signature_length=a.asm.I).apply(null,arguments)};a._olm_pk_sign=function(){return(a._olm_pk_sign=a.asm.J).apply(null,arguments)};a._olm_get_library_version=function(){return(a._olm_get_library_version=a.asm.K).apply(null,arguments)};a._olm_error=function(){return(a._olm_error=a.asm.L).apply(null,arguments)};\na._olm_account_last_error=function(){return(a._olm_account_last_error=a.asm.M).apply(null,arguments)};a._olm_session_last_error=function(){return(a._olm_session_last_error=a.asm.N).apply(null,arguments)};a._olm_utility_last_error=function(){return(a._olm_utility_last_error=a.asm.O).apply(null,arguments)};a._olm_account_size=function(){return(a._olm_account_size=a.asm.P).apply(null,arguments)};a._olm_session_size=function(){return(a._olm_session_size=a.asm.Q).apply(null,arguments)};\na._olm_utility_size=function(){return(a._olm_utility_size=a.asm.R).apply(null,arguments)};a._olm_account=function(){return(a._olm_account=a.asm.S).apply(null,arguments)};a._olm_session=function(){return(a._olm_session=a.asm.T).apply(null,arguments)};a._olm_utility=function(){return(a._olm_utility=a.asm.U).apply(null,arguments)};a._olm_clear_account=function(){return(a._olm_clear_account=a.asm.V).apply(null,arguments)};\na._olm_clear_session=function(){return(a._olm_clear_session=a.asm.W).apply(null,arguments)};a._olm_clear_utility=function(){return(a._olm_clear_utility=a.asm.X).apply(null,arguments)};a._olm_pickle_account_length=function(){return(a._olm_pickle_account_length=a.asm.Y).apply(null,arguments)};a._olm_pickle_session_length=function(){return(a._olm_pickle_session_length=a.asm.Z).apply(null,arguments)};a._olm_pickle_account=function(){return(a._olm_pickle_account=a.asm._).apply(null,arguments)};\na._olm_pickle_session=function(){return(a._olm_pickle_session=a.asm.$).apply(null,arguments)};a._olm_unpickle_account=function(){return(a._olm_unpickle_account=a.asm.aa).apply(null,arguments)};a._olm_unpickle_session=function(){return(a._olm_unpickle_session=a.asm.ba).apply(null,arguments)};a._olm_create_account_random_length=function(){return(a._olm_create_account_random_length=a.asm.ca).apply(null,arguments)};a._olm_create_account=function(){return(a._olm_create_account=a.asm.da).apply(null,arguments)};\na._olm_account_identity_keys_length=function(){return(a._olm_account_identity_keys_length=a.asm.ea).apply(null,arguments)};a._olm_account_identity_keys=function(){return(a._olm_account_identity_keys=a.asm.fa).apply(null,arguments)};a._olm_account_signature_length=function(){return(a._olm_account_signature_length=a.asm.ga).apply(null,arguments)};a._olm_account_sign=function(){return(a._olm_account_sign=a.asm.ha).apply(null,arguments)};\na._olm_account_one_time_keys_length=function(){return(a._olm_account_one_time_keys_length=a.asm.ia).apply(null,arguments)};a._olm_account_one_time_keys=function(){return(a._olm_account_one_time_keys=a.asm.ja).apply(null,arguments)};a._olm_account_mark_keys_as_published=function(){return(a._olm_account_mark_keys_as_published=a.asm.ka).apply(null,arguments)};a._olm_account_max_number_of_one_time_keys=function(){return(a._olm_account_max_number_of_one_time_keys=a.asm.la).apply(null,arguments)};\na._olm_account_generate_one_time_keys_random_length=function(){return(a._olm_account_generate_one_time_keys_random_length=a.asm.ma).apply(null,arguments)};a._olm_account_generate_one_time_keys=function(){return(a._olm_account_generate_one_time_keys=a.asm.na).apply(null,arguments)};a._olm_account_generate_fallback_key_random_length=function(){return(a._olm_account_generate_fallback_key_random_length=a.asm.oa).apply(null,arguments)};\na._olm_account_generate_fallback_key=function(){return(a._olm_account_generate_fallback_key=a.asm.pa).apply(null,arguments)};a._olm_account_fallback_key_length=function(){return(a._olm_account_fallback_key_length=a.asm.qa).apply(null,arguments)};a._olm_account_fallback_key=function(){return(a._olm_account_fallback_key=a.asm.ra).apply(null,arguments)};a._olm_create_outbound_session_random_length=function(){return(a._olm_create_outbound_session_random_length=a.asm.sa).apply(null,arguments)};\na._olm_create_outbound_session=function(){return(a._olm_create_outbound_session=a.asm.ta).apply(null,arguments)};a._olm_create_inbound_session=function(){return(a._olm_create_inbound_session=a.asm.ua).apply(null,arguments)};a._olm_create_inbound_session_from=function(){return(a._olm_create_inbound_session_from=a.asm.va).apply(null,arguments)};a._olm_session_id_length=function(){return(a._olm_session_id_length=a.asm.wa).apply(null,arguments)};\na._olm_session_id=function(){return(a._olm_session_id=a.asm.xa).apply(null,arguments)};a._olm_session_has_received_message=function(){return(a._olm_session_has_received_message=a.asm.ya).apply(null,arguments)};a._olm_session_describe=function(){return(a._olm_session_describe=a.asm.za).apply(null,arguments)};a._olm_matches_inbound_session=function(){return(a._olm_matches_inbound_session=a.asm.Aa).apply(null,arguments)};\na._olm_matches_inbound_session_from=function(){return(a._olm_matches_inbound_session_from=a.asm.Ba).apply(null,arguments)};a._olm_remove_one_time_keys=function(){return(a._olm_remove_one_time_keys=a.asm.Ca).apply(null,arguments)};a._olm_encrypt_message_type=function(){return(a._olm_encrypt_message_type=a.asm.Da).apply(null,arguments)};a._olm_encrypt_random_length=function(){return(a._olm_encrypt_random_length=a.asm.Ea).apply(null,arguments)};\na._olm_encrypt_message_length=function(){return(a._olm_encrypt_message_length=a.asm.Fa).apply(null,arguments)};a._olm_encrypt=function(){return(a._olm_encrypt=a.asm.Ga).apply(null,arguments)};a._olm_decrypt_max_plaintext_length=function(){return(a._olm_decrypt_max_plaintext_length=a.asm.Ha).apply(null,arguments)};a._olm_decrypt=function(){return(a._olm_decrypt=a.asm.Ia).apply(null,arguments)};a._olm_sha256_length=function(){return(a._olm_sha256_length=a.asm.Ja).apply(null,arguments)};\na._olm_sha256=function(){return(a._olm_sha256=a.asm.Ka).apply(null,arguments)};a._olm_ed25519_verify=function(){return(a._olm_ed25519_verify=a.asm.La).apply(null,arguments)};a._olm_inbound_group_session_size=function(){return(a._olm_inbound_group_session_size=a.asm.Ma).apply(null,arguments)};a._olm_inbound_group_session=function(){return(a._olm_inbound_group_session=a.asm.Na).apply(null,arguments)};\na._olm_clear_inbound_group_session=function(){return(a._olm_clear_inbound_group_session=a.asm.Oa).apply(null,arguments)};a._olm_inbound_group_session_last_error=function(){return(a._olm_inbound_group_session_last_error=a.asm.Pa).apply(null,arguments)};a._olm_init_inbound_group_session=function(){return(a._olm_init_inbound_group_session=a.asm.Qa).apply(null,arguments)};a._olm_import_inbound_group_session=function(){return(a._olm_import_inbound_group_session=a.asm.Ra).apply(null,arguments)};\na._olm_pickle_inbound_group_session_length=function(){return(a._olm_pickle_inbound_group_session_length=a.asm.Sa).apply(null,arguments)};a._olm_pickle_inbound_group_session=function(){return(a._olm_pickle_inbound_group_session=a.asm.Ta).apply(null,arguments)};a._olm_unpickle_inbound_group_session=function(){return(a._olm_unpickle_inbound_group_session=a.asm.Ua).apply(null,arguments)};\na._olm_group_decrypt_max_plaintext_length=function(){return(a._olm_group_decrypt_max_plaintext_length=a.asm.Va).apply(null,arguments)};a._olm_group_decrypt=function(){return(a._olm_group_decrypt=a.asm.Wa).apply(null,arguments)};a._olm_inbound_group_session_id_length=function(){return(a._olm_inbound_group_session_id_length=a.asm.Xa).apply(null,arguments)};a._olm_inbound_group_session_id=function(){return(a._olm_inbound_group_session_id=a.asm.Ya).apply(null,arguments)};\na._olm_inbound_group_session_first_known_index=function(){return(a._olm_inbound_group_session_first_known_index=a.asm.Za).apply(null,arguments)};a._olm_inbound_group_session_is_verified=function(){return(a._olm_inbound_group_session_is_verified=a.asm._a).apply(null,arguments)};a._olm_export_inbound_group_session_length=function(){return(a._olm_export_inbound_group_session_length=a.asm.$a).apply(null,arguments)};\na._olm_export_inbound_group_session=function(){return(a._olm_export_inbound_group_session=a.asm.ab).apply(null,arguments)};a._olm_sas_last_error=function(){return(a._olm_sas_last_error=a.asm.bb).apply(null,arguments)};a._olm_sas_size=function(){return(a._olm_sas_size=a.asm.cb).apply(null,arguments)};a._olm_sas=function(){return(a._olm_sas=a.asm.db).apply(null,arguments)};a._olm_clear_sas=function(){return(a._olm_clear_sas=a.asm.eb).apply(null,arguments)};\na._olm_create_sas_random_length=function(){return(a._olm_create_sas_random_length=a.asm.fb).apply(null,arguments)};a._olm_create_sas=function(){return(a._olm_create_sas=a.asm.gb).apply(null,arguments)};a._olm_sas_pubkey_length=function(){return(a._olm_sas_pubkey_length=a.asm.hb).apply(null,arguments)};a._olm_sas_get_pubkey=function(){return(a._olm_sas_get_pubkey=a.asm.ib).apply(null,arguments)};a._olm_sas_set_their_key=function(){return(a._olm_sas_set_their_key=a.asm.jb).apply(null,arguments)};\na._olm_sas_is_their_key_set=function(){return(a._olm_sas_is_their_key_set=a.asm.kb).apply(null,arguments)};a._olm_sas_generate_bytes=function(){return(a._olm_sas_generate_bytes=a.asm.lb).apply(null,arguments)};a._olm_sas_mac_length=function(){return(a._olm_sas_mac_length=a.asm.mb).apply(null,arguments)};a._olm_sas_calculate_mac=function(){return(a._olm_sas_calculate_mac=a.asm.nb).apply(null,arguments)};\na._olm_sas_calculate_mac_long_kdf=function(){return(a._olm_sas_calculate_mac_long_kdf=a.asm.ob).apply(null,arguments)};a._olm_outbound_group_session_size=function(){return(a._olm_outbound_group_session_size=a.asm.pb).apply(null,arguments)};a._olm_outbound_group_session=function(){return(a._olm_outbound_group_session=a.asm.qb).apply(null,arguments)};a._olm_clear_outbound_group_session=function(){return(a._olm_clear_outbound_group_session=a.asm.rb).apply(null,arguments)};\na._olm_outbound_group_session_last_error=function(){return(a._olm_outbound_group_session_last_error=a.asm.sb).apply(null,arguments)};a._olm_pickle_outbound_group_session_length=function(){return(a._olm_pickle_outbound_group_session_length=a.asm.tb).apply(null,arguments)};a._olm_pickle_outbound_group_session=function(){return(a._olm_pickle_outbound_group_session=a.asm.ub).apply(null,arguments)};\na._olm_unpickle_outbound_group_session=function(){return(a._olm_unpickle_outbound_group_session=a.asm.vb).apply(null,arguments)};a._olm_init_outbound_group_session_random_length=function(){return(a._olm_init_outbound_group_session_random_length=a.asm.wb).apply(null,arguments)};a._olm_init_outbound_group_session=function(){return(a._olm_init_outbound_group_session=a.asm.xb).apply(null,arguments)};\na._olm_group_encrypt_message_length=function(){return(a._olm_group_encrypt_message_length=a.asm.yb).apply(null,arguments)};a._olm_group_encrypt=function(){return(a._olm_group_encrypt=a.asm.zb).apply(null,arguments)};a._olm_outbound_group_session_id_length=function(){return(a._olm_outbound_group_session_id_length=a.asm.Ab).apply(null,arguments)};a._olm_outbound_group_session_id=function(){return(a._olm_outbound_group_session_id=a.asm.Bb).apply(null,arguments)};\na._olm_outbound_group_session_message_index=function(){return(a._olm_outbound_group_session_message_index=a.asm.Cb).apply(null,arguments)};a._olm_outbound_group_session_key_length=function(){return(a._olm_outbound_group_session_key_length=a.asm.Db).apply(null,arguments)};a._olm_outbound_group_session_key=function(){return(a._olm_outbound_group_session_key=a.asm.Eb).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.Fb).apply(null,arguments)};\na._free=function(){return(a._free=a.asm.Gb).apply(null,arguments)};var Wa=a.stackSave=function(){return(Wa=a.stackSave=a.asm.Hb).apply(null,arguments)},Xa=a.stackRestore=function(){return(Xa=a.stackRestore=a.asm.Ib).apply(null,arguments)},Ya=a.stackAlloc=function(){return(Ya=a.stackAlloc=a.asm.Jb).apply(null,arguments)};a.ALLOC_STACK=1;var Za;Oa=function $a(){Za||ab();Za||(Oa=$a)};\nfunction ab(){function b(){if(!Za&&(Za=!0,a.calledRun=!0,!Ba)){Ha(Ja);Ha(Ka);aa(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for(\"function\"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;){var c=a.postRun.shift();La.unshift(c)}Ha(La)}}if(!(0<C)){if(a.preRun)for(\"function\"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)Ma();Ha(Ia);0<C||(a.setStatus?(a.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){a.setStatus(\"\")},1);b()},1)):b())}}\na.run=ab;if(a.preInit)for(\"function\"==typeof a.preInit&&(a.preInit=[a.preInit]);0<a.preInit.length;)a.preInit.pop()();noExitRuntime=!0;ab();function E(){var b=a._olm_outbound_group_session_size();this.Lb=F(b);this.Kb=a._olm_outbound_group_session(this.Lb)}function H(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_outbound_group_session_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}E.prototype.free=function(){a._olm_clear_outbound_group_session(this.Kb);I(this.Kb)};\nE.prototype.pickle=J(function(b){b=K(b);var c=H(a._olm_pickle_outbound_group_session_length)(this.Kb),d=L(b),e=L(c+1);try{H(a._olm_pickle_outbound_group_session)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});E.prototype.unpickle=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c);try{H(a._olm_unpickle_outbound_group_session)(this.Kb,d,b.length,e,c.length)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}});\nE.prototype.create=J(function(){var b=H(a._olm_init_outbound_group_session_random_length)(this.Kb),c=N(b,g);H(a._olm_init_outbound_group_session)(this.Kb,c,b)});E.prototype.encrypt=function(b){try{var c=A(b);var d=H(a._olm_group_encrypt_message_length)(this.Kb,c);var e=F(c+1);z(b,y,e,c+1);var f=F(d+1);H(a._olm_group_encrypt)(this.Kb,e,c,f,d);r(f+d);return x(f,d)}finally{void 0!==e&&(M(e,c+1),I(e)),void 0!==f&&I(f)}};\nE.prototype.session_id=J(function(){var b=H(a._olm_outbound_group_session_id_length)(this.Kb),c=L(b+1);H(a._olm_outbound_group_session_id)(this.Kb,c,b);return x(c,b)});E.prototype.session_key=J(function(){var b=H(a._olm_outbound_group_session_key_length)(this.Kb),c=L(b+1);H(a._olm_outbound_group_session_key)(this.Kb,c,b);var d=x(c,b);M(c,b);return d});E.prototype.message_index=function(){return H(a._olm_outbound_group_session_message_index)(this.Kb)};olm_exports.OutboundGroupSession=E;\nfunction O(){var b=a._olm_inbound_group_session_size();this.Lb=F(b);this.Kb=a._olm_inbound_group_session(this.Lb)}function P(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_inbound_group_session_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}O.prototype.free=function(){a._olm_clear_inbound_group_session(this.Kb);I(this.Kb)};\nO.prototype.pickle=J(function(b){b=K(b);var c=P(a._olm_pickle_inbound_group_session_length)(this.Kb),d=L(b),e=L(c+1);try{P(a._olm_pickle_inbound_group_session)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});O.prototype.unpickle=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c);try{P(a._olm_unpickle_inbound_group_session)(this.Kb,d,b.length,e,c.length)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}});\nO.prototype.create=J(function(b){b=K(b);var c=L(b);try{P(a._olm_init_inbound_group_session)(this.Kb,c,b.length)}finally{for(M(c,b.length),c=0;c<b.length;c++)b[c]=0}});O.prototype.import_session=J(function(b){b=K(b);var c=L(b);try{P(a._olm_import_inbound_group_session)(this.Kb,c,b.length)}finally{for(M(c,b.length),c=0;c<b.length;c++)b[c]=0}});\nO.prototype.decrypt=J(function(b){try{var c=F(b.length);Da(b,c);var d=P(a._olm_group_decrypt_max_plaintext_length)(this.Kb,c,b.length);Da(b,c);var e=F(d+1);var f=L(4);var k=P(a._olm_group_decrypt)(this.Kb,c,b.length,e,d,f);r(e+k);return{plaintext:x(e,k),message_index:ya(f,\"i32\")}}finally{void 0!==c&&I(c),void 0!==e&&(M(e,k),I(e))}});O.prototype.session_id=J(function(){var b=P(a._olm_inbound_group_session_id_length)(this.Kb),c=L(b+1);P(a._olm_inbound_group_session_id)(this.Kb,c,b);return x(c,b)});\nO.prototype.first_known_index=J(function(){return P(a._olm_inbound_group_session_first_known_index)(this.Kb)});O.prototype.export_session=J(function(b){var c=P(a._olm_export_inbound_group_session_length)(this.Kb),d=L(c+1);H(a._olm_export_inbound_group_session)(this.Kb,d,c,b);b=x(d,c);M(d,c);return b});olm_exports.InboundGroupSession=O;function bb(){var b=a._olm_pk_encryption_size();this.Lb=F(b);this.Kb=a._olm_pk_encryption(this.Lb)}\nfunction Q(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_pk_encryption_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}bb.prototype.free=function(){a._olm_clear_pk_encryption(this.Kb);I(this.Kb)};bb.prototype.set_recipient_key=J(function(b){b=K(b);var c=L(b);Q(a._olm_pk_encryption_set_recipient_key)(this.Kb,c,b.length)});\nbb.prototype.encrypt=J(function(b){try{var c=A(b);var d=F(c+1);z(b,y,d,c+1);var e=Q(a._olm_pk_encrypt_random_length)();var f=N(e,g);var k=Q(a._olm_pk_ciphertext_length)(this.Kb,c);var p=F(k+1);var v=Q(a._olm_pk_mac_length)(this.Kb),ha=L(v+1);r(ha+v);var V=Q(a._olm_pk_key_length)(),G=L(V+1);r(G+V);Q(a._olm_pk_encrypt)(this.Kb,d,c,p,k,ha,v,G,V,f,e);r(p+k);return{ciphertext:x(p,k),mac:x(ha,v),ephemeral:x(G,V)}}finally{void 0!==f&&M(f,e),void 0!==d&&(M(d,c+1),I(d)),void 0!==p&&I(p)}});\nfunction R(){var b=a._olm_pk_decryption_size();this.Lb=F(b);this.Kb=a._olm_pk_decryption(this.Lb)}function S(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_pk_decryption_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}R.prototype.free=function(){a._olm_clear_pk_decryption(this.Kb);I(this.Kb)};\nR.prototype.init_with_private_key=J(function(b){var c=L(b.length);a.HEAPU8.set(b,c);var d=S(a._olm_pk_key_length)(),e=L(d+1);try{S(a._olm_pk_key_from_private)(this.Kb,e,d,c,b.length)}finally{M(c,b.length)}return x(e,d)});R.prototype.generate_key=J(function(){var b=S(a._olm_pk_private_key_length)(),c=N(b,g),d=S(a._olm_pk_key_length)(),e=L(d+1);try{S(a._olm_pk_key_from_private)(this.Kb,e,d,c,b)}finally{M(c,b)}return x(e,d)});\nR.prototype.get_private_key=J(function(){var b=Q(a._olm_pk_private_key_length)(),c=L(b);S(a._olm_pk_get_private_key)(this.Kb,c,b);var d=new Uint8Array(new Uint8Array(a.HEAPU8.buffer,c,b));M(c,b);return d});R.prototype.pickle=J(function(b){b=K(b);var c=S(a._olm_pickle_pk_decryption_length)(this.Kb),d=L(b),e=L(c+1);try{S(a._olm_pickle_pk_decryption)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});\nR.prototype.unpickle=J(function(b,c){b=K(b);var d=L(b),e=K(c),f=L(e);c=S(a._olm_pk_key_length)();var k=L(c+1);try{S(a._olm_unpickle_pk_decryption)(this.Kb,d,b.length,f,e.length,k,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(k,c)});\nR.prototype.decrypt=J(function(b,c,d){try{var e=A(d);var f=F(e+1);z(d,y,f,e+1);var k=K(b),p=L(k),v=K(c),ha=L(v);var V=S(a._olm_pk_max_plaintext_length)(this.Kb,e);var G=F(V+1);var Fa=S(a._olm_pk_decrypt)(this.Kb,p,k.length,ha,v.length,f,e,G,V);r(G+Fa);return x(G,Fa)}finally{void 0!==G&&(M(G,Fa+1),I(G)),void 0!==f&&I(f)}});function cb(){var b=a._olm_pk_signing_size();this.Lb=F(b);this.Kb=a._olm_pk_signing(this.Lb)}\nfunction db(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_pk_signing_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}cb.prototype.free=function(){a._olm_clear_pk_signing(this.Kb);I(this.Kb)};cb.prototype.init_with_seed=J(function(b){var c=L(b.length);a.HEAPU8.set(b,c);var d=db(a._olm_pk_signing_public_key_length)(),e=L(d+1);try{db(a._olm_pk_signing_key_from_seed)(this.Kb,e,d,c,b.length)}finally{M(c,b.length)}return x(e,d)});\ncb.prototype.generate_seed=J(function(){var b=db(a._olm_pk_signing_seed_length)(),c=N(b,g),d=new Uint8Array(new Uint8Array(a.HEAPU8.buffer,c,b));M(c,b);return d});cb.prototype.sign=J(function(b){try{var c=A(b);var d=F(c+1);z(b,y,d,c+1);var e=db(a._olm_pk_signature_length)(),f=L(e+1);db(a._olm_pk_sign)(this.Kb,d,c,f,e);return x(f,e)}finally{void 0!==d&&(M(d,c+1),I(d))}});\nfunction T(){var b=a._olm_sas_size(),c=a._olm_create_sas_random_length(),d=N(c,g);this.Lb=F(b);this.Kb=a._olm_sas(this.Lb);a._olm_create_sas(this.Kb,d,c);M(d,c)}function U(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_sas_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}T.prototype.free=function(){a._olm_clear_sas(this.Kb);I(this.Kb)};\nT.prototype.get_pubkey=J(function(){var b=U(a._olm_sas_pubkey_length)(this.Kb),c=L(b+1);U(a._olm_sas_get_pubkey)(this.Kb,c,b);return x(c,b)});T.prototype.set_their_key=J(function(b){b=K(b);var c=L(b);U(a._olm_sas_set_their_key)(this.Kb,c,b.length)});T.prototype.is_their_key_set=J(function(){return U(a._olm_sas_is_their_key_set)(this.Kb)?!0:!1});\nT.prototype.generate_bytes=J(function(b,c){b=K(b);var d=L(b),e=L(c);U(a._olm_sas_generate_bytes)(this.Kb,d,b.length,e,c);return new Uint8Array(new Uint8Array(a.HEAPU8.buffer,e,c))});T.prototype.calculate_mac=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c),f=U(a._olm_sas_mac_length)(this.Kb),k=L(f+1);U(a._olm_sas_calculate_mac)(this.Kb,d,b.length,e,c.length,k,f);return x(k,f)});\nT.prototype.calculate_mac_long_kdf=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c),f=U(a._olm_sas_mac_length)(this.Kb),k=L(f+1);U(a._olm_sas_calculate_mac_long_kdf)(this.Kb,d,b.length,e,c.length,k,f);return x(k,f)});var F=a._malloc,I=a._free,h;function N(b,c){var d=Ya(b);c(new Uint8Array(a.HEAPU8.buffer,d,b));return d}function L(b){return\"number\"==typeof b?N(b,function(c){c.fill(0)}):N(b.length,function(c){c.set(b)})}\nfunction K(b){if(b instanceof Uint8Array)var c=b;else c=Array(A(b)+1),b=z(b,c,0,c.length),c.length=b;return c}function J(b){return function(){var c=Wa();try{return b.apply(this,arguments)}finally{Xa(c)}}}function M(b,c){for(;0<c--;)a.HEAP8[b++]=0}function W(){var b=a._olm_account_size();this.Lb=F(b);this.Kb=a._olm_account(this.Lb)}function X(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_account_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}\nW.prototype.free=function(){a._olm_clear_account(this.Kb);I(this.Kb)};W.prototype.create=J(function(){var b=X(a._olm_create_account_random_length)(this.Kb),c=N(b,g);X(a._olm_create_account)(this.Kb,c,b)});W.prototype.identity_keys=J(function(){var b=X(a._olm_account_identity_keys_length)(this.Kb),c=L(b+1);X(a._olm_account_identity_keys)(this.Kb,c,b);return x(c,b)});\nW.prototype.sign=J(function(b){var c=X(a._olm_account_signature_length)(this.Kb);b=K(b);var d=L(b),e=L(c+1);try{X(a._olm_account_sign)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});W.prototype.one_time_keys=J(function(){var b=X(a._olm_account_one_time_keys_length)(this.Kb),c=L(b+1);X(a._olm_account_one_time_keys)(this.Kb,c,b);return x(c,b)});W.prototype.mark_keys_as_published=J(function(){X(a._olm_account_mark_keys_as_published)(this.Kb)});\nW.prototype.max_number_of_one_time_keys=J(function(){return X(a._olm_account_max_number_of_one_time_keys)(this.Kb)});W.prototype.generate_one_time_keys=J(function(b){var c=X(a._olm_account_generate_one_time_keys_random_length)(this.Kb,b),d=N(c,g);X(a._olm_account_generate_one_time_keys)(this.Kb,b,d,c)});W.prototype.remove_one_time_keys=J(function(b){X(a._olm_remove_one_time_keys)(this.Kb,b.Kb)});\nW.prototype.generate_fallback_key=J(function(){var b=X(a._olm_account_generate_fallback_key_random_length)(this.Kb),c=N(b,g);X(a._olm_account_generate_fallback_key)(this.Kb,c,b)});W.prototype.fallback_key=J(function(){var b=X(a._olm_account_fallback_key_length)(this.Kb),c=L(b+1);X(a._olm_account_fallback_key)(this.Kb,c,b);return x(c,b)});\nW.prototype.pickle=J(function(b){b=K(b);var c=X(a._olm_pickle_account_length)(this.Kb),d=L(b),e=L(c+1);try{X(a._olm_pickle_account)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});W.prototype.unpickle=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c);try{X(a._olm_unpickle_account)(this.Kb,d,b.length,e,c.length)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}});function Y(){var b=a._olm_session_size();this.Lb=F(b);this.Kb=a._olm_session(this.Lb)}\nfunction Z(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_session_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}Y.prototype.free=function(){a._olm_clear_session(this.Kb);I(this.Kb)};Y.prototype.pickle=J(function(b){b=K(b);var c=Z(a._olm_pickle_session_length)(this.Kb),d=L(b),e=L(c+1);try{Z(a._olm_pickle_session)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});\nY.prototype.unpickle=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c);try{Z(a._olm_unpickle_session)(this.Kb,d,b.length,e,c.length)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}});Y.prototype.create_outbound=J(function(b,c,d){var e=Z(a._olm_create_outbound_session_random_length)(this.Kb),f=N(e,g);c=K(c);d=K(d);var k=L(c),p=L(d);try{Z(a._olm_create_outbound_session)(this.Kb,b.Kb,k,c.length,p,d.length,f,e)}finally{M(f,e)}});\nY.prototype.create_inbound=J(function(b,c){c=K(c);var d=L(c);try{Z(a._olm_create_inbound_session)(this.Kb,b.Kb,d,c.length)}finally{for(M(d,c.length),b=0;b<c.length;b++)c[b]=0}});Y.prototype.create_inbound_from=J(function(b,c,d){c=K(c);var e=L(c);d=K(d);var f=L(d);try{Z(a._olm_create_inbound_session_from)(this.Kb,b.Kb,e,c.length,f,d.length)}finally{for(M(f,d.length),b=0;b<d.length;b++)d[b]=0}});\nY.prototype.session_id=J(function(){var b=Z(a._olm_session_id_length)(this.Kb),c=L(b+1);Z(a._olm_session_id)(this.Kb,c,b);return x(c,b)});Y.prototype.has_received_message=function(){return Z(a._olm_session_has_received_message)(this.Kb)?!0:!1};Y.prototype.matches_inbound=J(function(b){b=K(b);var c=L(b);return Z(a._olm_matches_inbound_session)(this.Kb,c,b.length)?!0:!1});\nY.prototype.matches_inbound_from=J(function(b,c){b=K(b);var d=L(b);c=K(c);var e=L(c);return Z(a._olm_matches_inbound_session_from)(this.Kb,d,b.length,e,c.length)?!0:!1});\nY.prototype.encrypt=J(function(b){try{var c=Z(a._olm_encrypt_random_length)(this.Kb);var d=Z(a._olm_encrypt_message_type)(this.Kb);var e=A(b);var f=Z(a._olm_encrypt_message_length)(this.Kb,e);var k=N(c,g);var p=F(e+1);z(b,y,p,e+1);var v=F(f+1);Z(a._olm_encrypt)(this.Kb,p,e,k,c,v,f);r(v+f);return{type:d,body:x(v,f)}}finally{void 0!==k&&M(k,c),void 0!==p&&(M(p,e+1),I(p)),void 0!==v&&I(v)}});\nY.prototype.decrypt=J(function(b,c){try{var d=F(c.length);Da(c,d);var e=Z(a._olm_decrypt_max_plaintext_length)(this.Kb,b,d,c.length);Da(c,d);var f=F(e+1);var k=Z(a._olm_decrypt)(this.Kb,b,d,c.length,f,e);r(f+k);return x(f,k)}finally{void 0!==d&&I(d),void 0!==f&&(M(f,e),I(f))}});Y.prototype.describe=J(function(){try{var b=F(256);Z(a._olm_session_describe)(this.Kb,b,256);return x(b)}finally{void 0!==b&&I(b)}});function eb(){var b=a._olm_utility_size();this.Lb=F(b);this.Kb=a._olm_utility(this.Lb)}\nfunction fb(b){return function(){var c=b.apply(this,arguments);if(c===h)throw c=x(a._olm_utility_last_error(arguments[0])),Error(\"OLM.\"+c);return c}}eb.prototype.free=function(){a._olm_clear_utility(this.Kb);I(this.Kb)};eb.prototype.sha256=J(function(b){var c=fb(a._olm_sha256_length)(this.Kb);b=K(b);var d=L(b),e=L(c+1);try{fb(a._olm_sha256)(this.Kb,d,b.length,e,c)}finally{for(M(d,b.length),d=0;d<b.length;d++)b[d]=0}return x(e,c)});\neb.prototype.ed25519_verify=J(function(b,c,d){b=K(b);var e=L(b);c=K(c);var f=L(c);d=K(d);var k=L(d);try{fb(a._olm_ed25519_verify)(this.Kb,e,b.length,f,c.length,k,d.length)}finally{for(M(f,c.length),b=0;b<c.length;b++)c[b]=0}});olm_exports.Account=W;olm_exports.Session=Y;olm_exports.Utility=eb;olm_exports.PkEncryption=bb;olm_exports.PkDecryption=R;olm_exports.PkSigning=cb;olm_exports.SAS=T;\nolm_exports.get_library_version=J(function(){var b=L(3);a._olm_get_library_version(b,b+1,b+2);return[ya(b,\"i8\"),ya(b+1,\"i8\"),ya(b+2,\"i8\")]});\n\n\n  return Module.ready\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object')\n      module.exports = Module;\n    else if (typeof define === 'function' && define['amd'])\n      define([], function() { return Module; });\n    else if (typeof exports === 'object')\n      exports[\"Module\"] = Module;\n    var olmInitPromise;\n\nolm_exports['init'] = function(opts) {\n    if (olmInitPromise) return olmInitPromise;\n\n    if (opts) OLM_OPTIONS = opts;\n\n    olmInitPromise = new Promise(function(resolve, reject) {\n        onInitSuccess = function() {\n            resolve();\n        };\n        onInitFail = function(err) {\n            reject(err);\n        };\n        Module();\n    });\n    return olmInitPromise;\n};\n\nreturn olm_exports;\n\n})();\n\nif (typeof(window) !== 'undefined') {\n    // We've been imported directly into a browser. Define the global 'Olm' object.\n    // (we do this even if module.exports was defined, because it's useful to have\n    // Olm in the global scope for browserified and webpacked apps.)\n    window[\"Olm\"] = Olm;\n}\n\nif (typeof module === 'object') {\n    // Emscripten sets the module exports to be its module\n    // with wrapped c functions. Clobber it with our higher\n    // level wrapper class.\n    module.exports = Olm;\n}\n\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t():\"function\"==typeof define&&define.amd?define(t):t()}(0,function(){\"use strict\";function e(e){var t=!0,n=!1,o=null,d={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,\"datetime-local\":!0};function i(e){return!!(e&&e!==document&&\"HTML\"!==e.nodeName&&\"BODY\"!==e.nodeName&&\"classList\"in e&&\"contains\"in e.classList)}function s(e){e.classList.contains(\"focus-visible\")||(e.classList.add(\"focus-visible\"),e.setAttribute(\"data-focus-visible-added\",\"\"))}function u(e){t=!1}function a(){document.addEventListener(\"mousemove\",c),document.addEventListener(\"mousedown\",c),document.addEventListener(\"mouseup\",c),document.addEventListener(\"pointermove\",c),document.addEventListener(\"pointerdown\",c),document.addEventListener(\"pointerup\",c),document.addEventListener(\"touchmove\",c),document.addEventListener(\"touchstart\",c),document.addEventListener(\"touchend\",c)}function c(e){e.target.nodeName&&\"html\"===e.target.nodeName.toLowerCase()||(t=!1,document.removeEventListener(\"mousemove\",c),document.removeEventListener(\"mousedown\",c),document.removeEventListener(\"mouseup\",c),document.removeEventListener(\"pointermove\",c),document.removeEventListener(\"pointerdown\",c),document.removeEventListener(\"pointerup\",c),document.removeEventListener(\"touchmove\",c),document.removeEventListener(\"touchstart\",c),document.removeEventListener(\"touchend\",c))}document.addEventListener(\"keydown\",function(n){n.metaKey||n.altKey||n.ctrlKey||(i(e.activeElement)&&s(e.activeElement),t=!0)},!0),document.addEventListener(\"mousedown\",u,!0),document.addEventListener(\"pointerdown\",u,!0),document.addEventListener(\"touchstart\",u,!0),document.addEventListener(\"visibilitychange\",function(e){\"hidden\"===document.visibilityState&&(n&&(t=!0),a())},!0),a(),e.addEventListener(\"focus\",function(e){var n,o,u;i(e.target)&&(t||(n=e.target,o=n.type,\"INPUT\"===(u=n.tagName)&&d[o]&&!n.readOnly||\"TEXTAREA\"===u&&!n.readOnly||n.isContentEditable))&&s(e.target)},!0),e.addEventListener(\"blur\",function(e){var t;i(e.target)&&(e.target.classList.contains(\"focus-visible\")||e.target.hasAttribute(\"data-focus-visible-added\"))&&(n=!0,window.clearTimeout(o),o=window.setTimeout(function(){n=!1},100),(t=e.target).hasAttribute(\"data-focus-visible-added\")&&(t.classList.remove(\"focus-visible\"),t.removeAttribute(\"data-focus-visible-added\")))},!0),e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&e.host?e.host.setAttribute(\"data-js-focus-visible\",\"\"):e.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add(\"js-focus-visible\"),document.documentElement.setAttribute(\"data-js-focus-visible\",\"\"))}if(\"undefined\"!=typeof window&&\"undefined\"!=typeof document){var t;window.applyFocusVisiblePolyfill=e;try{t=new CustomEvent(\"focus-visible-polyfill-ready\")}catch(e){(t=document.createEvent(\"CustomEvent\")).initCustomEvent(\"focus-visible-polyfill-ready\",!1,!1,{})}window.dispatchEvent(t)}\"undefined\"!=typeof document&&e(document)});\n//# sourceMappingURL=focus-visible.min.js.map\n","/** @license React v16.12.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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\n'use strict';var h=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113;n&&Symbol.for(\"react.suspense_list\");\nvar z=n?Symbol.for(\"react.memo\"):60115,aa=n?Symbol.for(\"react.lazy\"):60116;n&&Symbol.for(\"react.fundamental\");n&&Symbol.for(\"react.responder\");n&&Symbol.for(\"react.scope\");var A=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction B(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var C={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},D={};\nfunction E(a,b,c){this.props=a;this.context=b;this.refs=D;this.updater=c||C}E.prototype.isReactComponent={};E.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(B(85));this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,c){this.props=a;this.context=b;this.refs=D;this.updater=c||C}var H=G.prototype=new F;\nH.constructor=G;h(H,E.prototype);H.isPureReactComponent=!0;var I={current:null},J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,l=null;if(null!=b)for(e in void 0!==b.ref&&(l=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var k=Array(f),m=0;m<f;m++)k[m]=arguments[m+2];d.children=k}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:l,props:d,_owner:J.current}}\nfunction ba(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function N(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var O=/\\/+/g,P=[];function Q(a,b,c,e){if(P.length){var d=P.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction R(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>P.length&&P.push(a)}\nfunction S(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var l=0;l<a.length;l++){d=a[l];var f=b+T(d,l);g+=S(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=A&&a[A]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),l=\n0;!(d=a.next()).done;)d=d.value,f=b+T(d,l++),g+=S(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(B(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function U(a,b,c){return null==a?0:S(a,\"\",b,c)}function T(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function ca(a,b){a.func.call(a.context,b,a.count++)}\nfunction da(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?V(a,e,c,function(a){return a}):null!=a&&(N(a)&&(a=ba(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(O,\"$&/\")+\"/\")+c)),e.push(a))}function V(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(O,\"$&/\")+\"/\");b=Q(b,g,e,d);U(a,da,b);R(b)}function W(){var a=I.current;if(null===a)throw Error(B(321));return a}\nvar X={Children:{map:function(a,b,c){if(null==a)return a;var e=[];V(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=Q(null,null,b,c);U(a,ca,b);R(b)},count:function(a){return U(a,function(){return null},null)},toArray:function(a){var b=[];V(a,b,null,function(a){return a});return b},only:function(a){if(!N(a))throw Error(B(143));return a}},createRef:function(){return{current:null}},Component:E,PureComponent:G,createContext:function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,\n_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a},forwardRef:function(a){return{$$typeof:x,render:a}},lazy:function(a){return{$$typeof:aa,_ctor:a,_status:-1,_result:null}},memo:function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}},useCallback:function(a,b){return W().useCallback(a,b)},useContext:function(a,b){return W().useContext(a,b)},useEffect:function(a,b){return W().useEffect(a,b)},useImperativeHandle:function(a,\nb,c){return W().useImperativeHandle(a,b,c)},useDebugValue:function(){},useLayoutEffect:function(a,b){return W().useLayoutEffect(a,b)},useMemo:function(a,b){return W().useMemo(a,b)},useReducer:function(a,b,c){return W().useReducer(a,b,c)},useRef:function(a){return W().useRef(a)},useState:function(a){return W().useState(a)},Fragment:r,Profiler:u,StrictMode:t,Suspense:y,createElement:M,cloneElement:function(a,b,c){if(null===a||void 0===a)throw Error(B(267,a));var e=h({},a.props),d=a.key,g=a.ref,l=a._owner;\nif(null!=b){void 0!==b.ref&&(g=b.ref,l=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(k in b)K.call(b,k)&&!L.hasOwnProperty(k)&&(e[k]=void 0===b[k]&&void 0!==f?f[k]:b[k])}var k=arguments.length-2;if(1===k)e.children=c;else if(1<k){f=Array(k);for(var m=0;m<k;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,key:d,ref:g,props:e,_owner:l}},createFactory:function(a){var b=M.bind(null,a);b.type=a;return b},isValidElement:N,version:\"16.12.0\",\n__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:h}},Y={default:X},Z=Y&&X||Y;module.exports=Z.default||Z;\n","/**\n * Copyright (c) 2013-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\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-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\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.12.0\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),q=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));var ba=null,ca={};\nfunction da(){if(ba)for(var a in ca){var b=ca[a],c=ba.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!ea[c]){if(!b.extractEvents)throw Error(u(97,a));ea[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(fa.hasOwnProperty(h))throw Error(u(99,h));fa[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ha(k[e],g,h);e=!0}else f.registrationName?(ha(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ha(a,b,c){if(ia[a])throw Error(u(100,a));ia[a]=b;ja[a]=b.eventTypes[c].dependencies}var ea=[],fa={},ia={},ja={};function ka(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var la=!1,ma=null,na=!1,oa=null,pa={onError:function(a){la=!0;ma=a}};function qa(a,b,c,d,e,f,g,h,k){la=!1;ma=null;ka.apply(pa,arguments)}\nfunction ra(a,b,c,d,e,f,g,h,k){qa.apply(this,arguments);if(la){if(la){var l=ma;la=!1;ma=null}else throw Error(u(198));na||(na=!0,oa=l)}}var sa=null,ua=null,va=null;function wa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=va(c);ra(d,b,void 0,a);a.currentTarget=null}function xa(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}\nfunction ya(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var za=null;function Aa(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)wa(a,b[d],c[d]);else b&&wa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function Ba(a){null!==a&&(za=xa(za,a));a=za;za=null;if(a){ya(a,Aa);if(za)throw Error(u(95));if(na)throw a=oa,na=!1,oa=null,a;}}\nvar Ca={injectEventPluginOrder:function(a){if(ba)throw Error(u(101));ba=Array.prototype.slice.call(a);da()},injectEventPluginsByName:function(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!ca.hasOwnProperty(c)||ca[c]!==d){if(ca[c])throw Error(u(102,c));ca[c]=d;b=!0}}b&&da()}};\nfunction Da(a,b){var c=a.stateNode;if(!c)return null;var d=sa(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,b,typeof c));\nreturn c}var Ea=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Ea.hasOwnProperty(\"ReactCurrentDispatcher\")||(Ea.ReactCurrentDispatcher={current:null});Ea.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Ea.ReactCurrentBatchConfig={suspense:null});\nvar Fa=/^(.*)[\\\\\\/]/,w=\"function\"===typeof Symbol&&Symbol.for,Ga=w?Symbol.for(\"react.element\"):60103,Ha=w?Symbol.for(\"react.portal\"):60106,Ia=w?Symbol.for(\"react.fragment\"):60107,Ja=w?Symbol.for(\"react.strict_mode\"):60108,Ka=w?Symbol.for(\"react.profiler\"):60114,La=w?Symbol.for(\"react.provider\"):60109,Ma=w?Symbol.for(\"react.context\"):60110,Na=w?Symbol.for(\"react.concurrent_mode\"):60111,Oa=w?Symbol.for(\"react.forward_ref\"):60112,Pa=w?Symbol.for(\"react.suspense\"):60113,Qa=w?Symbol.for(\"react.suspense_list\"):\n60120,Ra=w?Symbol.for(\"react.memo\"):60115,Sa=w?Symbol.for(\"react.lazy\"):60116;w&&Symbol.for(\"react.fundamental\");w&&Symbol.for(\"react.responder\");w&&Symbol.for(\"react.scope\");var Ta=\"function\"===typeof Symbol&&Symbol.iterator;function Ua(a){if(null===a||\"object\"!==typeof a)return null;a=Ta&&a[Ta]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nfunction Va(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction Wa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case Ia:return\"Fragment\";case Ha:return\"Portal\";case Ka:return\"Profiler\";case Ja:return\"StrictMode\";case Pa:return\"Suspense\";case Qa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ma:return\"Context.Consumer\";case La:return\"Context.Provider\";case Oa:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case Ra:return Wa(a.type);case Sa:if(a=1===a._status?a._result:null)return Wa(a)}return null}function Xa(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=Wa(a.type);c=null;d&&(c=Wa(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Fa,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n    in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nvar Ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),Za=null,$a=null,ab=null;function bb(a){if(a=ua(a)){if(\"function\"!==typeof Za)throw Error(u(280));var b=sa(a.stateNode);Za(a.stateNode,a.type,b)}}function cb(a){$a?ab?ab.push(a):ab=[a]:$a=a}function db(){if($a){var a=$a,b=ab;ab=$a=null;bb(a);if(b)for(a=0;a<b.length;a++)bb(b[a])}}function eb(a,b){return a(b)}function fb(a,b,c,d){return a(b,c,d)}function gb(){}\nvar hb=eb,ib=!1,jb=!1;function kb(){if(null!==$a||null!==ab)gb(),db()}new Map;var lb=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,mb=Object.prototype.hasOwnProperty,nb={},ob={};\nfunction pb(a){if(mb.call(ob,a))return!0;if(mb.call(nb,a))return!1;if(lb.test(a))return ob[a]=!0;nb[a]=!0;return!1}function qb(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction rb(a,b,c,d){if(null===b||\"undefined\"===typeof b||qb(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function B(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1)});var sb=/[\\-:]([a-z])/g;function tb(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(sb,\ntb);D[b]=new B(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(sb,tb);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(sb,tb);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0)});function ub(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}\nfunction vb(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(rb(b,c,e,d)&&(c=null),d||null===e?pb(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nfunction wb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction xb(a){var b=wb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function yb(a){a._valueTracker||(a._valueTracker=xb(a))}function zb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=wb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Ab(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Bb(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=ub(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Cb(a,b){b=b.checked;null!=b&&vb(a,\"checked\",b,!1)}\nfunction Eb(a,b){Cb(a,b);var c=ub(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Fb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Fb(a,b.type,ub(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Gb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Fb(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Hb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Ib(a,b){a=n({children:void 0},b);if(b=Hb(b.children))a.children=b;return a}\nfunction Jb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+ub(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Kb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Lb(a,b){var c=b.value;if(null==c){c=b.defaultValue;b=b.children;if(null!=b){if(null!=c)throw Error(u(92));if(Array.isArray(b)){if(!(1>=b.length))throw Error(u(93));b=b[0]}c=b}null==c&&(c=\"\")}a._wrapperState={initialValue:ub(c)}}\nfunction Mb(a,b){var c=ub(b.value),d=ub(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Nb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Ob={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Pb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Qb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Pb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Rb,Sb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Ob.svg||\"innerHTML\"in a)a.innerHTML=b;else{Rb=Rb||document.createElement(\"div\");Rb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Rb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Tb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Ub(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Vb={animationend:Ub(\"Animation\",\"AnimationEnd\"),animationiteration:Ub(\"Animation\",\"AnimationIteration\"),animationstart:Ub(\"Animation\",\"AnimationStart\"),transitionend:Ub(\"Transition\",\"TransitionEnd\")},Wb={},Xb={};\nYa&&(Xb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Vb.animationend.animation,delete Vb.animationiteration.animation,delete Vb.animationstart.animation),\"TransitionEvent\"in window||delete Vb.transitionend.transition);function Yb(a){if(Wb[a])return Wb[a];if(!Vb[a])return a;var b=Vb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Xb)return Wb[a]=b[c];return a}var Zb=Yb(\"animationend\"),$b=Yb(\"animationiteration\"),ac=Yb(\"animationstart\"),bc=Yb(\"transitionend\"),cc=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \");\nfunction ec(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function fc(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function gc(a){if(ec(a)!==a)throw Error(u(188));}\nfunction hc(a){var b=a.alternate;if(!b){b=ec(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return gc(e),a;if(f===d)return gc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function ic(a){a=hc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nvar jc,kc,lc,mc=!1,nc=[],oc=null,pc=null,qc=null,rc=new Map,sc=new Map,tc=[],uc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),vc=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction wc(a){var b=xc(a);uc.forEach(function(c){yc(c,a,b)});vc.forEach(function(c){yc(c,a,b)})}function zc(a,b,c,d){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:d}}function Ac(a,b){switch(a){case \"focus\":case \"blur\":oc=null;break;case \"dragenter\":case \"dragleave\":pc=null;break;case \"mouseover\":case \"mouseout\":qc=null;break;case \"pointerover\":case \"pointerout\":rc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":sc.delete(b.pointerId)}}\nfunction Bc(a,b,c,d,e){if(null===a||a.nativeEvent!==e)return a=zc(b,c,d,e),null!==b&&(b=Cc(b),null!==b&&kc(b)),a;a.eventSystemFlags|=d;return a}function Dc(a,b,c,d){switch(b){case \"focus\":return oc=Bc(oc,a,b,c,d),!0;case \"dragenter\":return pc=Bc(pc,a,b,c,d),!0;case \"mouseover\":return qc=Bc(qc,a,b,c,d),!0;case \"pointerover\":var e=d.pointerId;rc.set(e,Bc(rc.get(e)||null,a,b,c,d));return!0;case \"gotpointercapture\":return e=d.pointerId,sc.set(e,Bc(sc.get(e)||null,a,b,c,d)),!0}return!1}\nfunction Ec(a){var b=Fc(a.target);if(null!==b){var c=ec(b);if(null!==c)if(b=c.tag,13===b){if(b=fc(c),null!==b){a.blockedOn=b;q.unstable_runWithPriority(a.priority,function(){lc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Gc(a){if(null!==a.blockedOn)return!1;var b=Hc(a.topLevelType,a.eventSystemFlags,a.nativeEvent);if(null!==b){var c=Cc(b);null!==c&&kc(c);a.blockedOn=b;return!1}return!0}\nfunction Ic(a,b,c){Gc(a)&&c.delete(b)}function Jc(){for(mc=!1;0<nc.length;){var a=nc[0];if(null!==a.blockedOn){a=Cc(a.blockedOn);null!==a&&jc(a);break}var b=Hc(a.topLevelType,a.eventSystemFlags,a.nativeEvent);null!==b?a.blockedOn=b:nc.shift()}null!==oc&&Gc(oc)&&(oc=null);null!==pc&&Gc(pc)&&(pc=null);null!==qc&&Gc(qc)&&(qc=null);rc.forEach(Ic);sc.forEach(Ic)}function Kc(a,b){a.blockedOn===b&&(a.blockedOn=null,mc||(mc=!0,q.unstable_scheduleCallback(q.unstable_NormalPriority,Jc)))}\nfunction Lc(a){function b(b){return Kc(b,a)}if(0<nc.length){Kc(nc[0],a);for(var c=1;c<nc.length;c++){var d=nc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==oc&&Kc(oc,a);null!==pc&&Kc(pc,a);null!==qc&&Kc(qc,a);rc.forEach(b);sc.forEach(b);for(c=0;c<tc.length;c++)d=tc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<tc.length&&(c=tc[0],null===c.blockedOn);)Ec(c),null===c.blockedOn&&tc.shift()}\nfunction Mc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function Nc(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}function Oc(a,b,c){if(b=Da(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=xa(c._dispatchListeners,b),c._dispatchInstances=xa(c._dispatchInstances,a)}\nfunction Pc(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Nc(b);for(b=c.length;0<b--;)Oc(c[b],\"captured\",a);for(b=0;b<c.length;b++)Oc(c[b],\"bubbled\",a)}}function Qc(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Da(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=xa(c._dispatchListeners,b),c._dispatchInstances=xa(c._dispatchInstances,a))}function Rc(a){a&&a.dispatchConfig.registrationName&&Qc(a._targetInst,null,a)}\nfunction Sc(a){ya(a,Pc)}function Tc(){return!0}function Uc(){return!1}function E(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?Tc:Uc;this.isPropagationStopped=Uc;return this}\nn(E.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=Tc)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=Tc)},persist:function(){this.isPersistent=Tc},isPersistent:Uc,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=Uc;this._dispatchInstances=this._dispatchListeners=null}});E.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nE.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;Vc(c);return c};Vc(E);function Wc(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction Xc(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function Vc(a){a.eventPool=[];a.getPooled=Wc;a.release=Xc}var Yc=E.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Zc=E.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),$c=E.extend({view:null,detail:null}),ad=$c.extend({relatedTarget:null});\nfunction bd(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar cd={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},dd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},ed={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function gd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=ed[a])?!!b[a]:!1}function hd(){return gd}\nvar id=$c.extend({key:function(a){if(a.key){var b=cd[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=bd(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?dd[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:hd,charCode:function(a){return\"keypress\"===a.type?bd(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?bd(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),jd=0,kd=0,ld=!1,md=!1,nd=$c.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:hd,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=jd;jd=a.screenX;return ld?\"mousemove\"===a.type?a.screenX-\nb:0:(ld=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;var b=kd;kd=a.screenY;return md?\"mousemove\"===a.type?a.screenY-b:0:(md=!0,0)}}),od=nd.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),pd=nd.extend({dataTransfer:null}),qd=$c.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:hd}),rd=E.extend({propertyName:null,\nelapsedTime:null,pseudoElement:null}),sd=nd.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),td=[[\"blur\",\"blur\",0],[\"cancel\",\"cancel\",0],[\"click\",\"click\",0],[\"close\",\"close\",0],[\"contextmenu\",\"contextMenu\",0],[\"copy\",\"copy\",0],[\"cut\",\"cut\",0],[\"auxclick\",\"auxClick\",0],[\"dblclick\",\"doubleClick\",0],[\"dragend\",\"dragEnd\",\n0],[\"dragstart\",\"dragStart\",0],[\"drop\",\"drop\",0],[\"focus\",\"focus\",0],[\"input\",\"input\",0],[\"invalid\",\"invalid\",0],[\"keydown\",\"keyDown\",0],[\"keypress\",\"keyPress\",0],[\"keyup\",\"keyUp\",0],[\"mousedown\",\"mouseDown\",0],[\"mouseup\",\"mouseUp\",0],[\"paste\",\"paste\",0],[\"pause\",\"pause\",0],[\"play\",\"play\",0],[\"pointercancel\",\"pointerCancel\",0],[\"pointerdown\",\"pointerDown\",0],[\"pointerup\",\"pointerUp\",0],[\"ratechange\",\"rateChange\",0],[\"reset\",\"reset\",0],[\"seeked\",\"seeked\",0],[\"submit\",\"submit\",0],[\"touchcancel\",\"touchCancel\",\n0],[\"touchend\",\"touchEnd\",0],[\"touchstart\",\"touchStart\",0],[\"volumechange\",\"volumeChange\",0],[\"drag\",\"drag\",1],[\"dragenter\",\"dragEnter\",1],[\"dragexit\",\"dragExit\",1],[\"dragleave\",\"dragLeave\",1],[\"dragover\",\"dragOver\",1],[\"mousemove\",\"mouseMove\",1],[\"mouseout\",\"mouseOut\",1],[\"mouseover\",\"mouseOver\",1],[\"pointermove\",\"pointerMove\",1],[\"pointerout\",\"pointerOut\",1],[\"pointerover\",\"pointerOver\",1],[\"scroll\",\"scroll\",1],[\"toggle\",\"toggle\",1],[\"touchmove\",\"touchMove\",1],[\"wheel\",\"wheel\",1],[\"abort\",\"abort\",\n2],[Zb,\"animationEnd\",2],[$b,\"animationIteration\",2],[ac,\"animationStart\",2],[\"canplay\",\"canPlay\",2],[\"canplaythrough\",\"canPlayThrough\",2],[\"durationchange\",\"durationChange\",2],[\"emptied\",\"emptied\",2],[\"encrypted\",\"encrypted\",2],[\"ended\",\"ended\",2],[\"error\",\"error\",2],[\"gotpointercapture\",\"gotPointerCapture\",2],[\"load\",\"load\",2],[\"loadeddata\",\"loadedData\",2],[\"loadedmetadata\",\"loadedMetadata\",2],[\"loadstart\",\"loadStart\",2],[\"lostpointercapture\",\"lostPointerCapture\",2],[\"playing\",\"playing\",2],[\"progress\",\n\"progress\",2],[\"seeking\",\"seeking\",2],[\"stalled\",\"stalled\",2],[\"suspend\",\"suspend\",2],[\"timeupdate\",\"timeUpdate\",2],[bc,\"transitionEnd\",2],[\"waiting\",\"waiting\",2]],ud={},vd={},wd=0;for(;wd<td.length;wd++){var yd=td[wd],zd=yd[0],Ad=yd[1],Bd=yd[2],Cd=\"on\"+(Ad[0].toUpperCase()+Ad.slice(1)),Dd={phasedRegistrationNames:{bubbled:Cd,captured:Cd+\"Capture\"},dependencies:[zd],eventPriority:Bd};ud[Ad]=Dd;vd[zd]=Dd}\nvar Ed={eventTypes:ud,getEventPriority:function(a){a=vd[a];return void 0!==a?a.eventPriority:2},extractEvents:function(a,b,c,d){var e=vd[a];if(!e)return null;switch(a){case \"keypress\":if(0===bd(c))return null;case \"keydown\":case \"keyup\":a=id;break;case \"blur\":case \"focus\":a=ad;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=nd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=\npd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=qd;break;case Zb:case $b:case ac:a=Yc;break;case bc:a=rd;break;case \"scroll\":a=$c;break;case \"wheel\":a=sd;break;case \"copy\":case \"cut\":case \"paste\":a=Zc;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=od;break;default:a=E}b=a.getPooled(e,b,c,d);Sc(b);return b}},Fd=q.unstable_UserBlockingPriority,\nGd=q.unstable_runWithPriority,Hd=Ed.getEventPriority,Id=10,Jd=[];\nfunction Kd(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=Fc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=Mc(a.nativeEvent);d=a.topLevelType;for(var f=a.nativeEvent,g=a.eventSystemFlags,h=null,k=0;k<ea.length;k++){var l=ea[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=xa(h,l))}Ba(h)}}\nvar Ld=!0;function F(a,b){Md(b,a,!1)}function Md(a,b,c){switch(Hd(b)){case 0:var d=Nd.bind(null,b,1);break;case 1:d=Od.bind(null,b,1);break;default:d=Pd.bind(null,b,1)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function Nd(a,b,c){ib||gb();var d=Pd,e=ib;ib=!0;try{fb(d,a,b,c)}finally{(ib=e)||kb()}}function Od(a,b,c){Gd(Fd,Pd.bind(null,a,b,c))}\nfunction Qd(a,b,c,d){if(Jd.length){var e=Jd.pop();e.topLevelType=a;e.eventSystemFlags=b;e.nativeEvent=c;e.targetInst=d;a=e}else a={topLevelType:a,eventSystemFlags:b,nativeEvent:c,targetInst:d,ancestors:[]};try{if(b=Kd,c=a,jb)b(c,void 0);else{jb=!0;try{hb(b,c,void 0)}finally{jb=!1,kb()}}}finally{a.topLevelType=null,a.nativeEvent=null,a.targetInst=null,a.ancestors.length=0,Jd.length<Id&&Jd.push(a)}}\nfunction Pd(a,b,c){if(Ld)if(0<nc.length&&-1<uc.indexOf(a))a=zc(null,a,b,c),nc.push(a);else{var d=Hc(a,b,c);null===d?Ac(a,c):-1<uc.indexOf(a)?(a=zc(d,a,b,c),nc.push(a)):Dc(d,a,b,c)||(Ac(a,c),Qd(a,b,c,null))}}function Hc(a,b,c){var d=Mc(c);d=Fc(d);if(null!==d){var e=ec(d);if(null===e)d=null;else{var f=e.tag;if(13===f){d=fc(e);if(null!==d)return d;d=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;d=null}else e!==d&&(d=null)}}Qd(a,b,c,d);return null}\nfunction Rd(a){if(!Ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var Sd=new (\"function\"===typeof WeakMap?WeakMap:Map);function xc(a){var b=Sd.get(a);void 0===b&&(b=new Set,Sd.set(a,b));return b}\nfunction yc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":Md(b,\"scroll\",!0);break;case \"focus\":case \"blur\":Md(b,\"focus\",!0);Md(b,\"blur\",!0);c.add(\"blur\");c.add(\"focus\");break;case \"cancel\":case \"close\":Rd(a)&&Md(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===cc.indexOf(a)&&F(a,b)}c.add(a)}}\nvar Td={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ud=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(Td).forEach(function(a){Ud.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Td[b]=Td[a]})});function Vd(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||Td.hasOwnProperty(a)&&Td[a]?(\"\"+b).trim():b+\"px\"}\nfunction Wd(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=Vd(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var Xd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction Yd(a,b){if(b){if(Xd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction Zd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function $d(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=xc(a);b=ja[b];for(var d=0;d<b.length;d++)yc(b[d],a,c)}function ae(){}\nfunction be(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ce(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function de(a,b){var c=ce(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ce(c)}}\nfunction ee(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?ee(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function fe(){for(var a=window,b=be();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=be(a.document)}return b}\nfunction ge(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var he=\"$\",ie=\"/$\",je=\"$?\",ke=\"$!\",le=null,me=null;function ne(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction oe(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var pe=\"function\"===typeof setTimeout?setTimeout:void 0,qe=\"function\"===typeof clearTimeout?clearTimeout:void 0;function re(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction se(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===he||c===ke||c===je){if(0===b)return a;b--}else c===ie&&b++}a=a.previousSibling}return null}var te=Math.random().toString(36).slice(2),ue=\"__reactInternalInstance$\"+te,ve=\"__reactEventHandlers$\"+te,we=\"__reactContainere$\"+te;\nfunction Fc(a){var b=a[ue];if(b)return b;for(var c=a.parentNode;c;){if(b=c[we]||c[ue]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=se(a);null!==a;){if(c=a[ue])return c;a=se(a)}return b}a=c;c=a.parentNode}return null}function Cc(a){a=a[ue]||a[we];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function xe(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function ye(a){return a[ve]||null}var ze=null,Ae=null,Be=null;\nfunction Ce(){if(Be)return Be;var a,b=Ae,c=b.length,d,e=\"value\"in ze?ze.value:ze.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return Be=e.slice(a,1<d?1-d:void 0)}var De=E.extend({data:null}),Ee=E.extend({data:null}),Fe=[9,13,27,32],Ge=Ya&&\"CompositionEvent\"in window,He=null;Ya&&\"documentMode\"in document&&(He=document.documentMode);\nvar Ie=Ya&&\"TextEvent\"in window&&!He,Je=Ya&&(!Ge||He&&8<He&&11>=He),Ke=String.fromCharCode(32),Le={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},Me=!1;\nfunction Ne(a,b){switch(a){case \"keyup\":return-1!==Fe.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function Oe(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var Pe=!1;function Qe(a,b){switch(a){case \"compositionend\":return Oe(b);case \"keypress\":if(32!==b.which)return null;Me=!0;return Ke;case \"textInput\":return a=b.data,a===Ke&&Me?null:a;default:return null}}\nfunction Re(a,b){if(Pe)return\"compositionend\"===a||!Ge&&Ne(a,b)?(a=Ce(),Be=Ae=ze=null,Pe=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return Je&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar Se={eventTypes:Le,extractEvents:function(a,b,c,d){var e;if(Ge)b:{switch(a){case \"compositionstart\":var f=Le.compositionStart;break b;case \"compositionend\":f=Le.compositionEnd;break b;case \"compositionupdate\":f=Le.compositionUpdate;break b}f=void 0}else Pe?Ne(a,c)&&(f=Le.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=Le.compositionStart);f?(Je&&\"ko\"!==c.locale&&(Pe||f!==Le.compositionStart?f===Le.compositionEnd&&Pe&&(e=Ce()):(ze=d,Ae=\"value\"in ze?ze.value:ze.textContent,Pe=!0)),f=De.getPooled(f,\nb,c,d),e?f.data=e:(e=Oe(c),null!==e&&(f.data=e)),Sc(f),e=f):e=null;(a=Ie?Qe(a,c):Re(a,c))?(b=Ee.getPooled(Le.beforeInput,b,c,d),b.data=a,Sc(b)):b=null;return null===e?b:null===b?e:[e,b]}},Te={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ue(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!Te[a.type]:\"textarea\"===b?!0:!1}\nvar Ve={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function We(a,b,c){a=E.getPooled(Ve.change,a,b,c);a.type=\"change\";cb(c);Sc(a);return a}var Xe=null,Ye=null;function Ze(a){Ba(a)}function $e(a){var b=xe(a);if(zb(b))return a}function af(a,b){if(\"change\"===a)return b}var bf=!1;Ya&&(bf=Rd(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction cf(){Xe&&(Xe.detachEvent(\"onpropertychange\",df),Ye=Xe=null)}function df(a){if(\"value\"===a.propertyName&&$e(Ye))if(a=We(Ye,a,Mc(a)),ib)Ba(a);else{ib=!0;try{eb(Ze,a)}finally{ib=!1,kb()}}}function ef(a,b,c){\"focus\"===a?(cf(),Xe=b,Ye=c,Xe.attachEvent(\"onpropertychange\",df)):\"blur\"===a&&cf()}function ff(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return $e(Ye)}function gf(a,b){if(\"click\"===a)return $e(b)}function hf(a,b){if(\"input\"===a||\"change\"===a)return $e(b)}\nvar jf={eventTypes:Ve,_isInputEventSupported:bf,extractEvents:function(a,b,c,d){var e=b?xe(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=af;else if(Ue(e))if(bf)g=hf;else{g=ff;var h=ef}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=gf);if(g&&(g=g(a,b)))return We(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Fb(e,\"number\",e.value)}},kf={mouseEnter:{registrationName:\"onMouseEnter\",\ndependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",dependencies:[\"pointerout\",\"pointerover\"]}},lf,mf={eventTypes:kf,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;\ne=d.window===d?d:(e=d.ownerDocument)?e.defaultView||e.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?Fc(b):null,null!==b&&(f=ec(b),b!==f||5!==b.tag&&6!==b.tag))b=null}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===a){var h=nd;var k=kf.mouseLeave;var l=kf.mouseEnter;var m=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)h=od,k=kf.pointerLeave,l=kf.pointerEnter,m=\"pointer\";a=null==g?e:xe(g);e=null==b?e:xe(b);k=h.getPooled(k,g,c,d);k.type=m+\"leave\";k.target=\na;k.relatedTarget=e;d=h.getPooled(l,b,c,d);d.type=m+\"enter\";d.target=e;d.relatedTarget=a;h=g;m=b;if(h&&m)a:{l=h;a=m;g=0;for(b=l;b;b=Nc(b))g++;b=0;for(e=a;e;e=Nc(e))b++;for(;0<g-b;)l=Nc(l),g--;for(;0<b-g;)a=Nc(a),b--;for(;g--;){if(l===a||l===a.alternate)break a;l=Nc(l);a=Nc(a)}l=null}else l=null;a=l;for(l=[];h&&h!==a;){g=h.alternate;if(null!==g&&g===a)break;l.push(h);h=Nc(h)}for(h=[];m&&m!==a;){g=m.alternate;if(null!==g&&g===a)break;h.push(m);m=Nc(m)}for(m=0;m<l.length;m++)Qc(l[m],\"bubbled\",k);for(m=\nh.length;0<m--;)Qc(h[m],\"captured\",d);if(c===lf)return lf=null,[k];lf=c;return[k,d]}};function nf(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var of=\"function\"===typeof Object.is?Object.is:nf,pf=Object.prototype.hasOwnProperty;function qf(a,b){if(of(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!pf.call(b,c[d])||!of(a[c[d]],b[c[d]]))return!1;return!0}\nvar rf=Ya&&\"documentMode\"in document&&11>=document.documentMode,sf={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},tf=null,uf=null,vf=null,wf=!1;\nfunction xf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(wf||null==tf||tf!==be(c))return null;c=tf;\"selectionStart\"in c&&ge(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return vf&&qf(vf,c)?null:(vf=c,a=E.getPooled(sf.select,uf,a,b),a.type=\"select\",a.target=tf,Sc(a),a)}\nvar yf={eventTypes:sf,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=xc(e);f=ja.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?xe(b):window;switch(a){case \"focus\":if(Ue(e)||\"true\"===e.contentEditable)tf=e,uf=b,vf=null;break;case \"blur\":vf=uf=tf=null;break;case \"mousedown\":wf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return wf=!1,xf(c,d);case \"selectionchange\":if(rf)break;\ncase \"keydown\":case \"keyup\":return xf(c,d)}return null}};Ca.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));var zf=Cc;sa=ye;ua=zf;va=xe;Ca.injectEventPluginsByName({SimpleEventPlugin:Ed,EnterLeaveEventPlugin:mf,ChangeEventPlugin:jf,SelectEventPlugin:yf,BeforeInputEventPlugin:Se});new Set;var Af=[],Bf=-1;function G(a){0>Bf||(a.current=Af[Bf],Af[Bf]=null,Bf--)}\nfunction I(a,b){Bf++;Af[Bf]=a.current;a.current=b}var Cf={},J={current:Cf},K={current:!1},Df=Cf;function Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Ff(a){G(K,a);G(J,a)}function Gf(a){G(K,a);G(J,a)}function Hf(a,b,c){if(J.current!==Cf)throw Error(u(168));I(J,b,a);I(K,c,a)}function If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,Wa(b)||\"Unknown\",e));return n({},c,{},d)}function Jf(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||Cf;Df=J.current;I(J,b,a);I(K,K.current,a);return!0}\nfunction Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(b=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=b,G(K,a),G(J,a),I(J,b,a)):G(K,a);I(K,c,a)}\nvar Lf=q.unstable_runWithPriority,Mf=q.unstable_scheduleCallback,Nf=q.unstable_cancelCallback,Of=q.unstable_shouldYield,Pf=q.unstable_requestPaint,Qf=q.unstable_now,Rf=q.unstable_getCurrentPriorityLevel,Sf=q.unstable_ImmediatePriority,Tf=q.unstable_UserBlockingPriority,Uf=q.unstable_NormalPriority,Vf=q.unstable_LowPriority,Wf=q.unstable_IdlePriority,Xf={},Yf=void 0!==Pf?Pf:function(){},Zf=null,$f=null,ag=!1,bg=Qf(),cg=1E4>bg?Qf:function(){return Qf()-bg};\nfunction dg(){switch(Rf()){case Sf:return 99;case Tf:return 98;case Uf:return 97;case Vf:return 96;case Wf:return 95;default:throw Error(u(332));}}function eg(a){switch(a){case 99:return Sf;case 98:return Tf;case 97:return Uf;case 96:return Vf;case 95:return Wf;default:throw Error(u(332));}}function fg(a,b){a=eg(a);return Lf(a,b)}function gg(a,b,c){a=eg(a);return Mf(a,b,c)}function hg(a){null===Zf?(Zf=[a],$f=Mf(Sf,ig)):Zf.push(a);return Xf}function jg(){if(null!==$f){var a=$f;$f=null;Nf(a)}ig()}\nfunction ig(){if(!ag&&null!==Zf){ag=!0;var a=0;try{var b=Zf;fg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Zf=null}catch(c){throw null!==Zf&&(Zf=Zf.slice(a+1)),Mf(Sf,jg),c;}finally{ag=!1}}}var kg=3;function lg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function mg(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var ng={current:null},og=null,pg=null,qg=null;function rg(){qg=pg=og=null}\nfunction sg(a,b){var c=a.type._context;I(ng,c._currentValue,a);c._currentValue=b}function tg(a){var b=ng.current;G(ng,a);a.type._context._currentValue=b}function ug(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}\nfunction vg(a,b){og=a;qg=pg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(wg=!0),a.firstContext=null)}function xg(a,b){if(qg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)qg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===pg){if(null===og)throw Error(u(308));pg=b;og.dependencies={expirationTime:0,firstContext:b,responders:null}}else pg=pg.next=b}return a._currentValue}var yg=!1;\nfunction zg(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Ag(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction Bg(a,b){return{expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Cg(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction Dg(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=zg(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=zg(a.memoizedState),e=c.updateQueue=zg(c.memoizedState)):d=a.updateQueue=Ag(e):null===e&&(e=c.updateQueue=Ag(d));null===e||d===e?Cg(d,b):null===d.lastUpdate||null===e.lastUpdate?(Cg(d,b),Cg(e,b)):(Cg(d,b),e.lastUpdate=b)}\nfunction Eg(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=zg(a.memoizedState):Fg(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function Fg(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=Ag(b));return b}\nfunction Gg(a,b,c,d,e,f){switch(c.tag){case 1:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case 3:a.effectTag=a.effectTag&-4097|64;case 0:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return n({},d,e);case 2:yg=!0}return d}\nfunction Hg(a,b,c,d,e){yg=!1;b=Fg(a,b);for(var f=b.baseState,g=null,h=0,k=b.firstUpdate,l=f;null!==k;){var m=k.expirationTime;m<e?(null===g&&(g=k,f=l),h<m&&(h=m)):(Ig(m,k.suspenseConfig),l=Gg(a,b,k,l,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastEffect?b.firstEffect=b.lastEffect=k:(b.lastEffect.nextEffect=k,b.lastEffect=k)));k=k.next}m=null;for(k=b.firstCapturedUpdate;null!==k;){var C=k.expirationTime;C<e?(null===m&&(m=k,null===g&&(f=l)),h<C&&(h=C)):(l=Gg(a,b,k,l,c,d),null!==\nk.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastCapturedEffect?b.firstCapturedEffect=b.lastCapturedEffect=k:(b.lastCapturedEffect.nextEffect=k,b.lastCapturedEffect=k)));k=k.next}null===g&&(b.lastUpdate=null);null===m?b.lastCapturedUpdate=null:a.effectTag|=32;null===g&&null===m&&(f=l);b.baseState=f;b.firstUpdate=g;b.firstCapturedUpdate=m;Jg(h);a.expirationTime=h;a.memoizedState=l}\nfunction Kg(a,b,c){null!==b.firstCapturedUpdate&&(null!==b.lastUpdate&&(b.lastUpdate.next=b.firstCapturedUpdate,b.lastUpdate=b.lastCapturedUpdate),b.firstCapturedUpdate=b.lastCapturedUpdate=null);Lg(b.firstEffect,c);b.firstEffect=b.lastEffect=null;Lg(b.firstCapturedEffect,c);b.firstCapturedEffect=b.lastCapturedEffect=null}function Lg(a,b){for(;null!==a;){var c=a.callback;if(null!==c){a.callback=null;var d=b;if(\"function\"!==typeof c)throw Error(u(191,c));c.call(d)}a=a.nextEffect}}\nvar Mg=Ea.ReactCurrentBatchConfig,Ng=(new aa.Component).refs;function Og(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar Sg={isMounted:function(a){return(a=a._reactInternalFiber)?ec(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Pg(),e=Mg.suspense;d=Qg(d,a,e);e=Bg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Dg(a,e);Rg(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Pg(),e=Mg.suspense;d=Qg(d,a,e);e=Bg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Dg(a,e);Rg(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Pg(),d=Mg.suspense;\nc=Qg(c,a,d);d=Bg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);Dg(a,d);Rg(a,c)}};function Tg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!qf(c,d)||!qf(e,f):!0}\nfunction Ug(a,b,c){var d=!1,e=Cf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=xg(f):(e=L(b)?Df:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Ef(a,e):Cf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Sg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Vg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Sg.enqueueReplaceState(b,b.state,null)}\nfunction Wg(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Ng;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=xg(f):(f=L(b)?Df:J.current,e.context=Ef(a,f));f=a.updateQueue;null!==f&&(Hg(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Og(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Sg.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(Hg(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Xg=Array.isArray;\nfunction Yg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Ng&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Zg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction $g(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=ah(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=bh(c,a.mode,d),b.return=a,b;b=e(b,c,d);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props,d),d.ref=Yg(a,b,c),d.return=a,d;d=ch(c.type,c.key,c.props,null,a.mode,d);d.ref=Yg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=dh(c,a.mode,d),b.return=a,b;b=e(b,c.children||[],d);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=eh(c,a.mode,d,f),b.return=a,b;b=e(b,c,d);b.return=a;return b}function C(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=bh(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Ga:return c=ch(b.type,b.key,b.props,null,a.mode,c),c.ref=Yg(a,null,b),c.return=a,c;case Ha:return b=dh(b,a.mode,c),b.return=a,b}if(Xg(b)||\nUa(b))return b=eh(b,a.mode,c,null),b.return=a,b;Zg(a,b)}return null}function y(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Ga:return c.key===e?c.type===Ia?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case Ha:return c.key===e?l(a,b,c,d):null}if(Xg(c)||Ua(c))return null!==e?null:m(a,b,c,d,null);Zg(a,c)}return null}function H(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Ga:return a=a.get(null===d.key?c:d.key)||null,d.type===Ia?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case Ha:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Xg(d)||Ua(d))return a=a.get(c)||null,m(b,a,d,e,null);Zg(b,d)}return null}function z(e,g,h,k){for(var l=null,m=null,r=g,x=g=0,A=null;null!==r&&x<h.length;x++){r.index>x?(A=r,r=null):A=r.sibling;var p=y(e,r,h[x],k);if(null===p){null===r&&(r=A);break}a&&\nr&&null===p.alternate&&b(e,r);g=f(p,g,x);null===m?l=p:m.sibling=p;m=p;r=A}if(x===h.length)return c(e,r),l;if(null===r){for(;x<h.length;x++)r=C(e,h[x],k),null!==r&&(g=f(r,g,x),null===m?l=r:m.sibling=r,m=r);return l}for(r=d(e,r);x<h.length;x++)A=H(r,e,x,h[x],k),null!==A&&(a&&null!==A.alternate&&r.delete(null===A.key?x:A.key),g=f(A,g,x),null===m?l=A:m.sibling=A,m=A);a&&r.forEach(function(a){return b(e,a)});return l}function ta(e,g,h,k){var l=Ua(h);if(\"function\"!==typeof l)throw Error(u(150));h=l.call(h);\nif(null==h)throw Error(u(151));for(var m=l=null,r=g,x=g=0,A=null,p=h.next();null!==r&&!p.done;x++,p=h.next()){r.index>x?(A=r,r=null):A=r.sibling;var z=y(e,r,p.value,k);if(null===z){null===r&&(r=A);break}a&&r&&null===z.alternate&&b(e,r);g=f(z,g,x);null===m?l=z:m.sibling=z;m=z;r=A}if(p.done)return c(e,r),l;if(null===r){for(;!p.done;x++,p=h.next())p=C(e,p.value,k),null!==p&&(g=f(p,g,x),null===m?l=p:m.sibling=p,m=p);return l}for(r=d(e,r);!p.done;x++,p=h.next())p=H(r,e,x,p.value,k),null!==p&&(a&&null!==\np.alternate&&r.delete(null===p.key?x:p.key),g=f(p,g,x),null===m?l=p:m.sibling=p,m=p);a&&r.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===Ia&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Ga:a:{l=f.key;for(k=d;null!==k;){if(k.key===l)if(7===k.tag?f.type===Ia:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===Ia?f.props.children:f.props,h);d.ref=Yg(a,k,f);d.return=a;a=d;break a}else{c(a,\nk);break}else b(a,k);k=k.sibling}f.type===Ia?(d=eh(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=ch(f.type,f.key,f.props,null,a.mode,h),h.ref=Yg(a,d,f),h.return=a,a=h)}return g(a);case Ha:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=dh(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===\ntypeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=bh(f,a.mode,h),d.return=a,a=d),g(a);if(Xg(f))return z(a,d,f,h);if(Ua(f))return ta(a,d,f,h);l&&Zg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var fh=$g(!0),gh=$g(!1),hh={},ih={current:hh},jh={current:hh},kh={current:hh};function lh(a){if(a===hh)throw Error(u(174));return a}\nfunction mh(a,b){I(kh,b,a);I(jh,a,a);I(ih,hh,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Qb(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=Qb(b,c)}G(ih,a);I(ih,b,a)}function nh(a){G(ih,a);G(jh,a);G(kh,a)}function oh(a){lh(kh.current);var b=lh(ih.current);var c=Qb(b,a.type);b!==c&&(I(jh,a,a),I(ih,c,a))}function ph(a){jh.current===a&&(G(ih,a),G(jh,a))}var M={current:0};\nfunction qh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===je||c.data===ke))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function rh(a,b){return{responder:a,props:b}}\nvar sh=Ea.ReactCurrentDispatcher,N=Ea.ReactCurrentBatchConfig,th=0,uh=null,O=null,vh=null,wh=null,P=null,xh=null,yh=0,zh=null,Ah=0,Bh=!1,Ch=null,Gh=0;function Q(){throw Error(u(321));}function Hh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!of(a[c],b[c]))return!1;return!0}\nfunction Ih(a,b,c,d,e,f){th=f;uh=b;vh=null!==a?a.memoizedState:null;sh.current=null===vh?Jh:Kh;b=c(d,e);if(Bh){do Bh=!1,Gh+=1,vh=null!==a?a.memoizedState:null,xh=wh,zh=P=O=null,sh.current=Kh,b=c(d,e);while(Bh);Ch=null;Gh=0}sh.current=Lh;a=uh;a.memoizedState=wh;a.expirationTime=yh;a.updateQueue=zh;a.effectTag|=Ah;a=null!==O&&null!==O.next;th=0;xh=P=wh=vh=O=uh=null;yh=0;zh=null;Ah=0;if(a)throw Error(u(300));return b}\nfunction Mh(){sh.current=Lh;th=0;xh=P=wh=vh=O=uh=null;yh=0;zh=null;Ah=0;Bh=!1;Ch=null;Gh=0}function Nh(){var a={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};null===P?wh=P=a:P=P.next=a;return P}function Oh(){if(null!==xh)P=xh,xh=P.next,O=vh,vh=null!==O?O.next:null;else{if(null===vh)throw Error(u(310));O=vh;var a={memoizedState:O.memoizedState,baseState:O.baseState,queue:O.queue,baseUpdate:O.baseUpdate,next:null};P=null===P?wh=a:P.next=a;vh=O.next}return P}\nfunction Ph(a,b){return\"function\"===typeof b?b(a):b}\nfunction Qh(a){var b=Oh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;if(0<Gh){var d=c.dispatch;if(null!==Ch){var e=Ch.get(c);if(void 0!==e){Ch.delete(c);var f=b.memoizedState;do f=a(f,e.action),e=e.next;while(null!==e);of(f,b.memoizedState)||(wg=!0);b.memoizedState=f;b.baseUpdate===c.last&&(b.baseState=f);c.lastRenderedState=f;return[f,d]}}return[b.memoizedState,d]}d=c.last;var g=b.baseUpdate;f=b.baseState;null!==g?(null!==d&&(d.next=null),d=g.next):d=null!==d?d.next:null;if(null!==\nd){var h=e=null,k=d,l=!1;do{var m=k.expirationTime;m<th?(l||(l=!0,h=g,e=f),m>yh&&(yh=m,Jg(yh))):(Ig(m,k.suspenseConfig),f=k.eagerReducer===a?k.eagerState:a(f,k.action));g=k;k=k.next}while(null!==k&&k!==d);l||(h=g,e=f);of(f,b.memoizedState)||(wg=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.lastRenderedState=f}return[b.memoizedState,c.dispatch]}\nfunction Rh(a){var b=Nh();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,lastRenderedReducer:Ph,lastRenderedState:a};a=a.dispatch=Sh.bind(null,uh,a);return[b.memoizedState,a]}function Th(a){return Qh(Ph,a)}function Uh(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===zh?(zh={lastEffect:null},zh.lastEffect=a.next=a):(b=zh.lastEffect,null===b?zh.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,zh.lastEffect=a));return a}\nfunction Vh(a,b,c,d){var e=Nh();Ah|=a;e.memoizedState=Uh(b,c,void 0,void 0===d?null:d)}function Wh(a,b,c,d){var e=Oh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&Hh(d,g.deps)){Uh(0,c,f,d);return}}Ah|=a;e.memoizedState=Uh(b,c,f,d)}function Xh(a,b){return Vh(516,192,a,b)}function Yh(a,b){return Wh(516,192,a,b)}\nfunction Zh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function $h(){}function ai(a,b){Nh().memoizedState=[a,void 0===b?null:b];return a}function bi(a,b){var c=Oh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Hh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Sh(a,b,c){if(!(25>Gh))throw Error(u(301));var d=a.alternate;if(a===uh||null!==d&&d===uh)if(Bh=!0,a={expirationTime:th,suspenseConfig:null,action:c,eagerReducer:null,eagerState:null,next:null},null===Ch&&(Ch=new Map),c=Ch.get(b),void 0===c)Ch.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{var e=Pg(),f=Mg.suspense;e=Qg(e,a,f);f={expirationTime:e,suspenseConfig:f,action:c,eagerReducer:null,eagerState:null,next:null};var g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&\n(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===d||0===d.expirationTime)&&(d=b.lastRenderedReducer,null!==d))try{var k=b.lastRenderedState,l=d(k,c);f.eagerReducer=d;f.eagerState=l;if(of(l,k))return}catch(m){}finally{}Rg(a,e)}}\nvar Lh={readContext:xg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},Jh={readContext:xg,useCallback:ai,useContext:xg,useEffect:Xh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Vh(4,36,Zh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Vh(4,36,a,b)},useMemo:function(a,b){var c=Nh();b=void 0===b?null:b;a=a();c.memoizedState=\n[a,b];return a},useReducer:function(a,b,c){var d=Nh();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=Sh.bind(null,uh,a);return[d.memoizedState,a]},useRef:function(a){var b=Nh();a={current:a};return b.memoizedState=a},useState:Rh,useDebugValue:$h,useResponder:rh,useDeferredValue:function(a,b){var c=Rh(a),d=c[0],e=c[1];Xh(function(){q.unstable_next(function(){var c=N.suspense;N.suspense=void 0===b?null:b;try{e(a)}finally{N.suspense=\nc}})},[a,b]);return d},useTransition:function(a){var b=Rh(!1),c=b[0],d=b[1];return[ai(function(b){d(!0);q.unstable_next(function(){var c=N.suspense;N.suspense=void 0===a?null:a;try{d(!1),b()}finally{N.suspense=c}})},[a,c]),c]}},Kh={readContext:xg,useCallback:bi,useContext:xg,useEffect:Yh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Wh(4,36,Zh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Wh(4,36,a,b)},useMemo:function(a,b){var c=Oh();b=void 0===b?\nnull:b;var d=c.memoizedState;if(null!==d&&null!==b&&Hh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:Qh,useRef:function(){return Oh().memoizedState},useState:Th,useDebugValue:$h,useResponder:rh,useDeferredValue:function(a,b){var c=Th(a),d=c[0],e=c[1];Yh(function(){q.unstable_next(function(){var c=N.suspense;N.suspense=void 0===b?null:b;try{e(a)}finally{N.suspense=c}})},[a,b]);return d},useTransition:function(a){var b=Th(!1),c=b[0],d=b[1];return[bi(function(b){d(!0);q.unstable_next(function(){var c=\nN.suspense;N.suspense=void 0===a?null:a;try{d(!1),b()}finally{N.suspense=c}})},[a,c]),c]}},ci=null,di=null,ei=!1;function fi(a,b){var c=gi(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction hi(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ii(a){if(ei){var b=di;if(b){var c=b;if(!hi(a,b)){b=re(c.nextSibling);if(!b||!hi(a,b)){a.effectTag=a.effectTag&-1025|2;ei=!1;ci=a;return}fi(ci,c)}ci=a;di=re(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,ei=!1,ci=a}}function ji(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;ci=a}\nfunction ki(a){if(a!==ci)return!1;if(!ei)return ji(a),ei=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!oe(b,a.memoizedProps))for(b=di;b;)fi(a,b),b=re(b.nextSibling);ji(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===ie){if(0===b){di=re(a.nextSibling);break a}b--}else c!==he&&c!==ke&&c!==je||b++}a=a.nextSibling}di=null}}else di=ci?re(a.stateNode.nextSibling):null;return!0}\nfunction li(){di=ci=null;ei=!1}var mi=Ea.ReactCurrentOwner,wg=!1;function R(a,b,c,d){b.child=null===a?gh(b,null,c,d):fh(b,a.child,c,d)}function ni(a,b,c,d,e){c=c.render;var f=b.ref;vg(b,e);d=Ih(a,b,c,d,f,e);if(null!==a&&!wg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),oi(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction pi(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!qi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ri(a,b,g,d,e,f);a=ch(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:qf,c(e,d)&&a.ref===b.ref))return oi(a,b,f);b.effectTag|=1;a=ah(g,d,f);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ri(a,b,c,d,e,f){return null!==a&&qf(a.memoizedProps,d)&&a.ref===b.ref&&(wg=!1,e<f)?oi(a,b,f):si(a,b,c,d,f)}function ti(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function si(a,b,c,d,e){var f=L(c)?Df:J.current;f=Ef(b,f);vg(b,e);c=Ih(a,b,c,d,f,e);if(null!==a&&!wg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),oi(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction ui(a,b,c,d,e){if(L(c)){var f=!0;Jf(b)}else f=!1;vg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Ug(b,c,d,e),Wg(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=xg(l):(l=L(c)?Df:J.current,l=Ef(b,l));var m=c.getDerivedStateFromProps,C=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;C||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Vg(b,g,d,l);yg=!1;var y=b.memoizedState;k=g.state=y;var H=b.updateQueue;null!==H&&(Hg(b,H,d,g,e),k=b.memoizedState);h!==d||y!==k||K.current||yg?(\"function\"===typeof m&&(Og(b,c,m,d),k=b.memoizedState),(h=yg||Tg(b,c,h,d,y,k,l))?(C||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&\ng.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,h=b.memoizedProps,g.props=b.type===b.elementType?h:mg(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=xg(l):(l=L(c)?Df:J.current,l=Ef(b,l)),m=c.getDerivedStateFromProps,(C=\n\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Vg(b,g,d,l),yg=!1,k=b.memoizedState,y=g.state=k,H=b.updateQueue,null!==H&&(Hg(b,H,d,g,e),y=b.memoizedState),h!==d||k!==y||K.current||yg?(\"function\"===typeof m&&(Og(b,c,m,d),y=b.memoizedState),(m=yg||Tg(b,c,h,d,k,y,l))?(C||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||\n(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,y,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,y,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=\nd,b.memoizedState=y),g.props=d,g.state=y,g.context=l,d=m):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return vi(a,b,c,d,f,e)}\nfunction vi(a,b,c,d,e,f){ti(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Kf(b,c,!1),oi(a,b,f);d=b.stateNode;mi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=fh(b,a.child,null,f),b.child=fh(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Kf(b,c,!0);return b.child}function wi(a){var b=a.stateNode;b.pendingContext?Hf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Hf(a,b.context,!1);mh(a,b.containerInfo)}\nvar xi={dehydrated:null,retryTime:0};\nfunction yi(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1,b);if(null===a){void 0!==e.fallback&&ii(b);if(g){g=e.fallback;e=eh(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=eh(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=xi;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=gh(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=ah(a,a.pendingProps,0);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=ah(d,e,d.expirationTime);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=xi;b.child=c;return d}c=fh(b,a.child,e.children,c);b.memoizedState=\nnull;return b.child=c}a=a.child;if(g){g=e.fallback;e=eh(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=eh(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=xi;b.child=e;return c}b.memoizedState=null;return b.child=fh(b,a,e.children,c)}\nfunction zi(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);ug(a.return,b)}function Ai(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction Bi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&zi(a,c);else if(19===a.tag)zi(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d,b);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===qh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Ai(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===qh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}Ai(b,!0,c,null,f,b.lastEffect);break;case \"together\":Ai(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction oi(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Jg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=ah(a,a.pendingProps,a.expirationTime);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=ah(a,a.pendingProps,a.expirationTime),c.return=b;c.sibling=null}return b.child}function Ci(a){a.effectTag|=4}var Hi,Ii,Ji,Ki;\nHi=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Ii=function(){};\nJi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;lh(ih.current);a=null;switch(c){case \"input\":f=Ab(g,f);d=Ab(g,d);a=[];break;case \"option\":f=Ib(g,f);d=Ib(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Kb(g,f);d=Kb(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=ae)}Yd(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(ia.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,\"\"+l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(ia.hasOwnProperty(h)?(null!=l&&$d(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;(b.updateQueue=e)&&Ci(b)}};Ki=function(a,b,c,d){c!==d&&Ci(b)};\nfunction Li(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction Mi(a){switch(a.tag){case 1:L(a.type)&&Ff(a);var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:nh(a);Gf(a);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return ph(a),null;case 13:return G(M,a),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return G(M,a),null;case 4:return nh(a),null;case 10:return tg(a),null;default:return null}}function Ni(a,b){return{value:a,source:b,stack:Xa(b)}}\nvar Oi=\"function\"===typeof WeakSet?WeakSet:Set;function Pi(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=Xa(c));null!==c&&Wa(c.type);b=b.value;null!==a&&1===a.tag&&Wa(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Qi(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ri(a,c)}}function Si(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ri(a,c)}else b.current=null}\nfunction Ti(a,b){switch(b.tag){case 0:case 11:case 15:Ui(2,0,b);break;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:mg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}break;case 3:case 5:case 6:case 4:case 17:break;default:throw Error(u(163));}}\nfunction Ui(a,b,c){c=c.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do{if(0!==(d.tag&a)){var e=d.destroy;d.destroy=void 0;void 0!==e&&e()}0!==(d.tag&b)&&(e=d.create,d.destroy=e());d=d.next}while(d!==c)}}\nfunction Vi(a,b,c){\"function\"===typeof Wi&&Wi(b);switch(b.tag){case 0:case 11:case 14:case 15:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;fg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ri(g,h)}}a=a.next}while(a!==d)})}break;case 1:Si(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Qi(b,c);break;case 5:Si(b);break;case 4:Xi(a,b,c)}}\nfunction Yi(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;null!==b&&Yi(b)}function Zi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction $i(a){a:{for(var b=a.return;null!==b;){if(Zi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Tb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Zi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){var f=5===e.tag||6===e.tag;if(f){var g=f?e.stateNode:e.stateNode.instance;if(c)if(d){f=b;var h=g;g=c;8===f.nodeType?f.parentNode.insertBefore(h,g):f.insertBefore(h,g)}else b.insertBefore(g,c);else d?(h=b,8===h.nodeType?(f=h.parentNode,f.insertBefore(g,h)):(f=h,f.appendChild(g)),h=h._reactRootContainer,null!==h&&void 0!==h||null!==f.onclick||(f.onclick=ae)):b.appendChild(g)}else if(4!==\ne.tag&&null!==e.child){e.child.return=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e.return||e.return===a)return;e=e.return}e.sibling.return=e.return;e=e.sibling}}\nfunction Xi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Vi(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Vi(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction aj(a,b){switch(b.tag){case 0:case 11:case 14:case 15:Ui(4,8,b);break;case 1:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[ve]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Cb(c,d);Zd(a,e);b=Zd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?Wd(c,h):\"dangerouslySetInnerHTML\"===g?Sb(c,h):\"children\"===g?Tb(c,h):vb(c,g,h,b)}switch(a){case \"input\":Eb(c,d);break;case \"textarea\":Mb(c,\nd);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Jb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Jb(c,!!d.multiple,d.defaultValue,!0):Jb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}break;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;break;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Lc(b.containerInfo));break;case 12:break;case 13:c=b;null===b.memoizedState?d=!1:(d=!0,c=b.child,bj=cg());\nif(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=Vd(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=f;continue}else if(null!==a.child){a.child.return=\na;a=a.child;continue}if(a===c)break a;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}cj(b);break;case 19:cj(b);break;case 17:break;case 20:break;case 21:break;default:throw Error(u(163));}}function cj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Oi);b.forEach(function(b){var d=dj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}var ej=\"function\"===typeof WeakMap?WeakMap:Map;\nfunction fj(a,b,c){c=Bg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){gj||(gj=!0,hj=d);Pi(a,b)};return c}\nfunction ij(a,b,c){c=Bg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Pi(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===jj?jj=new Set([this]):jj.add(this),Pi(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar kj=Math.ceil,lj=Ea.ReactCurrentDispatcher,mj=Ea.ReactCurrentOwner,S=0,nj=8,oj=16,pj=32,qj=0,rj=1,sj=2,tj=3,uj=4,vj=5,T=S,U=null,V=null,W=0,X=qj,wj=null,xj=1073741823,yj=1073741823,zj=null,Aj=0,Bj=!1,bj=0,Cj=500,Y=null,gj=!1,hj=null,jj=null,Dj=!1,Ej=null,Fj=90,Gj=null,Hj=0,Ij=null,Jj=0;function Pg(){return(T&(oj|pj))!==S?1073741821-(cg()/10|0):0!==Jj?Jj:Jj=1073741821-(cg()/10|0)}\nfunction Qg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=dg();if(0===(b&4))return 99===d?1073741823:1073741822;if((T&oj)!==S)return W;if(null!==c)a=lg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=lg(a,150,100);break;case 97:case 96:a=lg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==U&&a===W&&--a;return a}\nfunction Rg(a,b){if(50<Hj)throw Hj=0,Ij=null,Error(u(185));a=Kj(a,b);if(null!==a){var c=dg();1073741823===b?(T&nj)!==S&&(T&(oj|pj))===S?Lj(a):(Z(a),T===S&&jg()):Z(a);(T&4)===S||98!==c&&99!==c||(null===Gj?Gj=new Map([[a,b]]):(c=Gj.get(a),(void 0===c||c>b)&&Gj.set(a,b)))}}\nfunction Kj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(U===e&&(Jg(b),X===uj&&Mj(e,W)),Nj(e,b));return e}\nfunction Oj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Pj(a,b))return b;b=a.lastPingedTime;a=a.nextKnownPendingLevel;return b>a?b:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=hg(Lj.bind(null,a));else{var b=Oj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Pg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Xf&&Nf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?hg(Lj.bind(null,a)):gg(d,Qj.bind(null,a),{timeout:10*(1073741821-b)-cg()});a.callbackNode=b}}}\nfunction Qj(a,b){Jj=0;if(b)return b=Pg(),Rj(a,b),Z(a),null;var c=Oj(a);if(0!==c){b=a.callbackNode;if((T&(oj|pj))!==S)throw Error(u(327));Sj();a===U&&c===W||Tj(a,c);if(null!==V){var d=T;T|=oj;var e=Uj(a);do try{Vj();break}catch(h){Wj(a,h)}while(1);rg();T=d;lj.current=e;if(X===rj)throw b=wj,Tj(a,c),Mj(a,c),Z(a),b;if(null===V)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=X,U=null,d){case qj:case rj:throw Error(u(345));case sj:Rj(a,2<c?2:c);break;case tj:Mj(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Xj(e));if(1073741823===xj&&(e=bj+Cj-cg(),10<e)){if(Bj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Tj(a,c);break}}f=Oj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=pe(Yj.bind(null,a),e);break}Yj(a);break;case uj:Mj(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Xj(e));if(Bj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Tj(a,c);break}e=Oj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==yj?d=10*(1073741821-yj)-cg():1073741823===xj?d=0:(d=10*(1073741821-xj)-5E3,e=cg(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*kj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=pe(Yj.bind(null,a),d);break}Yj(a);break;case vj:if(1073741823!==xj&&null!==zj){f=xj;var g=zj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=cg()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){Mj(a,c);a.timeoutHandle=\npe(Yj.bind(null,a),d);break}}Yj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Qj.bind(null,a)}}return null}\nfunction Lj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if(a.finishedExpirationTime===b)Yj(a);else{if((T&(oj|pj))!==S)throw Error(u(327));Sj();a===U&&b===W||Tj(a,b);if(null!==V){var c=T;T|=oj;var d=Uj(a);do try{Zj();break}catch(e){Wj(a,e)}while(1);rg();T=c;lj.current=d;if(X===rj)throw c=wj,Tj(a,b),Mj(a,b),Z(a),c;if(null!==V)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;U=null;Yj(a);Z(a)}}return null}\nfunction ak(){if(null!==Gj){var a=Gj;Gj=null;a.forEach(function(a,c){Rj(c,a);Z(c)});jg()}}function bk(a,b){var c=T;T|=1;try{return a(b)}finally{T=c,T===S&&jg()}}function ck(a,b){var c=T;T&=-2;T|=nj;try{return a(b)}finally{T=c,T===S&&jg()}}\nfunction Tj(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,qe(c));if(null!==V)for(c=V.return;null!==c;){var d=c;switch(d.tag){case 1:var e=d.type.childContextTypes;null!==e&&void 0!==e&&Ff(d);break;case 3:nh(d);Gf(d);break;case 5:ph(d);break;case 4:nh(d);break;case 13:G(M,d);break;case 19:G(M,d);break;case 10:tg(d)}c=c.return}U=a;V=ah(a.current,null,b);W=b;X=qj;wj=null;yj=xj=1073741823;zj=null;Aj=0;Bj=!1}\nfunction Wj(a,b){do{try{rg();Mh();if(null===V||null===V.return)return X=rj,wj=b,null;a:{var c=a,d=V.return,e=V,f=b;b=W;e.effectTag|=2048;e.firstEffect=e.lastEffect=null;if(null!==f&&\"object\"===typeof f&&\"function\"===typeof f.then){var g=f,h=0!==(M.current&1),k=d;do{var l;if(l=13===k.tag){var m=k.memoizedState;if(null!==m)l=null!==m.dehydrated?!0:!1;else{var C=k.memoizedProps;l=void 0===C.fallback?!1:!0!==C.unstable_avoidThisFallback?!0:h?!1:!0}}if(l){var y=k.updateQueue;if(null===y){var H=new Set;\nH.add(g);k.updateQueue=H}else y.add(g);if(0===(k.mode&2)){k.effectTag|=64;e.effectTag&=-2981;if(1===e.tag)if(null===e.alternate)e.tag=17;else{var z=Bg(1073741823,null);z.tag=2;Dg(e,z)}e.expirationTime=1073741823;break a}f=void 0;e=b;var ta=c.pingCache;null===ta?(ta=c.pingCache=new ej,f=new Set,ta.set(g,f)):(f=ta.get(g),void 0===f&&(f=new Set,ta.set(g,f)));if(!f.has(e)){f.add(e);var r=dk.bind(null,c,g,e);g.then(r,r)}k.effectTag|=4096;k.expirationTime=b;break a}k=k.return}while(null!==k);f=Error((Wa(e.type)||\n\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+Xa(e))}X!==vj&&(X=sj);f=Ni(f,e);k=d;do{switch(k.tag){case 3:g=f;k.effectTag|=4096;k.expirationTime=b;var x=fj(k,g,b);Eg(k,x);break a;case 1:g=f;var A=k.type,p=k.stateNode;if(0===(k.effectTag&64)&&(\"function\"===typeof A.getDerivedStateFromError||null!==p&&\"function\"===typeof p.componentDidCatch&&\n(null===jj||!jj.has(p)))){k.effectTag|=4096;k.expirationTime=b;var t=ij(k,g,b);Eg(k,t);break a}}k=k.return}while(null!==k)}V=ek(V)}catch(v){b=v;continue}break}while(1)}function Uj(){var a=lj.current;lj.current=Lh;return null===a?Lh:a}function Ig(a,b){a<xj&&2<a&&(xj=a);null!==b&&a<yj&&2<a&&(yj=a,zj=b)}function Jg(a){a>Aj&&(Aj=a)}function Zj(){for(;null!==V;)V=fk(V)}function Vj(){for(;null!==V&&!Of();)V=fk(V)}\nfunction fk(a){var b=gk(a.alternate,a,W);a.memoizedProps=a.pendingProps;null===b&&(b=ek(a));mj.current=null;return b}\nfunction ek(a){V=a;do{var b=V.alternate;a=V.return;if(0===(V.effectTag&2048)){a:{var c=b;b=V;var d=W;var e=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:L(b.type)&&Ff(b);break;case 3:nh(b);Gf(b);e=b.stateNode;e.pendingContext&&(e.context=e.pendingContext,e.pendingContext=null);(null===c||null===c.child)&&ki(b)&&Ci(b);Ii(b);break;case 5:ph(b);d=lh(kh.current);var f=b.type;if(null!==c&&null!=b.stateNode)Ji(c,b,f,e,d),c.ref!==b.ref&&(b.effectTag|=128);else if(e){var g=\nlh(ih.current);if(ki(b)){e=b;var h=e.stateNode;c=e.type;var k=e.memoizedProps,l=d;h[ue]=e;h[ve]=k;f=void 0;d=h;switch(c){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(h=0;h<cc.length;h++)F(cc[h],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Bb(d,k);F(\"invalid\",d);$d(l,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!k.multiple};F(\"invalid\",d);$d(l,\"onChange\");break;case \"textarea\":Lb(d,k),F(\"invalid\",d),$d(l,\"onChange\")}Yd(c,k);h=null;for(f in k)k.hasOwnProperty(f)&&(g=k[f],\"children\"===f?\"string\"===typeof g?d.textContent!==g&&(h=[\"children\",g]):\"number\"===typeof g&&d.textContent!==\"\"+g&&(h=[\"children\",\"\"+g]):ia.hasOwnProperty(f)&&null!=g&&$d(l,f));switch(c){case \"input\":yb(d);Gb(d,k,!0);break;case \"textarea\":yb(d);Nb(d,k);break;case \"select\":case \"option\":break;default:\"function\"===typeof k.onClick&&\n(d.onclick=ae)}f=h;e.updateQueue=f;e=null!==f?!0:!1;e&&Ci(b)}else{c=b;l=f;k=e;h=9===d.nodeType?d:d.ownerDocument;g===Ob.html&&(g=Pb(l));g===Ob.html?\"script\"===l?(k=h.createElement(\"div\"),k.innerHTML=\"<script>\\x3c/script>\",h=k.removeChild(k.firstChild)):\"string\"===typeof k.is?h=h.createElement(l,{is:k.is}):(h=h.createElement(l),\"select\"===l&&(l=h,k.multiple?l.multiple=!0:k.size&&(l.size=k.size))):h=h.createElementNS(g,l);k=h;k[ue]=c;k[ve]=e;Hi(k,b,!1,!1);b.stateNode=k;l=f;c=e;var m=d,C=Zd(l,c);switch(l){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\nk);d=c;break;case \"video\":case \"audio\":for(d=0;d<cc.length;d++)F(cc[d],k);d=c;break;case \"source\":F(\"error\",k);d=c;break;case \"img\":case \"image\":case \"link\":F(\"error\",k);F(\"load\",k);d=c;break;case \"form\":F(\"reset\",k);F(\"submit\",k);d=c;break;case \"details\":F(\"toggle\",k);d=c;break;case \"input\":Bb(k,c);d=Ab(k,c);F(\"invalid\",k);$d(m,\"onChange\");break;case \"option\":d=Ib(k,c);break;case \"select\":k._wrapperState={wasMultiple:!!c.multiple};d=n({},c,{value:void 0});F(\"invalid\",k);$d(m,\"onChange\");break;case \"textarea\":Lb(k,\nc);d=Kb(k,c);F(\"invalid\",k);$d(m,\"onChange\");break;default:d=c}Yd(l,d);h=void 0;g=l;var y=k,H=d;for(h in H)if(H.hasOwnProperty(h)){var z=H[h];\"style\"===h?Wd(y,z):\"dangerouslySetInnerHTML\"===h?(z=z?z.__html:void 0,null!=z&&Sb(y,z)):\"children\"===h?\"string\"===typeof z?(\"textarea\"!==g||\"\"!==z)&&Tb(y,z):\"number\"===typeof z&&Tb(y,\"\"+z):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(ia.hasOwnProperty(h)?null!=z&&$d(m,h):null!=z&&vb(y,h,z,C))}switch(l){case \"input\":yb(k);\nGb(k,c,!1);break;case \"textarea\":yb(k);Nb(k,c);break;case \"option\":null!=c.value&&k.setAttribute(\"value\",\"\"+ub(c.value));break;case \"select\":d=k;d.multiple=!!c.multiple;k=c.value;null!=k?Jb(d,!!c.multiple,k,!1):null!=c.defaultValue&&Jb(d,!!c.multiple,c.defaultValue,!0);break;default:\"function\"===typeof d.onClick&&(k.onclick=ae)}(e=ne(f,e))&&Ci(b)}null!==b.ref&&(b.effectTag|=128)}else if(null===b.stateNode)throw Error(u(166));break;case 6:if(c&&null!=b.stateNode)Ki(c,b,c.memoizedProps,e);else{if(\"string\"!==\ntypeof e&&null===b.stateNode)throw Error(u(166));d=lh(kh.current);lh(ih.current);ki(b)?(e=b,f=e.stateNode,d=e.memoizedProps,f[ue]=e,(e=f.nodeValue!==d)&&Ci(b)):(f=b,e=(9===d.nodeType?d:d.ownerDocument).createTextNode(e),e[ue]=f,b.stateNode=e)}break;case 11:break;case 13:G(M,b);e=b.memoizedState;if(0!==(b.effectTag&64)){b.expirationTime=d;break a}e=null!==e;f=!1;null===c?void 0!==b.memoizedProps.fallback&&ki(b):(d=c.memoizedState,f=null!==d,e||null===d||(d=c.child.sibling,null!==d&&(k=b.firstEffect,\nnull!==k?(b.firstEffect=d,d.nextEffect=k):(b.firstEffect=b.lastEffect=d,d.nextEffect=null),d.effectTag=8)));if(e&&!f&&0!==(b.mode&2))if(null===c&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))X===qj&&(X=tj);else{if(X===qj||X===tj)X=uj;0!==Aj&&null!==U&&(Mj(U,W),Nj(U,Aj))}if(e||f)b.effectTag|=4;break;case 7:break;case 8:break;case 12:break;case 4:nh(b);Ii(b);break;case 10:tg(b);break;case 9:break;case 14:break;case 17:L(b.type)&&Ff(b);break;case 19:G(M,b);e=b.memoizedState;if(null===\ne)break;f=0!==(b.effectTag&64);k=e.rendering;if(null===k)if(f)Li(e,!1);else{if(X!==qj||null!==c&&0!==(c.effectTag&64))for(c=b.child;null!==c;){k=qh(c);if(null!==k){b.effectTag|=64;Li(e,!1);f=k.updateQueue;null!==f&&(b.updateQueue=f,b.effectTag|=4);null===e.lastEffect&&(b.firstEffect=null);b.lastEffect=e.lastEffect;e=d;for(f=b.child;null!==f;)d=f,c=e,d.effectTag&=2,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null,k=d.alternate,null===k?(d.childExpirationTime=0,d.expirationTime=c,d.child=null,\nd.memoizedProps=null,d.memoizedState=null,d.updateQueue=null,d.dependencies=null):(d.childExpirationTime=k.childExpirationTime,d.expirationTime=k.expirationTime,d.child=k.child,d.memoizedProps=k.memoizedProps,d.memoizedState=k.memoizedState,d.updateQueue=k.updateQueue,c=k.dependencies,d.dependencies=null===c?null:{expirationTime:c.expirationTime,firstContext:c.firstContext,responders:c.responders}),f=f.sibling;I(M,M.current&1|2,b);b=b.child;break a}c=c.sibling}}else{if(!f)if(c=qh(k),null!==c){if(b.effectTag|=\n64,f=!0,d=c.updateQueue,null!==d&&(b.updateQueue=d,b.effectTag|=4),Li(e,!0),null===e.tail&&\"hidden\"===e.tailMode&&!k.alternate){b=b.lastEffect=e.lastEffect;null!==b&&(b.nextEffect=null);break}}else cg()>e.tailExpiration&&1<d&&(b.effectTag|=64,f=!0,Li(e,!1),b.expirationTime=b.childExpirationTime=d-1);e.isBackwards?(k.sibling=b.child,b.child=k):(d=e.last,null!==d?d.sibling=k:b.child=k,e.last=k)}if(null!==e.tail){0===e.tailExpiration&&(e.tailExpiration=cg()+500);d=e.tail;e.rendering=d;e.tail=d.sibling;\ne.lastEffect=b.lastEffect;d.sibling=null;e=M.current;e=f?e&1|2:e&1;I(M,e,b);b=d;break a}break;case 20:break;case 21:break;default:throw Error(u(156,b.tag));}b=null}e=V;if(1===W||1!==e.childExpirationTime){f=0;for(d=e.child;null!==d;)c=d.expirationTime,k=d.childExpirationTime,c>f&&(f=c),k>f&&(f=k),d=d.sibling;e.childExpirationTime=f}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=V.firstEffect),null!==V.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=\nV.firstEffect),a.lastEffect=V.lastEffect),1<V.effectTag&&(null!==a.lastEffect?a.lastEffect.nextEffect=V:a.firstEffect=V,a.lastEffect=V))}else{b=Mi(V,W);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=V.sibling;if(null!==b)return b;V=a}while(null!==V);X===qj&&(X=vj);return null}function Xj(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Yj(a){var b=dg();fg(99,ik.bind(null,a,b));return null}\nfunction ik(a,b){do Sj();while(null!==Ej);if((T&(oj|pj))!==S)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Xj(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===U&&(V=U=null,W=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=T;T|=pj;mj.current=null;le=Ld;var g=fe();if(ge(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(Db){h=null;break a}var C=0,y=-1,H=-1,z=0,ta=0,r=g,x=null;b:for(;;){for(var A;;){r!==h||0!==l&&3!==r.nodeType||(y=C+l);r!==m||0!==k&&3!==r.nodeType||(H=C+k);3===r.nodeType&&(C+=r.nodeValue.length);if(null===(A=r.firstChild))break;x=r;r=A}for(;;){if(r===g)break b;x===h&&++z===l&&(y=C);x===m&&++ta===k&&(H=C);if(null!==(A=r.nextSibling))break;r=x;x=r.parentNode}r=A}h=-1===y||-1===H?null:{start:y,end:H}}else h=null}h=h||{start:0,end:0}}else h=\nnull;me={focusedElem:g,selectionRange:h};Ld=!1;Y=e;do try{jk()}catch(Db){if(null===Y)throw Error(u(330));Ri(Y,Db);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var p=Y.effectTag;p&16&&Tb(Y.stateNode,\"\");if(p&128){var t=Y.alternate;if(null!==t){var v=t.ref;null!==v&&(\"function\"===typeof v?v(null):v.current=null)}}switch(p&1038){case 2:$i(Y);Y.effectTag&=-3;break;case 6:$i(Y);Y.effectTag&=-3;aj(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=-1025;aj(Y.alternate,\nY);break;case 4:aj(Y.alternate,Y);break;case 8:l=Y,Xi(g,l,h),Yi(l)}Y=Y.nextEffect}}catch(Db){if(null===Y)throw Error(u(330));Ri(Y,Db);Y=Y.nextEffect}while(null!==Y);v=me;t=fe();p=v.focusedElem;h=v.selectionRange;if(t!==p&&p&&p.ownerDocument&&ee(p.ownerDocument.documentElement,p)){null!==h&&ge(p)&&(t=h.start,v=h.end,void 0===v&&(v=t),\"selectionStart\"in p?(p.selectionStart=t,p.selectionEnd=Math.min(v,p.value.length)):(v=(t=p.ownerDocument||document)&&t.defaultView||window,v.getSelection&&(v=v.getSelection(),\nl=p.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!v.extend&&g>h&&(l=h,h=g,g=l),l=de(p,g),m=de(p,h),l&&m&&(1!==v.rangeCount||v.anchorNode!==l.node||v.anchorOffset!==l.offset||v.focusNode!==m.node||v.focusOffset!==m.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),v.removeAllRanges(),g>h?(v.addRange(t),v.extend(m.node,m.offset)):(t.setEnd(m.node,m.offset),v.addRange(t))))));t=[];for(v=p;v=v.parentNode;)1===v.nodeType&&t.push({element:v,left:v.scrollLeft,top:v.scrollTop});\n\"function\"===typeof p.focus&&p.focus();for(p=0;p<t.length;p++)v=t[p],v.element.scrollLeft=v.left,v.element.scrollTop=v.top}me=null;Ld=!!le;le=null;a.current=c;Y=e;do try{for(p=d;null!==Y;){var Dh=Y.effectTag;if(Dh&36){var dc=Y.alternate;t=Y;v=p;switch(t.tag){case 0:case 11:case 15:Ui(16,32,t);break;case 1:var fd=t.stateNode;if(t.effectTag&4)if(null===dc)fd.componentDidMount();else{var hk=t.elementType===t.type?dc.memoizedProps:mg(t.type,dc.memoizedProps);fd.componentDidUpdate(hk,dc.memoizedState,\nfd.__reactInternalSnapshotBeforeUpdate)}var Eh=t.updateQueue;null!==Eh&&Kg(t,Eh,fd,v);break;case 3:var Fh=t.updateQueue;if(null!==Fh){g=null;if(null!==t.child)switch(t.child.tag){case 5:g=t.child.stateNode;break;case 1:g=t.child.stateNode}Kg(t,Fh,g,v)}break;case 5:var xk=t.stateNode;null===dc&&t.effectTag&4&&ne(t.type,t.memoizedProps)&&xk.focus();break;case 6:break;case 4:break;case 12:break;case 13:if(null===t.memoizedState){var Di=t.alternate;if(null!==Di){var Ei=Di.memoizedState;if(null!==Ei){var Fi=\nEi.dehydrated;null!==Fi&&Lc(Fi)}}}break;case 19:case 17:case 20:case 21:break;default:throw Error(u(163));}}if(Dh&128){t=void 0;var xd=Y.ref;if(null!==xd){var Gi=Y.stateNode;switch(Y.tag){case 5:t=Gi;break;default:t=Gi}\"function\"===typeof xd?xd(t):xd.current=t}}Y=Y.nextEffect}}catch(Db){if(null===Y)throw Error(u(330));Ri(Y,Db);Y=Y.nextEffect}while(null!==Y);Y=null;Yf();T=f}else a.current=c;if(Dj)Dj=!1,Ej=a,Fj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&\n(jj=null);1073741823===b?a===Ij?Hj++:(Hj=0,Ij=a):Hj=0;\"function\"===typeof kk&&kk(c.stateNode,d);Z(a);if(gj)throw gj=!1,a=hj,hj=null,a;if((T&nj)!==S)return null;jg();return null}function jk(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Ti(Y.alternate,Y);0===(a&512)||Dj||(Dj=!0,gg(97,function(){Sj();return null}));Y=Y.nextEffect}}function Sj(){if(90!==Fj){var a=97<Fj?97:Fj;Fj=90;return fg(a,lk)}}\nfunction lk(){if(null===Ej)return!1;var a=Ej;Ej=null;if((T&(oj|pj))!==S)throw Error(u(331));var b=T;T|=pj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:Ui(128,0,c),Ui(0,64,c)}}catch(d){if(null===a)throw Error(u(330));Ri(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}T=b;jg();return!0}function mk(a,b,c){b=Ni(c,b);b=fj(a,b,1073741823);Dg(a,b);a=Kj(a,1073741823);null!==a&&Z(a)}\nfunction Ri(a,b){if(3===a.tag)mk(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){mk(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===jj||!jj.has(d))){a=Ni(b,a);a=ij(c,a,1073741823);Dg(c,a);c=Kj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction dk(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);U===a&&W===c?X===uj||X===tj&&1073741823===xj&&cg()-bj<Cj?Tj(a,W):Bj=!0:Pj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,a.finishedExpirationTime===c&&(a.finishedExpirationTime=0,a.finishedWork=null),Z(a)))}function dj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Pg(),b=Qg(b,a,null));a=Kj(a,b);null!==a&&Z(a)}var gk;\ngk=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)wg=!0;else{if(d<c){wg=!1;switch(b.tag){case 3:wi(b);li();break;case 5:oh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Jf(b);break;case 4:mh(b,b.stateNode.containerInfo);break;case 10:sg(b,b.memoizedProps.value);break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;if(0!==d&&d>=c)return yi(a,b,c);I(M,M.current&\n1,b);b=oi(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1,b);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return Bi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current,b);if(!d)return null}return oi(a,b,c)}wg=!1}}else wg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Ef(b,J.current);vg(b,c);e=Ih(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;Mh();if(L(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Og(b,d,g,a);e.updater=Sg;b.stateNode=e;e._reactInternalFiber=b;Wg(b,d,a,c);b=vi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;Va(e);if(1!==e._status)throw e._result;\ne=e._result;b.type=e;f=b.tag=nk(e);a=mg(e,a);switch(f){case 0:b=si(null,b,e,a,c);break;case 1:b=ui(null,b,e,a,c);break;case 11:b=ni(null,b,e,a,c);break;case 14:b=pi(null,b,e,mg(e.type,a),d,c);break;default:throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:mg(d,e),si(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:mg(d,e),ui(a,b,d,e,c);case 3:wi(b);d=b.updateQueue;if(null===d)throw Error(u(282));e=b.memoizedState;e=null!==e?e.element:\nnull;Hg(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)li(),b=oi(a,b,c);else{if(e=b.stateNode.hydrate)di=re(b.stateNode.containerInfo.firstChild),ci=b,e=ei=!0;if(e)for(c=gh(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),li();b=b.child}return b;case 5:return oh(b),null===a&&ii(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,oe(d,e)?g=null:null!==f&&oe(d,f)&&(b.effectTag|=16),ti(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=\nb.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&ii(b),null;case 13:return yi(a,b,c);case 4:return mh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=fh(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:mg(d,e),ni(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,b,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;\ne=b.pendingProps;g=b.memoizedProps;f=e.value;sg(b,f);if(null!==g){var h=g.value;f=of(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!K.current){b=oi(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=Bg(c,null),l.tag=2,Dg(h,l));h.expirationTime<c&&(h.expirationTime=\nc);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);ug(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,vg(b,c),e=xg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;\ncase 14:return e=b.type,f=mg(e,b.pendingProps),f=mg(e.type,f),pi(a,b,e,f,d,c);case 15:return ri(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:mg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Jf(b)):a=!1,vg(b,c),Ug(b,d,e,c),Wg(b,d,e,c),vi(null,b,d,!0,a,c);case 19:return Bi(a,b,c)}throw Error(u(156,b.tag));};var kk=null,Wi=null;\nfunction ok(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);kk=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Wi=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction pk(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function gi(a,b,c,d){return new pk(a,b,c,d)}\nfunction qi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function nk(a){if(\"function\"===typeof a)return qi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Oa)return 11;if(a===Ra)return 14}return 2}\nfunction ah(a,b){var c=a.alternate;null===c?(c=gi(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction ch(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)qi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case Ia:return eh(c.children,e,f,b);case Na:g=8;e|=7;break;case Ja:g=8;e|=1;break;case Ka:return a=gi(12,c,b,e|8),a.elementType=Ka,a.type=Ka,a.expirationTime=f,a;case Pa:return a=gi(13,c,b,e),a.type=Pa,a.elementType=Pa,a.expirationTime=f,a;case Qa:return a=gi(19,c,b,e),a.elementType=Qa,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case La:g=\n10;break a;case Ma:g=9;break a;case Oa:g=11;break a;case Ra:g=14;break a;case Sa:g=16;d=null;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=gi(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function eh(a,b,c,d){a=gi(7,a,d,b);a.expirationTime=c;return a}function bh(a,b,c){a=gi(6,a,null,b);a.expirationTime=c;return a}\nfunction dh(a,b,c){b=gi(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction qk(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Pj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function Mj(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction Nj(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Rj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction rk(a,b,c,d){var e=b.current,f=Pg(),g=Mg.suspense;f=Qg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(ec(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=If(c,k,h);break a}}c=h}else c=Cf;null===b.context?b.context=c:b.pendingContext=c;b=Bg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);Dg(e,b);Rg(e,f);return f}function sk(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function tk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function uk(a,b){tk(a,b);(a=a.alternate)&&tk(a,b)}\nfunction vk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new qk(a,b,c),e=gi(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;a[we]=d.current;c&&0!==b&&wc(9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}vk.prototype.render=function(a,b){rk(a,this._internalRoot,null,void 0===b?null:b)};vk.prototype.unmount=function(a){var b=this._internalRoot,c=void 0===a?null:a,d=b.containerInfo;rk(null,b,null,function(){d[we]=null;null!==c&&c()})};\nfunction wk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function yk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new vk(a,0,b?{hydrate:!0}:void 0)}\nfunction zk(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=sk(g);h.call(a)}}rk(b,g,a,e)}else{f=c._reactRootContainer=yk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=sk(g);k.call(a)}}ck(function(){rk(b,g,a,e)})}return sk(g)}function Ak(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ha,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\njc=function(a){if(13===a.tag){var b=lg(Pg(),150,100);Rg(a,b);uk(a,b)}};kc=function(a){if(13===a.tag){Pg();var b=kg++;Rg(a,b);uk(a,b)}};lc=function(a){if(13===a.tag){var b=Pg();b=Qg(b,a,null);Rg(a,b);uk(a,b)}};\nZa=function(a,b,c){switch(b){case \"input\":Eb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=ye(d);if(!e)throw Error(u(90));zb(d);Eb(d,e)}}}break;case \"textarea\":Mb(a,c);break;case \"select\":b=c.value,null!=b&&Jb(a,!!c.multiple,b,!1)}};eb=bk;\nfb=function(a,b,c,d){var e=T;T|=4;try{return fg(98,a.bind(null,b,c,d))}finally{T=e,T===S&&jg()}};gb=function(){(T&(1|oj|pj))===S&&(ak(),Sj())};hb=function(a,b){var c=T;T|=2;try{return a(b)}finally{T=c,T===S&&jg()}};function Bk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!wk(b))throw Error(u(200));return Ak(a,b,null,c)}\nvar Ck={createPortal:Bk,findDOMNode:function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=ic(b);a=null===a?null:a.stateNode;return a},hydrate:function(a,b,c){if(!wk(b))throw Error(u(200));return zk(null,a,b,!0,c)},render:function(a,b,c){if(!wk(b))throw Error(u(200));return zk(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){if(!wk(c))throw Error(u(200));\nif(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return zk(a,b,c,!1,d)},unmountComponentAtNode:function(a){if(!wk(a))throw Error(u(40));return a._reactRootContainer?(ck(function(){zk(null,null,a,!1,function(){a._reactRootContainer=null;a[we]=null})}),!0):!1},unstable_createPortal:function(){return Bk.apply(void 0,arguments)},unstable_batchedUpdates:bk,flushSync:function(a,b){if((T&(oj|pj))!==S)throw Error(u(187));var c=T;T|=1;try{return fg(99,a.bind(null,b))}finally{T=c,jg()}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[Cc,\nxe,ye,Ca.injectEventPluginsByName,fa,Sc,function(a){ya(a,Rc)},cb,db,Pd,Ba,Sj,{current:!1}]}};\n(function(a){var b=a.findFiberByHostInstance;return ok(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Ea.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=ic(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:Fc,bundleType:0,version:\"16.12.0\",\nrendererPackageName:\"react-dom\"});var Dk={default:Ck},Ek=Dk&&Ck||Dk;module.exports=Ek.default||Ek;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/** @license React v0.18.0\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=Math.floor((c-1)/2),e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};exports.unstable_cancelCallback=function(a){a.callback=null};\nexports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};exports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_requestPaint=Z;exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_pauseExecution=function(){};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_Profiling=null;\n","/* Copyright @ 2016-present 8x8, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Logger = require('./Logger.js');\n\n/**\n * Creates new <tt>LogCollector</tt>. Class implements <tt>LoggerTransport</tt>\n * and thus can be added as global transport in order to capture all the logs.\n *\n * It captures subsequent log lines created whenever <tt>Logger</tt> logs\n * a message and stores them in a queue in order to batch log entries. There are\n * time and size limit constraints which determine how often batch entries are\n * stored. Whenever one of these limits is exceeded the <tt>LogCollector</tt>\n * will use the <tt>logStorage</tt> object given as an argument to save\n * the batch log entry.\n *\n * @param {Object} logStorage an object which allows to store the logs collected\n * @param {function(string|object[])} logStorage.storeLogs a method called when\n * this <tt>LogCollector</tt> requests log entry storage. The method's argument\n * is an array which can contain <tt>string</tt>s and <tt>object</tt>s. If given\n * item is an object it means that it's an aggregated message. That is a message\n * which is the same as the previous one and it's representation has\n * the following format:\n * {\n *   {string} text: 'the text of some duplicated message'\n *   {number} count: 3 // how many times the message appeared in a row\n * }\n * If a message \"B\" after an aggregated message \"A\" is different, then it breaks\n * the sequence of \"A\". Which means that even if the next message \"C\" is\n * the same as \"A\" it will start a new aggregated message \"C\".\n * @param {function()} logStorage.isReady a method which should return\n * a <tt>boolean</tt> to tell the collector that it's ready to store. During the\n * time storage is not ready log batches will be cached and stored on the next\n * occasion (flush or interval timeout).\n *\n * @param {Object} options the <tt>LogCollector</tt> configuration options.\n * @param {number} options.maxEntryLength the size limit for a single log entry\n * to be stored. The <tt>LogCollector</tt> will push the entry as soon as it\n * reaches or exceeds this limit given that <tt>logStorage.isReady</tt>\n * returns <tt>true</tt>. Otherwise the log entry will be cached until the log\n * storage becomes ready. Note that the \"is ready\" condition is checked every\n * <tt>options.storeInterval</tt> milliseconds.\n * @param {number} options.storeInterval how often the logs should be stored in\n * case <tt>maxEntryLength</tt> was not exceeded.\n * @param {boolean} options.stringifyObjects indicates whether or not object\n * arguments should be \"stringified\" with <tt>JSON.stringify</tt> when a log\n * message is composed. Note that objects logged on the error log level are\n * always stringified.\n *\n * @constructor\n */\nfunction LogCollector(logStorage, options) {\n    this.logStorage = logStorage;\n    this.stringifyObjects = options && options.stringifyObjects ? options.stringifyObjects : false;\n    this.storeInterval = options && options.storeInterval ? options.storeInterval: 30000;\n    this.maxEntryLength = options && options.maxEntryLength ? options.maxEntryLength : 10000;\n    // Bind the log method for each level to the corresponding method name\n    // in order to implement \"global log transport\" object.\n    Object.keys(Logger.levels).forEach(\n    function (logLevel) {\n        var methodName = Logger.levels[logLevel];\n        this[methodName] = function () {\n            this._log.apply(this, arguments);\n        }.bind(this, logLevel);\n    }.bind(this));\n    /**\n     * The ID of store logs interval if one is currently scheduled or\n     * <tt>null</tt> otherwise.\n     * @type {number|null}\n     */\n    this.storeLogsIntervalID = null;\n    /**\n     * The log messages that are to be batched into log entry when\n     * {@link LogCollector._flush} method is called.\n     * @type {string[]}\n     */\n    this.queue = [];\n    /**\n     * The total length of all messages currently stored in the {@link queue}.\n     * @type {number}\n     */\n    this.totalLen = 0;\n    /**\n     * An array used to temporarily store log batches, before the storage gets\n     * ready.\n     * @type {string[]}\n     */\n    this.outputCache = [];\n}\n\n/**\n * Method called inside of {@link formatLogMessage} in order to covert an\n * <tt>Object</tt> argument to string. The conversion will happen when either\n * 'stringifyObjects' option is enabled or on the {@link Logger.levels.ERROR}\n * log level. The default implementation uses <tt>JSON.stringify</tt> and\n * returns \"[object with circular refs?]\" instead of an object if it fails.\n *\n * @param {object} someObject the <tt>object</tt> to be stringified.\n *\n * @return {string} the result of <tt>JSON.stringify</tt> or\n * \"[object with circular refs?]\" if any error occurs during \"stringification\".\n *\n * @protected\n */\nLogCollector.prototype.stringify = function (someObject) {\n    try {\n        return JSON.stringify(someObject);\n    } catch (error) {\n        return '[object with circular refs?]';\n    }\n};\n\n/**\n * Formats log entry for the given logging level and arguments passed to the\n * <tt>Logger</tt>'s log method. The first argument is log level and the next\n * arguments have to be captured using JS built-in 'arguments' variable.\n *\n * @param {Logger.levels} logLevel provides the logging level of the message to\n * be logged.\n * @param {Date} timestamp - The {@code Date} when a message has been logged.\n *\n * @return {string|null} a non-empty string representation of the log entry\n * crafted from the log arguments. If the return value is <tt>null</tt> then\n * the message wil be discarded by this <tt>LogCollector</tt>.\n *\n * @protected\n */\nLogCollector.prototype.formatLogMessage = function (\nlogLevel /* timestamp, arg2, arg3, arg4... */) {\n    var msg = '';\n    for (var i = 1, len = arguments.length; i < len; i++) {\n        var arg = arguments[i];\n        // objects logged on error level are always converted to JSON\n        if ((this.stringifyObjects || logLevel === Logger.levels.ERROR) &&\n            typeof arg === 'object') {\n            arg = this.stringify(arg);\n        }\n        msg += arg;\n        if (i !== len - 1) {\n            msg += ' ';\n        }\n    }\n    return msg.length ? msg : null;\n};\n\n/**\n * The log method bound to each of the logging levels in order to implement\n * \"global log transport\" object.\n *\n * @private\n */\nLogCollector.prototype._log = function() {\n\n    // var logLevel = arguments[0]; first argument is the log level\n    var timestamp = arguments[1];\n    var msg = this.formatLogMessage.apply(this, arguments);\n    if (msg) {\n        // The same as the previous message aggregation logic\n        var prevMessage = this.queue[this.queue.length - 1];\n        var prevMessageText = prevMessage && prevMessage.text;\n        if (prevMessageText === msg) {\n            prevMessage.count += 1;\n        } else {\n            this.queue.push({\n                text: msg,\n                timestamp: timestamp,\n                count: 1\n            });\n            this.totalLen += msg.length;\n        }\n    }\n\n    if (this.totalLen >= this.maxEntryLength) {\n        this._flush(true /* force */, true /* reschedule */);\n    }\n};\n\n/**\n * Starts periodical \"store logs\" task which will be triggered at the interval\n * specified in the constructor options.\n */\nLogCollector.prototype.start = function () {\n    this._reschedulePublishInterval();\n};\n\n/**\n * Reschedules the periodical \"store logs\" task which will store the next batch\n * log entry in the storage.\n * @private\n */\nLogCollector.prototype._reschedulePublishInterval = function () {\n    if (this.storeLogsIntervalID) {\n        window.clearTimeout(this.storeLogsIntervalID);\n        this.storeLogsIntervalID = null;\n    }\n    // It's actually a timeout, because it is rescheduled on every flush\n    this.storeLogsIntervalID = window.setTimeout(\n        this._flush.bind(\n            this, false /* do not force */, true /* reschedule */),\n        this.storeInterval);\n};\n\n/**\n * Call this method to flush the log entry buffer and store it in the log\n * storage immediately (given that the storage is ready).\n */\nLogCollector.prototype.flush = function() {\n    this._flush(\n        false /* do not force, as it will not be stored anyway */,\n        true /* reschedule next update */ );\n};\n\n/**\n * Stores the next batch log entry in the log storage.\n * @param {boolean} force enforce current logs batch to be stored or cached if\n * there is anything to be logged, but the storage is not ready yet. One of\n * legitimate reasons to force is when the logs length exceeds size limit which\n * could result in truncation.\n * @param {boolean} reschedule <tt>true</tt> if the next periodic task should be\n * scheduled after the log entry is stored. <tt>false</tt> will end the periodic\n * task cycle.\n * @private\n */\nLogCollector.prototype._flush = function(force, reschedule) {\n    // Publish only if there's anything to be logged\n    if (this.totalLen > 0 && (this.logStorage.isReady() || force)) {\n        //FIXME avoid truncating\n        // right now we don't care if the message size is \"slightly\" exceeded\n        if (this.logStorage.isReady()) {\n            // Sends all cached logs\n            if (this.outputCache.length) {\n                this.outputCache.forEach(\n                    function (cachedQueue) {\n                        this.logStorage.storeLogs(cachedQueue);\n                    }.bind(this)\n                );\n                // Clear the cache\n                this.outputCache = [];\n            }\n            // Send current batch\n            this.logStorage.storeLogs(this.queue);\n        } else {\n            this.outputCache.push(this.queue);\n        }\n\n        this.queue = [];\n        this.totalLen = 0;\n    }\n\n    if (reschedule) {\n        this._reschedulePublishInterval();\n    }\n};\n\n/**\n * Stops the periodical \"store logs\" task and immediately stores any pending\n * log entries as a batch.\n */\nLogCollector.prototype.stop = function() {\n    // Flush and stop publishing logs\n    this._flush(false /* do not force */, false /* do not reschedule */);\n};\n\nmodule.exports = LogCollector;\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\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\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;","/*jshint -W030 */\nvar tagRE = /(?:<!--[\\S\\s]*?-->|<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>)/g;\nvar parseTag = require('./parse-tag');\n// re-used obj for quick lookups of components\nvar empty = Object.create ? Object.create(null) : {};\n// common logic for pushing a child node onto a list\nfunction pushTextNode(list, html, level, start, ignoreWhitespace) {\n    // calculate correct end of the content slice in case there's\n    // no tag after the text node.\n    var end = html.indexOf('<', start);\n    var content = html.slice(start, end === -1 ? undefined : end);\n    // if a node is nothing but whitespace, collapse it as the spec states:\n    // https://www.w3.org/TR/html4/struct/text.html#h-9.1\n    if (/^\\s*$/.test(content)) {\n        content = ' ';\n    }\n    // don't add whitespace-only text nodes if they would be trailing text nodes\n    // or if they would be leading whitespace-only text nodes:\n    //  * end > -1 indicates this is not a trailing text node\n    //  * leading node is when level is -1 and list has length 0\n    if ((!ignoreWhitespace && end > -1 && level + list.length >= 0) || content !== ' ') {\n        list.push({\n            type: 'text',\n            content: content\n        });\n    }\n}\n\nmodule.exports = function parse(html, options) {\n    options || (options = {});\n    options.components || (options.components = empty);\n    var result = [];\n    var current;\n    var level = -1;\n    var arr = [];\n    var byTag = {};\n    var inComponent = false;\n\n    html.replace(tagRE, function (tag, index) {\n        if (inComponent) {\n            if (tag !== ('</' + current.name + '>')) {\n                return;\n            } else {\n                inComponent = false;\n            }\n        }\n\n        var isOpen = tag.charAt(1) !== '/';\n        var isComment = tag.indexOf('<!--') === 0;\n        var start = index + tag.length;\n        var nextChar = html.charAt(start);\n        var parent;\n\n        if (isOpen && !isComment) {\n            level++;\n\n            current = parseTag(tag);\n            if (current.type === 'tag' && options.components[current.name]) {\n                current.type = 'component';\n                inComponent = true;\n            }\n\n            if (!current.voidElement && !inComponent && nextChar && nextChar !== '<') {\n                pushTextNode(current.children, html, level, start, options.ignoreWhitespace);\n            }\n\n            byTag[current.tagName] = current;\n\n            // if we're at root, push new base node\n            if (level === 0) {\n                result.push(current);\n            }\n\n            parent = arr[level - 1];\n\n            if (parent) {\n                parent.children.push(current);\n            }\n\n            arr[level] = current;\n        }\n\n        if (isComment || !isOpen || current.voidElement) {\n            if (!isComment) {\n                level--;\n            }\n            if (!inComponent && nextChar !== '<' && nextChar) {\n                // trailing text node\n                // if we're at the root, push a base text node. otherwise add as\n                // a child to the current node.\n                parent = level === -1 ? result : arr[level].children;\n                pushTextNode(parent, html, level, start, options.ignoreWhitespace);\n            }\n        }\n    });\n\n    // If the \"html\" passed isn't actually html, add it as a text node.\n    if (!result.length && html.length) {\n        pushTextNode(result, html, 0, 0, options.ignoreWhitespace);\n    }\n\n    return result;\n};\n","var attrRE = /([\\w-]+)|=|(['\"])([.\\s\\S]*?)\\2/g;\nvar voidElements = require('void-elements');\n\nmodule.exports = function (tag) {\n    var i = 0;\n    var key;\n    var expectingValueAfterEquals = true;\n    var res = {\n        type: 'tag',\n        name: '',\n        voidElement: false,\n        attrs: {},\n        children: []\n    };\n\n    tag.replace(attrRE, function (match) {\n        if (match === '=') {\n            expectingValueAfterEquals = true;\n            i++;\n            return;\n        }\n\n        if (!expectingValueAfterEquals) {\n            if (key) {\n                res.attrs[key] = key; // boolean attribute\n            }\n            key=match;\n        } else {\n            if (i === 0) {\n                if (voidElements[match] || tag.charAt(tag.length - 2) === '/') {\n                    res.voidElement = true;\n                }\n                res.name = match;\n            } else {\n                res.attrs[key] = match.replace(/^['\"]|['\"]$/g, '');\n                key=undefined;\n            }\n        }\n        i++;\n        expectingValueAfterEquals = false;\n    });\n\n    return res;\n};\n","/**\n * This file automatically generated from `pre-publish.js`.\n * Do not manually edit.\n */\n\nmodule.exports = {\n  \"area\": true,\n  \"base\": true,\n  \"br\": true,\n  \"col\": true,\n  \"embed\": true,\n  \"hr\": true,\n  \"img\": true,\n  \"input\": true,\n  \"keygen\": true,\n  \"link\": true,\n  \"menuitem\": true,\n  \"meta\": true,\n  \"param\": true,\n  \"source\": true,\n  \"track\": true,\n  \"wbr\": true\n};\n","function attrString(attrs) {\n    var buff = [];\n    for (var key in attrs) {\n        buff.push(key + '=\"' + attrs[key] + '\"');\n    }\n    if (!buff.length) {\n        return '';\n    }\n    return ' ' + buff.join(' ');\n}\n\nfunction stringify(buff, doc) {\n    switch (doc.type) {\n    case 'text':\n        return buff + doc.content;\n    case 'tag':\n        buff += '<' + doc.name + (doc.attrs ? attrString(doc.attrs) : '') + (doc.voidElement ? '/>' : '>');\n        if (doc.voidElement) {\n            return buff;\n        }\n        return buff + doc.children.reduce(stringify, '') + '</' + doc.name + '>';\n    }\n}\n\nmodule.exports = function (doc) {\n    return doc.reduce(function (token, rootEl) {\n        return token + stringify('', rootEl);\n    }, '');\n};\n","function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n  if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n  var _e = undefined;\n\n  try {\n    for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\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\n  return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _utils = require('./utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _cookie = require('./browserLookups/cookie.js');\n\nvar _cookie2 = _interopRequireDefault(_cookie);\n\nvar _querystring = require('./browserLookups/querystring.js');\n\nvar _querystring2 = _interopRequireDefault(_querystring);\n\nvar _localStorage = require('./browserLookups/localStorage.js');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nvar _navigator = require('./browserLookups/navigator.js');\n\nvar _navigator2 = _interopRequireDefault(_navigator);\n\nvar _htmlTag = require('./browserLookups/htmlTag.js');\n\nvar _htmlTag2 = _interopRequireDefault(_htmlTag);\n\nvar _path = require('./browserLookups/path.js');\n\nvar _path2 = _interopRequireDefault(_path);\n\nvar _subdomain = require('./browserLookups/subdomain.js');\n\nvar _subdomain2 = _interopRequireDefault(_subdomain);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getDefaults() {\n  return {\n    order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],\n    lookupQuerystring: 'lng',\n    lookupCookie: 'i18next',\n    lookupLocalStorage: 'i18nextLng',\n\n    // cache user language\n    caches: ['localStorage'],\n    excludeCacheFor: ['cimode']\n    //cookieMinutes: 10,\n    //cookieDomain: 'myDomain'\n  };\n}\n\nvar Browser = function () {\n  function Browser(services) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Browser);\n\n    this.type = 'languageDetector';\n    this.detectors = {};\n\n    this.init(services, options);\n  }\n\n  _createClass(Browser, [{\n    key: 'init',\n    value: function init(services) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.services = services;\n      this.options = utils.defaults(options, this.options || {}, getDefaults());\n\n      // backwards compatibility\n      if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n\n      this.i18nOptions = i18nOptions;\n\n      this.addDetector(_cookie2.default);\n      this.addDetector(_querystring2.default);\n      this.addDetector(_localStorage2.default);\n      this.addDetector(_navigator2.default);\n      this.addDetector(_htmlTag2.default);\n      this.addDetector(_path2.default);\n      this.addDetector(_subdomain2.default);\n    }\n  }, {\n    key: 'addDetector',\n    value: function addDetector(detector) {\n      this.detectors[detector.name] = detector;\n    }\n  }, {\n    key: 'detect',\n    value: function detect(detectionOrder) {\n      var _this = this;\n\n      if (!detectionOrder) detectionOrder = this.options.order;\n\n      var detected = [];\n      detectionOrder.forEach(function (detectorName) {\n        if (_this.detectors[detectorName]) {\n          var lookup = _this.detectors[detectorName].lookup(_this.options);\n          if (lookup && typeof lookup === 'string') lookup = [lookup];\n          if (lookup) detected = detected.concat(lookup);\n        }\n      });\n\n      var found = void 0;\n      detected.forEach(function (lng) {\n        if (found) return;\n        var cleanedLng = _this.services.languageUtils.formatLanguageCode(lng);\n        if (_this.services.languageUtils.isWhitelisted(cleanedLng)) found = cleanedLng;\n      });\n\n      if (!found) {\n        var fallbacks = this.i18nOptions.fallbackLng;\n        if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n        if (!fallbacks) fallbacks = [];\n\n        if (Object.prototype.toString.apply(fallbacks) === '[object Array]') {\n          found = fallbacks[0];\n        } else {\n          found = fallbacks[0] || fallbacks.default && fallbacks.default[0];\n        }\n      };\n\n      return found;\n    }\n  }, {\n    key: 'cacheUserLanguage',\n    value: function cacheUserLanguage(lng, caches) {\n      var _this2 = this;\n\n      if (!caches) caches = this.options.caches;\n      if (!caches) return;\n      if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n      caches.forEach(function (cacheName) {\n        if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n      });\n    }\n  }]);\n\n  return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\nexports.default = Browser;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaults = defaults;\nexports.extend = extend;\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\n\nfunction defaults(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        if (obj[prop] === undefined) obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}\n\nfunction extend(obj) {\n  each.call(slice.call(arguments, 1), function (source) {\n    if (source) {\n      for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    }\n  });\n  return obj;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar cookie = {\n  create: function create(name, value, minutes, domain) {\n    var expires = void 0;\n    if (minutes) {\n      var date = new Date();\n      date.setTime(date.getTime() + minutes * 60 * 1000);\n      expires = '; expires=' + date.toGMTString();\n    } else expires = '';\n    domain = domain ? 'domain=' + domain + ';' : '';\n    document.cookie = name + '=' + value + expires + ';' + domain + 'path=/';\n  },\n\n  read: function read(name) {\n    var nameEQ = name + '=';\n    var ca = document.cookie.split(';');\n    for (var i = 0; i < ca.length; i++) {\n      var c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n    }\n    return null;\n  },\n\n  remove: function remove(name) {\n    this.create(name, '', -1);\n  }\n};\n\nexports.default = {\n  name: 'cookie',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      var c = cookie.read(options.lookupCookie);\n      if (c) found = c;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupCookie && typeof document !== 'undefined') {\n      cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'querystring',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (typeof window !== 'undefined') {\n      var query = window.location.search.substring(1);\n      var params = query.split('&');\n      for (var i = 0; i < params.length; i++) {\n        var pos = params[i].indexOf('=');\n        if (pos > 0) {\n          var key = params[i].substring(0, pos);\n          if (key === options.lookupQuerystring) {\n            found = params[i].substring(pos + 1);\n          }\n        }\n      }\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar hasLocalStorageSupport = void 0;\ntry {\n  hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n  var testKey = 'i18next.translate.boo';\n  window.localStorage.setItem(testKey, 'foo');\n  window.localStorage.removeItem(testKey);\n} catch (e) {\n  hasLocalStorageSupport = false;\n}\n\nexports.default = {\n  name: 'localStorage',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      var lng = window.localStorage.getItem(options.lookupLocalStorage);\n      if (lng) found = lng;\n    }\n\n    return found;\n  },\n  cacheUserLanguage: function cacheUserLanguage(lng, options) {\n    if (options.lookupLocalStorage && hasLocalStorageSupport) {\n      window.localStorage.setItem(options.lookupLocalStorage, lng);\n    }\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'navigator',\n\n  lookup: function lookup(options) {\n    var found = [];\n\n    if (typeof navigator !== 'undefined') {\n      if (navigator.languages) {\n        // chrome only; not an array, so can't use .push.apply instead of iterating\n        for (var i = 0; i < navigator.languages.length; i++) {\n          found.push(navigator.languages[i]);\n        }\n      }\n      if (navigator.userLanguage) {\n        found.push(navigator.userLanguage);\n      }\n      if (navigator.language) {\n        found.push(navigator.language);\n      }\n    }\n\n    return found.length > 0 ? found : undefined;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'htmlTag',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n\n    if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n      found = htmlTag.getAttribute('lang');\n    }\n\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'path',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromPathIndex === 'number') {\n          if (typeof language[options.lookupFromPathIndex] !== 'string') {\n            return undefined;\n          }\n          found = language[options.lookupFromPathIndex].replace('/', '');\n        } else {\n          found = language[0].replace('/', '');\n        }\n      }\n    }\n    return found;\n  }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  name: 'subdomain',\n\n  lookup: function lookup(options) {\n    var found = void 0;\n    if (typeof window !== 'undefined') {\n      var language = window.location.href.match(/(?:http[s]*\\:\\/\\/)*(.*?)\\.(?=[^\\/]*\\..{2,5})/gi);\n      if (language instanceof Array) {\n        if (typeof options.lookupFromSubdomainIndex === 'number') {\n          found = language[options.lookupFromSubdomainIndex].replace('http://', '').replace('https://', '').replace('.', '');\n        } else {\n          found = language[0].replace('http://', '').replace('https://', '').replace('.', '');\n        }\n      }\n    }\n    return found;\n  }\n};","/*! Moment Duration Format v2.2.2\n *  https://github.com/jsmreese/moment-duration-format\n *  Date: 2018-02-16\n *\n *  Duration format plugin function for the Moment.js library\n *  http://momentjs.com/\n *\n *  Copyright 2018 John Madhavan-Reese\n *  Released under the MIT license\n */\n\n(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['moment'], factory);\n    } else if (typeof exports === 'object') {\n        // Node. Does not work with strict CommonJS, but only CommonJS-like\n        // enviroments that support module.exports, like Node.\n        try {\n            module.exports = factory(require('moment'));\n        } catch (e) {\n            // If moment is not available, leave the setup up to the user.\n            // Like when using moment-timezone or similar moment-based package.\n            module.exports = factory;\n        }\n    }\n\n    if (root) {\n        // Globals.\n        root.momentDurationFormatSetup = root.moment ? factory(root.moment) : factory;\n    }\n})(this, function (moment) {\n    // `Number#tolocaleString` is tested on plugin initialization.\n    // If the feature test passes, `toLocaleStringWorks` will be set to `true` and the\n    // native function will be used to generate formatted output. If the feature\n    // test fails, the fallback format function internal to this plugin will be\n    // used.\n    var toLocaleStringWorks = false;\n\n    // `Number#toLocaleString` rounds incorrectly for select numbers in Microsoft\n    // environments (Edge, IE11, Windows Phone) and possibly other environments.\n    // If the rounding test fails and `toLocaleString` will be used for formatting,\n    // the plugin will \"pre-round\" number values using the fallback number format\n    // function before passing them to `toLocaleString` for final formatting.\n    var toLocaleStringRoundingWorks = false;\n\n    // Token type names in order of descending magnitude.\n    var types = \"escape years months weeks days hours minutes seconds milliseconds general\".split(\" \");\n\n    var bubbles = [\n        {\n            type: \"seconds\",\n            targets: [\n                { type: \"minutes\", value: 60 },\n                { type: \"hours\", value: 3600 },\n                { type: \"days\", value: 86400 },\n                { type: \"weeks\", value: 604800 },\n                { type: \"months\", value: 2678400 },\n                { type: \"years\", value: 31536000 }\n            ]\n        },\n        {\n            type: \"minutes\",\n            targets: [\n                { type: \"hours\", value: 60 },\n                { type: \"days\", value: 1440 },\n                { type: \"weeks\", value: 10080 },\n                { type: \"months\", value: 44640 },\n                { type: \"years\", value: 525600 }\n            ]\n        },\n        {\n            type: \"hours\",\n            targets: [\n                { type: \"days\", value: 24 },\n                { type: \"weeks\", value: 168 },\n                { type: \"months\", value: 744 },\n                { type: \"years\", value: 8760 }\n            ]\n        },\n        {\n            type: \"days\",\n            targets: [\n                { type: \"weeks\", value: 7 },\n                { type: \"months\", value: 31 },\n                { type: \"years\", value: 365 }\n            ]\n        },\n        {\n            type: \"months\",\n            targets: [\n                { type: \"years\", value: 12 }\n            ]\n        }\n    ];\n\n    // stringIncludes\n    function stringIncludes(str, search) {\n        if (search.length > str.length) {\n          return false;\n        }\n\n        return str.indexOf(search) !== -1;\n    }\n\n    // repeatZero(qty)\n    // Returns \"0\" repeated `qty` times.\n    // `qty` must be a integer >= 0.\n    function repeatZero(qty) {\n        var result = \"\";\n\n        while (qty) {\n            result += \"0\";\n            qty -= 1;\n        }\n\n        return result;\n    }\n\n    function stringRound(digits) {\n        var digitsArray = digits.split(\"\").reverse();\n        var i = 0;\n        var carry = true;\n\n        while (carry && i < digitsArray.length) {\n            if (i) {\n                if (digitsArray[i] === \"9\") {\n                    digitsArray[i] = \"0\";\n                } else {\n                    digitsArray[i] = (parseInt(digitsArray[i], 10) + 1).toString();\n                    carry = false;\n                }\n            } else {\n                if (parseInt(digitsArray[i], 10) < 5) {\n                    carry = false;\n                }\n\n                digitsArray[i] = \"0\";\n            }\n\n            i += 1;\n        }\n\n        if (carry) {\n            digitsArray.push(\"1\");\n        }\n\n        return digitsArray.reverse().join(\"\");\n    }\n\n    // formatNumber\n    // Formats any number greater than or equal to zero using these options:\n    // - userLocale\n    // - useToLocaleString\n    // - useGrouping\n    // - grouping\n    // - maximumSignificantDigits\n    // - minimumIntegerDigits\n    // - fractionDigits\n    // - groupingSeparator\n    // - decimalSeparator\n    //\n    // `useToLocaleString` will use `toLocaleString` for formatting.\n    // `userLocale` option is passed through to `toLocaleString`.\n    // `fractionDigits` is passed through to `maximumFractionDigits` and `minimumFractionDigits`\n    // Using `maximumSignificantDigits` will override `minimumIntegerDigits` and `fractionDigits`.\n    function formatNumber(number, options, userLocale) {\n        var useToLocaleString = options.useToLocaleString;\n        var useGrouping = options.useGrouping;\n        var grouping = useGrouping && options.grouping.slice();\n        var maximumSignificantDigits = options.maximumSignificantDigits;\n        var minimumIntegerDigits = options.minimumIntegerDigits || 1;\n        var fractionDigits = options.fractionDigits || 0;\n        var groupingSeparator = options.groupingSeparator;\n        var decimalSeparator = options.decimalSeparator;\n\n        if (useToLocaleString && userLocale) {\n            var localeStringOptions = {\n                minimumIntegerDigits: minimumIntegerDigits,\n                useGrouping: useGrouping\n            };\n\n            if (fractionDigits) {\n                localeStringOptions.maximumFractionDigits = fractionDigits;\n                localeStringOptions.minimumFractionDigits = fractionDigits;\n            }\n\n            // toLocaleString output is \"0.0\" instead of \"0\" for HTC browsers\n            // when maximumSignificantDigits is set. See #96.\n            if (maximumSignificantDigits && number > 0) {\n                localeStringOptions.maximumSignificantDigits = maximumSignificantDigits;\n            }\n\n            if (!toLocaleStringRoundingWorks) {\n                var roundingOptions = extend({}, options);\n                roundingOptions.useGrouping = false;\n                roundingOptions.decimalSeparator = \".\";\n                number = parseFloat(formatNumber(number, roundingOptions), 10);\n            }\n\n            return number.toLocaleString(userLocale, localeStringOptions);\n        }\n\n        var numberString;\n\n        // Add 1 to digit output length for floating point errors workaround. See below.\n        if (maximumSignificantDigits) {\n            numberString = number.toPrecision(maximumSignificantDigits + 1);\n        } else {\n            numberString = number.toFixed(fractionDigits + 1);\n        }\n\n        var integerString;\n        var fractionString;\n        var exponentString;\n\n        var temp = numberString.split(\"e\");\n\n        exponentString = temp[1] || \"\";\n\n        temp = temp[0].split(\".\");\n\n        fractionString = temp[1] || \"\";\n        integerString = temp[0] || \"\";\n\n        // Workaround for floating point errors in `toFixed` and `toPrecision`.\n        // (3.55).toFixed(1); --> \"3.5\"\n        // (123.55 - 120).toPrecision(2); --> \"3.5\"\n        // (123.55 - 120); --> 3.549999999999997\n        // (123.55 - 120).toFixed(2); --> \"3.55\"\n        // Round by examing the string output of the next digit.\n\n        // *************** Implement String Rounding here ***********************\n        // Check integerString + fractionString length of toPrecision before rounding.\n        // Check length of fractionString from toFixed output before rounding.\n        var integerLength = integerString.length;\n        var fractionLength = fractionString.length;\n        var digitCount = integerLength + fractionLength;\n        var digits = integerString + fractionString;\n\n        if (maximumSignificantDigits && digitCount === (maximumSignificantDigits + 1) || !maximumSignificantDigits && fractionLength === (fractionDigits + 1)) {\n            // Round digits.\n            digits = stringRound(digits);\n\n            if (digits.length === digitCount + 1) {\n                integerLength = integerLength + 1;\n            }\n\n            // Discard final fractionDigit.\n            if (fractionLength) {\n                digits = digits.slice(0, -1);\n            }\n\n            // Separate integer and fraction.\n            integerString = digits.slice(0, integerLength);\n            fractionString = digits.slice(integerLength);\n        }\n\n        // Trim trailing zeroes from fractionString because toPrecision outputs\n        // precision, not significant digits.\n        if (maximumSignificantDigits) {\n            fractionString = fractionString.replace(/0*$/, \"\");\n        }\n\n        // Handle exponent.\n        var exponent = parseInt(exponentString, 10);\n\n        if (exponent > 0) {\n            if (fractionString.length <= exponent) {\n                fractionString = fractionString + repeatZero(exponent - fractionString.length);\n\n                integerString = integerString + fractionString;\n                fractionString = \"\";\n            } else {\n                integerString = integerString + fractionString.slice(0, exponent);\n                fractionString = fractionString.slice(exponent);\n            }\n        } else if (exponent < 0) {\n            fractionString = (repeatZero(Math.abs(exponent) - integerString.length) + integerString + fractionString);\n\n            integerString = \"0\";\n        }\n\n        if (!maximumSignificantDigits) {\n            // Trim or pad fraction when not using maximumSignificantDigits.\n            fractionString = fractionString.slice(0, fractionDigits);\n\n            if (fractionString.length < fractionDigits) {\n                fractionString = fractionString + repeatZero(fractionDigits - fractionString.length);\n            }\n\n            // Pad integer when using minimumIntegerDigits\n            // and not using maximumSignificantDigits.\n            if (integerString.length < minimumIntegerDigits) {\n                integerString = repeatZero(minimumIntegerDigits - integerString.length) + integerString;\n            }\n        }\n\n        var formattedString = \"\";\n\n        // Handle grouping.\n        if (useGrouping) {\n            temp = integerString;\n            var group;\n\n            while (temp.length) {\n                if (grouping.length) {\n                    group = grouping.shift();\n                }\n\n                if (formattedString) {\n                    formattedString = groupingSeparator + formattedString;\n                }\n\n                formattedString = temp.slice(-group) + formattedString;\n\n                temp = temp.slice(0, -group);\n            }\n        } else {\n            formattedString = integerString;\n        }\n\n        // Add decimalSeparator and fraction.\n        if (fractionString) {\n            formattedString = formattedString + decimalSeparator + fractionString;\n        }\n\n        return formattedString;\n    }\n\n    // durationLabelCompare\n    function durationLabelCompare(a, b) {\n        if (a.label.length > b.label.length) {\n            return -1;\n        }\n\n        if (a.label.length < b.label.length) {\n            return 1;\n        }\n\n        // a must be equal to b\n        return 0;\n    }\n\n    // durationGetLabels\n    function durationGetLabels(token, localeData) {\n        var labels = [];\n\n        each(keys(localeData), function (localeDataKey) {\n            if (localeDataKey.slice(0, 15) !== \"_durationLabels\") {\n                return;\n            }\n\n            var labelType = localeDataKey.slice(15).toLowerCase();\n\n            each(keys(localeData[localeDataKey]), function (labelKey) {\n                if (labelKey.slice(0, 1) === token) {\n                    labels.push({\n                        type: labelType,\n                        key: labelKey,\n                        label: localeData[localeDataKey][labelKey]\n                    });\n                }\n            });\n        });\n\n        return labels;\n    }\n\n    // durationPluralKey\n    function durationPluralKey(token, integerValue, decimalValue) {\n        // Singular for a value of `1`, but not for `1.0`.\n        if (integerValue === 1 && decimalValue === null) {\n            return token;\n        }\n\n        return token + token;\n    }\n\n    var engLocale = {\n        durationLabelsStandard: {\n            S: 'millisecond',\n            SS: 'milliseconds',\n            s: 'second',\n            ss: 'seconds',\n            m: 'minute',\n            mm: 'minutes',\n            h: 'hour',\n            hh: 'hours',\n            d: 'day',\n            dd: 'days',\n            w: 'week',\n            ww: 'weeks',\n            M: 'month',\n            MM: 'months',\n            y: 'year',\n            yy: 'years'\n        },\n        durationLabelsShort: {\n            S: 'msec',\n            SS: 'msecs',\n            s: 'sec',\n            ss: 'secs',\n            m: 'min',\n            mm: 'mins',\n            h: 'hr',\n            hh: 'hrs',\n            d: 'dy',\n            dd: 'dys',\n            w: 'wk',\n            ww: 'wks',\n            M: 'mo',\n            MM: 'mos',\n            y: 'yr',\n            yy: 'yrs'\n        },\n        durationTimeTemplates: {\n            HMS: 'h:mm:ss',\n            HM: 'h:mm',\n            MS: 'm:ss'\n        },\n        durationLabelTypes: [\n            { type: \"standard\", string: \"__\" },\n            { type: \"short\", string: \"_\" }\n        ],\n        durationPluralKey: durationPluralKey\n    };\n\n    // isArray\n    function isArray(array) {\n        return Object.prototype.toString.call(array) === \"[object Array]\";\n    }\n\n    // isObject\n    function isObject(obj) {\n        return Object.prototype.toString.call(obj) === \"[object Object]\";\n    }\n\n    // findLast\n    function findLast(array, callback) {\n        var index = array.length;\n\n        while (index -= 1) {\n            if (callback(array[index])) { return array[index]; }\n        }\n    }\n\n    // find\n    function find(array, callback) {\n        var index = 0;\n\n        var max = array && array.length || 0;\n\n        var match;\n\n        if (typeof callback !== \"function\") {\n            match = callback;\n            callback = function (item) {\n                return item === match;\n            };\n        }\n\n        while (index < max) {\n            if (callback(array[index])) { return array[index]; }\n            index += 1;\n        }\n    }\n\n    // each\n    function each(array, callback) {\n        var index = 0,\n            max = array.length;\n\n        if (!array || !max) { return; }\n\n        while (index < max) {\n            if (callback(array[index], index) === false) { return; }\n            index += 1;\n        }\n    }\n\n    // map\n    function map(array, callback) {\n        var index = 0,\n            max = array.length,\n            ret = [];\n\n        if (!array || !max) { return ret; }\n\n        while (index < max) {\n            ret[index] = callback(array[index], index);\n            index += 1;\n        }\n\n        return ret;\n    }\n\n    // pluck\n    function pluck(array, prop) {\n        return map(array, function (item) {\n            return item[prop];\n        });\n    }\n\n    // compact\n    function compact(array) {\n        var ret = [];\n\n        each(array, function (item) {\n            if (item) { ret.push(item); }\n        });\n\n        return ret;\n    }\n\n    // unique\n    function unique(array) {\n        var ret = [];\n\n        each(array, function (_a) {\n            if (!find(ret, _a)) { ret.push(_a); }\n        });\n\n        return ret;\n    }\n\n    // intersection\n    function intersection(a, b) {\n        var ret = [];\n\n        each(a, function (_a) {\n            each(b, function (_b) {\n                if (_a === _b) { ret.push(_a); }\n            });\n        });\n\n        return unique(ret);\n    }\n\n    // rest\n    function rest(array, callback) {\n        var ret = [];\n\n        each(array, function (item, index) {\n            if (!callback(item)) {\n                ret = array.slice(index);\n                return false;\n            }\n        });\n\n        return ret;\n    }\n\n    // initial\n    function initial(array, callback) {\n        var reversed = array.slice().reverse();\n\n        return rest(reversed, callback).reverse();\n    }\n\n    // extend\n    function extend(a, b) {\n        for (var key in b) {\n            if (b.hasOwnProperty(key)) { a[key] = b[key]; }\n        }\n\n        return a;\n    }\n\n    // keys\n    function keys(a) {\n        var ret = [];\n\n        for (var key in a) {\n            if (a.hasOwnProperty(key)) { ret.push(key); }\n        }\n\n        return ret;\n    }\n\n    // any\n    function any(array, callback) {\n        var index = 0,\n            max = array.length;\n\n        if (!array || !max) { return false; }\n\n        while (index < max) {\n            if (callback(array[index], index) === true) { return true; }\n            index += 1;\n        }\n\n        return false;\n    }\n\n    // flatten\n    function flatten(array) {\n        var ret = [];\n\n        each(array, function(child) {\n            ret = ret.concat(child);\n        });\n\n        return ret;\n    }\n\n    function toLocaleStringSupportsLocales() {\n        var number = 0;\n        try {\n            number.toLocaleString('i');\n        } catch (e) {\n            return e.name === 'RangeError';\n        }\n        return false;\n    }\n\n    function featureTestToLocaleStringRounding() {\n        return (3.55).toLocaleString(\"en\", {\n            useGrouping: false,\n            minimumIntegerDigits: 1,\n            minimumFractionDigits: 1,\n            maximumFractionDigits: 1\n        }) === \"3.6\";\n    }\n\n    function featureTestToLocaleString() {\n        var passed = true;\n\n        // Test locale.\n        passed = passed && toLocaleStringSupportsLocales();\n        if (!passed) { return false; }\n\n        // Test minimumIntegerDigits.\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 1 }) === \"1\";\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 2 }) === \"01\";\n        passed = passed && (1).toLocaleString(\"en\", { minimumIntegerDigits: 3 }) === \"001\";\n        if (!passed) { return false; }\n\n        // Test maximumFractionDigits and minimumFractionDigits.\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 0, minimumFractionDigits: 0 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 1, minimumFractionDigits: 1 }) === \"100.0\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 2, minimumFractionDigits: 2 }) === \"99.99\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumFractionDigits: 3, minimumFractionDigits: 3 }) === \"99.990\";\n        if (!passed) { return false; }\n\n        // Test maximumSignificantDigits.\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 1 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 2 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 3 }) === \"100\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 4 }) === \"99.99\";\n        passed = passed && (99.99).toLocaleString(\"en\", { maximumSignificantDigits: 5 }) === \"99.99\";\n        if (!passed) { return false; }\n\n        // Test grouping.\n        passed = passed && (1000).toLocaleString(\"en\", { useGrouping: true }) === \"1,000\";\n        passed = passed && (1000).toLocaleString(\"en\", { useGrouping: false }) === \"1000\";\n        if (!passed) { return false; }\n\n        return true;\n    }\n\n    // durationsFormat(durations [, template] [, precision] [, settings])\n    function durationsFormat() {\n        var args = [].slice.call(arguments);\n        var settings = {};\n        var durations;\n\n        // Parse arguments.\n        each(args, function (arg, index) {\n            if (!index) {\n                if (!isArray(arg)) {\n                    throw \"Expected array as the first argument to durationsFormat.\";\n                }\n\n                durations = arg;\n            }\n\n            if (typeof arg === \"string\" || typeof arg === \"function\") {\n                settings.template = arg;\n                return;\n            }\n\n            if (typeof arg === \"number\") {\n                settings.precision = arg;\n                return;\n            }\n\n            if (isObject(arg)) {\n                extend(settings, arg);\n            }\n        });\n\n        if (!durations || !durations.length) {\n            return [];\n        }\n\n        settings.returnMomentTypes = true;\n\n        var formattedDurations = map(durations, function (dur) {\n            return dur.format(settings);\n        });\n\n        // Merge token types from all durations.\n        var outputTypes = intersection(types, unique(pluck(flatten(formattedDurations), \"type\")));\n\n        var largest = settings.largest;\n\n        if (largest) {\n            outputTypes = outputTypes.slice(0, largest);\n        }\n\n        settings.returnMomentTypes = false;\n        settings.outputTypes = outputTypes;\n\n        return map(durations, function (dur) {\n            return dur.format(settings);\n        });\n    }\n\n    // durationFormat([template] [, precision] [, settings])\n    function durationFormat() {\n\n        var args = [].slice.call(arguments);\n        var settings = extend({}, this.format.defaults);\n\n        // Keep a shadow copy of this moment for calculating remainders.\n        // Perform all calculations on positive duration value, handle negative\n        // sign at the very end.\n        var asMilliseconds = this.asMilliseconds();\n        var asMonths = this.asMonths();\n\n        // Treat invalid durations as having a value of 0 milliseconds.\n        if (typeof this.isValid === \"function\" && this.isValid() === false) {\n            asMilliseconds = 0;\n            asMonths = 0;\n        }\n\n        var isNegative = asMilliseconds < 0;\n\n        // Two shadow copies are needed because of the way moment.js handles\n        // duration arithmetic for years/months and for weeks/days/hours/minutes/seconds.\n        var remainder = moment.duration(Math.abs(asMilliseconds), \"milliseconds\");\n        var remainderMonths = moment.duration(Math.abs(asMonths), \"months\");\n\n        // Parse arguments.\n        each(args, function (arg) {\n            if (typeof arg === \"string\" || typeof arg === \"function\") {\n                settings.template = arg;\n                return;\n            }\n\n            if (typeof arg === \"number\") {\n                settings.precision = arg;\n                return;\n            }\n\n            if (isObject(arg)) {\n                extend(settings, arg);\n            }\n        });\n\n        var momentTokens = {\n            years: \"y\",\n            months: \"M\",\n            weeks: \"w\",\n            days: \"d\",\n            hours: \"h\",\n            minutes: \"m\",\n            seconds: \"s\",\n            milliseconds: \"S\"\n        };\n\n        var tokenDefs = {\n            escape: /\\[(.+?)\\]/,\n            years: /\\*?[Yy]+/,\n            months: /\\*?M+/,\n            weeks: /\\*?[Ww]+/,\n            days: /\\*?[Dd]+/,\n            hours: /\\*?[Hh]+/,\n            minutes: /\\*?m+/,\n            seconds: /\\*?s+/,\n            milliseconds: /\\*?S+/,\n            general: /.+?/\n        };\n\n        // Types array is available in the template function.\n        settings.types = types;\n\n        var typeMap = function (token) {\n            return find(types, function (type) {\n                return tokenDefs[type].test(token);\n            });\n        };\n\n        var tokenizer = new RegExp(map(types, function (type) {\n            return tokenDefs[type].source;\n        }).join(\"|\"), \"g\");\n\n        // Current duration object is available in the template function.\n        settings.duration = this;\n\n        // Eval template function and cache template string.\n        var template = typeof settings.template === \"function\" ? settings.template.apply(settings) : settings.template;\n\n        // outputTypes and returnMomentTypes are settings to support durationsFormat().\n\n        // outputTypes is an array of moment token types that determines\n        // the tokens returned in formatted output. This option overrides\n        // trim, largest, stopTrim, etc.\n        var outputTypes = settings.outputTypes;\n\n        // returnMomentTypes is a boolean that sets durationFormat to return\n        // the processed momentTypes instead of formatted output.\n        var returnMomentTypes = settings.returnMomentTypes;\n\n        var largest = settings.largest;\n\n        // Setup stopTrim array of token types.\n        var stopTrim = [];\n\n        if (!outputTypes) {\n            if (isArray(settings.stopTrim)) {\n                settings.stopTrim = settings.stopTrim.join(\"\");\n            }\n\n            // Parse stopTrim string to create token types array.\n            if (settings.stopTrim) {\n                each(settings.stopTrim.match(tokenizer), function (token) {\n                    var type = typeMap(token);\n\n                    if (type === \"escape\" || type === \"general\") {\n                        return;\n                    }\n\n                    stopTrim.push(type);\n                });\n            }\n        }\n\n        // Cache moment's locale data.\n        var localeData = moment.localeData();\n\n        if (!localeData) {\n            localeData = {};\n        }\n\n        // Fall back to this plugin's `eng` extension.\n        each(keys(engLocale), function (key) {\n            if (typeof engLocale[key] === \"function\") {\n                if (!localeData[key]) {\n                    localeData[key] = engLocale[key];\n                }\n\n                return;\n            }\n\n            if (!localeData[\"_\" + key]) {\n                localeData[\"_\" + key] = engLocale[key];\n            }\n        });\n\n        // Replace Duration Time Template strings.\n        // For locale `eng`: `_HMS_`, `_HM_`, and `_MS_`.\n        each(keys(localeData._durationTimeTemplates), function (item) {\n            template = template.replace(\"_\" + item + \"_\", localeData._durationTimeTemplates[item]);\n        });\n\n        // Determine user's locale.\n        var userLocale = settings.userLocale || moment.locale();\n\n        var useLeftUnits = settings.useLeftUnits;\n        var usePlural = settings.usePlural;\n        var precision = settings.precision;\n        var forceLength = settings.forceLength;\n        var useGrouping = settings.useGrouping;\n        var trunc = settings.trunc;\n\n        // Use significant digits only when precision is greater than 0.\n        var useSignificantDigits = settings.useSignificantDigits && precision > 0;\n        var significantDigits = useSignificantDigits ? settings.precision : 0;\n        var significantDigitsCache = significantDigits;\n\n        var minValue = settings.minValue;\n        var isMinValue = false;\n\n        var maxValue = settings.maxValue;\n        var isMaxValue = false;\n\n        // formatNumber fallback options.\n        var useToLocaleString = settings.useToLocaleString;\n        var groupingSeparator = settings.groupingSeparator;\n        var decimalSeparator = settings.decimalSeparator;\n        var grouping = settings.grouping;\n\n        useToLocaleString = useToLocaleString && toLocaleStringWorks;\n\n        // Trim options.\n        var trim = settings.trim;\n\n        if (isArray(trim)) {\n            trim = trim.join(\" \");\n        }\n\n        if (trim === null && (largest || maxValue || useSignificantDigits)) {\n            trim = \"all\";\n        }\n\n        if (trim === null || trim === true || trim === \"left\" || trim === \"right\") {\n            trim = \"large\";\n        }\n\n        if (trim === false) {\n            trim = \"\";\n        }\n\n        var trimIncludes = function (item) {\n            return item.test(trim);\n        };\n\n        var rLarge = /large/;\n        var rSmall = /small/;\n        var rBoth = /both/;\n        var rMid = /mid/;\n        var rAll = /^all|[^sm]all/;\n        var rFinal = /final/;\n\n        var trimLarge = largest > 0 || any([rLarge, rBoth, rAll], trimIncludes);\n        var trimSmall = any([rSmall, rBoth, rAll], trimIncludes);\n        var trimMid = any([rMid, rAll], trimIncludes);\n        var trimFinal = any([rFinal, rAll], trimIncludes);\n\n        // Parse format string to create raw tokens array.\n        var rawTokens = map(template.match(tokenizer), function (token, index) {\n            var type = typeMap(token);\n\n            if (token.slice(0, 1) === \"*\") {\n                token = token.slice(1);\n\n                if (type !== \"escape\" && type !== \"general\") {\n                    stopTrim.push(type);\n                }\n            }\n\n            return {\n                index: index,\n                length: token.length,\n                text: \"\",\n\n                // Replace escaped tokens with the non-escaped token text.\n                token: (type === \"escape\" ? token.replace(tokenDefs.escape, \"$1\") : token),\n\n                // Ignore type on non-moment tokens.\n                type: ((type === \"escape\" || type === \"general\") ? null : type)\n            };\n        });\n\n        // Associate text tokens with moment tokens.\n        var currentToken = {\n            index: 0,\n            length: 0,\n            token: \"\",\n            text: \"\",\n            type: null\n        };\n\n        var tokens = [];\n\n        if (useLeftUnits) {\n            rawTokens.reverse();\n        }\n\n        each(rawTokens, function (token) {\n            if (token.type) {\n                if (currentToken.type || currentToken.text) {\n                    tokens.push(currentToken);\n                }\n\n                currentToken = token;\n\n                return;\n            }\n\n            if (useLeftUnits) {\n                currentToken.text = token.token + currentToken.text;\n            } else {\n                currentToken.text += token.token;\n            }\n        });\n\n        if (currentToken.type || currentToken.text) {\n            tokens.push(currentToken);\n        }\n\n        if (useLeftUnits) {\n            tokens.reverse();\n        }\n\n        // Find unique moment token types in the template in order of\n        // descending magnitude.\n        var momentTypes = intersection(types, unique(compact(pluck(tokens, \"type\"))));\n\n        // Exit early if there are no moment token types.\n        if (!momentTypes.length) {\n            return pluck(tokens, \"text\").join(\"\");\n        }\n\n        // Calculate values for each moment type in the template.\n        // For processing the settings, values are associated with moment types.\n        // Values will be assigned to tokens at the last step in order to\n        // assume nothing about frequency or order of tokens in the template.\n        momentTypes = map(momentTypes, function (momentType, index) {\n            // Is this the least-magnitude moment token found?\n            var isSmallest = ((index + 1) === momentTypes.length);\n\n            // Is this the greatest-magnitude moment token found?\n            var isLargest = (!index);\n\n            // Get the raw value in the current units.\n            var rawValue;\n\n            if (momentType === \"years\" || momentType === \"months\") {\n                rawValue = remainderMonths.as(momentType);\n            } else {\n                rawValue = remainder.as(momentType);\n            }\n\n            var wholeValue = Math.floor(rawValue);\n            var decimalValue = rawValue - wholeValue;\n\n            var token = find(tokens, function (token) {\n                return momentType === token.type;\n            });\n\n            if (isLargest && maxValue && rawValue > maxValue) {\n                isMaxValue = true;\n            }\n\n            if (isSmallest && minValue && Math.abs(settings.duration.as(momentType)) < minValue) {\n                isMinValue = true;\n            }\n\n            // Note the length of the largest-magnitude moment token:\n            // if it is greater than one and forceLength is not set,\n            // then default forceLength to `true`.\n            //\n            // Rationale is this: If the template is \"h:mm:ss\" and the\n            // moment value is 5 minutes, the user-friendly output is\n            // \"5:00\", not \"05:00\". We shouldn't pad the `minutes` token\n            // even though it has length of two if the template is \"h:mm:ss\";\n            //\n            // If the minutes output should always include the leading zero\n            // even when the hour is trimmed then set `{ forceLength: true }`\n            // to output \"05:00\". If the template is \"hh:mm:ss\", the user\n            // clearly wanted everything padded so we should output \"05:00\";\n            //\n            // If the user wants the full padded output, they can use\n            // template \"hh:mm:ss\" and set `{ trim: false }` to output\n            // \"00:05:00\".\n            if (isLargest && forceLength === null && token.length > 1) {\n                forceLength = true;\n            }\n\n            // Update remainder.\n            remainder.subtract(wholeValue, momentType);\n            remainderMonths.subtract(wholeValue, momentType);\n\n            return {\n                rawValue: rawValue,\n                wholeValue: wholeValue,\n                // Decimal value is only retained for the least-magnitude\n                // moment type in the format template.\n                decimalValue: isSmallest ? decimalValue : 0,\n                isSmallest: isSmallest,\n                isLargest: isLargest,\n                type: momentType,\n                // Tokens can appear multiple times in a template string,\n                // but all instances must share the same length.\n                tokenLength: token.length\n            };\n        });\n\n        var truncMethod = trunc ? Math.floor : Math.round;\n        var truncate = function (value, places) {\n            var factor = Math.pow(10, places);\n            return truncMethod(value * factor) / factor;\n        };\n\n        var foundFirst = false;\n        var bubbled = false;\n\n        var formatValue = function (momentType, index) {\n            var formatOptions = {\n                useGrouping: useGrouping,\n                groupingSeparator: groupingSeparator,\n                decimalSeparator: decimalSeparator,\n                grouping: grouping,\n                useToLocaleString: useToLocaleString\n            };\n\n            if (useSignificantDigits) {\n                if (significantDigits <= 0) {\n                    momentType.rawValue = 0;\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                } else {\n                    formatOptions.maximumSignificantDigits = significantDigits;\n                    momentType.significantDigits = significantDigits;\n                }\n            }\n\n            if (isMaxValue && !bubbled) {\n                if (momentType.isLargest) {\n                    momentType.wholeValue = maxValue;\n                    momentType.decimalValue = 0;\n                } else {\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                }\n            }\n\n            if (isMinValue && !bubbled) {\n                if (momentType.isSmallest) {\n                    momentType.wholeValue = minValue;\n                    momentType.decimalValue = 0;\n                } else {\n                    momentType.wholeValue = 0;\n                    momentType.decimalValue = 0;\n                }\n            }\n\n            if (momentType.isSmallest || momentType.significantDigits && momentType.significantDigits - momentType.wholeValue.toString().length <= 0) {\n                // Apply precision to least significant token value.\n                if (precision < 0) {\n                    momentType.value = truncate(momentType.wholeValue, precision);\n                } else if (precision === 0) {\n                    momentType.value = truncMethod(momentType.wholeValue + momentType.decimalValue);\n                } else { // precision > 0\n                    if (useSignificantDigits) {\n                        if (trunc) {\n                            momentType.value = truncate(momentType.rawValue, significantDigits - momentType.wholeValue.toString().length);\n                        } else {\n                            momentType.value = momentType.rawValue;\n                        }\n\n                        if (momentType.wholeValue) {\n                            significantDigits -= momentType.wholeValue.toString().length;\n                        }\n                    } else {\n                        formatOptions.fractionDigits = precision;\n\n                        if (trunc) {\n                            momentType.value = momentType.wholeValue + truncate(momentType.decimalValue, precision);\n                        } else {\n                            momentType.value = momentType.wholeValue + momentType.decimalValue;\n                        }\n                    }\n                }\n            } else {\n                if (useSignificantDigits && momentType.wholeValue) {\n                    // Outer Math.round required here to handle floating point errors.\n                    momentType.value = Math.round(truncate(momentType.wholeValue, momentType.significantDigits - momentType.wholeValue.toString().length));\n\n                    significantDigits -= momentType.wholeValue.toString().length;\n                } else {\n                    momentType.value = momentType.wholeValue;\n                }\n            }\n\n            if (momentType.tokenLength > 1 && (forceLength || foundFirst)) {\n                formatOptions.minimumIntegerDigits = momentType.tokenLength;\n\n                if (bubbled && formatOptions.maximumSignificantDigits < momentType.tokenLength) {\n                    delete formatOptions.maximumSignificantDigits;\n                }\n            }\n\n            if (!foundFirst && (momentType.value > 0 || trim === \"\" /* trim: false */ || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n                foundFirst = true;\n            }\n\n            momentType.formattedValue = formatNumber(momentType.value, formatOptions, userLocale);\n\n            formatOptions.useGrouping = false;\n            formatOptions.decimalSeparator = \".\";\n            momentType.formattedValueEn = formatNumber(momentType.value, formatOptions, \"en\");\n\n            if (momentType.tokenLength === 2 && momentType.type === \"milliseconds\") {\n                momentType.formattedValueMS = formatNumber(momentType.value, {\n                    minimumIntegerDigits: 3,\n                    useGrouping: false\n                }, \"en\").slice(0, 2);\n            }\n\n            return momentType;\n        };\n\n        // Calculate formatted values.\n        momentTypes = map(momentTypes, formatValue);\n        momentTypes = compact(momentTypes);\n\n        // Bubble rounded values.\n        if (momentTypes.length > 1) {\n            var findType = function (type) {\n                return find(momentTypes, function (momentType) {\n                    return momentType.type === type;\n                });\n            };\n\n            var bubbleTypes = function (bubble) {\n                var bubbleMomentType = findType(bubble.type);\n\n                if (!bubbleMomentType) {\n                    return;\n                }\n\n                each(bubble.targets, function (target) {\n                    var targetMomentType = findType(target.type);\n\n                    if (!targetMomentType) {\n                        return;\n                    }\n\n                    if (parseInt(bubbleMomentType.formattedValueEn, 10) === target.value) {\n                        bubbleMomentType.rawValue = 0;\n                        bubbleMomentType.wholeValue = 0;\n                        bubbleMomentType.decimalValue = 0;\n                        targetMomentType.rawValue += 1;\n                        targetMomentType.wholeValue += 1;\n                        targetMomentType.decimalValue = 0;\n                        targetMomentType.formattedValueEn = targetMomentType.wholeValue.toString();\n                        bubbled = true;\n                    }\n                });\n            };\n\n            each(bubbles, bubbleTypes);\n        }\n\n        // Recalculate formatted values.\n        if (bubbled) {\n            foundFirst = false;\n            significantDigits = significantDigitsCache;\n            momentTypes = map(momentTypes, formatValue);\n            momentTypes = compact(momentTypes);\n        }\n\n        if (outputTypes && !(isMaxValue && !settings.trim)) {\n            momentTypes = map(momentTypes, function (momentType) {\n                if (find(outputTypes, function (outputType) {\n                    return momentType.type === outputType;\n                })) {\n                    return momentType;\n                }\n\n                return null;\n            });\n\n            momentTypes = compact(momentTypes);\n        } else {\n            // Trim Large.\n            if (trimLarge) {\n                momentTypes = rest(momentTypes, function (momentType) {\n                    // Stop trimming on:\n                    // - the smallest moment type\n                    // - a type marked for stopTrim\n                    // - a type that has a whole value\n                    return !momentType.isSmallest && !momentType.wholeValue && !find(stopTrim, momentType.type);\n                });\n            }\n\n            // Largest.\n            if (largest && momentTypes.length) {\n                momentTypes = momentTypes.slice(0, largest);\n            }\n\n            // Trim Small.\n            if (trimSmall && momentTypes.length > 1) {\n                momentTypes = initial(momentTypes, function (momentType) {\n                    // Stop trimming on:\n                    // - a type marked for stopTrim\n                    // - a type that has a whole value\n                    // - the largest momentType\n                    return !momentType.wholeValue && !find(stopTrim, momentType.type) && !momentType.isLargest;\n                });\n            }\n\n            // Trim Mid.\n            if (trimMid) {\n                momentTypes = map(momentTypes, function (momentType, index) {\n                    if (index > 0 && index < momentTypes.length - 1 && !momentType.wholeValue) {\n                        return null;\n                    }\n\n                    return momentType;\n                });\n\n                momentTypes = compact(momentTypes);\n            }\n\n            // Trim Final.\n            if (trimFinal && momentTypes.length === 1 && !momentTypes[0].wholeValue && !(!trunc && momentTypes[0].isSmallest && momentTypes[0].rawValue < minValue)) {\n                momentTypes = [];\n            }\n        }\n\n        if (returnMomentTypes) {\n            return momentTypes;\n        }\n\n        // Localize and pluralize unit labels.\n        each(tokens, function (token) {\n            var key = momentTokens[token.type];\n\n            var momentType = find(momentTypes, function (momentType) {\n                return momentType.type === token.type;\n            });\n\n            if (!key || !momentType) {\n                return;\n            }\n\n            var values = momentType.formattedValueEn.split(\".\");\n\n            values[0] = parseInt(values[0], 10);\n\n            if (values[1]) {\n                values[1] = parseFloat(\"0.\" + values[1], 10);\n            } else {\n                values[1] = null;\n            }\n\n            var pluralKey = localeData.durationPluralKey(key, values[0], values[1]);\n\n            var labels = durationGetLabels(key, localeData);\n\n            var autoLocalized = false;\n\n            var pluralizedLabels = {};\n\n            // Auto-Localized unit labels.\n            each(localeData._durationLabelTypes, function (labelType) {\n                var label = find(labels, function (label) {\n                    return label.type === labelType.type && label.key === pluralKey;\n                });\n\n                if (label) {\n                    pluralizedLabels[label.type] = label.label;\n\n                    if (stringIncludes(token.text, labelType.string)) {\n                        token.text = token.text.replace(labelType.string, label.label);\n                        autoLocalized = true;\n                    }\n                }\n            });\n\n            // Auto-pluralized unit labels.\n            if (usePlural && !autoLocalized) {\n                labels.sort(durationLabelCompare);\n\n                each(labels, function (label) {\n                    if (pluralizedLabels[label.type] === label.label) {\n                        if (stringIncludes(token.text, label.label)) {\n                            // Stop checking this token if its label is already\n                            // correctly pluralized.\n                            return false;\n                        }\n\n                        // Skip this label if it is correct, but not present in\n                        // the token's text.\n                        return;\n                    }\n\n                    if (stringIncludes(token.text, label.label)) {\n                        // Replece this token's label and stop checking.\n                        token.text = token.text.replace(label.label, pluralizedLabels[label.type]);\n                        return false;\n                    }\n                });\n            }\n        });\n\n        // Build ouptut.\n        tokens = map(tokens, function (token) {\n            if (!token.type) {\n                return token.text;\n            }\n\n            var momentType = find(momentTypes, function (momentType) {\n                return momentType.type === token.type;\n            });\n\n            if (!momentType) {\n                return \"\";\n            }\n\n            var out = \"\";\n\n            if (useLeftUnits) {\n                out += token.text;\n            }\n\n            if (isNegative && isMaxValue || !isNegative && isMinValue) {\n                out += \"< \";\n                isMaxValue = false;\n                isMinValue = false;\n            }\n\n            if (isNegative && isMinValue || !isNegative && isMaxValue) {\n                out += \"> \";\n                isMaxValue = false;\n                isMinValue = false;\n            }\n\n            if (isNegative && (momentType.value > 0 || trim === \"\" || find(stopTrim, momentType.type) || find(outputTypes, momentType.type))) {\n                out += \"-\";\n                isNegative = false;\n            }\n\n            if (token.type === \"milliseconds\" && momentType.formattedValueMS) {\n                out += momentType.formattedValueMS;\n            } else {\n                out += momentType.formattedValue;\n            }\n\n            if (!useLeftUnits) {\n                out += token.text;\n            }\n\n            return out;\n        });\n\n        // Trim leading and trailing comma, space, colon, and dot.\n        return tokens.join(\"\").replace(/(,| |:|\\.)*$/, \"\").replace(/^(,| |:|\\.)*/, \"\");\n    }\n\n    // defaultFormatTemplate\n    function defaultFormatTemplate() {\n        var dur = this.duration;\n\n        var findType = function findType(type) {\n            return dur._data[type];\n        };\n\n        var firstType = find(this.types, findType);\n\n        var lastType = findLast(this.types, findType);\n\n        // Default template strings for each duration dimension type.\n        switch (firstType) {\n            case \"milliseconds\":\n                return \"S __\";\n            case \"seconds\": // Fallthrough.\n            case \"minutes\":\n                return \"*_MS_\";\n            case \"hours\":\n                return \"_HMS_\";\n            case \"days\": // Possible Fallthrough.\n                if (firstType === lastType) {\n                    return \"d __\";\n                }\n            case \"weeks\":\n                if (firstType === lastType) {\n                    return \"w __\";\n                }\n\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"w __, d __, h __\";\n            case \"months\": // Possible Fallthrough.\n                if (firstType === lastType) {\n                    return \"M __\";\n                }\n            case \"years\":\n                if (firstType === lastType) {\n                    return \"y __\";\n                }\n\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"y __, M __, d __\";\n            default:\n                if (this.trim === null) {\n                    this.trim = \"both\";\n                }\n\n                return \"y __, d __, h __, m __, s __\";\n        }\n    }\n\n    // init\n    function init(context) {\n        if (!context) {\n            throw \"Moment Duration Format init cannot find moment instance.\";\n        }\n\n        context.duration.format = durationsFormat;\n        context.duration.fn.format = durationFormat;\n\n        context.duration.fn.format.defaults = {\n            // Many options are defaulted to `null` to distinguish between\n            // 'not set' and 'set to `false`'\n\n            // trim\n            // Can be a string, a delimited list of strings, an array of strings,\n            // or a boolean.\n            // \"large\" - will trim largest-magnitude zero-value tokens until\n            // finding a token with a value, a token identified as 'stopTrim', or\n            // the final token of the format string.\n            // \"small\" - will trim smallest-magnitude zero-value tokens until\n            // finding a token with a value, a token identified as 'stopTrim', or\n            // the final token of the format string.\n            // \"both\" - will execute \"large\" trim then \"small\" trim.\n            // \"mid\" - will trim any zero-value tokens that are not the first or\n            // last tokens. Usually used in conjunction with \"large\" or \"both\".\n            // e.g. \"large mid\" or \"both mid\".\n            // \"final\" - will trim the final token if it is zero-value. Use this\n            // option with \"large\" or \"both\" to output an empty string when\n            // formatting a zero-value duration. e.g. \"large final\" or \"both final\".\n            // \"all\" - Will trim all zero-value tokens. Shorthand for \"both mid final\".\n            // \"left\" - maps to \"large\" to support plugin's version 1 API.\n            // \"right\" - maps to \"large\" to support plugin's version 1 API.\n            // `false` - template tokens are not trimmed.\n            // `true` - treated as \"large\".\n            // `null` - treated as \"large\".\n            trim: null,\n\n            // stopTrim\n            // A moment token string, a delimited set of moment token strings,\n            // or an array of moment token strings. Trimming will stop when a token\n            // listed in this option is reached. A \"*\" character in the format\n            // template string will also mark a moment token as stopTrim.\n            // e.g. \"d [days] *h:mm:ss\" will always stop trimming at the 'hours' token.\n            stopTrim: null,\n\n            // largest\n            // Set to a positive integer to output only the \"n\" largest-magnitude\n            // moment tokens that have a value. All lesser-magnitude moment tokens\n            // will be ignored. This option takes effect even if `trim` is set\n            // to `false`.\n            largest: null,\n\n            // maxValue\n            // Use `maxValue` to render generalized output for large duration values,\n            // e.g. `\"> 60 days\"`. `maxValue` must be a positive integer and is\n            /// applied to the greatest-magnitude moment token in the format template.\n            maxValue: null,\n\n            // minValue\n            // Use `minValue` to render generalized output for small duration values,\n            // e.g. `\"< 5 minutes\"`. `minValue` must be a positive integer and is\n            // applied to the least-magnitude moment token in the format template.\n            minValue: null,\n\n            // precision\n            // If a positive integer, number of decimal fraction digits to render.\n            // If a negative integer, number of integer place digits to truncate to 0.\n            // If `useSignificantDigits` is set to `true` and `precision` is a positive\n            // integer, sets the maximum number of significant digits used in the\n            // formatted output.\n            precision: 0,\n\n            // trunc\n            // Default behavior rounds final token value. Set to `true` to\n            // truncate final token value, which was the default behavior in\n            // version 1 of this plugin.\n            trunc: false,\n\n            // forceLength\n            // Force first moment token with a value to render at full length\n            // even when template is trimmed and first moment token has length of 1.\n            forceLength: null,\n\n            // userLocale\n            // Formatted numerical output is rendered using `toLocaleString`\n            // and the locale of the user's environment. Set this option to render\n            // numerical output using a different locale. Unit names are rendered\n            // and detected using the locale set in moment.js, which can be different\n            // from the locale of user's environment.\n            userLocale: null,\n\n            // usePlural\n            // Will automatically singularize or pluralize unit names when they\n            // appear in the text associated with each moment token. Standard and\n            // short unit labels are singularized and pluralized, based on locale.\n            // e.g. in english, \"1 second\" or \"1 sec\" would be rendered instead\n            // of \"1 seconds\" or \"1 secs\". The default pluralization function\n            // renders a plural label for a value with decimal precision.\n            // e.g. \"1.0 seconds\" is never rendered as \"1.0 second\".\n            // Label types and pluralization function are configurable in the\n            // localeData extensions.\n            usePlural: true,\n\n            // useLeftUnits\n            // The text to the right of each moment token in a format string\n            // is treated as that token's units for the purposes of trimming,\n            // singularizing, and auto-localizing.\n            // e.g. \"h [hours], m [minutes], s [seconds]\".\n            // To properly singularize or localize a format string such as\n            // \"[hours] h, [minutes] m, [seconds] s\", where the units appear\n            // to the left of each moment token, set useLeftUnits to `true`.\n            // This plugin is not tested in the context of rtl text.\n            useLeftUnits: false,\n\n            // useGrouping\n            // Enables locale-based digit grouping in the formatted output. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n            useGrouping: true,\n\n            // useSignificantDigits\n            // Treat the `precision` option as the maximum significant digits\n            // to be rendered. Precision must be a positive integer. Significant\n            // digits extend across unit types,\n            // e.g. \"6 hours 37.5 minutes\" represents 4 significant digits.\n            // Enabling this option causes token length to be ignored. See  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n            useSignificantDigits: false,\n\n            // template\n            // The template string used to format the duration. May be a function\n            // or a string. Template functions are executed with the `this` binding\n            // of the settings object so that template strings may be dynamically\n            // generated based on the duration object (accessible via `this.duration`)\n            // or any of the other settings. Leading and trailing space, comma,\n            // period, and colon characters are trimmed from the resulting string.\n            template: defaultFormatTemplate,\n\n            // useToLocaleString\n            // Set this option to `false` to ignore the `toLocaleString` feature\n            // test and force the use of the `formatNumber` fallback function\n            // included in this plugin.\n            useToLocaleString: true,\n\n            // formatNumber fallback options.\n            // When `toLocaleString` is detected and passes the feature test, the\n            // following options will have no effect: `toLocaleString` will be used\n            // for formatting and the grouping separator, decimal separator, and\n            // integer digit grouping will be determined by the user locale.\n\n            // groupingSeparator\n            // The integer digit grouping separator used when using the fallback\n            // formatNumber function.\n            groupingSeparator: \",\",\n\n            // decimalSeparator\n            // The decimal separator used when using the fallback formatNumber\n            // function.\n            decimalSeparator: \".\",\n\n            // grouping\n            // The integer digit grouping used when using the fallback formatNumber\n            // function. Must be an array. The default value of `[3]` gives the\n            // standard 3-digit thousand/million/billion digit groupings for the\n            // \"en\" locale. Setting this option to `[3, 2]` would generate the\n            // thousand/lakh/crore digit groupings used in the \"en-IN\" locale.\n            grouping: [3]\n        };\n\n        context.updateLocale('en', engLocale);\n    }\n\n    // Run feature tests for `Number#toLocaleString`.\n    toLocaleStringWorks = featureTestToLocaleString();\n    toLocaleStringRoundingWorks = toLocaleStringWorks && featureTestToLocaleStringRounding();\n\n    // Initialize duration format on the global moment instance.\n    init(moment);\n\n    // Return the init function so that duration format can be\n    // initialized on other moment instances.\n    return init;\n});\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\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            '_'\n        ),\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 (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\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            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\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\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(\n            '_'\n        ),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                '_'\n            ),\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) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                '_'\n            ),\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                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n            '_'\n        ),\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 (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\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 =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n            '_'\n        ),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\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\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': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 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': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 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': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 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': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 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': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 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': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 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\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n            '_'\n        ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n            '_'\n        ),\n        monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n            '_'\n        ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\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            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\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            '_'\n        ),\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 =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\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', //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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(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 (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n            '_'\n        ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(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 (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            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\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(\n            '_'\n        ),\n        weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        weekdays: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n            '_'\n        ),\n        weekdaysShort: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n            '_'\n        ),\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\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n            ' '\n        ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\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\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\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            '_'\n        ),\n        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n            '_'\n        ),\n        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n            '_'\n        ),\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\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex = /^(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 = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n            '_'\n        ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n            '_'\n        ),\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 (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(\n            '_'\n        ),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: '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\n    return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function 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\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                '_'\n            ),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(\n        ' '\n    );\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' 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 (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\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            '_'\n        ),\n        monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n            '_'\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                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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(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\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\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 (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\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 (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\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\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            '_'\n        ),\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            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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            '_'\n        ),\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\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\n            ? forms(key)[0]\n            : isFuture\n            ? forms(key)[1]\n            : 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 (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\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                '_'\n            ),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                '_'\n            ),\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                '_'\n            ),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                '_'\n            ),\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\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            '_'\n        ),\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            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n            '_'\n        ),\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 (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\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\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function 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\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n            '_'\n        ),\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\n    return mn;\n\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\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\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n            '_'\n        ),\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 (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n            '_'\n        ),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(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\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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                '_'\n            ),\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                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\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 =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n            '_'\n        ),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n            '_'\n        ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\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            '_'\n        ),\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\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\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            '_'\n        ),\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\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\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\n    return ptBr;\n\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function 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\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n            '_'\n        ),\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                '_'\n            ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n        },\n        weekdays: {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                '_'\n            ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\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, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n            '_'\n        ),\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': // 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': // 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': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 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': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 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': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 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': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 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': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 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\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : '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\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n            '_'\n        ),\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\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : 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 (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\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            '_'\n        ),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n            '_'\n        ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\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 = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\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, // 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\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\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 =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                        ? ':a'\n                        : b === 2\n                        ? ':a'\n                        : b === 3\n                        ? ':e'\n                        : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_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, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                    '_'\n                ),\n                accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                    '_'\n                ),\n                genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                    '_'\n                ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n            ? 'genitive'\n            : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                '_'\n            ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","//! 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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var 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            '_'\n        ),\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            '_'\n        ),\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            '_'\n        ),\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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日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, // 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\n})));\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;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/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\n    return zhTw;\n\n})));\n","\"use strict\";function e(e,r){if(!f)return!1;const n=e.buffer;let u=l.get(n);if(null==u){if((u=t.validate(n))&&r)try{new t.Instance(new t.Module(n)).exports[0]()}catch(e){u=!1}l.set(n,u)}return u}const t=WebAssembly,r=(...e)=>Uint8Array.of(0,97,115,109,1,0,0,0,...e),n=(...e)=>Uint32Array.of(1836278016,1,...e),u=(...e)=>r(1,4,1,96,0,0,3,2,1,0,...e,11,0,10,4,110,97,109,101,2,3,1,0,0),i=(...e)=>Uint16Array.of(24832,28019,1,0,1025,24577,0,515,1,...e),o=(...e)=>n(1610679297,33751040,...e,40239360,259),a=(...e)=>i(...e,2842,4096,28164,28001,357,260,256,560,259,0),s=(...e)=>i(...e,2560,28164,28001,613,259,0),f=\"object\"==typeof t,g=e=>f&&\"function\"==typeof e,l=new WeakMap,c=n(1610679553,58589440,117440770,805372165,101318656,1107297281,268438272,1835101700,17039717,36700416,259),p=s(773,1,2561,269,11,65,65,65,3068,2816),y=s(781,1,2560,265,7,16390,2311,2827),b=r(2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1,0,8,4,110,97,109,101,2,1,0),m=Uint16Array.of(24832,28019,1,0,1537,24577,512,32639,515,1,2058,1537,16640,16640,2816,2560,28164,28001,613,259,0),A=a(3082,2561,17152,0,0,252),d=a(2058,1537,16640,49152),U=o(101318657,301990913,268438272,1835101700,17039717),x=u(5,4,1,3,1,1,10,7,1,5,0,254,3,0),w=o(84344833,6357249,17369600,4259847,186257917,1845758464),M=u(10,7,1,5,0,208,112,26);module.exports={support:(t=1)=>e(Uint32Array.of(1836278016,t)),get supportStreaming(){return g(t.instantiateStreaming)},feature:{get bigInt(){return e(c,!0)},get bulk(){return e(p)},get exceptions(){return e(y)},get mutableGlobal(){return e(b)},get multiValue(){return e(m)},get saturateConversions(){return e(A)},get signExtensions(){return e(d)},get tailCall(){return e(U)},get threads(){return e(x)},get simd(){return e(w)},get references(){return e(M)},get typeReflection(){return g(t.Memory.type)},get funcReferences(){return g(t.Function)}}};","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","'use strict';\n\n/**\n * Copyright (c) 2013-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 * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;","function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nmodule.exports = _inheritsLoose;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nfunction _superPropBase(object, property) {\n  while (!Object.prototype.hasOwnProperty.call(object, property)) {\n    object = getPrototypeOf(object);\n    if (object === null) break;\n  }\n\n  return object;\n}\n\nmodule.exports = _superPropBase;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sizes = {\n    small: '16px',\n    medium: '24px',\n    large: '32px',\n    xlarge: '48px',\n};\nexports.sizeMap = {\n    small: 'small',\n    medium: 'medium',\n    large: 'large',\n    xlarge: 'xlarge',\n};\n//# sourceMappingURL=constants.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(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))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = void 0;\nvar bind_1 = require(\"./bind\");\nfunction toOptions(value) {\n    if (typeof value === 'undefined') {\n        return undefined;\n    }\n    if (typeof value === 'boolean') {\n        return {\n            capture: value,\n        };\n    }\n    return value;\n}\nfunction getBinding(original, sharedOptions) {\n    if (sharedOptions == null) {\n        return original;\n    }\n    var binding = __assign(__assign({}, original), { options: __assign(__assign({}, toOptions(sharedOptions)), toOptions(original.options)) });\n    return binding;\n}\nfunction bindAll(target, bindings, sharedOptions) {\n    var unbinds = bindings.map(function (original) {\n        var binding = getBinding(original, sharedOptions);\n        return bind_1.bind(target, binding);\n    });\n    return function unbindAll() {\n        unbinds.forEach(function (unbind) { return unbind(); });\n    };\n}\nexports.bindAll = bindAll;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nvar _defaultComponentDecorator = require('../decorators/defaultComponentDecorator');\n\nvar _defaultComponentDecorator2 = _interopRequireDefault(_defaultComponentDecorator);\n\nvar _defaultHrefDecorator = require('../decorators/defaultHrefDecorator');\n\nvar _defaultHrefDecorator2 = _interopRequireDefault(_defaultHrefDecorator);\n\nvar _defaultMatchDecorator = require('../decorators/defaultMatchDecorator');\n\nvar _defaultMatchDecorator2 = _interopRequireDefault(_defaultMatchDecorator);\n\nvar _defaultTextDecorator = require('../decorators/defaultTextDecorator');\n\nvar _defaultTextDecorator2 = _interopRequireDefault(_defaultTextDecorator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Linkify = function (_React$Component) {\n  _inherits(Linkify, _React$Component);\n\n  function Linkify() {\n    _classCallCheck(this, Linkify);\n\n    return _possibleConstructorReturn(this, (Linkify.__proto__ || Object.getPrototypeOf(Linkify)).apply(this, arguments));\n  }\n\n  _createClass(Linkify, [{\n    key: 'parseString',\n    value: function parseString(string) {\n      var _this2 = this;\n\n      if (string === '') {\n        return string;\n      }\n\n      var matches = this.props.matchDecorator(string);\n      if (!matches) {\n        return string;\n      }\n\n      var elements = [];\n      var lastIndex = 0;\n      matches.forEach(function (match, i) {\n        // Push preceding text if there is any\n        if (match.index > lastIndex) {\n          elements.push(string.substring(lastIndex, match.index));\n        }\n\n        var decoratedHref = _this2.props.hrefDecorator(match.url);\n        var decoratedText = _this2.props.textDecorator(match.text);\n        var decoratedComponent = _this2.props.componentDecorator(decoratedHref, decoratedText, i);\n        elements.push(decoratedComponent);\n\n        lastIndex = match.lastIndex;\n      });\n\n      // Push remaining text if there is any\n      if (string.length > lastIndex) {\n        elements.push(string.substring(lastIndex));\n      }\n\n      return elements.length === 1 ? elements[0] : elements;\n    }\n  }, {\n    key: 'parse',\n    value: function parse(children) {\n      var _this3 = this;\n\n      var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof children === 'string') {\n        return this.parseString(children);\n      } else if (React.isValidElement(children) && children.type !== 'a' && children.type !== 'button') {\n        return React.cloneElement(children, { key: key }, this.parse(children.props.children));\n      } else if (Array.isArray(children)) {\n        return children.map(function (child, i) {\n          return _this3.parse(child, i);\n        });\n      }\n\n      return children;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return React.createElement(\n        React.Fragment,\n        null,\n        this.parse(this.props.children)\n      );\n    }\n  }]);\n\n  return Linkify;\n}(React.Component);\n\nLinkify.defaultProps = {\n  componentDecorator: _defaultComponentDecorator2.default,\n  hrefDecorator: _defaultHrefDecorator2.default,\n  matchDecorator: _defaultMatchDecorator2.default,\n  textDecorator: _defaultTextDecorator2.default\n};\nexports.default = Linkify;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nexports.default = function (decoratedHref, decoratedText, key) {\n  return React.createElement(\n    'a',\n    { href: decoratedHref, key: key },\n    decoratedText\n  );\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (href) {\n  return href;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _linkifyIt = require('linkify-it');\n\nvar _linkifyIt2 = _interopRequireDefault(_linkifyIt);\n\nvar _tlds = require('tlds');\n\nvar _tlds2 = _interopRequireDefault(_tlds);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar linkify = new _linkifyIt2.default();\nlinkify.tlds(_tlds2.default);\n\nexports.default = function (text) {\n  return linkify.match(text);\n};","'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  );\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n","'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,4}[a-zA-Z0-9%/]|' + // github has ... in commit range links,\n                                     // google has .... in links (issue #66)\n                                     // Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n          (opts && opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            :\n            '\\\\-+|'\n          ) +\n          '\\\\,(?!' + re.src_ZCc + ').|' +      // allow `,,,` in paths\n          '\\\\!(?!' + re.src_ZCc + '|[!]).|' +\n          '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (text) {\n  return text;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _exenv = require('exenv');\n\nvar _TouchScrollable = require('./TouchScrollable');\n\nvar _withLockSheet = require('./withLockSheet');\n\nvar _withLockSheet2 = _interopRequireDefault(_withLockSheet);\n\nvar _withTouchListeners = require('./withTouchListeners');\n\nvar _withTouchListeners2 = _interopRequireDefault(_withTouchListeners);\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ScrollLock = function (_PureComponent) {\n  _inherits(ScrollLock, _PureComponent);\n\n  function ScrollLock() {\n    _classCallCheck(this, ScrollLock);\n\n    return _possibleConstructorReturn(this, (ScrollLock.__proto__ || Object.getPrototypeOf(ScrollLock)).apply(this, arguments));\n  }\n\n  _createClass(ScrollLock, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      if (!_exenv.canUseDOM) return;\n      this.initialHeight = window.innerHeight;\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      var offset = window.innerHeight - this.initialHeight;\n\n      // adjust scroll if the window has been resized since the lock was engaged\n      // e.g. mobile safari dynamic chrome heights\n      if (offset) {\n        window.scrollTo(0, window.pageYOffset + offset);\n      }\n\n      // reset the initial height in case this scroll lock is used again\n      this.initialHeight = window.innerHeight;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var children = this.props.children;\n\n\n      return children ? _react2.default.createElement(\n        _TouchScrollable.TouchScrollable,\n        null,\n        children\n      ) : null;\n    }\n  }]);\n\n  return ScrollLock;\n}(_react.PureComponent);\n\n// attach the stylesheet and inject styles on [un]mount\n\n\nvar compose = (0, _utils.pipe)(_withTouchListeners2.default, _withLockSheet2.default);\nvar SheetLock = compose(ScrollLock);\n\n// toggle the lock based on `isActive` prop\nvar LockToggle = function LockToggle(props) {\n  return props.isActive ? _react2.default.createElement(SheetLock, props) : props.children;\n};\n\nLockToggle.defaultProps = {\n  accountForScrollbars: true,\n  children: null,\n  isActive: true\n};\n\nexports.default = LockToggle;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = withLockSheet;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction withLockSheet(WrappedComponent) {\n  return function (_PureComponent) {\n    _inherits(SheetProvider, _PureComponent);\n\n    function SheetProvider() {\n      var _ref;\n\n      var _temp, _this, _ret;\n\n      _classCallCheck(this, SheetProvider);\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SheetProvider.__proto__ || Object.getPrototypeOf(SheetProvider)).call.apply(_ref, [this].concat(args))), _this), _this.addSheet = function () {\n        var styles = _this.getStyles();\n\n        var sheet = (0, _utils.makeStyleTag)();\n        if (!sheet) return;\n\n        (0, _utils.injectStyles)(sheet, styles);\n        (0, _utils.insertStyleTag)(sheet);\n\n        _this.sheet = sheet;\n      }, _this.getStyles = function () {\n        var accountForScrollbars = _this.props.accountForScrollbars;\n\n\n        var height = (0, _utils.getDocumentHeight)();\n        var paddingRight = accountForScrollbars ? (0, _utils.getPadding)() : null;\n        var styles = 'body {\\n        box-sizing: border-box !important;\\n        overflow: hidden !important;\\n        position: relative !important;\\n        ' + (height ? 'height: ' + height + 'px !important;' : '') + '\\n        ' + (paddingRight ? 'padding-right: ' + paddingRight + 'px !important;' : '') + '\\n      }';\n\n        return styles;\n      }, _temp), _possibleConstructorReturn(_this, _ret);\n    }\n\n    _createClass(SheetProvider, [{\n      key: 'componentDidMount',\n      value: function componentDidMount() {\n        this.addSheet();\n      }\n    }, {\n      key: 'removeSheet',\n      value: function removeSheet() {\n        if (!this.sheet) return;\n\n        // $FlowFixMe\n        this.sheet.parentNode.removeChild(this.sheet);\n        this.sheet = null;\n      }\n    }, {\n      key: 'componentWillUnmount',\n      value: function componentWillUnmount() {\n        this.removeSheet();\n      }\n    }, {\n      key: 'render',\n      value: function render() {\n        return _react2.default.createElement(WrappedComponent, this.props);\n      }\n    }]);\n\n    return SheetProvider;\n  }(_react.PureComponent);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = withTouchListeners;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _exenv = require('exenv');\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Mobile Safari ignores { overflow: hidden } declaration on the body,\n// so we have to prevent touchmove events via JS\nfunction withTouchListeners(WrappedComponent) {\n    return function (_PureComponent) {\n        _inherits(TouchProvider, _PureComponent);\n\n        function TouchProvider() {\n            _classCallCheck(this, TouchProvider);\n\n            return _possibleConstructorReturn(this, (TouchProvider.__proto__ || Object.getPrototypeOf(TouchProvider)).apply(this, arguments));\n        }\n\n        _createClass(TouchProvider, [{\n            key: 'componentDidMount',\n            value: function componentDidMount() {\n                if (!_exenv.canUseDOM || !(0, _utils.isTouchDevice)()) return;\n\n                document.addEventListener('touchmove', _utils.preventTouchMove, _utils.listenerOptions);\n            }\n        }, {\n            key: 'componentWillUnmount',\n            value: function componentWillUnmount() {\n                if (!_exenv.canUseDOM || !(0, _utils.isTouchDevice)()) return;\n\n                document.removeEventListener('touchmove', _utils.preventTouchMove, _utils.listenerOptions);\n            }\n        }, {\n            key: 'render',\n            value: function render() {\n                return _react2.default.createElement(WrappedComponent, this.props);\n            }\n        }]);\n\n        return TouchProvider;\n    }(_react.PureComponent);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _reactDom = require('react-dom');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NodeResolver = function (_Component) {\n  _inherits(NodeResolver, _Component);\n\n  function NodeResolver() {\n    _classCallCheck(this, NodeResolver);\n\n    return _possibleConstructorReturn(this, (NodeResolver.__proto__ || Object.getPrototypeOf(NodeResolver)).apply(this, arguments));\n  }\n\n  _createClass(NodeResolver, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.props.innerRef((0, _reactDom.findDOMNode)(this));\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.props.innerRef(null);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n\n  return NodeResolver;\n}(_react.Component);\n\nexports.default = NodeResolver;","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n  return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n    var code = p.charCodeAt(0).toString(16).toUpperCase();\n    if (code.length < 2) {\n      code = '0' + code;\n    }\n    return '%' + code;\n  }));\n}\n\nmodule.exports = function(str) {\n  var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  switch (output.length % 4) {\n    case 0:\n      break;\n    case 2:\n      output += \"==\";\n      break;\n    case 3:\n      output += \"=\";\n      break;\n    default:\n      throw \"Illegal base64url string!\";\n  }\n\n  try{\n    return b64DecodeUnicode(output);\n  } catch (err) {\n    return atob(output);\n  }\n};\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n  this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n  var str = String(input).replace(/=+$/, '');\n  if (str.length % 4 == 1) {\n    throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n  }\n  for (\n    // initialize result and counters\n    var bc = 0, bs, buffer, idx = 0, output = '';\n    // get next character\n    buffer = str.charAt(idx++);\n    // character found in table? initialize bit storage and add its ascii value;\n    ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n      // and if not first of each 4 characters,\n      // convert the first 8 bits to one ascii character\n      bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n  ) {\n    // try to find character in table (0-63, not found => -1)\n    buffer = chars.indexOf(buffer);\n  }\n  return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n  return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nfunction setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n\n  if (_state) {\n    var callback = arguments[_state - 1];\n    asap(function () {\n      return invokeCallback(_state, child, callback, parent._result);\n    });\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nfunction resolve$1(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  resolve(promise, object);\n  return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then$$1.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then$$1, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n  if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then$$1 === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then$$1)) {\n      handleForeignThenable(promise, maybeThenable, then$$1);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    var then$$1 = void 0;\n    try {\n      then$$1 = value.then;\n    } catch (error) {\n      reject(promise, error);\n      return;\n    }\n    handleMaybeThenable(promise, value, then$$1);\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = void 0,\n      error = void 0,\n      succeeded = true;\n\n  if (hasCallback) {\n    try {\n      value = callback(detail);\n    } catch (e) {\n      succeeded = false;\n      error = e;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n    resolve(promise, value);\n  } else if (succeeded === false) {\n    reject(promise, error);\n  } else if (settled === FULFILLED) {\n    fulfill(promise, value);\n  } else if (settled === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop);\n\n    if (!this.promise[PROMISE_ID]) {\n      makePromise(this.promise);\n    }\n\n    if (isArray(input)) {\n      this.length = input.length;\n      this._remaining = input.length;\n\n      this._result = new Array(this.length);\n\n      if (this.length === 0) {\n        fulfill(this.promise, this._result);\n      } else {\n        this.length = this.length || 0;\n        this._enumerate(input);\n        if (this._remaining === 0) {\n          fulfill(this.promise, this._result);\n        }\n      }\n    } else {\n      reject(this.promise, validationError());\n    }\n  }\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    for (var i = 0; this._state === PENDING && i < input.length; i++) {\n      this._eachEntry(input[i], i);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n    var c = this._instanceConstructor;\n    var resolve$$1 = c.resolve;\n\n\n    if (resolve$$1 === resolve$1) {\n      var _then = void 0;\n      var error = void 0;\n      var didError = false;\n      try {\n        _then = entry.then;\n      } catch (e) {\n        didError = true;\n        error = e;\n      }\n\n      if (_then === then && entry._state !== PENDING) {\n        this._settledAt(entry._state, i, entry._result);\n      } else if (typeof _then !== 'function') {\n        this._remaining--;\n        this._result[i] = entry;\n      } else if (c === Promise$1) {\n        var promise = new c(noop);\n        if (didError) {\n          reject(promise, error);\n        } else {\n          handleMaybeThenable(promise, entry, _then);\n        }\n        this._willSettleAt(promise, i);\n      } else {\n        this._willSettleAt(new c(function (resolve$$1) {\n          return resolve$$1(entry);\n        }), i);\n      }\n    } else {\n      this._willSettleAt(resolve$$1(entry), i);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n    var promise = this.promise;\n\n\n    if (promise._state === PENDING) {\n      this._remaining--;\n\n      if (state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._result[i] = value;\n      }\n    }\n\n    if (this._remaining === 0) {\n      fulfill(promise, this._result);\n    }\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n    var enumerator = this;\n\n    subscribe(promise, undefined, function (value) {\n      return enumerator._settledAt(FULFILLED, i, value);\n    }, function (reason) {\n      return enumerator._settledAt(REJECTED, i, reason);\n    });\n  };\n\n  return Enumerator;\n}();\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nfunction all(entries) {\n  return new Enumerator(this, entries).promise;\n}\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nfunction race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  reject(promise, reason);\n  return promise;\n}\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {Function} resolver\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise$1 = function () {\n  function Promise(resolver) {\n    this[PROMISE_ID] = nextId();\n    this._result = this._state = undefined;\n    this._subscribers = [];\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  /**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n   ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n   Chaining\n  --------\n   The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n   ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n   findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we're unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n   ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n   Assimilation\n  ------------\n   Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n   If the assimliated promise rejects, then the downstream promise will also reject.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n   Simple Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let result;\n   try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n   Advanced Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let author, books;\n   try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n   function foundBooks(books) {\n   }\n   function failure(reason) {\n   }\n   findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n   @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  Useful for tooling.\n  @return {Promise}\n  */\n\n  /**\n  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n  as the catch block of a try/catch statement.\n  ```js\n  function findAuthor(){\n  throw new Error('couldn't find that author');\n  }\n  // synchronous\n  try {\n  findAuthor();\n  } catch(reason) {\n  // something went wrong\n  }\n  // async with promises\n  findAuthor().catch(function(reason){\n  // something went wrong\n  });\n  ```\n  @method catch\n  @param {Function} onRejection\n  Useful for tooling.\n  @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection) {\n    return this.then(null, onRejection);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuther();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuther();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    if (isFunction(callback)) {\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      });\n    }\n\n    return promise.then(callback, callback);\n  };\n\n  return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n  var local = void 0;\n\n  if (typeof global !== 'undefined') {\n    local = global;\n  } else if (typeof self !== 'undefined') {\n    local = self;\n  } else {\n    try {\n      local = Function('return this')();\n    } catch (e) {\n      throw new Error('polyfill failed because global object is unavailable in this environment');\n    }\n  }\n\n  var P = local.Promise;\n\n  if (P) {\n    var promiseToString = null;\n    try {\n      promiseToString = Object.prototype.toString.call(P.resolve());\n    } catch (e) {\n      // silently ignored\n    }\n\n    if (promiseToString === '[object Promise]' && !P.cast) {\n      return;\n    }\n  }\n\n  local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n","var global =\n  (typeof globalThis !== 'undefined' && globalThis) ||\n  (typeof self !== 'undefined' && self) ||\n  (typeof global !== 'undefined' && global)\n\nvar support = {\n  searchParams: 'URLSearchParams' in global,\n  iterable: 'Symbol' in global && 'iterator' in Symbol,\n  blob:\n    'FileReader' in global &&\n    'Blob' in global &&\n    (function() {\n      try {\n        new Blob()\n        return true\n      } catch (e) {\n        return false\n      }\n    })(),\n  formData: 'FormData' in global,\n  arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n  return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n  var viewClasses = [\n    '[object Int8Array]',\n    '[object Uint8Array]',\n    '[object Uint8ClampedArray]',\n    '[object Int16Array]',\n    '[object Uint16Array]',\n    '[object Int32Array]',\n    '[object Uint32Array]',\n    '[object Float32Array]',\n    '[object Float64Array]'\n  ]\n\n  var isArrayBufferView =\n    ArrayBuffer.isView ||\n    function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n}\n\nfunction normalizeName(name) {\n  if (typeof name !== 'string') {\n    name = String(name)\n  }\n  if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n    throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n  }\n  return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n  if (typeof value !== 'string') {\n    value = String(value)\n  }\n  return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n  var iterator = {\n    next: function() {\n      var value = items.shift()\n      return {done: value === undefined, value: value}\n    }\n  }\n\n  if (support.iterable) {\n    iterator[Symbol.iterator] = function() {\n      return iterator\n    }\n  }\n\n  return iterator\n}\n\nexport function Headers(headers) {\n  this.map = {}\n\n  if (headers instanceof Headers) {\n    headers.forEach(function(value, name) {\n      this.append(name, value)\n    }, this)\n  } else if (Array.isArray(headers)) {\n    headers.forEach(function(header) {\n      this.append(header[0], header[1])\n    }, this)\n  } else if (headers) {\n    Object.getOwnPropertyNames(headers).forEach(function(name) {\n      this.append(name, headers[name])\n    }, this)\n  }\n}\n\nHeaders.prototype.append = function(name, value) {\n  name = normalizeName(name)\n  value = normalizeValue(value)\n  var oldValue = this.map[name]\n  this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n  delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n  name = normalizeName(name)\n  return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n  return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n  this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n  for (var name in this.map) {\n    if (this.map.hasOwnProperty(name)) {\n      callback.call(thisArg, this.map[name], name, this)\n    }\n  }\n}\n\nHeaders.prototype.keys = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push(name)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n  var items = []\n  this.forEach(function(value) {\n    items.push(value)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push([name, value])\n  })\n  return iteratorFor(items)\n}\n\nif (support.iterable) {\n  Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n  if (body.bodyUsed) {\n    return Promise.reject(new TypeError('Already read'))\n  }\n  body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n  return new Promise(function(resolve, reject) {\n    reader.onload = function() {\n      resolve(reader.result)\n    }\n    reader.onerror = function() {\n      reject(reader.error)\n    }\n  })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsArrayBuffer(blob)\n  return promise\n}\n\nfunction readBlobAsText(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsText(blob)\n  return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n  var view = new Uint8Array(buf)\n  var chars = new Array(view.length)\n\n  for (var i = 0; i < view.length; i++) {\n    chars[i] = String.fromCharCode(view[i])\n  }\n  return chars.join('')\n}\n\nfunction bufferClone(buf) {\n  if (buf.slice) {\n    return buf.slice(0)\n  } else {\n    var view = new Uint8Array(buf.byteLength)\n    view.set(new Uint8Array(buf))\n    return view.buffer\n  }\n}\n\nfunction Body() {\n  this.bodyUsed = false\n\n  this._initBody = function(body) {\n    /*\n      fetch-mock wraps the Response object in an ES6 Proxy to\n      provide useful test harness features such as flush. However, on\n      ES5 browsers without fetch or Proxy support pollyfills must be used;\n      the proxy-pollyfill is unable to proxy an attribute unless it exists\n      on the object before the Proxy is created. This change ensures\n      Response.bodyUsed exists on the instance, while maintaining the\n      semantic of setting Request.bodyUsed in the constructor before\n      _initBody is called.\n    */\n    this.bodyUsed = this.bodyUsed\n    this._bodyInit = body\n    if (!body) {\n      this._bodyText = ''\n    } else if (typeof body === 'string') {\n      this._bodyText = body\n    } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n      this._bodyBlob = body\n    } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n      this._bodyFormData = body\n    } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n      this._bodyText = body.toString()\n    } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n      this._bodyArrayBuffer = bufferClone(body.buffer)\n      // IE 10-11 can't handle a DataView body.\n      this._bodyInit = new Blob([this._bodyArrayBuffer])\n    } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n      this._bodyArrayBuffer = bufferClone(body)\n    } else {\n      this._bodyText = body = Object.prototype.toString.call(body)\n    }\n\n    if (!this.headers.get('content-type')) {\n      if (typeof body === 'string') {\n        this.headers.set('content-type', 'text/plain;charset=UTF-8')\n      } else if (this._bodyBlob && this._bodyBlob.type) {\n        this.headers.set('content-type', this._bodyBlob.type)\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n      }\n    }\n  }\n\n  if (support.blob) {\n    this.blob = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return Promise.resolve(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as blob')\n      } else {\n        return Promise.resolve(new Blob([this._bodyText]))\n      }\n    }\n\n    this.arrayBuffer = function() {\n      if (this._bodyArrayBuffer) {\n        var isConsumed = consumed(this)\n        if (isConsumed) {\n          return isConsumed\n        }\n        if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n          return Promise.resolve(\n            this._bodyArrayBuffer.buffer.slice(\n              this._bodyArrayBuffer.byteOffset,\n              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n            )\n          )\n        } else {\n          return Promise.resolve(this._bodyArrayBuffer)\n        }\n      } else {\n        return this.blob().then(readBlobAsArrayBuffer)\n      }\n    }\n  }\n\n  this.text = function() {\n    var rejected = consumed(this)\n    if (rejected) {\n      return rejected\n    }\n\n    if (this._bodyBlob) {\n      return readBlobAsText(this._bodyBlob)\n    } else if (this._bodyArrayBuffer) {\n      return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n    } else if (this._bodyFormData) {\n      throw new Error('could not read FormData body as text')\n    } else {\n      return Promise.resolve(this._bodyText)\n    }\n  }\n\n  if (support.formData) {\n    this.formData = function() {\n      return this.text().then(decode)\n    }\n  }\n\n  this.json = function() {\n    return this.text().then(JSON.parse)\n  }\n\n  return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n  var upcased = method.toUpperCase()\n  return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n  if (!(this instanceof Request)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n\n  options = options || {}\n  var body = options.body\n\n  if (input instanceof Request) {\n    if (input.bodyUsed) {\n      throw new TypeError('Already read')\n    }\n    this.url = input.url\n    this.credentials = input.credentials\n    if (!options.headers) {\n      this.headers = new Headers(input.headers)\n    }\n    this.method = input.method\n    this.mode = input.mode\n    this.signal = input.signal\n    if (!body && input._bodyInit != null) {\n      body = input._bodyInit\n      input.bodyUsed = true\n    }\n  } else {\n    this.url = String(input)\n  }\n\n  this.credentials = options.credentials || this.credentials || 'same-origin'\n  if (options.headers || !this.headers) {\n    this.headers = new Headers(options.headers)\n  }\n  this.method = normalizeMethod(options.method || this.method || 'GET')\n  this.mode = options.mode || this.mode || null\n  this.signal = options.signal || this.signal\n  this.referrer = null\n\n  if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n    throw new TypeError('Body not allowed for GET or HEAD requests')\n  }\n  this._initBody(body)\n\n  if (this.method === 'GET' || this.method === 'HEAD') {\n    if (options.cache === 'no-store' || options.cache === 'no-cache') {\n      // Search for a '_' parameter in the query string\n      var reParamSearch = /([?&])_=[^&]*/\n      if (reParamSearch.test(this.url)) {\n        // If it already exists then set the value with the current time\n        this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n      } else {\n        // Otherwise add a new '_' parameter to the end with the current time\n        var reQueryString = /\\?/\n        this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n      }\n    }\n  }\n}\n\nRequest.prototype.clone = function() {\n  return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n  var form = new FormData()\n  body\n    .trim()\n    .split('&')\n    .forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n  return form\n}\n\nfunction parseHeaders(rawHeaders) {\n  var headers = new Headers()\n  // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n  // https://tools.ietf.org/html/rfc7230#section-3.2\n  var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n  // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n  // https://github.com/github/fetch/issues/748\n  // https://github.com/zloirock/core-js/issues/751\n  preProcessedHeaders\n    .split('\\r')\n    .map(function(header) {\n      return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n    })\n    .forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n  return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n  if (!(this instanceof Response)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n  if (!options) {\n    options = {}\n  }\n\n  this.type = 'default'\n  this.status = options.status === undefined ? 200 : options.status\n  this.ok = this.status >= 200 && this.status < 300\n  this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n  this.headers = new Headers(options.headers)\n  this.url = options.url || ''\n  this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n  return new Response(this._bodyInit, {\n    status: this.status,\n    statusText: this.statusText,\n    headers: new Headers(this.headers),\n    url: this.url\n  })\n}\n\nResponse.error = function() {\n  var response = new Response(null, {status: 0, statusText: ''})\n  response.type = 'error'\n  return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n  if (redirectStatuses.indexOf(status) === -1) {\n    throw new RangeError('Invalid status code')\n  }\n\n  return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n  new DOMException()\n} catch (err) {\n  DOMException = function(message, name) {\n    this.message = message\n    this.name = name\n    var error = Error(message)\n    this.stack = error.stack\n  }\n  DOMException.prototype = Object.create(Error.prototype)\n  DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n  return new Promise(function(resolve, reject) {\n    var request = new Request(input, init)\n\n    if (request.signal && request.signal.aborted) {\n      return reject(new DOMException('Aborted', 'AbortError'))\n    }\n\n    var xhr = new XMLHttpRequest()\n\n    function abortXhr() {\n      xhr.abort()\n    }\n\n    xhr.onload = function() {\n      var options = {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n      }\n      options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n      var body = 'response' in xhr ? xhr.response : xhr.responseText\n      setTimeout(function() {\n        resolve(new Response(body, options))\n      }, 0)\n    }\n\n    xhr.onerror = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.ontimeout = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.onabort = function() {\n      setTimeout(function() {\n        reject(new DOMException('Aborted', 'AbortError'))\n      }, 0)\n    }\n\n    function fixUrl(url) {\n      try {\n        return url === '' && global.location.href ? global.location.href : url\n      } catch (e) {\n        return url\n      }\n    }\n\n    xhr.open(request.method, fixUrl(request.url), true)\n\n    if (request.credentials === 'include') {\n      xhr.withCredentials = true\n    } else if (request.credentials === 'omit') {\n      xhr.withCredentials = false\n    }\n\n    if ('responseType' in xhr) {\n      if (support.blob) {\n        xhr.responseType = 'blob'\n      } else if (\n        support.arrayBuffer &&\n        request.headers.get('Content-Type') &&\n        request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n      ) {\n        xhr.responseType = 'arraybuffer'\n      }\n    }\n\n    if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n      Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n        xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n      })\n    } else {\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n    }\n\n    if (request.signal) {\n      request.signal.addEventListener('abort', abortXhr)\n\n      xhr.onreadystatechange = function() {\n        // DONE (success or failure)\n        if (xhr.readyState === 4) {\n          request.signal.removeEventListener('abort', abortXhr)\n        }\n      }\n    }\n\n    xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n  })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n  global.fetch = fetch\n  global.Headers = Headers\n  global.Request = Request\n  global.Response = Response\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar RequestMethod;\r\n(function (RequestMethod) {\r\n    RequestMethod[\"GET\"] = \"GET\";\r\n    RequestMethod[\"PATCH\"] = \"PATCH\";\r\n    RequestMethod[\"POST\"] = \"POST\";\r\n    RequestMethod[\"PUT\"] = \"PUT\";\r\n    RequestMethod[\"DELETE\"] = \"DELETE\";\r\n})(RequestMethod = exports.RequestMethod || (exports.RequestMethod = {}));\r\n//# sourceMappingURL=RequestMethod.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar GraphHelper = (function () {\r\n    function GraphHelper() {\r\n    }\r\n    GraphHelper.serializeContent = function (content) {\r\n        var className = content.constructor.name;\r\n        if (className === 'Buffer'\r\n            || className === 'Blob'\r\n            || className === 'File'\r\n            || className === 'FormData'\r\n            || typeof content === 'string') {\r\n            return content;\r\n        }\r\n        if (className === 'ArrayBuffer') {\r\n            content = Buffer.from(content);\r\n        }\r\n        else if (className === 'Int8Array'\r\n            || className === 'Int16Array'\r\n            || className === 'Int32Array'\r\n            || className === 'Uint8Array'\r\n            || className === 'Uint16Array'\r\n            || className === 'Uint32Array'\r\n            || className === 'Uint8ClampedArray'\r\n            || className === 'Float32Array'\r\n            || className === 'Float64Array'\r\n            || className === 'DataView') {\r\n            content = Buffer.from(content.buffer);\r\n        }\r\n        else {\r\n            try {\r\n                content = JSON.stringify(content);\r\n            }\r\n            catch (error) {\r\n                console.log(error);\r\n                throw new Error('Invalid JSON content');\r\n            }\r\n        }\r\n        return content;\r\n    };\r\n    return GraphHelper;\r\n}());\r\nexports.GraphHelper = GraphHelper;\r\n//# sourceMappingURL=GraphHelper.js.map","\"use strict\";\nexports.__esModule = true;\nvar WindowsZoneName;\n(function (WindowsZoneName) {\n    WindowsZoneName[\"DatelineStandardTime\"] = \"Dateline Standard Time\";\n    WindowsZoneName[\"UtcMinus_11\"] = \"UTC-11\";\n    WindowsZoneName[\"AleutianStandardTime\"] = \"Aleutian Standard Time\";\n    WindowsZoneName[\"HawaiianStandardTime\"] = \"Hawaiian Standard Time\";\n    WindowsZoneName[\"MarquesasStandardTime\"] = \"Marquesas Standard Time\";\n    WindowsZoneName[\"AlaskanStandardTime\"] = \"Alaskan Standard Time\";\n    WindowsZoneName[\"UtcMinus_09\"] = \"UTC-09\";\n    WindowsZoneName[\"PacificStandardTimeMexico\"] = \"Pacific Standard Time (Mexico)\";\n    WindowsZoneName[\"UtcMinus_08\"] = \"UTC-08\";\n    WindowsZoneName[\"PacificStandardTime\"] = \"Pacific Standard Time\";\n    WindowsZoneName[\"UsMountainStandardTime\"] = \"US Mountain Standard Time\";\n    WindowsZoneName[\"MountainStandardTimeMexico\"] = \"Mountain Standard Time (Mexico)\";\n    WindowsZoneName[\"MountainStandardTime\"] = \"Mountain Standard Time\";\n    WindowsZoneName[\"CentralAmericaStandardTime\"] = \"Central America Standard Time\";\n    WindowsZoneName[\"CentralStandardTime\"] = \"Central Standard Time\";\n    WindowsZoneName[\"EasterIslandStandardTime\"] = \"Easter Island Standard Time\";\n    WindowsZoneName[\"CentralStandardTimeMexico\"] = \"Central Standard Time (Mexico)\";\n    WindowsZoneName[\"CanadaCentralStandardTime\"] = \"Canada Central Standard Time\";\n    WindowsZoneName[\"SaPacificStandardTime\"] = \"SA Pacific Standard Time\";\n    WindowsZoneName[\"EasternStandardTimeMexico\"] = \"Eastern Standard Time (Mexico)\";\n    WindowsZoneName[\"EasternStandardTime\"] = \"Eastern Standard Time\";\n    WindowsZoneName[\"HaitiStandardTime\"] = \"Haiti Standard Time\";\n    WindowsZoneName[\"CubaStandardTime\"] = \"Cuba Standard Time\";\n    WindowsZoneName[\"UsEasternStandardTime\"] = \"US Eastern Standard Time\";\n    WindowsZoneName[\"ParaguayStandardTime\"] = \"Paraguay Standard Time\";\n    WindowsZoneName[\"AtlanticStandardTime\"] = \"Atlantic Standard Time\";\n    WindowsZoneName[\"VenezuelaStandardTime\"] = \"Venezuela Standard Time\";\n    WindowsZoneName[\"CentralBrazilianStandardTime\"] = \"Central Brazilian Standard Time\";\n    WindowsZoneName[\"SaWesternStandardTime\"] = \"SA Western Standard Time\";\n    WindowsZoneName[\"PacificSaStandardTime\"] = \"Pacific SA Standard Time\";\n    WindowsZoneName[\"TurksAndCaicosStandardTime\"] = \"Turks And Caicos Standard Time\";\n    WindowsZoneName[\"NewfoundlandStandardTime\"] = \"Newfoundland Standard Time\";\n    WindowsZoneName[\"TocantinsStandardTime\"] = \"Tocantins Standard Time\";\n    WindowsZoneName[\"ESouthAmericaStandardTime\"] = \"E. South America Standard Time\";\n    WindowsZoneName[\"SaEasternStandardTime\"] = \"SA Eastern Standard Time\";\n    WindowsZoneName[\"ArgentinaStandardTime\"] = \"Argentina Standard Time\";\n    WindowsZoneName[\"GreenlandStandardTime\"] = \"Greenland Standard Time\";\n    WindowsZoneName[\"MontevideoStandardTime\"] = \"Montevideo Standard Time\";\n    WindowsZoneName[\"MagallanesStandardTime\"] = \"Magallanes Standard Time\";\n    WindowsZoneName[\"SaintPierreStandardTime\"] = \"Saint Pierre Standard Time\";\n    WindowsZoneName[\"BahiaStandardTime\"] = \"Bahia Standard Time\";\n    WindowsZoneName[\"UtcMinus_02\"] = \"UTC-02\";\n    WindowsZoneName[\"AzoresStandardTime\"] = \"Azores Standard Time\";\n    WindowsZoneName[\"CapeVerdeStandardTime\"] = \"Cape Verde Standard Time\";\n    WindowsZoneName[\"Utc\"] = \"UTC\";\n    WindowsZoneName[\"GmtStandardTime\"] = \"GMT Standard Time\";\n    WindowsZoneName[\"GreenwichStandardTime\"] = \"Greenwich Standard Time\";\n    WindowsZoneName[\"WEuropeStandardTime\"] = \"W. Europe Standard Time\";\n    WindowsZoneName[\"CentralEuropeStandardTime\"] = \"Central Europe Standard Time\";\n    WindowsZoneName[\"RomanceStandardTime\"] = \"Romance Standard Time\";\n    WindowsZoneName[\"MoroccoStandardTime\"] = \"Morocco Standard Time\";\n    WindowsZoneName[\"SaoTomeStandardTime\"] = \"Sao Tome Standard Time\";\n    WindowsZoneName[\"CentralEuropeanStandardTime\"] = \"Central European Standard Time\";\n    WindowsZoneName[\"WCentralAfricaStandardTime\"] = \"W. Central Africa Standard Time\";\n    WindowsZoneName[\"JordanStandardTime\"] = \"Jordan Standard Time\";\n    WindowsZoneName[\"GtbStandardTime\"] = \"GTB Standard Time\";\n    WindowsZoneName[\"MiddleEastStandardTime\"] = \"Middle East Standard Time\";\n    WindowsZoneName[\"EgyptStandardTime\"] = \"Egypt Standard Time\";\n    WindowsZoneName[\"EEuropeStandardTime\"] = \"E. Europe Standard Time\";\n    WindowsZoneName[\"SyriaStandardTime\"] = \"Syria Standard Time\";\n    WindowsZoneName[\"WestBankStandardTime\"] = \"West Bank Standard Time\";\n    WindowsZoneName[\"SouthAfricaStandardTime\"] = \"South Africa Standard Time\";\n    WindowsZoneName[\"FleStandardTime\"] = \"FLE Standard Time\";\n    WindowsZoneName[\"IsraelStandardTime\"] = \"Israel Standard Time\";\n    WindowsZoneName[\"KaliningradStandardTime\"] = \"Kaliningrad Standard Time\";\n    WindowsZoneName[\"SudanStandardTime\"] = \"Sudan Standard Time\";\n    WindowsZoneName[\"LibyaStandardTime\"] = \"Libya Standard Time\";\n    WindowsZoneName[\"NamibiaStandardTime\"] = \"Namibia Standard Time\";\n    WindowsZoneName[\"ArabicStandardTime\"] = \"Arabic Standard Time\";\n    WindowsZoneName[\"TurkeyStandardTime\"] = \"Turkey Standard Time\";\n    WindowsZoneName[\"ArabStandardTime\"] = \"Arab Standard Time\";\n    WindowsZoneName[\"BelarusStandardTime\"] = \"Belarus Standard Time\";\n    WindowsZoneName[\"RussianStandardTime\"] = \"Russian Standard Time\";\n    WindowsZoneName[\"EAfricaStandardTime\"] = \"E. Africa Standard Time\";\n    WindowsZoneName[\"IranStandardTime\"] = \"Iran Standard Time\";\n    WindowsZoneName[\"ArabianStandardTime\"] = \"Arabian Standard Time\";\n    WindowsZoneName[\"AstrakhanStandardTime\"] = \"Astrakhan Standard Time\";\n    WindowsZoneName[\"AzerbaijanStandardTime\"] = \"Azerbaijan Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_3\"] = \"Russia Time Zone 3\";\n    WindowsZoneName[\"MauritiusStandardTime\"] = \"Mauritius Standard Time\";\n    WindowsZoneName[\"SaratovStandardTime\"] = \"Saratov Standard Time\";\n    WindowsZoneName[\"GeorgianStandardTime\"] = \"Georgian Standard Time\";\n    WindowsZoneName[\"CaucasusStandardTime\"] = \"Caucasus Standard Time\";\n    WindowsZoneName[\"AfghanistanStandardTime\"] = \"Afghanistan Standard Time\";\n    WindowsZoneName[\"WestAsiaStandardTime\"] = \"West Asia Standard Time\";\n    WindowsZoneName[\"EkaterinburgStandardTime\"] = \"Ekaterinburg Standard Time\";\n    WindowsZoneName[\"PakistanStandardTime\"] = \"Pakistan Standard Time\";\n    WindowsZoneName[\"IndiaStandardTime\"] = \"India Standard Time\";\n    WindowsZoneName[\"SriLankaStandardTime\"] = \"Sri Lanka Standard Time\";\n    WindowsZoneName[\"NepalStandardTime\"] = \"Nepal Standard Time\";\n    WindowsZoneName[\"CentralAsiaStandardTime\"] = \"Central Asia Standard Time\";\n    WindowsZoneName[\"BangladeshStandardTime\"] = \"Bangladesh Standard Time\";\n    WindowsZoneName[\"OmskStandardTime\"] = \"Omsk Standard Time\";\n    WindowsZoneName[\"MyanmarStandardTime\"] = \"Myanmar Standard Time\";\n    WindowsZoneName[\"SeAsiaStandardTime\"] = \"SE Asia Standard Time\";\n    WindowsZoneName[\"AltaiStandardTime\"] = \"Altai Standard Time\";\n    WindowsZoneName[\"WMongoliaStandardTime\"] = \"W. Mongolia Standard Time\";\n    WindowsZoneName[\"NorthAsiaStandardTime\"] = \"North Asia Standard Time\";\n    WindowsZoneName[\"NCentralAsiaStandardTime\"] = \"N. Central Asia Standard Time\";\n    WindowsZoneName[\"TomskStandardTime\"] = \"Tomsk Standard Time\";\n    WindowsZoneName[\"ChinaStandardTime\"] = \"China Standard Time\";\n    WindowsZoneName[\"NorthAsiaEastStandardTime\"] = \"North Asia East Standard Time\";\n    WindowsZoneName[\"SingaporeStandardTime\"] = \"Singapore Standard Time\";\n    WindowsZoneName[\"WAustraliaStandardTime\"] = \"W. Australia Standard Time\";\n    WindowsZoneName[\"TaipeiStandardTime\"] = \"Taipei Standard Time\";\n    WindowsZoneName[\"UlaanbaatarStandardTime\"] = \"Ulaanbaatar Standard Time\";\n    WindowsZoneName[\"AusCentralWStandardTime\"] = \"Aus Central W. Standard Time\";\n    WindowsZoneName[\"TransbaikalStandardTime\"] = \"Transbaikal Standard Time\";\n    WindowsZoneName[\"TokyoStandardTime\"] = \"Tokyo Standard Time\";\n    WindowsZoneName[\"NorthKoreaStandardTime\"] = \"North Korea Standard Time\";\n    WindowsZoneName[\"KoreaStandardTime\"] = \"Korea Standard Time\";\n    WindowsZoneName[\"YakutskStandardTime\"] = \"Yakutsk Standard Time\";\n    WindowsZoneName[\"CenAustraliaStandardTime\"] = \"Cen. Australia Standard Time\";\n    WindowsZoneName[\"AusCentralStandardTime\"] = \"AUS Central Standard Time\";\n    WindowsZoneName[\"EAustraliaStandardTime\"] = \"E. Australia Standard Time\";\n    WindowsZoneName[\"AusEasternStandardTime\"] = \"AUS Eastern Standard Time\";\n    WindowsZoneName[\"WestPacificStandardTime\"] = \"West Pacific Standard Time\";\n    WindowsZoneName[\"TasmaniaStandardTime\"] = \"Tasmania Standard Time\";\n    WindowsZoneName[\"VladivostokStandardTime\"] = \"Vladivostok Standard Time\";\n    WindowsZoneName[\"LordHoweStandardTime\"] = \"Lord Howe Standard Time\";\n    WindowsZoneName[\"BougainvilleStandardTime\"] = \"Bougainville Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_10\"] = \"Russia Time Zone 10\";\n    WindowsZoneName[\"MagadanStandardTime\"] = \"Magadan Standard Time\";\n    WindowsZoneName[\"NorfolkStandardTime\"] = \"Norfolk Standard Time\";\n    WindowsZoneName[\"SakhalinStandardTime\"] = \"Sakhalin Standard Time\";\n    WindowsZoneName[\"CentralPacificStandardTime\"] = \"Central Pacific Standard Time\";\n    WindowsZoneName[\"RussiaTimeZone_11\"] = \"Russia Time Zone 11\";\n    WindowsZoneName[\"NewZealandStandardTime\"] = \"New Zealand Standard Time\";\n    WindowsZoneName[\"UtcMinusPlus_12\"] = \"UTC+12\";\n    WindowsZoneName[\"FijiStandardTime\"] = \"Fiji Standard Time\";\n    WindowsZoneName[\"ChathamIslandsStandardTime\"] = \"Chatham Islands Standard Time\";\n    WindowsZoneName[\"UtcMinusPlus_13\"] = \"UTC+13\";\n    WindowsZoneName[\"TongaStandardTime\"] = \"Tonga Standard Time\";\n    WindowsZoneName[\"SamoaStandardTime\"] = \"Samoa Standard Time\";\n    WindowsZoneName[\"LineIslandsStandardTime\"] = \"Line Islands Standard Time\";\n})(WindowsZoneName = exports.WindowsZoneName || (exports.WindowsZoneName = {}));\nvar Territory;\n(function (Territory) {\n    Territory[\"001\"] = \"001\";\n    Territory[\"Zz\"] = \"ZZ\";\n    Territory[\"As\"] = \"AS\";\n    Territory[\"Nu\"] = \"NU\";\n    Territory[\"Um\"] = \"UM\";\n    Territory[\"Us\"] = \"US\";\n    Territory[\"Ck\"] = \"CK\";\n    Territory[\"Pf\"] = \"PF\";\n    Territory[\"Mx\"] = \"MX\";\n    Territory[\"Pn\"] = \"PN\";\n    Territory[\"Ca\"] = \"CA\";\n    Territory[\"Bz\"] = \"BZ\";\n    Territory[\"Cr\"] = \"CR\";\n    Territory[\"Ec\"] = \"EC\";\n    Territory[\"Gt\"] = \"GT\";\n    Territory[\"Hn\"] = \"HN\";\n    Territory[\"Ni\"] = \"NI\";\n    Territory[\"Sv\"] = \"SV\";\n    Territory[\"Cl\"] = \"CL\";\n    Territory[\"Br\"] = \"BR\";\n    Territory[\"Co\"] = \"CO\";\n    Territory[\"Jm\"] = \"JM\";\n    Territory[\"Ky\"] = \"KY\";\n    Territory[\"Pa\"] = \"PA\";\n    Territory[\"Pe\"] = \"PE\";\n    Territory[\"Bs\"] = \"BS\";\n    Territory[\"Ht\"] = \"HT\";\n    Territory[\"Cu\"] = \"CU\";\n    Territory[\"Py\"] = \"PY\";\n    Territory[\"Bm\"] = \"BM\";\n    Territory[\"Gl\"] = \"GL\";\n    Territory[\"Ve\"] = \"VE\";\n    Territory[\"Ag\"] = \"AG\";\n    Territory[\"Ai\"] = \"AI\";\n    Territory[\"Aw\"] = \"AW\";\n    Territory[\"Bb\"] = \"BB\";\n    Territory[\"Bl\"] = \"BL\";\n    Territory[\"Bo\"] = \"BO\";\n    Territory[\"Bq\"] = \"BQ\";\n    Territory[\"Cw\"] = \"CW\";\n    Territory[\"Dm\"] = \"DM\";\n    Territory[\"Do\"] = \"DO\";\n    Territory[\"Gd\"] = \"GD\";\n    Territory[\"Gp\"] = \"GP\";\n    Territory[\"Gy\"] = \"GY\";\n    Territory[\"Kn\"] = \"KN\";\n    Territory[\"Lc\"] = \"LC\";\n    Territory[\"Mf\"] = \"MF\";\n    Territory[\"Mq\"] = \"MQ\";\n    Territory[\"Ms\"] = \"MS\";\n    Territory[\"Pr\"] = \"PR\";\n    Territory[\"Sx\"] = \"SX\";\n    Territory[\"Tt\"] = \"TT\";\n    Territory[\"Vc\"] = \"VC\";\n    Territory[\"Vg\"] = \"VG\";\n    Territory[\"Vi\"] = \"VI\";\n    Territory[\"Tc\"] = \"TC\";\n    Territory[\"Aq\"] = \"AQ\";\n    Territory[\"Fk\"] = \"FK\";\n    Territory[\"Gf\"] = \"GF\";\n    Territory[\"Sr\"] = \"SR\";\n    Territory[\"Ar\"] = \"AR\";\n    Territory[\"Uy\"] = \"UY\";\n    Territory[\"Pm\"] = \"PM\";\n    Territory[\"Gs\"] = \"GS\";\n    Territory[\"Pt\"] = \"PT\";\n    Territory[\"Cv\"] = \"CV\";\n    Territory[\"Es\"] = \"ES\";\n    Territory[\"Fo\"] = \"FO\";\n    Territory[\"Gb\"] = \"GB\";\n    Territory[\"Gg\"] = \"GG\";\n    Territory[\"Ie\"] = \"IE\";\n    Territory[\"Im\"] = \"IM\";\n    Territory[\"Je\"] = \"JE\";\n    Territory[\"Bf\"] = \"BF\";\n    Territory[\"Ci\"] = \"CI\";\n    Territory[\"Gh\"] = \"GH\";\n    Territory[\"Gm\"] = \"GM\";\n    Territory[\"Gn\"] = \"GN\";\n    Territory[\"Gw\"] = \"GW\";\n    Territory[\"Is\"] = \"IS\";\n    Territory[\"Lr\"] = \"LR\";\n    Territory[\"Ml\"] = \"ML\";\n    Territory[\"Mr\"] = \"MR\";\n    Territory[\"Sh\"] = \"SH\";\n    Territory[\"Sl\"] = \"SL\";\n    Territory[\"Sn\"] = \"SN\";\n    Territory[\"Tg\"] = \"TG\";\n    Territory[\"Ad\"] = \"AD\";\n    Territory[\"At\"] = \"AT\";\n    Territory[\"Ch\"] = \"CH\";\n    Territory[\"De\"] = \"DE\";\n    Territory[\"Gi\"] = \"GI\";\n    Territory[\"It\"] = \"IT\";\n    Territory[\"Li\"] = \"LI\";\n    Territory[\"Lu\"] = \"LU\";\n    Territory[\"Mc\"] = \"MC\";\n    Territory[\"Mt\"] = \"MT\";\n    Territory[\"Nl\"] = \"NL\";\n    Territory[\"No\"] = \"NO\";\n    Territory[\"Se\"] = \"SE\";\n    Territory[\"Sj\"] = \"SJ\";\n    Territory[\"Sm\"] = \"SM\";\n    Territory[\"Va\"] = \"VA\";\n    Territory[\"Al\"] = \"AL\";\n    Territory[\"Cz\"] = \"CZ\";\n    Territory[\"Hu\"] = \"HU\";\n    Territory[\"Me\"] = \"ME\";\n    Territory[\"Rs\"] = \"RS\";\n    Territory[\"Si\"] = \"SI\";\n    Territory[\"Sk\"] = \"SK\";\n    Territory[\"Be\"] = \"BE\";\n    Territory[\"Dk\"] = \"DK\";\n    Territory[\"Fr\"] = \"FR\";\n    Territory[\"Eh\"] = \"EH\";\n    Territory[\"Ma\"] = \"MA\";\n    Territory[\"St\"] = \"ST\";\n    Territory[\"Ba\"] = \"BA\";\n    Territory[\"Hr\"] = \"HR\";\n    Territory[\"Mk\"] = \"MK\";\n    Territory[\"Pl\"] = \"PL\";\n    Territory[\"Ao\"] = \"AO\";\n    Territory[\"Bj\"] = \"BJ\";\n    Territory[\"Cd\"] = \"CD\";\n    Territory[\"Cf\"] = \"CF\";\n    Territory[\"Cg\"] = \"CG\";\n    Territory[\"Cm\"] = \"CM\";\n    Territory[\"Dz\"] = \"DZ\";\n    Territory[\"Ga\"] = \"GA\";\n    Territory[\"Gq\"] = \"GQ\";\n    Territory[\"Ne\"] = \"NE\";\n    Territory[\"Ng\"] = \"NG\";\n    Territory[\"Td\"] = \"TD\";\n    Territory[\"Tn\"] = \"TN\";\n    Territory[\"Jo\"] = \"JO\";\n    Territory[\"Cy\"] = \"CY\";\n    Territory[\"Gr\"] = \"GR\";\n    Territory[\"Ro\"] = \"RO\";\n    Territory[\"Lb\"] = \"LB\";\n    Territory[\"Eg\"] = \"EG\";\n    Territory[\"Md\"] = \"MD\";\n    Territory[\"Sy\"] = \"SY\";\n    Territory[\"Ps\"] = \"PS\";\n    Territory[\"Bi\"] = \"BI\";\n    Territory[\"Bw\"] = \"BW\";\n    Territory[\"Ls\"] = \"LS\";\n    Territory[\"Mw\"] = \"MW\";\n    Territory[\"Mz\"] = \"MZ\";\n    Territory[\"Rw\"] = \"RW\";\n    Territory[\"Sz\"] = \"SZ\";\n    Territory[\"Za\"] = \"ZA\";\n    Territory[\"Zm\"] = \"ZM\";\n    Territory[\"Zw\"] = \"ZW\";\n    Territory[\"Ax\"] = \"AX\";\n    Territory[\"Bg\"] = \"BG\";\n    Territory[\"Ee\"] = \"EE\";\n    Territory[\"Fi\"] = \"FI\";\n    Territory[\"Lt\"] = \"LT\";\n    Territory[\"Lv\"] = \"LV\";\n    Territory[\"Ua\"] = \"UA\";\n    Territory[\"Il\"] = \"IL\";\n    Territory[\"Ru\"] = \"RU\";\n    Territory[\"Sd\"] = \"SD\";\n    Territory[\"Ly\"] = \"LY\";\n    Territory[\"Na\"] = \"NA\";\n    Territory[\"Iq\"] = \"IQ\";\n    Territory[\"Tr\"] = \"TR\";\n    Territory[\"Bh\"] = \"BH\";\n    Territory[\"Kw\"] = \"KW\";\n    Territory[\"Qa\"] = \"QA\";\n    Territory[\"Sa\"] = \"SA\";\n    Territory[\"Ye\"] = \"YE\";\n    Territory[\"By\"] = \"BY\";\n    Territory[\"Dj\"] = \"DJ\";\n    Territory[\"Er\"] = \"ER\";\n    Territory[\"Et\"] = \"ET\";\n    Territory[\"Ke\"] = \"KE\";\n    Territory[\"Km\"] = \"KM\";\n    Territory[\"Mg\"] = \"MG\";\n    Territory[\"So\"] = \"SO\";\n    Territory[\"Ss\"] = \"SS\";\n    Territory[\"Tz\"] = \"TZ\";\n    Territory[\"Ug\"] = \"UG\";\n    Territory[\"Yt\"] = \"YT\";\n    Territory[\"Ir\"] = \"IR\";\n    Territory[\"Ae\"] = \"AE\";\n    Territory[\"Om\"] = \"OM\";\n    Territory[\"Az\"] = \"AZ\";\n    Territory[\"Mu\"] = \"MU\";\n    Territory[\"Re\"] = \"RE\";\n    Territory[\"Sc\"] = \"SC\";\n    Territory[\"Ge\"] = \"GE\";\n    Territory[\"Am\"] = \"AM\";\n    Territory[\"Af\"] = \"AF\";\n    Territory[\"Kz\"] = \"KZ\";\n    Territory[\"Mv\"] = \"MV\";\n    Territory[\"Tf\"] = \"TF\";\n    Territory[\"Tj\"] = \"TJ\";\n    Territory[\"Tm\"] = \"TM\";\n    Territory[\"Uz\"] = \"UZ\";\n    Territory[\"Pk\"] = \"PK\";\n    Territory[\"In\"] = \"IN\";\n    Territory[\"Lk\"] = \"LK\";\n    Territory[\"Np\"] = \"NP\";\n    Territory[\"Cn\"] = \"CN\";\n    Territory[\"Io\"] = \"IO\";\n    Territory[\"Kg\"] = \"KG\";\n    Territory[\"Bd\"] = \"BD\";\n    Territory[\"Bt\"] = \"BT\";\n    Territory[\"Cc\"] = \"CC\";\n    Territory[\"Mm\"] = \"MM\";\n    Territory[\"Cx\"] = \"CX\";\n    Territory[\"Id\"] = \"ID\";\n    Territory[\"Kh\"] = \"KH\";\n    Territory[\"La\"] = \"LA\";\n    Territory[\"Th\"] = \"TH\";\n    Territory[\"Vn\"] = \"VN\";\n    Territory[\"Mn\"] = \"MN\";\n    Territory[\"Hk\"] = \"HK\";\n    Territory[\"Mo\"] = \"MO\";\n    Territory[\"Bn\"] = \"BN\";\n    Territory[\"My\"] = \"MY\";\n    Territory[\"Ph\"] = \"PH\";\n    Territory[\"Sg\"] = \"SG\";\n    Territory[\"Au\"] = \"AU\";\n    Territory[\"Tw\"] = \"TW\";\n    Territory[\"Jp\"] = \"JP\";\n    Territory[\"Pw\"] = \"PW\";\n    Territory[\"Tl\"] = \"TL\";\n    Territory[\"Kp\"] = \"KP\";\n    Territory[\"Kr\"] = \"KR\";\n    Territory[\"Fm\"] = \"FM\";\n    Territory[\"Gu\"] = \"GU\";\n    Territory[\"Mp\"] = \"MP\";\n    Territory[\"Pg\"] = \"PG\";\n    Territory[\"Nf\"] = \"NF\";\n    Territory[\"Nc\"] = \"NC\";\n    Territory[\"Sb\"] = \"SB\";\n    Territory[\"Vu\"] = \"VU\";\n    Territory[\"Nz\"] = \"NZ\";\n    Territory[\"Ki\"] = \"KI\";\n    Territory[\"Mh\"] = \"MH\";\n    Territory[\"Nr\"] = \"NR\";\n    Territory[\"Tv\"] = \"TV\";\n    Territory[\"Wf\"] = \"WF\";\n    Territory[\"Fj\"] = \"FJ\";\n    Territory[\"Tk\"] = \"TK\";\n    Territory[\"To\"] = \"TO\";\n    Territory[\"Ws\"] = \"WS\";\n})(Territory = exports.Territory || (exports.Territory = {}));\nvar IanaName;\n(function (IanaName) {\n    IanaName[\"EtcGmtMinusPlus_12\"] = \"Etc/GMT+12\";\n    IanaName[\"EtcGmtMinusPlus_11\"] = \"Etc/GMT+11\";\n    IanaName[\"PacificPagoPago\"] = \"Pacific/Pago_Pago\";\n    IanaName[\"PacificNiue\"] = \"Pacific/Niue\";\n    IanaName[\"PacificMidway\"] = \"Pacific/Midway\";\n    IanaName[\"AmericaAdak\"] = \"America/Adak\";\n    IanaName[\"PacificHonolulu\"] = \"Pacific/Honolulu\";\n    IanaName[\"PacificRarotonga\"] = \"Pacific/Rarotonga\";\n    IanaName[\"PacificTahiti\"] = \"Pacific/Tahiti\";\n    IanaName[\"PacificJohnston\"] = \"Pacific/Johnston\";\n    IanaName[\"EtcGmtMinusPlus_10\"] = \"Etc/GMT+10\";\n    IanaName[\"PacificMarquesas\"] = \"Pacific/Marquesas\";\n    IanaName[\"AmericaAnchorage\"] = \"America/Anchorage\";\n    IanaName[\"EtcGmtMinusPlus_9\"] = \"Etc/GMT+9\";\n    IanaName[\"PacificGambier\"] = \"Pacific/Gambier\";\n    IanaName[\"AmericaTijuana\"] = \"America/Tijuana\";\n    IanaName[\"EtcGmtMinusPlus_8\"] = \"Etc/GMT+8\";\n    IanaName[\"PacificPitcairn\"] = \"Pacific/Pitcairn\";\n    IanaName[\"AmericaLosAngeles\"] = \"America/Los_Angeles\";\n    IanaName[\"AmericaVancouver\"] = \"America/Vancouver\";\n    IanaName[\"Pst8Pdt\"] = \"PST8PDT\";\n    IanaName[\"AmericaPhoenix\"] = \"America/Phoenix\";\n    IanaName[\"AmericaDawsonCreek\"] = \"America/Dawson_Creek\";\n    IanaName[\"AmericaHermosillo\"] = \"America/Hermosillo\";\n    IanaName[\"EtcGmtMinusPlus_7\"] = \"Etc/GMT+7\";\n    IanaName[\"AmericaChihuahua\"] = \"America/Chihuahua\";\n    IanaName[\"AmericaDenver\"] = \"America/Denver\";\n    IanaName[\"AmericaEdmonton\"] = \"America/Edmonton\";\n    IanaName[\"AmericaOjinaga\"] = \"America/Ojinaga\";\n    IanaName[\"Mst7Mdt\"] = \"MST7MDT\";\n    IanaName[\"AmericaGuatemala\"] = \"America/Guatemala\";\n    IanaName[\"AmericaBelize\"] = \"America/Belize\";\n    IanaName[\"AmericaCostaRica\"] = \"America/Costa_Rica\";\n    IanaName[\"PacificGalapagos\"] = \"Pacific/Galapagos\";\n    IanaName[\"AmericaTegucigalpa\"] = \"America/Tegucigalpa\";\n    IanaName[\"AmericaManagua\"] = \"America/Managua\";\n    IanaName[\"AmericaElSalvador\"] = \"America/El_Salvador\";\n    IanaName[\"EtcGmtMinusPlus_6\"] = \"Etc/GMT+6\";\n    IanaName[\"AmericaChicago\"] = \"America/Chicago\";\n    IanaName[\"AmericaWinnipeg\"] = \"America/Winnipeg\";\n    IanaName[\"AmericaMatamoros\"] = \"America/Matamoros\";\n    IanaName[\"Cst6Cdt\"] = \"CST6CDT\";\n    IanaName[\"PacificEaster\"] = \"Pacific/Easter\";\n    IanaName[\"AmericaMexicoCity\"] = \"America/Mexico_City\";\n    IanaName[\"AmericaRegina\"] = \"America/Regina\";\n    IanaName[\"AmericaBogota\"] = \"America/Bogota\";\n    IanaName[\"AmericaRioBranco\"] = \"America/Rio_Branco\";\n    IanaName[\"AmericaCoralHarbour\"] = \"America/Coral_Harbour\";\n    IanaName[\"AmericaGuayaquil\"] = \"America/Guayaquil\";\n    IanaName[\"AmericaJamaica\"] = \"America/Jamaica\";\n    IanaName[\"AmericaCayman\"] = \"America/Cayman\";\n    IanaName[\"AmericaPanama\"] = \"America/Panama\";\n    IanaName[\"AmericaLima\"] = \"America/Lima\";\n    IanaName[\"EtcGmtMinusPlus_5\"] = \"Etc/GMT+5\";\n    IanaName[\"AmericaCancun\"] = \"America/Cancun\";\n    IanaName[\"AmericaNewYork\"] = \"America/New_York\";\n    IanaName[\"AmericaNassau\"] = \"America/Nassau\";\n    IanaName[\"AmericaToronto\"] = \"America/Toronto\";\n    IanaName[\"Est5Edt\"] = \"EST5EDT\";\n    IanaName[\"AmericaPortMinusAuPrince\"] = \"America/Port-au-Prince\";\n    IanaName[\"AmericaHavana\"] = \"America/Havana\";\n    IanaName[\"AmericaIndianapolis\"] = \"America/Indianapolis\";\n    IanaName[\"AmericaAsuncion\"] = \"America/Asuncion\";\n    IanaName[\"AmericaHalifax\"] = \"America/Halifax\";\n    IanaName[\"AtlanticBermuda\"] = \"Atlantic/Bermuda\";\n    IanaName[\"AmericaThule\"] = \"America/Thule\";\n    IanaName[\"AmericaCaracas\"] = \"America/Caracas\";\n    IanaName[\"AmericaCuiaba\"] = \"America/Cuiaba\";\n    IanaName[\"AmericaLaPaz\"] = \"America/La_Paz\";\n    IanaName[\"AmericaAntigua\"] = \"America/Antigua\";\n    IanaName[\"AmericaAnguilla\"] = \"America/Anguilla\";\n    IanaName[\"AmericaAruba\"] = \"America/Aruba\";\n    IanaName[\"AmericaBarbados\"] = \"America/Barbados\";\n    IanaName[\"AmericaStBarthelemy\"] = \"America/St_Barthelemy\";\n    IanaName[\"AmericaKralendijk\"] = \"America/Kralendijk\";\n    IanaName[\"AmericaManaus\"] = \"America/Manaus\";\n    IanaName[\"AmericaBlancMinusSablon\"] = \"America/Blanc-Sablon\";\n    IanaName[\"AmericaCuracao\"] = \"America/Curacao\";\n    IanaName[\"AmericaDominica\"] = \"America/Dominica\";\n    IanaName[\"AmericaSantoDomingo\"] = \"America/Santo_Domingo\";\n    IanaName[\"AmericaGrenada\"] = \"America/Grenada\";\n    IanaName[\"AmericaGuadeloupe\"] = \"America/Guadeloupe\";\n    IanaName[\"AmericaGuyana\"] = \"America/Guyana\";\n    IanaName[\"AmericaStKitts\"] = \"America/St_Kitts\";\n    IanaName[\"AmericaStLucia\"] = \"America/St_Lucia\";\n    IanaName[\"AmericaMarigot\"] = \"America/Marigot\";\n    IanaName[\"AmericaMartinique\"] = \"America/Martinique\";\n    IanaName[\"AmericaMontserrat\"] = \"America/Montserrat\";\n    IanaName[\"AmericaPuertoRico\"] = \"America/Puerto_Rico\";\n    IanaName[\"AmericaLowerPrinces\"] = \"America/Lower_Princes\";\n    IanaName[\"AmericaPortOfSpain\"] = \"America/Port_of_Spain\";\n    IanaName[\"AmericaStVincent\"] = \"America/St_Vincent\";\n    IanaName[\"AmericaTortola\"] = \"America/Tortola\";\n    IanaName[\"AmericaStThomas\"] = \"America/St_Thomas\";\n    IanaName[\"EtcGmtMinusPlus_4\"] = \"Etc/GMT+4\";\n    IanaName[\"AmericaSantiago\"] = \"America/Santiago\";\n    IanaName[\"AmericaGrandTurk\"] = \"America/Grand_Turk\";\n    IanaName[\"AmericaStJohns\"] = \"America/St_Johns\";\n    IanaName[\"AmericaAraguaina\"] = \"America/Araguaina\";\n    IanaName[\"AmericaSaoPaulo\"] = \"America/Sao_Paulo\";\n    IanaName[\"AmericaCayenne\"] = \"America/Cayenne\";\n    IanaName[\"AntarcticaRothera\"] = \"Antarctica/Rothera\";\n    IanaName[\"AmericaFortaleza\"] = \"America/Fortaleza\";\n    IanaName[\"AtlanticStanley\"] = \"Atlantic/Stanley\";\n    IanaName[\"AmericaParamaribo\"] = \"America/Paramaribo\";\n    IanaName[\"EtcGmtMinusPlus_3\"] = \"Etc/GMT+3\";\n    IanaName[\"AmericaBuenosAires\"] = \"America/Buenos_Aires\";\n    IanaName[\"AmericaGodthab\"] = \"America/Godthab\";\n    IanaName[\"AmericaMontevideo\"] = \"America/Montevideo\";\n    IanaName[\"AmericaPuntaArenas\"] = \"America/Punta_Arenas\";\n    IanaName[\"AntarcticaPalmer\"] = \"Antarctica/Palmer\";\n    IanaName[\"AmericaMiquelon\"] = \"America/Miquelon\";\n    IanaName[\"AmericaBahia\"] = \"America/Bahia\";\n    IanaName[\"EtcGmtMinusPlus_2\"] = \"Etc/GMT+2\";\n    IanaName[\"AmericaNoronha\"] = \"America/Noronha\";\n    IanaName[\"AtlanticSouthGeorgia\"] = \"Atlantic/South_Georgia\";\n    IanaName[\"AtlanticAzores\"] = \"Atlantic/Azores\";\n    IanaName[\"AmericaScoresbysund\"] = \"America/Scoresbysund\";\n    IanaName[\"AtlanticCapeVerde\"] = \"Atlantic/Cape_Verde\";\n    IanaName[\"EtcGmtMinusPlus_1\"] = \"Etc/GMT+1\";\n    IanaName[\"EtcGmt\"] = \"Etc/GMT\";\n    IanaName[\"AmericaDanmarkshavn\"] = \"America/Danmarkshavn\";\n    IanaName[\"EuropeLondon\"] = \"Europe/London\";\n    IanaName[\"AtlanticCanary\"] = \"Atlantic/Canary\";\n    IanaName[\"AtlanticFaeroe\"] = \"Atlantic/Faeroe\";\n    IanaName[\"EuropeGuernsey\"] = \"Europe/Guernsey\";\n    IanaName[\"EuropeDublin\"] = \"Europe/Dublin\";\n    IanaName[\"EuropeIsleOfMan\"] = \"Europe/Isle_of_Man\";\n    IanaName[\"EuropeJersey\"] = \"Europe/Jersey\";\n    IanaName[\"EuropeLisbon\"] = \"Europe/Lisbon\";\n    IanaName[\"AtlanticReykjavik\"] = \"Atlantic/Reykjavik\";\n    IanaName[\"AfricaOuagadougou\"] = \"Africa/Ouagadougou\";\n    IanaName[\"AfricaAbidjan\"] = \"Africa/Abidjan\";\n    IanaName[\"AfricaAccra\"] = \"Africa/Accra\";\n    IanaName[\"AfricaBanjul\"] = \"Africa/Banjul\";\n    IanaName[\"AfricaConakry\"] = \"Africa/Conakry\";\n    IanaName[\"AfricaBissau\"] = \"Africa/Bissau\";\n    IanaName[\"AfricaMonrovia\"] = \"Africa/Monrovia\";\n    IanaName[\"AfricaBamako\"] = \"Africa/Bamako\";\n    IanaName[\"AfricaNouakchott\"] = \"Africa/Nouakchott\";\n    IanaName[\"AtlanticStHelena\"] = \"Atlantic/St_Helena\";\n    IanaName[\"AfricaFreetown\"] = \"Africa/Freetown\";\n    IanaName[\"AfricaDakar\"] = \"Africa/Dakar\";\n    IanaName[\"AfricaLome\"] = \"Africa/Lome\";\n    IanaName[\"EuropeBerlin\"] = \"Europe/Berlin\";\n    IanaName[\"EuropeAndorra\"] = \"Europe/Andorra\";\n    IanaName[\"EuropeVienna\"] = \"Europe/Vienna\";\n    IanaName[\"EuropeZurich\"] = \"Europe/Zurich\";\n    IanaName[\"EuropeGibraltar\"] = \"Europe/Gibraltar\";\n    IanaName[\"EuropeRome\"] = \"Europe/Rome\";\n    IanaName[\"EuropeVaduz\"] = \"Europe/Vaduz\";\n    IanaName[\"EuropeLuxembourg\"] = \"Europe/Luxembourg\";\n    IanaName[\"EuropeMonaco\"] = \"Europe/Monaco\";\n    IanaName[\"EuropeMalta\"] = \"Europe/Malta\";\n    IanaName[\"EuropeAmsterdam\"] = \"Europe/Amsterdam\";\n    IanaName[\"EuropeOslo\"] = \"Europe/Oslo\";\n    IanaName[\"EuropeStockholm\"] = \"Europe/Stockholm\";\n    IanaName[\"ArcticLongyearbyen\"] = \"Arctic/Longyearbyen\";\n    IanaName[\"EuropeSanMarino\"] = \"Europe/San_Marino\";\n    IanaName[\"EuropeVatican\"] = \"Europe/Vatican\";\n    IanaName[\"EuropeBudapest\"] = \"Europe/Budapest\";\n    IanaName[\"EuropeTirane\"] = \"Europe/Tirane\";\n    IanaName[\"EuropePrague\"] = \"Europe/Prague\";\n    IanaName[\"EuropePodgorica\"] = \"Europe/Podgorica\";\n    IanaName[\"EuropeBelgrade\"] = \"Europe/Belgrade\";\n    IanaName[\"EuropeLjubljana\"] = \"Europe/Ljubljana\";\n    IanaName[\"EuropeBratislava\"] = \"Europe/Bratislava\";\n    IanaName[\"EuropeParis\"] = \"Europe/Paris\";\n    IanaName[\"EuropeBrussels\"] = \"Europe/Brussels\";\n    IanaName[\"EuropeCopenhagen\"] = \"Europe/Copenhagen\";\n    IanaName[\"EuropeMadrid\"] = \"Europe/Madrid\";\n    IanaName[\"AfricaCasablanca\"] = \"Africa/Casablanca\";\n    IanaName[\"AfricaElAaiun\"] = \"Africa/El_Aaiun\";\n    IanaName[\"AfricaSaoTome\"] = \"Africa/Sao_Tome\";\n    IanaName[\"EuropeWarsaw\"] = \"Europe/Warsaw\";\n    IanaName[\"EuropeSarajevo\"] = \"Europe/Sarajevo\";\n    IanaName[\"EuropeZagreb\"] = \"Europe/Zagreb\";\n    IanaName[\"EuropeSkopje\"] = \"Europe/Skopje\";\n    IanaName[\"AfricaLagos\"] = \"Africa/Lagos\";\n    IanaName[\"AfricaLuanda\"] = \"Africa/Luanda\";\n    IanaName[\"AfricaPortoMinusNovo\"] = \"Africa/Porto-Novo\";\n    IanaName[\"AfricaKinshasa\"] = \"Africa/Kinshasa\";\n    IanaName[\"AfricaBangui\"] = \"Africa/Bangui\";\n    IanaName[\"AfricaBrazzaville\"] = \"Africa/Brazzaville\";\n    IanaName[\"AfricaDouala\"] = \"Africa/Douala\";\n    IanaName[\"AfricaAlgiers\"] = \"Africa/Algiers\";\n    IanaName[\"AfricaLibreville\"] = \"Africa/Libreville\";\n    IanaName[\"AfricaMalabo\"] = \"Africa/Malabo\";\n    IanaName[\"AfricaNiamey\"] = \"Africa/Niamey\";\n    IanaName[\"AfricaNdjamena\"] = \"Africa/Ndjamena\";\n    IanaName[\"AfricaTunis\"] = \"Africa/Tunis\";\n    IanaName[\"EtcGmtMinus_1\"] = \"Etc/GMT-1\";\n    IanaName[\"AsiaAmman\"] = \"Asia/Amman\";\n    IanaName[\"EuropeBucharest\"] = \"Europe/Bucharest\";\n    IanaName[\"AsiaFamagusta\"] = \"Asia/Famagusta\";\n    IanaName[\"EuropeAthens\"] = \"Europe/Athens\";\n    IanaName[\"AsiaBeirut\"] = \"Asia/Beirut\";\n    IanaName[\"AfricaCairo\"] = \"Africa/Cairo\";\n    IanaName[\"EuropeChisinau\"] = \"Europe/Chisinau\";\n    IanaName[\"AsiaDamascus\"] = \"Asia/Damascus\";\n    IanaName[\"AsiaHebron\"] = \"Asia/Hebron\";\n    IanaName[\"AfricaJohannesburg\"] = \"Africa/Johannesburg\";\n    IanaName[\"AfricaBujumbura\"] = \"Africa/Bujumbura\";\n    IanaName[\"AfricaGaborone\"] = \"Africa/Gaborone\";\n    IanaName[\"AfricaLubumbashi\"] = \"Africa/Lubumbashi\";\n    IanaName[\"AfricaMaseru\"] = \"Africa/Maseru\";\n    IanaName[\"AfricaBlantyre\"] = \"Africa/Blantyre\";\n    IanaName[\"AfricaMaputo\"] = \"Africa/Maputo\";\n    IanaName[\"AfricaKigali\"] = \"Africa/Kigali\";\n    IanaName[\"AfricaMbabane\"] = \"Africa/Mbabane\";\n    IanaName[\"AfricaLusaka\"] = \"Africa/Lusaka\";\n    IanaName[\"AfricaHarare\"] = \"Africa/Harare\";\n    IanaName[\"EtcGmtMinus_2\"] = \"Etc/GMT-2\";\n    IanaName[\"EuropeKiev\"] = \"Europe/Kiev\";\n    IanaName[\"EuropeMariehamn\"] = \"Europe/Mariehamn\";\n    IanaName[\"EuropeSofia\"] = \"Europe/Sofia\";\n    IanaName[\"EuropeTallinn\"] = \"Europe/Tallinn\";\n    IanaName[\"EuropeHelsinki\"] = \"Europe/Helsinki\";\n    IanaName[\"EuropeVilnius\"] = \"Europe/Vilnius\";\n    IanaName[\"EuropeRiga\"] = \"Europe/Riga\";\n    IanaName[\"AsiaJerusalem\"] = \"Asia/Jerusalem\";\n    IanaName[\"EuropeKaliningrad\"] = \"Europe/Kaliningrad\";\n    IanaName[\"AfricaKhartoum\"] = \"Africa/Khartoum\";\n    IanaName[\"AfricaTripoli\"] = \"Africa/Tripoli\";\n    IanaName[\"AfricaWindhoek\"] = \"Africa/Windhoek\";\n    IanaName[\"AsiaBaghdad\"] = \"Asia/Baghdad\";\n    IanaName[\"EuropeIstanbul\"] = \"Europe/Istanbul\";\n    IanaName[\"AsiaRiyadh\"] = \"Asia/Riyadh\";\n    IanaName[\"AsiaBahrain\"] = \"Asia/Bahrain\";\n    IanaName[\"AsiaKuwait\"] = \"Asia/Kuwait\";\n    IanaName[\"AsiaQatar\"] = \"Asia/Qatar\";\n    IanaName[\"AsiaAden\"] = \"Asia/Aden\";\n    IanaName[\"EuropeMinsk\"] = \"Europe/Minsk\";\n    IanaName[\"EuropeMoscow\"] = \"Europe/Moscow\";\n    IanaName[\"EuropeSimferopol\"] = \"Europe/Simferopol\";\n    IanaName[\"AfricaNairobi\"] = \"Africa/Nairobi\";\n    IanaName[\"AntarcticaSyowa\"] = \"Antarctica/Syowa\";\n    IanaName[\"AfricaDjibouti\"] = \"Africa/Djibouti\";\n    IanaName[\"AfricaAsmera\"] = \"Africa/Asmera\";\n    IanaName[\"AfricaAddisAbaba\"] = \"Africa/Addis_Ababa\";\n    IanaName[\"IndianComoro\"] = \"Indian/Comoro\";\n    IanaName[\"IndianAntananarivo\"] = \"Indian/Antananarivo\";\n    IanaName[\"AfricaMogadishu\"] = \"Africa/Mogadishu\";\n    IanaName[\"AfricaJuba\"] = \"Africa/Juba\";\n    IanaName[\"AfricaDarEsSalaam\"] = \"Africa/Dar_es_Salaam\";\n    IanaName[\"AfricaKampala\"] = \"Africa/Kampala\";\n    IanaName[\"IndianMayotte\"] = \"Indian/Mayotte\";\n    IanaName[\"EtcGmtMinus_3\"] = \"Etc/GMT-3\";\n    IanaName[\"AsiaTehran\"] = \"Asia/Tehran\";\n    IanaName[\"AsiaDubai\"] = \"Asia/Dubai\";\n    IanaName[\"AsiaMuscat\"] = \"Asia/Muscat\";\n    IanaName[\"EtcGmtMinus_4\"] = \"Etc/GMT-4\";\n    IanaName[\"EuropeAstrakhan\"] = \"Europe/Astrakhan\";\n    IanaName[\"AsiaBaku\"] = \"Asia/Baku\";\n    IanaName[\"EuropeSamara\"] = \"Europe/Samara\";\n    IanaName[\"IndianMauritius\"] = \"Indian/Mauritius\";\n    IanaName[\"IndianReunion\"] = \"Indian/Reunion\";\n    IanaName[\"IndianMahe\"] = \"Indian/Mahe\";\n    IanaName[\"EuropeSaratov\"] = \"Europe/Saratov\";\n    IanaName[\"AsiaTbilisi\"] = \"Asia/Tbilisi\";\n    IanaName[\"AsiaYerevan\"] = \"Asia/Yerevan\";\n    IanaName[\"AsiaKabul\"] = \"Asia/Kabul\";\n    IanaName[\"AsiaTashkent\"] = \"Asia/Tashkent\";\n    IanaName[\"AntarcticaMawson\"] = \"Antarctica/Mawson\";\n    IanaName[\"AsiaOral\"] = \"Asia/Oral\";\n    IanaName[\"IndianMaldives\"] = \"Indian/Maldives\";\n    IanaName[\"IndianKerguelen\"] = \"Indian/Kerguelen\";\n    IanaName[\"AsiaDushanbe\"] = \"Asia/Dushanbe\";\n    IanaName[\"AsiaAshgabat\"] = \"Asia/Ashgabat\";\n    IanaName[\"EtcGmtMinus_5\"] = \"Etc/GMT-5\";\n    IanaName[\"AsiaYekaterinburg\"] = \"Asia/Yekaterinburg\";\n    IanaName[\"AsiaKarachi\"] = \"Asia/Karachi\";\n    IanaName[\"AsiaCalcutta\"] = \"Asia/Calcutta\";\n    IanaName[\"AsiaColombo\"] = \"Asia/Colombo\";\n    IanaName[\"AsiaKatmandu\"] = \"Asia/Katmandu\";\n    IanaName[\"AsiaAlmaty\"] = \"Asia/Almaty\";\n    IanaName[\"AntarcticaVostok\"] = \"Antarctica/Vostok\";\n    IanaName[\"AsiaUrumqi\"] = \"Asia/Urumqi\";\n    IanaName[\"IndianChagos\"] = \"Indian/Chagos\";\n    IanaName[\"AsiaBishkek\"] = \"Asia/Bishkek\";\n    IanaName[\"EtcGmtMinus_6\"] = \"Etc/GMT-6\";\n    IanaName[\"AsiaDhaka\"] = \"Asia/Dhaka\";\n    IanaName[\"AsiaThimphu\"] = \"Asia/Thimphu\";\n    IanaName[\"AsiaOmsk\"] = \"Asia/Omsk\";\n    IanaName[\"AsiaRangoon\"] = \"Asia/Rangoon\";\n    IanaName[\"IndianCocos\"] = \"Indian/Cocos\";\n    IanaName[\"AsiaBangkok\"] = \"Asia/Bangkok\";\n    IanaName[\"AntarcticaDavis\"] = \"Antarctica/Davis\";\n    IanaName[\"IndianChristmas\"] = \"Indian/Christmas\";\n    IanaName[\"AsiaJakarta\"] = \"Asia/Jakarta\";\n    IanaName[\"AsiaPhnomPenh\"] = \"Asia/Phnom_Penh\";\n    IanaName[\"AsiaVientiane\"] = \"Asia/Vientiane\";\n    IanaName[\"AsiaSaigon\"] = \"Asia/Saigon\";\n    IanaName[\"EtcGmtMinus_7\"] = \"Etc/GMT-7\";\n    IanaName[\"AsiaBarnaul\"] = \"Asia/Barnaul\";\n    IanaName[\"AsiaHovd\"] = \"Asia/Hovd\";\n    IanaName[\"AsiaKrasnoyarsk\"] = \"Asia/Krasnoyarsk\";\n    IanaName[\"AsiaNovosibirsk\"] = \"Asia/Novosibirsk\";\n    IanaName[\"AsiaTomsk\"] = \"Asia/Tomsk\";\n    IanaName[\"AsiaShanghai\"] = \"Asia/Shanghai\";\n    IanaName[\"AsiaHongKong\"] = \"Asia/Hong_Kong\";\n    IanaName[\"AsiaMacau\"] = \"Asia/Macau\";\n    IanaName[\"AsiaIrkutsk\"] = \"Asia/Irkutsk\";\n    IanaName[\"AsiaSingapore\"] = \"Asia/Singapore\";\n    IanaName[\"AsiaBrunei\"] = \"Asia/Brunei\";\n    IanaName[\"AsiaMakassar\"] = \"Asia/Makassar\";\n    IanaName[\"AsiaKualaLumpur\"] = \"Asia/Kuala_Lumpur\";\n    IanaName[\"AsiaManila\"] = \"Asia/Manila\";\n    IanaName[\"EtcGmtMinus_8\"] = \"Etc/GMT-8\";\n    IanaName[\"AustraliaPerth\"] = \"Australia/Perth\";\n    IanaName[\"AntarcticaCasey\"] = \"Antarctica/Casey\";\n    IanaName[\"AsiaTaipei\"] = \"Asia/Taipei\";\n    IanaName[\"AsiaUlaanbaatar\"] = \"Asia/Ulaanbaatar\";\n    IanaName[\"AustraliaEucla\"] = \"Australia/Eucla\";\n    IanaName[\"AsiaChita\"] = \"Asia/Chita\";\n    IanaName[\"AsiaTokyo\"] = \"Asia/Tokyo\";\n    IanaName[\"AsiaJayapura\"] = \"Asia/Jayapura\";\n    IanaName[\"PacificPalau\"] = \"Pacific/Palau\";\n    IanaName[\"AsiaDili\"] = \"Asia/Dili\";\n    IanaName[\"EtcGmtMinus_9\"] = \"Etc/GMT-9\";\n    IanaName[\"AsiaPyongyang\"] = \"Asia/Pyongyang\";\n    IanaName[\"AsiaSeoul\"] = \"Asia/Seoul\";\n    IanaName[\"AsiaYakutsk\"] = \"Asia/Yakutsk\";\n    IanaName[\"AustraliaAdelaide\"] = \"Australia/Adelaide\";\n    IanaName[\"AustraliaDarwin\"] = \"Australia/Darwin\";\n    IanaName[\"AustraliaBrisbane\"] = \"Australia/Brisbane\";\n    IanaName[\"AustraliaSydney\"] = \"Australia/Sydney\";\n    IanaName[\"PacificPortMoresby\"] = \"Pacific/Port_Moresby\";\n    IanaName[\"AntarcticaDumontDUrville\"] = \"Antarctica/DumontDUrville\";\n    IanaName[\"PacificTruk\"] = \"Pacific/Truk\";\n    IanaName[\"PacificGuam\"] = \"Pacific/Guam\";\n    IanaName[\"PacificSaipan\"] = \"Pacific/Saipan\";\n    IanaName[\"EtcGmtMinus_10\"] = \"Etc/GMT-10\";\n    IanaName[\"AustraliaHobart\"] = \"Australia/Hobart\";\n    IanaName[\"AsiaVladivostok\"] = \"Asia/Vladivostok\";\n    IanaName[\"AustraliaLordHowe\"] = \"Australia/Lord_Howe\";\n    IanaName[\"PacificBougainville\"] = \"Pacific/Bougainville\";\n    IanaName[\"AsiaSrednekolymsk\"] = \"Asia/Srednekolymsk\";\n    IanaName[\"AsiaMagadan\"] = \"Asia/Magadan\";\n    IanaName[\"PacificNorfolk\"] = \"Pacific/Norfolk\";\n    IanaName[\"AsiaSakhalin\"] = \"Asia/Sakhalin\";\n    IanaName[\"PacificGuadalcanal\"] = \"Pacific/Guadalcanal\";\n    IanaName[\"AntarcticaMacquarie\"] = \"Antarctica/Macquarie\";\n    IanaName[\"PacificPonape\"] = \"Pacific/Ponape\";\n    IanaName[\"PacificNoumea\"] = \"Pacific/Noumea\";\n    IanaName[\"PacificEfate\"] = \"Pacific/Efate\";\n    IanaName[\"EtcGmtMinus_11\"] = \"Etc/GMT-11\";\n    IanaName[\"AsiaKamchatka\"] = \"Asia/Kamchatka\";\n    IanaName[\"PacificAuckland\"] = \"Pacific/Auckland\";\n    IanaName[\"AntarcticaMcMurdo\"] = \"Antarctica/McMurdo\";\n    IanaName[\"EtcGmtMinus_12\"] = \"Etc/GMT-12\";\n    IanaName[\"PacificTarawa\"] = \"Pacific/Tarawa\";\n    IanaName[\"PacificMajuro\"] = \"Pacific/Majuro\";\n    IanaName[\"PacificNauru\"] = \"Pacific/Nauru\";\n    IanaName[\"PacificFunafuti\"] = \"Pacific/Funafuti\";\n    IanaName[\"PacificWake\"] = \"Pacific/Wake\";\n    IanaName[\"PacificWallis\"] = \"Pacific/Wallis\";\n    IanaName[\"PacificFiji\"] = \"Pacific/Fiji\";\n    IanaName[\"PacificChatham\"] = \"Pacific/Chatham\";\n    IanaName[\"EtcGmtMinus_13\"] = \"Etc/GMT-13\";\n    IanaName[\"PacificEnderbury\"] = \"Pacific/Enderbury\";\n    IanaName[\"PacificFakaofo\"] = \"Pacific/Fakaofo\";\n    IanaName[\"PacificTongatapu\"] = \"Pacific/Tongatapu\";\n    IanaName[\"PacificApia\"] = \"Pacific/Apia\";\n    IanaName[\"PacificKiritimati\"] = \"Pacific/Kiritimati\";\n    IanaName[\"EtcGmtMinus_14\"] = \"Etc/GMT-14\";\n})(IanaName = exports.IanaName || (exports.IanaName = {}));\n//# sourceMappingURL=enums.js.map","\"use strict\";\nexports.__esModule = true;\nvar mapContent = require(\"../windowsZones.json\");\nexports.map = mapContent;\n//# sourceMappingURL=time-zone-map.js.map","'use strict';\n\nvar Sister;\n\n/**\n* @link https://github.com/gajus/sister for the canonical source repository\n* @license https://github.com/gajus/sister/blob/master/LICENSE BSD 3-Clause\n*/\nSister = function () {\n    var sister = {},\n        events = {};\n\n    /**\n     * @name handler\n     * @function\n     * @param {Object} data Event data.\n     */\n\n    /**\n     * @param {String} name Event name.\n     * @param {handler} handler\n     * @return {listener}\n     */\n    sister.on = function (name, handler) {\n        var listener = {name: name, handler: handler};\n        events[name] = events[name] || [];\n        events[name].unshift(listener);\n        return listener;\n    };\n\n    /**\n     * @param {listener}\n     */\n    sister.off = function (listener) {\n        var index = events[listener.name].indexOf(listener);\n\n        if (index !== -1) {\n            events[listener.name].splice(index, 1);\n        }\n    };\n\n    /**\n     * @param {String} name Event name.\n     * @param {Object} data Event data.\n     */\n    sister.trigger = function (name, data) {\n        var listeners = events[name],\n            i;\n\n        if (listeners) {\n            i = listeners.length;\n            while (i--) {\n                listeners[i].handler(data);\n            }\n        }\n    };\n\n    return sister;\n};\n\nmodule.exports = Sister;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _loadScript = require('load-script');\n\nvar _loadScript2 = _interopRequireDefault(_loadScript);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (emitter) {\n  /**\n   * A promise that is resolved when window.onYouTubeIframeAPIReady is called.\n   * The promise is resolved with a reference to window.YT object.\n   */\n  var iframeAPIReady = new Promise(function (resolve) {\n    if (window.YT && window.YT.Player && window.YT.Player instanceof Function) {\n      resolve(window.YT);\n\n      return;\n    } else {\n      var protocol = window.location.protocol === 'http:' ? 'http:' : 'https:';\n\n      (0, _loadScript2.default)(protocol + '//www.youtube.com/iframe_api', function (error) {\n        if (error) {\n          emitter.trigger('error', error);\n        }\n      });\n    }\n\n    var previous = window.onYouTubeIframeAPIReady;\n\n    // The API will call this function when page has finished downloading\n    // the JavaScript for the player API.\n    window.onYouTubeIframeAPIReady = function () {\n      if (previous) {\n        previous();\n      }\n\n      resolve(window.YT);\n    };\n  });\n\n  return iframeAPIReady;\n};\n\nmodule.exports = exports['default'];","\nmodule.exports = function load (src, opts, cb) {\n  var head = document.head || document.getElementsByTagName('head')[0]\n  var script = document.createElement('script')\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n\n  opts = opts || {}\n  cb = cb || function() {}\n\n  script.type = opts.type || 'text/javascript'\n  script.charset = opts.charset || 'utf8';\n  script.async = 'async' in opts ? !!opts.async : true\n  script.src = src\n\n  if (opts.attrs) {\n    setAttributes(script, opts.attrs)\n  }\n\n  if (opts.text) {\n    script.text = '' + opts.text\n  }\n\n  var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n  onend(script, cb)\n\n  // some good legacy browsers (firefox) fail the 'in' detection above\n  // so as a fallback we always set onload\n  // old IE will ignore this and new IE will set onload\n  if (!script.onload) {\n    stdOnEnd(script, cb);\n  }\n\n  head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n  for (var attr in attrs) {\n    script.setAttribute(attr, attrs[attr]);\n  }\n}\n\nfunction stdOnEnd (script, cb) {\n  script.onload = function () {\n    this.onerror = this.onload = null\n    cb(null, script)\n  }\n  script.onerror = function () {\n    // this.onload = null here is necessary\n    // because even IE9 works not like others\n    this.onerror = this.onload = null\n    cb(new Error('Failed to load ' + this.src), script)\n  }\n}\n\nfunction ieOnEnd (script, cb) {\n  script.onreadystatechange = function () {\n    if (this.readyState != 'complete' && this.readyState != 'loaded') return\n    this.onreadystatechange = null\n    cb(null, script) // there is no way to catch loading errors in IE8\n  }\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _debug = require('debug');\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _functionNames = require('./functionNames');\n\nvar _functionNames2 = _interopRequireDefault(_functionNames);\n\nvar _eventNames = require('./eventNames');\n\nvar _eventNames2 = _interopRequireDefault(_eventNames);\n\nvar _FunctionStateMap = require('./FunctionStateMap');\n\nvar _FunctionStateMap2 = _interopRequireDefault(_FunctionStateMap);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* eslint-disable promise/prefer-await-to-then */\n\nvar debug = (0, _debug2.default)('youtube-player');\n\nvar YouTubePlayer = {};\n\n/**\n * Construct an object that defines an event handler for all of the YouTube\n * player events. Proxy captured events through an event emitter.\n *\n * @todo Capture event parameters.\n * @see https://developers.google.com/youtube/iframe_api_reference#Events\n */\nYouTubePlayer.proxyEvents = function (emitter) {\n  var events = {};\n\n  var _loop = function _loop(eventName) {\n    var onEventName = 'on' + eventName.slice(0, 1).toUpperCase() + eventName.slice(1);\n\n    events[onEventName] = function (event) {\n      debug('event \"%s\"', onEventName, event);\n\n      emitter.trigger(eventName, event);\n    };\n  };\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = _eventNames2.default[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var eventName = _step.value;\n\n      _loop(eventName);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return events;\n};\n\n/**\n * Delays player API method execution until player state is ready.\n *\n * @todo Proxy all of the methods using Object.keys.\n * @todo See TRICKY below.\n * @param playerAPIReady Promise that resolves when player is ready.\n * @param strictState A flag designating whether or not to wait for\n * an acceptable state when calling supported functions.\n * @returns {Object}\n */\nYouTubePlayer.promisifyPlayer = function (playerAPIReady) {\n  var strictState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var functions = {};\n\n  var _loop2 = function _loop2(functionName) {\n    if (strictState && _FunctionStateMap2.default[functionName]) {\n      functions[functionName] = function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return playerAPIReady.then(function (player) {\n          var stateInfo = _FunctionStateMap2.default[functionName];\n          var playerState = player.getPlayerState();\n\n          // eslint-disable-next-line no-warning-comments\n          // TODO: Just spread the args into the function once Babel is fixed:\n          // https://github.com/babel/babel/issues/4270\n          //\n          // eslint-disable-next-line prefer-spread\n          var value = player[functionName].apply(player, args);\n\n          // TRICKY: For functions like `seekTo`, a change in state must be\n          // triggered given that the resulting state could match the initial\n          // state.\n          if (stateInfo.stateChangeRequired ||\n\n          // eslint-disable-next-line no-extra-parens\n          Array.isArray(stateInfo.acceptableStates) && stateInfo.acceptableStates.indexOf(playerState) === -1) {\n            return new Promise(function (resolve) {\n              var onPlayerStateChange = function onPlayerStateChange() {\n                var playerStateAfterChange = player.getPlayerState();\n\n                var timeout = void 0;\n\n                if (typeof stateInfo.timeout === 'number') {\n                  timeout = setTimeout(function () {\n                    player.removeEventListener('onStateChange', onPlayerStateChange);\n\n                    resolve();\n                  }, stateInfo.timeout);\n                }\n\n                if (Array.isArray(stateInfo.acceptableStates) && stateInfo.acceptableStates.indexOf(playerStateAfterChange) !== -1) {\n                  player.removeEventListener('onStateChange', onPlayerStateChange);\n\n                  clearTimeout(timeout);\n\n                  resolve();\n                }\n              };\n\n              player.addEventListener('onStateChange', onPlayerStateChange);\n            }).then(function () {\n              return value;\n            });\n          }\n\n          return value;\n        });\n      };\n    } else {\n      functions[functionName] = function () {\n        for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        return playerAPIReady.then(function (player) {\n          // eslint-disable-next-line no-warning-comments\n          // TODO: Just spread the args into the function once Babel is fixed:\n          // https://github.com/babel/babel/issues/4270\n          //\n          // eslint-disable-next-line prefer-spread\n          return player[functionName].apply(player, args);\n        });\n      };\n    }\n  };\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = _functionNames2.default[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var functionName = _step2.value;\n\n      _loop2(functionName);\n    }\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  return functions;\n};\n\nexports.default = YouTubePlayer;\nmodule.exports = exports['default'];","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\n\n/**\n * @see https://developers.google.com/youtube/iframe_api_reference#Functions\n */\nexports.default = ['cueVideoById', 'loadVideoById', 'cueVideoByUrl', 'loadVideoByUrl', 'playVideo', 'pauseVideo', 'stopVideo', 'getVideoLoadedFraction', 'cuePlaylist', 'loadPlaylist', 'nextVideo', 'previousVideo', 'playVideoAt', 'setShuffle', 'setLoop', 'getPlaylist', 'getPlaylistIndex', 'setOption', 'mute', 'unMute', 'isMuted', 'setVolume', 'getVolume', 'seekTo', 'getPlayerState', 'getPlaybackRate', 'setPlaybackRate', 'getAvailablePlaybackRates', 'getPlaybackQuality', 'setPlaybackQuality', 'getAvailableQualityLevels', 'getCurrentTime', 'getDuration', 'removeEventListener', 'getVideoUrl', 'getVideoEmbedCode', 'getOptions', 'getOption', 'addEventListener', 'destroy', 'setSize', 'getIframe'];\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\n\n/**\n * @see https://developers.google.com/youtube/iframe_api_reference#Events\n * `volumeChange` is not officially supported but seems to work\n * it emits an object: `{volume: 82.6923076923077, muted: false}`\n */\nexports.default = ['ready', 'stateChange', 'playbackQualityChange', 'playbackRateChange', 'error', 'apiChange', 'volumeChange'];\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _PlayerStates = require('./constants/PlayerStates');\n\nvar _PlayerStates2 = _interopRequireDefault(_PlayerStates);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n  pauseVideo: {\n    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PAUSED],\n    stateChangeRequired: false\n  },\n  playVideo: {\n    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING],\n    stateChangeRequired: false\n  },\n  seekTo: {\n    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING, _PlayerStates2.default.PAUSED],\n    stateChangeRequired: true,\n\n    // TRICKY: `seekTo` may not cause a state change if no buffering is\n    // required.\n    timeout: 3000\n  }\n};\nmodule.exports = exports['default'];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = {\n  BUFFERING: 3,\n  ENDED: 0,\n  PAUSED: 2,\n  PLAYING: 1,\n  UNSTARTED: -1,\n  VIDEO_CUED: 5\n};\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.toArray = toArray;\nexports.default = Emoji;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _classnames2 = require(\"classnames\");\n\nvar _classnames3 = _interopRequireDefault(_classnames2);\n\nvar _stringReplaceToArray = require(\"string-replace-to-array\");\n\nvar _stringReplaceToArray2 = _interopRequireDefault(_stringReplaceToArray);\n\nvar _emojiRegex = require(\"emoji-regex\");\n\nvar _emojiRegex2 = _interopRequireDefault(_emojiRegex);\n\nvar _asciiRegex = require(\"./asciiRegex\");\n\nvar _asciiRegex2 = _interopRequireDefault(_asciiRegex);\n\nvar _aliasRegex = require(\"./aliasRegex\");\n\nvar _aliasRegex2 = _interopRequireDefault(_aliasRegex);\n\nvar _normalizeProtocol = require(\"./normalizeProtocol\");\n\nvar _normalizeProtocol2 = _interopRequireDefault(_normalizeProtocol);\n\nvar _unicodeToCodepoint = require(\"./unicodeToCodepoint\");\n\nvar _unicodeToCodepoint2 = _interopRequireDefault(_unicodeToCodepoint);\n\nvar _aliases = require(\"../data/aliases\");\n\nvar _aliases2 = _interopRequireDefault(_aliases);\n\nvar _asciiAliases = require(\"../data/asciiAliases\");\n\nvar _asciiAliases2 = _interopRequireDefault(_asciiAliases);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nvar asciiAliasesRegex = (0, _asciiRegex2.default)();\nvar aliasesRegex = (0, _aliasRegex2.default)();\nvar unicodeEmojiRegex = (0, _emojiRegex2.default)();\n\n// using em's we can ensure size matches surrounding font\nvar style = {\n  width: \"1em\",\n  height: \"1em\",\n  margin: \"0 .05em 0 .1em\",\n  verticalAlign: \"-0.1em\"\n};\n\nfunction toArray(text) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var protocol = (0, _normalizeProtocol2.default)(options.protocol);\n\n  function replaceUnicodeEmoji(match, i) {\n    if (!options.baseUrl) {\n      return _react2.default.createElement(\n        \"span\",\n        { key: i, style: style, className: options.className },\n        match\n      );\n    }\n\n    var codepoint = (0, _unicodeToCodepoint2.default)(match, removeHelperCharacters);\n\n    // if Emojione we don't want to add helper characters in the URL\n    var removeHelperCharacters = options.emojione;\n    if (removeHelperCharacters) {\n      codepoint = codepoint.replace(/-200d/g, \"\").replace(/-fe0f/g, \"\");\n    }\n\n    var separator = options.size ? \"/\" : \"\";\n    var src = \"\" + protocol + options.baseUrl + options.size + separator + codepoint + \".\" + options.ext;\n\n    return _react2.default.createElement(\"img\", _extends({\n      key: i,\n      alt: match,\n      src: src,\n      style: style,\n      className: options.className\n    }, options.props));\n  }\n\n  function replaceAsciiAliases() {\n    var asciiAliasKeys = Object.keys(_asciiAliases2.default);\n\n    var fullMatch = arguments.length <= 0 ? undefined : arguments[0];\n    var edgeCase = arguments.length <= 1 ? undefined : arguments[1];\n    var asciiAlias = arguments.length <= 2 ? undefined : arguments[2];\n    var maybeBiggerAliasCharacters = arguments.length <= 3 ? undefined : arguments[3];\n\n    for (var i in asciiAliasKeys) {\n      var alias = asciiAliasKeys[i];\n      var data = _asciiAliases2.default[alias];\n\n      if (data.includes(asciiAlias)) {\n        var isEdgeCase = edgeCase !== undefined;\n\n        if (isEdgeCase) {\n          return fullMatch; // do nothing\n        }\n\n        var isMaybePartOfBiggerAlias = maybeBiggerAliasCharacters !== undefined;\n\n        if (!isMaybePartOfBiggerAlias) {\n          return _aliases2.default[alias]; // replace with unicode\n        } else if (fullMatch[0] === \":\") {\n          var fullMatchContent = fullMatch.slice(1, -1); // remove \":\" at the beginning and end\n          var isPartOfBiggerAlias = _aliases2.default[fullMatchContent] !== undefined; // \":\" + fullMatchContent + \":\" alias doesn't exist\n\n          if (isPartOfBiggerAlias) {\n            return fullMatch; // do nothing\n          }\n        }\n\n        return \"\" + _aliases2.default[alias] + maybeBiggerAliasCharacters; // also return matched characters afterwards to handle them in next iteration\n      }\n    }\n  }\n\n  function replaceAliases() {\n    var fullMatch = arguments.length <= 0 ? undefined : arguments[0];\n    var edgeCase = arguments.length <= 1 ? undefined : arguments[1];\n    var alias = arguments.length <= 2 ? undefined : arguments[2];\n\n    if (edgeCase) {\n      return fullMatch;\n    }\n\n    var aliasEmoji = _aliases2.default[alias];\n\n    return aliasEmoji || fullMatch;\n  }\n\n  // We need to execute several times `string.replace` for cases for such as \":):)\"\n  // As we are forced to match \":):\" to check if it's a normal alias, the second colon is consumed and cannot match again\n  function replaceAllAsciiAliases(textWithAsciiAliases) {\n    var previousTextWithoutAsciiAliases = null;\n    var textWithoutAsciiAliases = textWithAsciiAliases;\n\n    while (previousTextWithoutAsciiAliases !== textWithoutAsciiAliases) {\n      previousTextWithoutAsciiAliases = textWithoutAsciiAliases;\n      textWithoutAsciiAliases = textWithoutAsciiAliases.replace(asciiAliasesRegex, replaceAsciiAliases);\n    }\n\n    return textWithoutAsciiAliases;\n  }\n\n  var replacedText = text;\n  replacedText = replacedText.replace(aliasesRegex, replaceAliases);\n  replacedText = replaceAllAsciiAliases(replacedText);\n  replacedText = replacedText.replace(aliasesRegex, replaceAliases);\n  return (0, _stringReplaceToArray2.default)(replacedText, unicodeEmojiRegex, replaceUnicodeEmoji);\n}\n\nfunction Emoji(_ref) {\n  var text = _ref.text,\n      onlyEmojiClassName = _ref.onlyEmojiClassName,\n      _ref$options = _ref.options,\n      options = _ref$options === undefined ? {} : _ref$options,\n      className = _ref.className,\n      rest = _objectWithoutProperties(_ref, [\"text\", \"onlyEmojiClassName\", \"options\", \"className\"]);\n\n  function isOnlyEmoji(output) {\n    if (output.length > 3) return false;\n\n    for (var i = 0; i < output.length; i++) {\n      if (typeof output[i] === \"string\") return false;\n    }\n\n    return true;\n  }\n\n  var output = toArray(text, options);\n  var classes = (0, _classnames3.default)(className, _defineProperty({}, onlyEmojiClassName, isOnlyEmoji(output)));\n\n  return _react2.default.createElement(\n    \"span\",\n    _extends({}, rest, { className: classes }),\n    output\n  );\n}\n\nEmoji.propTypes = {\n  text: _propTypes2.default.string,\n  props: _propTypes2.default.object,\n  onlyEmojiClassName: _propTypes2.default.string,\n  options: _propTypes2.default.shape({\n    baseUrl: _propTypes2.default.string,\n    size: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),\n    ext: _propTypes2.default.string,\n    className: _propTypes2.default.string\n  })\n};","/*!\n  Copyright (c) 2018 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString === Object.prototype.toString) {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","// Inspiration: https://github.com/facebook/react/issues/3386\n\nvar invariant = require('invariant'),\n\tisString = require('lodash.isstring'),\n\tflatten = require('lodash.flatten')\n\nfunction replace (string, regexpOrSubstr, newValueOrFn) {\n\tinvariant(typeof string === 'string', 'First param must be a string')\n\tinvariant(typeof regexpOrSubstr === 'string' || regexpOrSubstr instanceof RegExp, 'Second param must be a string pattern or a regular expression')\n\n\tvar fn = (typeof regexpOrSubstr === 'string') ? replaceUsingString : replaceUsingRegexp\n\n\treturn fn(string, regexpOrSubstr, newValueOrFn)\n}\n\nfunction replaceUsingString (string, patternString, newValueOrFn) {\n\tvar index = string.indexOf(patternString)\n\n\tif (index >= 0) {\n\t\tvar arr = []\n\t\tvar endIndex = index + patternString.length\n\n\t\tif (index > 0) {\n\t\t\tarr.push(string.substring(0, index))\n\t\t}\n\n\t\tarr.push(\n\t\t\t(typeof newValueOrFn === 'function') ?\n\t\t\t\tnewValueOrFn(\n\t\t\t\t\tstring.substring(index, endIndex),\n\t\t\t\t\tindex,\n\t\t\t\t\tstring\n\t\t\t\t) :\n\t\t\t\tnewValueOrFn\n\t\t)\n\n\t\tif (endIndex < string.length) {\n\t\t\tarr.push(string.substring(endIndex))\n\t\t}\n\n\t\treturn arr\n\t} else {\n\t\treturn [string]\n\t}\n}\n\nfunction replaceUsingRegexp (string, regexp, newValueOrFn) {\n\tvar output = []\n\n\tvar replacerIsFn = (typeof newValueOrFn === 'function')\n\n\tvar storedLastIndex = regexp.lastIndex\n\tregexp.lastIndex = 0\n\n\tvar result\n\tvar lastIndex = 0\n\twhile (result = regexp.exec(string)) {\n\t\tvar index = result.index\n\n\t\tif (result[0] === '') {\n\t\t\t// When the regexp is an empty string\n\t\t\t// we still want to advance our cursor to the next item.\n\t\t\t// This is the behavior of String.replace.\n\t\t\tregexp.lastIndex++\n\t\t}\n\n\t\tif (index !== lastIndex) {\n\t\t\toutput.push(string.substring(lastIndex, index))\n\t\t}\n\n\t\tvar match = result[0]\n\t\tlastIndex = index + match.length\n\t\t\n\t\tvar out = replacerIsFn ?\n\t\t\tnewValueOrFn.apply(this, result.concat(index, result.input)) :\n\t\t\tnewValueOrFn\n\t\toutput.push(out)\n\n\t\tif (!regexp.global) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif (lastIndex < string.length) {\n\t\toutput.push(string.substring(lastIndex))\n\t}\n\n\tregexp.lastIndex = storedLastIndex\n\treturn output\n}\n\nmodule.exports = function stringReplaceToArray (string, regexpOrSubstr, newSubStrOrFn) {\n\tif (isString(string)) {\n\t\treturn replace(string, regexpOrSubstr, newSubStrOrFn)\n\t} else if (!Array.isArray(string) || !string[0]) {\n\t\tthrow new TypeError('First argument must be an array or non-empty string');\n\t} else {\n\t\treturn flatten(string.map(function (string) {\n\t\t\tif (!isString(string)) return string\n\t\t\treturn replace(string, regexpOrSubstr, newSubStrOrFn)\n\t\t}))\n\t}\n}","/**\n * Copyright (c) 2013-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\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\n * lodash 4.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","\"use strict\";\n\nmodule.exports = function () {\n\t// https://mathiasbynens.be/notes/es-unicode-property-escapes#emoji\n\treturn (/\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74)\\uDB40\\uDC7F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC68(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]\\uFE0F|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]))|\\uD83D\\uDC69\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83D\\uDC69\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC68(?:\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDD1-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC69\\uDC6E\\uDC70-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3D\\uDD3E\\uDDD1-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])?|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDEEB\\uDEEC\\uDEF4-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])\\uFE0F/g\n\t);\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  return new RegExp(\"(\" + edgeCases + \")?(\" + names + \")([\" + _aliasRegex.allowedAliasCharacters + \"]*:)?\", \"g\");\n};\n\nvar _asciiAliases = require(\"../data/asciiAliases\");\n\nvar _asciiAliases2 = _interopRequireDefault(_asciiAliases);\n\nvar _lodash = require(\"lodash.flatten\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _aliasRegex = require(\"./aliasRegex\");\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar names = (0, _lodash2.default)(Object.keys(_asciiAliases2.default).map(function (name) {\n  return _asciiAliases2.default[name].map(_utils.escapeStringToBeUsedInRegExp);\n})).join(\"|\");\n\nvar edgeCases = [_aliasRegex.startOfURL].join(\"|\");\n\n// Regex reads as following:\n//\n// Match ascii aliases with optional edge cases before it (to know if parsing is needed)\n// Additionally, after the ascii alias:\n//    - Forbid edge cases\n//    - Allow characters included in normal aliases (to check later cases like :s and :smile:)","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.escapeStringToBeUsedInRegExp = escapeStringToBeUsedInRegExp;\nfunction escapeStringToBeUsedInRegExp(string) {\n  return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = normalizeProtocol;\n// ensure protocol has trailing : if missing\nfunction normalizeProtocol(protocol) {\n  if (protocol && !protocol.endsWith(\":\")) return protocol + \":\";\n  return protocol;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = unicodeToCodepoint;\n// avoid runtime RegExp creation for not so smart,\n// not JIT based, and old browsers / engines\n// https://github.com/twitter/twemoji/blob/gh-pages/2/twemoji.js#L232\nvar UFE0Fg = /\\uFE0F/g;\n\n// \\u200D is a zero-width joiner character\n// https://github.com/twitter/twemoji/blob/gh-pages/2/twemoji.js#L235\nvar U200D = String.fromCharCode(0x200d);\n\n// convert utf16 into code points\nfunction toCodePoint(input) {\n  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"-\";\n\n  var codePoints = [];\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var codePoint = _step.value;\n\n      codePoints.push(codePoint.codePointAt(0).toString(16));\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return codePoints.join(separator);\n}\n\nfunction unicodeToCodepoint(input) {\n  return toCodePoint(input.indexOf(U200D) < 0 ? input.replace(UFE0Fg, \"\") : input);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar defaults = {\n  tName: 't',\n  i18nName: 'i18n',\n  handleName: 'localize',\n  selectorAttr: 'data-i18n',\n  targetAttr: 'i18n-target',\n  optionsAttr: 'i18n-options',\n  useOptionsAttr: false,\n  parseDefaultValueFromContent: true\n};\n\nfunction init(i18next, $) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\n  options = _extends({}, defaults, options);\n\n  function parse(ele, key, opts) {\n    if (key.length === 0) return;\n\n    var attr = 'text';\n\n    if (key.indexOf('[') === 0) {\n      var parts = key.split(']');\n      key = parts[1];\n      attr = parts[0].substr(1, parts[0].length - 1);\n    }\n\n    if (key.indexOf(';') === key.length - 1) {\n      key = key.substr(0, key.length - 2);\n    }\n\n    function extendDefault(o, val) {\n      if (!options.parseDefaultValueFromContent) return o;\n      return _extends({}, o, { defaultValue: val });\n    }\n\n    if (attr === 'html') {\n      ele.html(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr === 'text') {\n      ele.text(i18next.t(key, extendDefault(opts, ele.text())));\n    } else if (attr === 'prepend') {\n      ele.prepend(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr === 'append') {\n      ele.append(i18next.t(key, extendDefault(opts, ele.html())));\n    } else if (attr.indexOf('data-') === 0) {\n      var dataAttr = attr.substr('data-'.length);\n      var translated = i18next.t(key, extendDefault(opts, ele.data(dataAttr)));\n\n      // we change into the data cache\n      ele.data(dataAttr, translated);\n      // we change into the dom\n      ele.attr(attr, translated);\n    } else {\n      ele.attr(attr, i18next.t(key, extendDefault(opts, ele.attr(attr))));\n    }\n  }\n\n  function localize(ele, opts) {\n    var key = ele.attr(options.selectorAttr);\n    if (!key && typeof key !== 'undefined' && key !== false) key = ele.text() || ele.val();\n    if (!key) return;\n\n    var target = ele,\n        targetSelector = ele.data(options.targetAttr);\n\n    if (targetSelector) target = ele.find(targetSelector) || ele;\n\n    if (!opts && options.useOptionsAttr === true) opts = ele.data(options.optionsAttr);\n\n    opts = opts || {};\n\n    if (key.indexOf(';') >= 0) {\n      var keys = key.split(';');\n\n      $.each(keys, function (m, k) {\n        // .trim(): Trim the comma-separated parameters on the data-i18n attribute.\n        if (k !== '') parse(target, k.trim(), opts);\n      });\n    } else {\n      parse(target, key, opts);\n    }\n\n    if (options.useOptionsAttr === true) {\n      var clone = {};\n      clone = _extends({ clone: clone }, opts);\n\n      delete clone.lng;\n      ele.data(options.optionsAttr, clone);\n    }\n  }\n\n  function handle(opts) {\n    return this.each(function () {\n      // localize element itself\n      localize($(this), opts);\n\n      // localize children\n      var elements = $(this).find('[' + options.selectorAttr + ']');\n      elements.each(function () {\n        localize($(this), opts);\n      });\n    });\n  };\n\n  // $.t $.i18n shortcut\n  $[options.tName] = i18next.t.bind(i18next);\n  $[options.i18nName] = i18next;\n\n  // selector function $(mySelector).localize(opts);\n  $.fn[options.handleName] = handle;\n}\n\nexports.default = {\n  init: init\n};","// Generated by CoffeeScript 1.10.0\nvar DATE_MAX_YEAR, DATE_MIN_YEAR, DATE_SPLITS, GRAPHS, L33T_TABLE, RANKED_DICTIONARIES, REGEXEN, adjacency_graphs, build_ranked_dict, frequency_lists, lst, matching, name, scoring;\n\nfrequency_lists = require('./frequency_lists');\n\nadjacency_graphs = require('./adjacency_graphs');\n\nscoring = require('./scoring');\n\nbuild_ranked_dict = function(ordered_list) {\n  var i, len1, o, result, word;\n  result = {};\n  i = 1;\n  for (o = 0, len1 = ordered_list.length; o < len1; o++) {\n    word = ordered_list[o];\n    result[word] = i;\n    i += 1;\n  }\n  return result;\n};\n\nRANKED_DICTIONARIES = {};\n\nfor (name in frequency_lists) {\n  lst = frequency_lists[name];\n  RANKED_DICTIONARIES[name] = build_ranked_dict(lst);\n}\n\nGRAPHS = {\n  qwerty: adjacency_graphs.qwerty,\n  dvorak: adjacency_graphs.dvorak,\n  keypad: adjacency_graphs.keypad,\n  mac_keypad: adjacency_graphs.mac_keypad\n};\n\nL33T_TABLE = {\n  a: ['4', '@'],\n  b: ['8'],\n  c: ['(', '{', '[', '<'],\n  e: ['3'],\n  g: ['6', '9'],\n  i: ['1', '!', '|'],\n  l: ['1', '|', '7'],\n  o: ['0'],\n  s: ['$', '5'],\n  t: ['+', '7'],\n  x: ['%'],\n  z: ['2']\n};\n\nREGEXEN = {\n  recent_year: /19\\d\\d|200\\d|201\\d/g\n};\n\nDATE_MAX_YEAR = 2050;\n\nDATE_MIN_YEAR = 1000;\n\nDATE_SPLITS = {\n  4: [[1, 2], [2, 3]],\n  5: [[1, 3], [2, 3]],\n  6: [[1, 2], [2, 4], [4, 5]],\n  7: [[1, 3], [2, 3], [4, 5], [4, 6]],\n  8: [[2, 4], [4, 6]]\n};\n\nmatching = {\n  empty: function(obj) {\n    var k;\n    return ((function() {\n      var results;\n      results = [];\n      for (k in obj) {\n        results.push(k);\n      }\n      return results;\n    })()).length === 0;\n  },\n  extend: function(lst, lst2) {\n    return lst.push.apply(lst, lst2);\n  },\n  translate: function(string, chr_map) {\n    var chr;\n    return ((function() {\n      var len1, o, ref, results;\n      ref = string.split('');\n      results = [];\n      for (o = 0, len1 = ref.length; o < len1; o++) {\n        chr = ref[o];\n        results.push(chr_map[chr] || chr);\n      }\n      return results;\n    })()).join('');\n  },\n  mod: function(n, m) {\n    return ((n % m) + m) % m;\n  },\n  sorted: function(matches) {\n    return matches.sort(function(m1, m2) {\n      return (m1.i - m2.i) || (m1.j - m2.j);\n    });\n  },\n  omnimatch: function(password) {\n    var len1, matcher, matchers, matches, o;\n    matches = [];\n    matchers = [this.dictionary_match, this.reverse_dictionary_match, this.l33t_match, this.spatial_match, this.repeat_match, this.sequence_match, this.regex_match, this.date_match];\n    for (o = 0, len1 = matchers.length; o < len1; o++) {\n      matcher = matchers[o];\n      this.extend(matches, matcher.call(this, password));\n    }\n    return this.sorted(matches);\n  },\n  dictionary_match: function(password, _ranked_dictionaries) {\n    var dictionary_name, i, j, len, matches, o, p, password_lower, rank, ranked_dict, ref, ref1, ref2, word;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    matches = [];\n    len = password.length;\n    password_lower = password.toLowerCase();\n    for (dictionary_name in _ranked_dictionaries) {\n      ranked_dict = _ranked_dictionaries[dictionary_name];\n      for (i = o = 0, ref = len; 0 <= ref ? o < ref : o > ref; i = 0 <= ref ? ++o : --o) {\n        for (j = p = ref1 = i, ref2 = len; ref1 <= ref2 ? p < ref2 : p > ref2; j = ref1 <= ref2 ? ++p : --p) {\n          if (password_lower.slice(i, +j + 1 || 9e9) in ranked_dict) {\n            word = password_lower.slice(i, +j + 1 || 9e9);\n            rank = ranked_dict[word];\n            matches.push({\n              pattern: 'dictionary',\n              i: i,\n              j: j,\n              token: password.slice(i, +j + 1 || 9e9),\n              matched_word: word,\n              rank: rank,\n              dictionary_name: dictionary_name,\n              reversed: false,\n              l33t: false\n            });\n          }\n        }\n      }\n    }\n    return this.sorted(matches);\n  },\n  reverse_dictionary_match: function(password, _ranked_dictionaries) {\n    var len1, match, matches, o, ref, reversed_password;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    reversed_password = password.split('').reverse().join('');\n    matches = this.dictionary_match(reversed_password, _ranked_dictionaries);\n    for (o = 0, len1 = matches.length; o < len1; o++) {\n      match = matches[o];\n      match.token = match.token.split('').reverse().join('');\n      match.reversed = true;\n      ref = [password.length - 1 - match.j, password.length - 1 - match.i], match.i = ref[0], match.j = ref[1];\n    }\n    return this.sorted(matches);\n  },\n  set_user_input_dictionary: function(ordered_list) {\n    return RANKED_DICTIONARIES['user_inputs'] = build_ranked_dict(ordered_list.slice());\n  },\n  relevant_l33t_subtable: function(password, table) {\n    var chr, len1, letter, o, password_chars, ref, relevant_subs, sub, subs, subtable;\n    password_chars = {};\n    ref = password.split('');\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      chr = ref[o];\n      password_chars[chr] = true;\n    }\n    subtable = {};\n    for (letter in table) {\n      subs = table[letter];\n      relevant_subs = (function() {\n        var len2, p, results;\n        results = [];\n        for (p = 0, len2 = subs.length; p < len2; p++) {\n          sub = subs[p];\n          if (sub in password_chars) {\n            results.push(sub);\n          }\n        }\n        return results;\n      })();\n      if (relevant_subs.length > 0) {\n        subtable[letter] = relevant_subs;\n      }\n    }\n    return subtable;\n  },\n  enumerate_l33t_subs: function(table) {\n    var chr, dedup, helper, k, keys, l33t_chr, len1, len2, o, p, ref, sub, sub_dict, sub_dicts, subs;\n    keys = (function() {\n      var results;\n      results = [];\n      for (k in table) {\n        results.push(k);\n      }\n      return results;\n    })();\n    subs = [[]];\n    dedup = function(subs) {\n      var assoc, deduped, label, len1, members, o, sub, v;\n      deduped = [];\n      members = {};\n      for (o = 0, len1 = subs.length; o < len1; o++) {\n        sub = subs[o];\n        assoc = (function() {\n          var len2, p, results;\n          results = [];\n          for (v = p = 0, len2 = sub.length; p < len2; v = ++p) {\n            k = sub[v];\n            results.push([k, v]);\n          }\n          return results;\n        })();\n        assoc.sort();\n        label = ((function() {\n          var len2, p, results;\n          results = [];\n          for (v = p = 0, len2 = assoc.length; p < len2; v = ++p) {\n            k = assoc[v];\n            results.push(k + ',' + v);\n          }\n          return results;\n        })()).join('-');\n        if (!(label in members)) {\n          members[label] = true;\n          deduped.push(sub);\n        }\n      }\n      return deduped;\n    };\n    helper = function(keys) {\n      var dup_l33t_index, first_key, i, l33t_chr, len1, len2, next_subs, o, p, q, ref, ref1, rest_keys, sub, sub_alternative, sub_extension;\n      if (!keys.length) {\n        return;\n      }\n      first_key = keys[0];\n      rest_keys = keys.slice(1);\n      next_subs = [];\n      ref = table[first_key];\n      for (o = 0, len1 = ref.length; o < len1; o++) {\n        l33t_chr = ref[o];\n        for (p = 0, len2 = subs.length; p < len2; p++) {\n          sub = subs[p];\n          dup_l33t_index = -1;\n          for (i = q = 0, ref1 = sub.length; 0 <= ref1 ? q < ref1 : q > ref1; i = 0 <= ref1 ? ++q : --q) {\n            if (sub[i][0] === l33t_chr) {\n              dup_l33t_index = i;\n              break;\n            }\n          }\n          if (dup_l33t_index === -1) {\n            sub_extension = sub.concat([[l33t_chr, first_key]]);\n            next_subs.push(sub_extension);\n          } else {\n            sub_alternative = sub.slice(0);\n            sub_alternative.splice(dup_l33t_index, 1);\n            sub_alternative.push([l33t_chr, first_key]);\n            next_subs.push(sub);\n            next_subs.push(sub_alternative);\n          }\n        }\n      }\n      subs = dedup(next_subs);\n      return helper(rest_keys);\n    };\n    helper(keys);\n    sub_dicts = [];\n    for (o = 0, len1 = subs.length; o < len1; o++) {\n      sub = subs[o];\n      sub_dict = {};\n      for (p = 0, len2 = sub.length; p < len2; p++) {\n        ref = sub[p], l33t_chr = ref[0], chr = ref[1];\n        sub_dict[l33t_chr] = chr;\n      }\n      sub_dicts.push(sub_dict);\n    }\n    return sub_dicts;\n  },\n  l33t_match: function(password, _ranked_dictionaries, _l33t_table) {\n    var chr, k, len1, len2, match, match_sub, matches, o, p, ref, ref1, sub, subbed_chr, subbed_password, token, v;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    if (_l33t_table == null) {\n      _l33t_table = L33T_TABLE;\n    }\n    matches = [];\n    ref = this.enumerate_l33t_subs(this.relevant_l33t_subtable(password, _l33t_table));\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      sub = ref[o];\n      if (this.empty(sub)) {\n        break;\n      }\n      subbed_password = this.translate(password, sub);\n      ref1 = this.dictionary_match(subbed_password, _ranked_dictionaries);\n      for (p = 0, len2 = ref1.length; p < len2; p++) {\n        match = ref1[p];\n        token = password.slice(match.i, +match.j + 1 || 9e9);\n        if (token.toLowerCase() === match.matched_word) {\n          continue;\n        }\n        match_sub = {};\n        for (subbed_chr in sub) {\n          chr = sub[subbed_chr];\n          if (token.indexOf(subbed_chr) !== -1) {\n            match_sub[subbed_chr] = chr;\n          }\n        }\n        match.l33t = true;\n        match.token = token;\n        match.sub = match_sub;\n        match.sub_display = ((function() {\n          var results;\n          results = [];\n          for (k in match_sub) {\n            v = match_sub[k];\n            results.push(k + \" -> \" + v);\n          }\n          return results;\n        })()).join(', ');\n        matches.push(match);\n      }\n    }\n    return this.sorted(matches.filter(function(match) {\n      return match.token.length > 1;\n    }));\n  },\n  spatial_match: function(password, _graphs) {\n    var graph, graph_name, matches;\n    if (_graphs == null) {\n      _graphs = GRAPHS;\n    }\n    matches = [];\n    for (graph_name in _graphs) {\n      graph = _graphs[graph_name];\n      this.extend(matches, this.spatial_match_helper(password, graph, graph_name));\n    }\n    return this.sorted(matches);\n  },\n  SHIFTED_RX: /[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?]/,\n  spatial_match_helper: function(password, graph, graph_name) {\n    var adj, adjacents, cur_char, cur_direction, found, found_direction, i, j, last_direction, len1, matches, o, prev_char, shifted_count, turns;\n    matches = [];\n    i = 0;\n    while (i < password.length - 1) {\n      j = i + 1;\n      last_direction = null;\n      turns = 0;\n      if ((graph_name === 'qwerty' || graph_name === 'dvorak') && this.SHIFTED_RX.exec(password.charAt(i))) {\n        shifted_count = 1;\n      } else {\n        shifted_count = 0;\n      }\n      while (true) {\n        prev_char = password.charAt(j - 1);\n        found = false;\n        found_direction = -1;\n        cur_direction = -1;\n        adjacents = graph[prev_char] || [];\n        if (j < password.length) {\n          cur_char = password.charAt(j);\n          for (o = 0, len1 = adjacents.length; o < len1; o++) {\n            adj = adjacents[o];\n            cur_direction += 1;\n            if (adj && adj.indexOf(cur_char) !== -1) {\n              found = true;\n              found_direction = cur_direction;\n              if (adj.indexOf(cur_char) === 1) {\n                shifted_count += 1;\n              }\n              if (last_direction !== found_direction) {\n                turns += 1;\n                last_direction = found_direction;\n              }\n              break;\n            }\n          }\n        }\n        if (found) {\n          j += 1;\n        } else {\n          if (j - i > 2) {\n            matches.push({\n              pattern: 'spatial',\n              i: i,\n              j: j - 1,\n              token: password.slice(i, j),\n              graph: graph_name,\n              turns: turns,\n              shifted_count: shifted_count\n            });\n          }\n          i = j;\n          break;\n        }\n      }\n    }\n    return matches;\n  },\n  repeat_match: function(password) {\n    var base_analysis, base_guesses, base_matches, base_token, greedy, greedy_match, i, j, lastIndex, lazy, lazy_anchored, lazy_match, match, matches, ref;\n    matches = [];\n    greedy = /(.+)\\1+/g;\n    lazy = /(.+?)\\1+/g;\n    lazy_anchored = /^(.+?)\\1+$/;\n    lastIndex = 0;\n    while (lastIndex < password.length) {\n      greedy.lastIndex = lazy.lastIndex = lastIndex;\n      greedy_match = greedy.exec(password);\n      lazy_match = lazy.exec(password);\n      if (greedy_match == null) {\n        break;\n      }\n      if (greedy_match[0].length > lazy_match[0].length) {\n        match = greedy_match;\n        base_token = lazy_anchored.exec(match[0])[1];\n      } else {\n        match = lazy_match;\n        base_token = match[1];\n      }\n      ref = [match.index, match.index + match[0].length - 1], i = ref[0], j = ref[1];\n      base_analysis = scoring.most_guessable_match_sequence(base_token, this.omnimatch(base_token));\n      base_matches = base_analysis.sequence;\n      base_guesses = base_analysis.guesses;\n      matches.push({\n        pattern: 'repeat',\n        i: i,\n        j: j,\n        token: match[0],\n        base_token: base_token,\n        base_guesses: base_guesses,\n        base_matches: base_matches,\n        repeat_count: match[0].length / base_token.length\n      });\n      lastIndex = j + 1;\n    }\n    return matches;\n  },\n  MAX_DELTA: 5,\n  sequence_match: function(password) {\n    var delta, i, j, k, last_delta, o, ref, result, update;\n    if (password.length === 1) {\n      return [];\n    }\n    update = (function(_this) {\n      return function(i, j, delta) {\n        var ref, sequence_name, sequence_space, token;\n        if (j - i > 1 || Math.abs(delta) === 1) {\n          if ((0 < (ref = Math.abs(delta)) && ref <= _this.MAX_DELTA)) {\n            token = password.slice(i, +j + 1 || 9e9);\n            if (/^[a-z]+$/.test(token)) {\n              sequence_name = 'lower';\n              sequence_space = 26;\n            } else if (/^[A-Z]+$/.test(token)) {\n              sequence_name = 'upper';\n              sequence_space = 26;\n            } else if (/^\\d+$/.test(token)) {\n              sequence_name = 'digits';\n              sequence_space = 10;\n            } else {\n              sequence_name = 'unicode';\n              sequence_space = 26;\n            }\n            return result.push({\n              pattern: 'sequence',\n              i: i,\n              j: j,\n              token: password.slice(i, +j + 1 || 9e9),\n              sequence_name: sequence_name,\n              sequence_space: sequence_space,\n              ascending: delta > 0\n            });\n          }\n        }\n      };\n    })(this);\n    result = [];\n    i = 0;\n    last_delta = null;\n    for (k = o = 1, ref = password.length; 1 <= ref ? o < ref : o > ref; k = 1 <= ref ? ++o : --o) {\n      delta = password.charCodeAt(k) - password.charCodeAt(k - 1);\n      if (last_delta == null) {\n        last_delta = delta;\n      }\n      if (delta === last_delta) {\n        continue;\n      }\n      j = k - 1;\n      update(i, j, last_delta);\n      i = j;\n      last_delta = delta;\n    }\n    update(i, password.length - 1, last_delta);\n    return result;\n  },\n  regex_match: function(password, _regexen) {\n    var matches, regex, rx_match, token;\n    if (_regexen == null) {\n      _regexen = REGEXEN;\n    }\n    matches = [];\n    for (name in _regexen) {\n      regex = _regexen[name];\n      regex.lastIndex = 0;\n      while (rx_match = regex.exec(password)) {\n        token = rx_match[0];\n        matches.push({\n          pattern: 'regex',\n          token: token,\n          i: rx_match.index,\n          j: rx_match.index + rx_match[0].length - 1,\n          regex_name: name,\n          regex_match: rx_match\n        });\n      }\n    }\n    return this.sorted(matches);\n  },\n  date_match: function(password) {\n    var best_candidate, candidate, candidates, distance, dmy, i, j, k, l, len1, len2, matches, maybe_date_no_separator, maybe_date_with_separator, metric, min_distance, o, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, rx_match, s, t, token;\n    matches = [];\n    maybe_date_no_separator = /^\\d{4,8}$/;\n    maybe_date_with_separator = /^(\\d{1,4})([\\s\\/\\\\_.-])(\\d{1,2})\\2(\\d{1,4})$/;\n    for (i = o = 0, ref = password.length - 4; 0 <= ref ? o <= ref : o >= ref; i = 0 <= ref ? ++o : --o) {\n      for (j = p = ref1 = i + 3, ref2 = i + 7; ref1 <= ref2 ? p <= ref2 : p >= ref2; j = ref1 <= ref2 ? ++p : --p) {\n        if (j >= password.length) {\n          break;\n        }\n        token = password.slice(i, +j + 1 || 9e9);\n        if (!maybe_date_no_separator.exec(token)) {\n          continue;\n        }\n        candidates = [];\n        ref3 = DATE_SPLITS[token.length];\n        for (q = 0, len1 = ref3.length; q < len1; q++) {\n          ref4 = ref3[q], k = ref4[0], l = ref4[1];\n          dmy = this.map_ints_to_dmy([parseInt(token.slice(0, k)), parseInt(token.slice(k, l)), parseInt(token.slice(l))]);\n          if (dmy != null) {\n            candidates.push(dmy);\n          }\n        }\n        if (!(candidates.length > 0)) {\n          continue;\n        }\n        best_candidate = candidates[0];\n        metric = function(candidate) {\n          return Math.abs(candidate.year - scoring.REFERENCE_YEAR);\n        };\n        min_distance = metric(candidates[0]);\n        ref5 = candidates.slice(1);\n        for (r = 0, len2 = ref5.length; r < len2; r++) {\n          candidate = ref5[r];\n          distance = metric(candidate);\n          if (distance < min_distance) {\n            ref6 = [candidate, distance], best_candidate = ref6[0], min_distance = ref6[1];\n          }\n        }\n        matches.push({\n          pattern: 'date',\n          token: token,\n          i: i,\n          j: j,\n          separator: '',\n          year: best_candidate.year,\n          month: best_candidate.month,\n          day: best_candidate.day\n        });\n      }\n    }\n    for (i = s = 0, ref7 = password.length - 6; 0 <= ref7 ? s <= ref7 : s >= ref7; i = 0 <= ref7 ? ++s : --s) {\n      for (j = t = ref8 = i + 5, ref9 = i + 9; ref8 <= ref9 ? t <= ref9 : t >= ref9; j = ref8 <= ref9 ? ++t : --t) {\n        if (j >= password.length) {\n          break;\n        }\n        token = password.slice(i, +j + 1 || 9e9);\n        rx_match = maybe_date_with_separator.exec(token);\n        if (rx_match == null) {\n          continue;\n        }\n        dmy = this.map_ints_to_dmy([parseInt(rx_match[1]), parseInt(rx_match[3]), parseInt(rx_match[4])]);\n        if (dmy == null) {\n          continue;\n        }\n        matches.push({\n          pattern: 'date',\n          token: token,\n          i: i,\n          j: j,\n          separator: rx_match[2],\n          year: dmy.year,\n          month: dmy.month,\n          day: dmy.day\n        });\n      }\n    }\n    return this.sorted(matches.filter(function(match) {\n      var is_submatch, len3, other_match, u;\n      is_submatch = false;\n      for (u = 0, len3 = matches.length; u < len3; u++) {\n        other_match = matches[u];\n        if (match === other_match) {\n          continue;\n        }\n        if (other_match.i <= match.i && other_match.j >= match.j) {\n          is_submatch = true;\n          break;\n        }\n      }\n      return !is_submatch;\n    }));\n  },\n  map_ints_to_dmy: function(ints) {\n    var dm, int, len1, len2, len3, o, over_12, over_31, p, possible_year_splits, q, ref, ref1, rest, under_1, y;\n    if (ints[1] > 31 || ints[1] <= 0) {\n      return;\n    }\n    over_12 = 0;\n    over_31 = 0;\n    under_1 = 0;\n    for (o = 0, len1 = ints.length; o < len1; o++) {\n      int = ints[o];\n      if ((99 < int && int < DATE_MIN_YEAR) || int > DATE_MAX_YEAR) {\n        return;\n      }\n      if (int > 31) {\n        over_31 += 1;\n      }\n      if (int > 12) {\n        over_12 += 1;\n      }\n      if (int <= 0) {\n        under_1 += 1;\n      }\n    }\n    if (over_31 >= 2 || over_12 === 3 || under_1 >= 2) {\n      return;\n    }\n    possible_year_splits = [[ints[2], ints.slice(0, 2)], [ints[0], ints.slice(1, 3)]];\n    for (p = 0, len2 = possible_year_splits.length; p < len2; p++) {\n      ref = possible_year_splits[p], y = ref[0], rest = ref[1];\n      if ((DATE_MIN_YEAR <= y && y <= DATE_MAX_YEAR)) {\n        dm = this.map_ints_to_dm(rest);\n        if (dm != null) {\n          return {\n            year: y,\n            month: dm.month,\n            day: dm.day\n          };\n        } else {\n          return;\n        }\n      }\n    }\n    for (q = 0, len3 = possible_year_splits.length; q < len3; q++) {\n      ref1 = possible_year_splits[q], y = ref1[0], rest = ref1[1];\n      dm = this.map_ints_to_dm(rest);\n      if (dm != null) {\n        y = this.two_to_four_digit_year(y);\n        return {\n          year: y,\n          month: dm.month,\n          day: dm.day\n        };\n      }\n    }\n  },\n  map_ints_to_dm: function(ints) {\n    var d, len1, m, o, ref, ref1;\n    ref = [ints, ints.slice().reverse()];\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      ref1 = ref[o], d = ref1[0], m = ref1[1];\n      if ((1 <= d && d <= 31) && (1 <= m && m <= 12)) {\n        return {\n          day: d,\n          month: m\n        };\n      }\n    }\n  },\n  two_to_four_digit_year: function(year) {\n    if (year > 99) {\n      return year;\n    } else if (year > 50) {\n      return year + 1900;\n    } else {\n      return year + 2000;\n    }\n  }\n};\n\nmodule.exports = matching;\n\n//# sourceMappingURL=matching.js.map\n","// Generated by CoffeeScript 1.10.0\nvar frequency_lists;\n\nfrequency_lists = {\n  passwords: \"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic\\'s,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy\".split(\",\"),\n  english_wikipedia: \"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator\".split(\",\"),\n  female_names: \"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn\".split(\",\"),\n  surnames: \"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette\".split(\",\"),\n  us_tv_and_film: \"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right\".split(\",\"),\n  male_names: \"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso\".split(\",\")\n};\n\nmodule.exports = frequency_lists;\n\n//# sourceMappingURL=frequency_lists.js.map\n","// Generated by CoffeeScript 1.10.0\nvar time_estimates;\n\ntime_estimates = {\n  estimate_attack_times: function(guesses) {\n    var crack_times_display, crack_times_seconds, scenario, seconds;\n    crack_times_seconds = {\n      online_throttling_100_per_hour: guesses / (100 / 3600),\n      online_no_throttling_10_per_second: guesses / 10,\n      offline_slow_hashing_1e4_per_second: guesses / 1e4,\n      offline_fast_hashing_1e10_per_second: guesses / 1e10\n    };\n    crack_times_display = {};\n    for (scenario in crack_times_seconds) {\n      seconds = crack_times_seconds[scenario];\n      crack_times_display[scenario] = this.display_time(seconds);\n    }\n    return {\n      crack_times_seconds: crack_times_seconds,\n      crack_times_display: crack_times_display,\n      score: this.guesses_to_score(guesses)\n    };\n  },\n  guesses_to_score: function(guesses) {\n    var DELTA;\n    DELTA = 5;\n    if (guesses < 1e3 + DELTA) {\n      return 0;\n    } else if (guesses < 1e6 + DELTA) {\n      return 1;\n    } else if (guesses < 1e8 + DELTA) {\n      return 2;\n    } else if (guesses < 1e10 + DELTA) {\n      return 3;\n    } else {\n      return 4;\n    }\n  },\n  display_time: function(seconds) {\n    var base, century, day, display_num, display_str, hour, minute, month, ref, year;\n    minute = 60;\n    hour = minute * 60;\n    day = hour * 24;\n    month = day * 31;\n    year = month * 12;\n    century = year * 100;\n    ref = seconds < 1 ? [null, 'less than a second'] : seconds < minute ? (base = Math.round(seconds), [base, base + \" second\"]) : seconds < hour ? (base = Math.round(seconds / minute), [base, base + \" minute\"]) : seconds < day ? (base = Math.round(seconds / hour), [base, base + \" hour\"]) : seconds < month ? (base = Math.round(seconds / day), [base, base + \" day\"]) : seconds < year ? (base = Math.round(seconds / month), [base, base + \" month\"]) : seconds < century ? (base = Math.round(seconds / year), [base, base + \" year\"]) : [null, 'centuries'], display_num = ref[0], display_str = ref[1];\n    if ((display_num != null) && display_num !== 1) {\n      display_str += 's';\n    }\n    return display_str;\n  }\n};\n\nmodule.exports = time_estimates;\n\n//# sourceMappingURL=time_estimates.js.map\n","// Generated by CoffeeScript 1.10.0\nvar feedback, scoring;\n\nscoring = require('./scoring');\n\nfeedback = {\n  default_feedback: {\n    warning: '',\n    suggestions: [\"Use a few words, avoid common phrases\", \"No need for symbols, digits, or uppercase letters\"]\n  },\n  get_feedback: function(score, sequence) {\n    var extra_feedback, i, len, longest_match, match, ref;\n    if (sequence.length === 0) {\n      return this.default_feedback;\n    }\n    if (score > 2) {\n      return {\n        warning: '',\n        suggestions: []\n      };\n    }\n    longest_match = sequence[0];\n    ref = sequence.slice(1);\n    for (i = 0, len = ref.length; i < len; i++) {\n      match = ref[i];\n      if (match.token.length > longest_match.token.length) {\n        longest_match = match;\n      }\n    }\n    feedback = this.get_match_feedback(longest_match, sequence.length === 1);\n    extra_feedback = 'Add another word or two. Uncommon words are better.';\n    if (feedback != null) {\n      feedback.suggestions.unshift(extra_feedback);\n      if (feedback.warning == null) {\n        feedback.warning = '';\n      }\n    } else {\n      feedback = {\n        warning: '',\n        suggestions: [extra_feedback]\n      };\n    }\n    return feedback;\n  },\n  get_match_feedback: function(match, is_sole_match) {\n    var layout, warning;\n    switch (match.pattern) {\n      case 'dictionary':\n        return this.get_dictionary_match_feedback(match, is_sole_match);\n      case 'spatial':\n        layout = match.graph.toUpperCase();\n        warning = match.turns === 1 ? 'Straight rows of keys are easy to guess' : 'Short keyboard patterns are easy to guess';\n        return {\n          warning: warning,\n          suggestions: ['Use a longer keyboard pattern with more turns']\n        };\n      case 'repeat':\n        warning = match.base_token.length === 1 ? 'Repeats like \"aaa\" are easy to guess' : 'Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"';\n        return {\n          warning: warning,\n          suggestions: ['Avoid repeated words and characters']\n        };\n      case 'sequence':\n        return {\n          warning: \"Sequences like abc or 6543 are easy to guess\",\n          suggestions: ['Avoid sequences']\n        };\n      case 'regex':\n        if (match.regex_name === 'recent_year') {\n          return {\n            warning: \"Recent years are easy to guess\",\n            suggestions: ['Avoid recent years', 'Avoid years that are associated with you']\n          };\n        }\n        break;\n      case 'date':\n        return {\n          warning: \"Dates are often easy to guess\",\n          suggestions: ['Avoid dates and years that are associated with you']\n        };\n    }\n  },\n  get_dictionary_match_feedback: function(match, is_sole_match) {\n    var ref, result, suggestions, warning, word;\n    warning = match.dictionary_name === 'passwords' ? is_sole_match && !match.l33t && !match.reversed ? match.rank <= 10 ? 'This is a top-10 common password' : match.rank <= 100 ? 'This is a top-100 common password' : 'This is a very common password' : match.guesses_log10 <= 4 ? 'This is similar to a commonly used password' : void 0 : match.dictionary_name === 'english_wikipedia' ? is_sole_match ? 'A word by itself is easy to guess' : void 0 : (ref = match.dictionary_name) === 'surnames' || ref === 'male_names' || ref === 'female_names' ? is_sole_match ? 'Names and surnames by themselves are easy to guess' : 'Common names and surnames are easy to guess' : '';\n    suggestions = [];\n    word = match.token;\n    if (word.match(scoring.START_UPPER)) {\n      suggestions.push(\"Capitalization doesn't help very much\");\n    } else if (word.match(scoring.ALL_UPPER) && word.toLowerCase() !== word) {\n      suggestions.push(\"All-uppercase is almost as easy to guess as all-lowercase\");\n    }\n    if (match.reversed && match.token.length >= 4) {\n      suggestions.push(\"Reversed words aren't much harder to guess\");\n    }\n    if (match.l33t) {\n      suggestions.push(\"Predictable substitutions like '@' instead of 'a' don't help very much\");\n    }\n    result = {\n      warning: warning,\n      suggestions: suggestions\n    };\n    return result;\n  }\n};\n\nmodule.exports = feedback;\n\n//# sourceMappingURL=feedback.js.map\n","/* eslint-disable no-unused-vars, no-var */\n\n// Logging configuration\nvar loggingConfig = {\n    // default log level for the app and lib-jitsi-meet\n    defaultLogLevel: 'trace',\n\n    // Option to disable LogCollector (which stores the logs on CallStats)\n    // disableLogCollector: true,\n\n    // The following are too verbose in their logging with the\n    // {@link #defaultLogLevel}:\n    'modules/RTC/TraceablePeerConnection.js': 'info',\n    'modules/statistics/CallStats.js': 'info',\n    'modules/sdp/SDPUtil.js': 'info',\n    'modules/xmpp/JingleSessionPC.js': 'info',\n    'modules/xmpp/strophe.jingle.js': 'info',\n    'modules/xmpp/strophe.util.js': 'log'\n};\n\n/* eslint-enable no-unused-vars, no-var */\n\n// XXX Web/React server-includes logging_config.js into index.html.\n// Mobile/react-native requires it in react/features/base/logging. For the\n// purposes of the latter, (try to) export loggingConfig. The following\n// detection of a module system is inspired by webpack.\ntypeof module === 'object'\n    && typeof exports === 'object'\n    && (module.exports = loggingConfig);\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/jitsi-local-storage');\n","// @flow\n\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils/jitsi-local-storage';\n\nimport { browser } from '../lib-jitsi-meet';\nimport { parseURLParams } from '../util/parseURLParams';\n\nimport logger from './logger';\n\ndeclare var APP: Object;\ndeclare var config: Object;\n\n/**\n * Handles changes of the fake local storage.\n *\n * @returns {void}\n */\nfunction onFakeLocalStorageChanged() {\n    APP.API.notifyLocalStorageChanged(jitsiLocalStorage.serialize());\n}\n\n/**\n * Checks if the local storage of the host page needs to be used instead jitsi-meet's local storage.\n *\n * @param {Object} urlParams - Object with parsed URL params.\n * @returns {boolean} - True if the local storage of the host page needs to be used instead jitsi-meet's local storage\n * and false otherwise.\n */\nfunction shouldUseHostPageLocalStorage(urlParams) {\n    // NOTE: normally the url params and the config will be merged into the redux store. But we want to setup the local\n    // storage as soon as possible, the store is not created yet and the merging of the URL params and the config\n    // haven't been executed yet. That's why we need to manually parse the URL params and also access the config through\n    // the global variable.\n    if (urlParams['config.useHostPageLocalStorage'] === true\n        || (typeof config === 'object' && config.useHostPageLocalStorage)) {\n        return true;\n    }\n\n    if (jitsiLocalStorage.isLocalStorageDisabled()) { // We have detected that ou own local storage is not working.\n        return true;\n    }\n\n    if (browser.isWebKitBased()) { // Webkit browsers don't persist local storage for third-party iframes.\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Performs initial setup of the jitsiLocalStorage.\n *\n * @returns {void}\n */\nfunction setupJitsiLocalStorage() {\n    const urlParams = parseURLParams(window.location);\n\n    if (shouldUseHostPageLocalStorage(urlParams)) {\n        try {\n            const localStorageContent = Bourne.parse(urlParams['appData.localStorageContent']);\n\n            if (typeof localStorageContent === 'object') {\n                Object.keys(localStorageContent).forEach(key => {\n                    jitsiLocalStorage.setItem(key, localStorageContent[key]);\n                });\n            }\n        } catch (error) {\n            logger.error('Can\\'t parse localStorageContent.', error);\n        }\n\n        jitsiLocalStorage.on('changed', onFakeLocalStorageChanged);\n    }\n}\n\nsetupJitsiLocalStorage();\n","/*  @flow */\n\nimport jqueryI18next from 'jquery-i18next';\n\nimport { i18next } from '../../react/features/base/i18n';\n\ndeclare var $: Function;\n\ntype DocumentElement = {\n    lang: string\n}\n\n/**\n * Notifies that the {@link i18next} instance has finished its initialization.\n *\n * @returns {void}\n * @private\n */\nfunction _onI18nInitialized() {\n\n    const documentElement: DocumentElement\n        = document.documentElement || {};\n\n    $('[data-i18n]').localize();\n    documentElement.lang = i18next.language;\n}\n\n/**\n *\n */\nclass Translation {\n    /**\n     *\n     */\n    constructor() {\n        jqueryI18next.init(i18next, $, { useOptionsAttr: true });\n\n        if (i18next.isInitialized) {\n            _onI18nInitialized();\n        } else {\n            i18next.on('initialized', _onI18nInitialized);\n        }\n\n        i18next.on('languageChanged', _onI18nInitialized);\n    }\n\n    /**\n     *\n     */\n    generateTranslationHTML(key: string, options: Object) {\n        const optAttr\n            = options ? ` data-i18n-options='${JSON.stringify(options)}'` : '';\n\n        // XXX i18next expects undefined if options are missing.\n        const text = i18next.t(key, options ? options : undefined);\n\n        return `<span data-i18n=\"${key}\"${optAttr}>${text}</span>`;\n    }\n\n    /**\n     *\n     */\n    translateElement(selector: Object, options: Object) {\n        // XXX i18next expects undefined if options are missing.\n        selector.localize(options ? options : undefined);\n    }\n}\n\nexport default new Translation();\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport ThemeContext from '../useTheme/ThemeContext';\nimport useTheme from '../useTheme';\nimport nested from './nested'; // To support composition of theme.\n\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n  if (typeof localTheme === 'function') {\n    var mergedTheme = localTheme(outerTheme);\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!mergedTheme) {\n        console.error(['Material-UI: You should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\\n'));\n      }\n    }\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, localTheme);\n}\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\n\n\nfunction ThemeProvider(props) {\n  var children = props.children,\n      localTheme = props.theme;\n  var outerTheme = useTheme();\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (outerTheme === null && typeof localTheme === 'function') {\n      console.error(['Material-UI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n\n  var theme = React.useMemo(function () {\n    var output = outerTheme === null ? localTheme : mergeOuterLocalTheme(outerTheme, localTheme);\n\n    if (output != null) {\n      output[nested] = outerTheme !== null;\n    }\n\n    return output;\n  }, [localTheme, outerTheme]);\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0;\n}\n\nexport default ThemeProvider;","// @flow\n\n// Default color palette\nexport const colors = {\n    error03: '#7A141F',\n    error04: '#A21B29',\n    error05: '#CB2233',\n    error06: '#E04757',\n    error08: '#EAA7AD',\n\n    primary01: '#00112D',\n    primary02: '#00225A',\n    primary03: '#003486',\n    primary04: '#0045B3',\n    primary05: '#0056E0',\n    primary06: '#246FE5',\n    primary07: '#669AEC',\n    primary08: '#99BBF3',\n    primary09: '#CCDDF9',\n\n    surface00: '#111111',\n    surface01: '#040404',\n    surface02: '#141414',\n    surface03: '#292929',\n    surface04: '#3D3D3D',\n    surface05: '#525252',\n    surface06: '#666',\n    surface07: '#858585',\n    surface08: '#A3A3A3',\n    surface09: '#C2C2C2',\n    surface10: '#E0E0E0',\n    surface11: '#FFF',\n    surface12: '#AAAAAA',\n\n    success04: '#189B55',\n    success05: '#1EC26A',\n\n    warning05: '#F8AE1A',\n    warning06: '#ED9E1B'\n};\n\n// Mapping between the token used and the color\nexport const colorMap = {\n    // Default page background\n    uiBackground: 'surface01',\n\n    // Container background\n    ui01: 'surface02',\n    ui02: 'surface03',\n    ui03: 'surface04',\n    ui04: 'surface05',\n    ui05: 'surface06',\n\n    // Primary buttons\n    action01: 'primary05',\n\n    // Hover state for primary buttons\n    action01Hover: 'primary06',\n\n    // Active state for primary buttons\n    action01Active: 'primary04',\n\n    // Focus border color\n    action01Focus: 'primary08',\n\n    // Disabled state for primary buttons\n    action01Disabled: 'primary02',\n\n    // Secondary buttons\n    action02: 'surface04',\n\n    // Hover state for secondary buttons\n    action02Hover: 'surface05',\n\n    // Active state for secondary buttons\n    action02Active: 'surface03',\n\n    // Focus border color\n    action02Focus: 'surface07',\n\n    // Disabled state for secondary buttons\n    action02Disabled: 'surface02',\n\n    // Tertiary buttons\n    action03: 'transparent',\n\n    // Hover state for tertiary buttons\n    action03Hover: 'surface05',\n\n    // Active state for tertiary buttons\n    action03Active: 'surface03',\n\n    // Focus border color\n    action03Focus: 'surface07',\n\n    // Disabled state for tertiary buttons\n    action03Disabled: 'transparent',\n\n    // Danger button background\n    actionDanger: 'error05',\n\n    // Hover state for danger buttons\n    actionDangerHover: 'error06',\n\n    // Active state for danger buttons\n    actionDangerActive: 'error04',\n\n    // Focus border color\n    actionDangerFocus: 'error08',\n\n    // Disabled state for danger buttons\n    actionDangerDisabled: 'error03',\n\n    // Bottom sheet background\n    bottomSheet: 'surface00',\n\n    // Primary text – default color for body copy & headers\n    text01: 'surface11',\n\n    // Secondary text with medium contrast\n    text02: 'surface09',\n\n    // Tertiary text with low contrast – placeholders, disabled actions, label for disabled buttons\n    text03: 'surface07',\n\n    // Text for bottom sheet items\n    text04: 'surface12',\n\n    // error messages\n    textError: 'error06',\n\n    // Primary color for icons\n    icon01: 'surface11',\n\n    // Secondary color for input fields\n    icon02: 'surface09',\n\n    // Tertiary color for disabled actions\n    icon03: 'surface07',\n\n    // Error message\n    iconError: 'error06',\n\n    // Forms\n    // Default background for input fields\n    field01: 'surface01',\n\n    // Hover background for input fields\n    field01Hover: 'surface03',\n\n    // Focus border color\n    field01Focus: 'primary05',\n\n    // Disabled background for input fields\n    field01Disabled: 'surface05',\n\n    // Background for high-contrast input fields\n    field02: 'surface11',\n\n    // Color for the section divider\n    dividerColor: 'surface12',\n\n    // Background for high-contrast input fields on hover\n    field02Hover: 'primary09',\n\n    // Focus border color\n    field02Focus: 'primary05',\n\n    // Disabled background for high-contrast input fields\n    field02Disabled: 'surface06',\n\n    // Background for section header\n    section01: 'surface10',\n\n    // Active color for section header\n    section01Active: 'primary04',\n\n    // Inactive color for section header\n    section01Inactive: 'surface01',\n\n    // Borders\n    // Border for the input fields in hover state\n    border01: 'surface08',\n\n    // Border for the input fields\n    border02: 'surface06',\n\n    // Line separators\n    border03: 'surface04',\n\n    // Color for error border & message\n    borderError: 'error06',\n\n    // Links\n    // Default color for links\n    link01: 'primary07',\n\n    // Color for links in the hover state\n    link01Hover: 'primary08',\n\n    // Color for links in the active state\n    link01Active: 'primary06',\n\n    // Support\n    // Color for positive messages applied to icons & borders\n    success01: 'success05',\n\n    // Color for positive messages applied to backgrounds\n    success02: 'success05',\n\n    // Color for warning messages applied to icons, borders & backgrounds\n    warning01: 'warning05',\n\n    // Color for indicating a raised hand\n    warning02: 'warning06'\n};\n\n\nexport const font = {\n    weightRegular: '400',\n    weightSemiBold: '600'\n};\n\nexport const shape = {\n    borderRadius: 6,\n    boxShadow: 'inset 0px -1px 0px rgba(255, 255, 255, 0.15)'\n};\n\nexport const spacing = [ 0, 4, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80 ];\n\nexport const typography = {\n    labelRegular: {\n        fontSize: 12,\n        lineHeight: 16,\n        fontWeight: font.weightRegular,\n        letterSpacing: 0.16\n    },\n\n    labelBold: {\n        fontSize: 12,\n        lineHeight: 16,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0.16\n    },\n\n    labelButton: {\n        fontSize: 14,\n        lineHeight: 24,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    labelButtonLarge: {\n        fontSize: 16,\n        lineHeight: 24,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    bodyShortRegular: {\n        fontSize: 14,\n        lineHeight: 18,\n        fontWeight: font.weightRegular,\n        letterSpacing: 0\n    },\n\n    bodyShortBold: {\n        fontSize: 14,\n        lineHeight: 18,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    bodyShortRegularLarge: {\n        fontSize: 16,\n        lineHeight: 24,\n        fontWeight: font.weightRegular,\n        letterSpacing: 0\n    },\n\n    bodyShortBoldLarge: {\n        fontSize: 16,\n        lineHeight: 24,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    bodyLongRegular: {\n        fontSize: 14,\n        lineHeight: 24,\n        fontWeight: font.weightRegular,\n        letterSpacing: 0\n    },\n\n    bodyLongBold: {\n        fontSize: 14,\n        lineHeight: 24,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading1: {\n        fontSize: 54,\n        lineHeight: 64,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading2: {\n        fontSize: 42,\n        lineHeight: 50,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading3: {\n        fontSize: 32,\n        lineHeight: 40,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading4: {\n        fontSize: 28,\n        lineHeight: 36,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading5: {\n        fontSize: 20,\n        lineHeight: 28,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading6: {\n        fontSize: 16,\n        lineHeight: 26,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    },\n\n    heading7: {\n        fontSize: 14,\n        lineHeight: 24,\n        fontWeight: font.weightSemiBold,\n        letterSpacing: 0\n    }\n};\n","// @flow\n\n/**\n * Creates the color tokens based on the color theme and the association map.\n * If a key is not found in the association map it defaults to the current value.\n *\n * @param {Object} colorMap - A map between the token name and the actual color value.\n * @param {Object} colors - An object containing all the theme colors.\n * @returns {Object}\n */\nexport function createColorTokens(colorMap: Object, colors: Object): Object {\n    return Object.entries(colorMap)\n        .reduce((result, [ token, value ]) =>\n            Object.assign(result, { [token]: colors[value] || value }), {});\n}\n","// @flow\n\nimport { font, colors, colorMap, spacing, shape, typography } from '../Tokens';\nimport { createWebTheme } from '../functions';\n\nexport default createWebTheme({\n    font,\n    colors,\n    colorMap,\n    spacing,\n    shape,\n    typography\n});\n","// @flow\n\nimport { createMuiTheme } from '@material-ui/core/styles';\n\nimport { createColorTokens } from './utils';\n\n/**\n * Creates a MUI theme based on local UI tokens.\n *\n * @param {Object} arg - The ui tokens.\n * @returns {Object}\n */\nexport function createWebTheme({ font, colors, colorMap, shape, spacing, typography }: Object) {\n    return createMuiTheme({\n        props: {\n            // disable ripple effect on buttons globally\n            MuiButtonBase: {\n                disableRipple: true\n            }\n        },\n\n        // use token spacing array\n        spacing\n    }, {\n        palette: createColorTokens(colorMap, colors),\n        shape,\n        typography: {\n            font,\n            ...typography\n        }\n    });\n}\n","// @flow\n\nimport { ThemeProvider } from '@material-ui/core/styles';\nimport * as React from 'react';\n\nimport BaseTheme from './BaseTheme';\n\ntype Props = {\n\n   /**\n    * The children of the component.\n    */\n    children: React.ChildrenArray<any>\n}\n\n/**\n * The theme provider for the web app.\n *\n * @param {Object} props - The props of the component.\n * @returns {React.ReactNode}\n */\nexport default function JitsiThemeProvider(props: Props) {\n    return <ThemeProvider theme = { BaseTheme }>{ props.children }</ThemeProvider>;\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/chrome-banner');\n","// @flow\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport React, { PureComponent } from 'react';\n\nimport {\n    createChromeExtensionBannerEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { getCurrentConference } from '../../base/conference/functions';\nimport {\n    checkChromeExtensionsInstalled,\n    isMobileBrowser\n} from '../../base/environment/utils';\nimport { translate } from '../../base/i18n';\nimport { Icon, IconClose } from '../../base/icons';\nimport { browser } from '../../base/lib-jitsi-meet';\nimport { connect } from '../../base/redux';\nimport { isVpaasMeeting } from '../../jaas/functions';\nimport logger from '../logger';\n\n\ndeclare var interfaceConfig: Object;\n\nconst emptyObject = {};\n\n/**\n * Local storage key name for flag telling if user checked 'Don't show again' checkbox on the banner\n * If the user checks this before closing the banner, next time he will access a jitsi domain\n * the banner will not be shown regardless of extensions being installed or not.\n */\nconst DONT_SHOW_AGAIN_CHECKED = 'hide_chrome_extension_banner';\n\n/**\n * The type of the React {@code PureComponent} props of {@link ChromeExtensionBanner}.\n */\ntype Props = {\n\n    /**\n     * Contains info about installed/to be installed chrome extension(s).\n     */\n    bannerCfg: Object,\n\n    /**\n     * Conference data, if any\n     */\n    conference: Object,\n\n    /**\n     * Whether I am the current recorder.\n     */\n    iAmRecorder: boolean,\n\n    /**\n     * Whether it's a vpaas meeting or not.\n     */\n    isVpaas: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function,\n};\n\n/**\n * The type of the React {@link PureComponent} state of {@link ChromeExtensionBanner}.\n */\ntype State = {\n\n    /**\n     * Keeps the current value of dont show again checkbox\n     */\n    dontShowAgainChecked: boolean,\n\n    /**\n     * Tells whether user pressed install extension or close button.\n     */\n    closePressed: boolean,\n\n    /**\n     * Tells whether should show the banner or not based on extension being installed or not.\n     */\n    shouldShow: boolean,\n};\n\n/**\n * Implements a React {@link PureComponent} which displays a banner having a link to the chrome extension.\n * @class ChromeExtensionBanner\n * @extends PureComponent\n */\nclass ChromeExtensionBanner extends PureComponent<Props, State> {\n    /**\n     * Initializes a new {@code ChromeExtensionBanner} instance.\n     *\n     * @param {Object} props - The read-only React {@code PureComponent} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n        this.state = {\n            dontShowAgainChecked: false,\n            closePressed: false,\n            shouldShow: false\n        };\n\n        this._onClosePressed = this._onClosePressed.bind(this);\n        this._onInstallExtensionClick = this._onInstallExtensionClick.bind(this);\n        this._shouldNotRender = this._shouldNotRender.bind(this);\n        this._onDontShowAgainChange = this._onDontShowAgainChange.bind(this);\n        this._onCloseKeyPress = this._onCloseKeyPress.bind(this);\n        this._onInstallExtensionKeyPress = this._onInstallExtensionKeyPress.bind(this);\n    }\n\n    /**\n     * Executed on component update.\n     * Checks whether any chrome extension from the config is installed.\n     *\n     * @inheritdoc\n     */\n    async componentDidUpdate(prevProps) {\n        if (!this._isSupportedEnvironment()) {\n            return;\n        }\n\n        const { bannerCfg } = this.props;\n        const prevBannerCfg = prevProps.bannerCfg;\n\n        if (bannerCfg.url && !prevBannerCfg.url) {\n            logger.info('Chrome extension URL found.');\n        }\n\n        if ((bannerCfg.chromeExtensionsInfo || []).length && !(prevBannerCfg.chromeExtensionsInfo || []).length) {\n            logger.info('Chrome extension(s) info found.');\n        }\n\n        const hasExtensions = await checkChromeExtensionsInstalled(this.props.bannerCfg);\n\n        if (\n            hasExtensions\n            && hasExtensions.length\n            && hasExtensions.every(ext => !ext)\n            && !this.state.shouldShow\n        ) {\n            this.setState({ shouldShow: true }); // eslint-disable-line\n        }\n    }\n\n    /**\n     * Checks whether the feature is enabled and whether the environment(browser/os)\n     * supports it.\n     *\n     * @returns {boolean}\n     */\n    _isSupportedEnvironment() {\n        return interfaceConfig.SHOW_CHROME_EXTENSION_BANNER\n            && browser.isChrome()\n            && !browser.isTwa()\n            && !isMobileBrowser()\n            && !this.props.isVpaas;\n    }\n\n    _onClosePressed: () => void;\n\n    /**\n     * Closes the banner for the current session.\n     *\n     * @returns {void}\n     */\n    _onClosePressed() {\n        sendAnalytics(createChromeExtensionBannerEvent(false));\n        this.setState({ closePressed: true });\n    }\n\n    _onCloseKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onCloseKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClosePressed();\n        }\n    }\n\n    _onInstallExtensionClick: () => void;\n\n    /**\n     * Opens the chrome extension page.\n     *\n     * @returns {void}\n     */\n    _onInstallExtensionClick() {\n        sendAnalytics(createChromeExtensionBannerEvent(true));\n        window.open(this.props.bannerCfg.url);\n        this.setState({ closePressed: true });\n    }\n\n    _onInstallExtensionKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onInstallExtensionKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClosePressed();\n        }\n    }\n\n    _shouldNotRender: () => boolean;\n\n    /**\n     * Checks whether the banner should not be rendered.\n     *\n     * @returns {boolean} Whether to show the banner or not.\n     */\n    _shouldNotRender() {\n        if (!this._isSupportedEnvironment()) {\n            return true;\n        }\n\n        const dontShowAgain = jitsiLocalStorage.getItem(DONT_SHOW_AGAIN_CHECKED) === 'true';\n\n        return !this.props.bannerCfg.url\n            || dontShowAgain\n            || this.state.closePressed\n            || !this.state.shouldShow\n            || this.props.iAmRecorder;\n    }\n\n    _onDontShowAgainChange: (object: Object) => void;\n\n    /**\n    * Handles the current `don't show again` checkbox state.\n    *\n    * @param {Object} event - Input change event.\n    * @returns {void}\n    */\n    _onDontShowAgainChange(event) {\n        this.setState({ dontShowAgainChecked: event.target.checked });\n    }\n\n    /**\n     * Implements React's {@link PureComponent#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (this._shouldNotRender()) {\n            if (this.state.dontShowAgainChecked) {\n                jitsiLocalStorage.setItem(DONT_SHOW_AGAIN_CHECKED, 'true');\n            }\n\n            return null;\n        }\n        const { t } = this.props;\n        const mainClassNames = this.props.conference\n            ? 'chrome-extension-banner chrome-extension-banner__pos_in_meeting'\n            : 'chrome-extension-banner';\n\n        return (\n            <div className = { mainClassNames }>\n                <div\n                    aria-aria-describedby = 'chrome-extension-banner__text-container'\n                    className = 'chrome-extension-banner__container'\n                    role = 'banner'>\n                    <div className = 'chrome-extension-banner__icon-container' />\n                    <div\n                        className = 'chrome-extension-banner__text-container'\n                        id = 'chrome-extension-banner__text-container'>\n                        { t('chromeExtensionBanner.installExtensionText') }\n                    </div>\n                    <div\n                        aria-label = { t('chromeExtensionBanner.close') }\n                        className = 'chrome-extension-banner__close-container'\n                        onClick = { this._onClosePressed }\n                        onKeyPress = { this._onCloseKeyPress }\n                        role = 'button'\n                        tabIndex = { 0 }>\n                        <Icon\n                            className = 'gray'\n                            size = { 12 }\n                            src = { IconClose } />\n                    </div>\n                </div>\n                <div\n                    className = 'chrome-extension-banner__button-container'>\n                    <div\n                        aria-labelledby = 'chrome-extension-banner__button-text'\n                        className = 'chrome-extension-banner__button-open-url'\n                        onClick = { this._onInstallExtensionClick }\n                        onKeyPress = { this._onInstallExtensionKeyPress }\n                        role = 'button'\n                        tabIndex = { 0 }>\n                        <div\n                            className = 'chrome-extension-banner__button-text'\n                            id = 'chrome-extension-banner__button-text'>\n                            { t('chromeExtensionBanner.buttonText') }\n                        </div>\n                    </div>\n                </div>\n                <div className = 'chrome-extension-banner__checkbox-container'>\n                    <label\n                        className = 'chrome-extension-banner__checkbox-label'\n                        htmlFor = 'chrome-extension-banner__checkbox'\n                        id = 'chrome-extension-banner__checkbox-label'>\n                        <input\n                            aria-labelledby = 'chrome-extension-banner__checkbox-label'\n                            checked = { this.state.dontShowAgainChecked }\n                            id = 'chrome-extension-banner__checkbox'\n                            onChange = { this._onDontShowAgainChange }\n                            type = 'checkbox' />\n                        &nbsp;{ t('chromeExtensionBanner.dontShowAgain') }\n                    </label>\n                </div>\n            </div>\n        );\n    }\n}\n\n/**\n * Function that maps parts of Redux state tree into component props.\n *\n * @param {Object} state - Redux state.\n * @returns {Object}\n */\nconst _mapStateToProps = state => {\n    return {\n        // Using emptyObject so that we don't change the reference every time when _mapStateToProps is called.\n        bannerCfg: state['features/base/config'].chromeExtensionBanner || emptyObject,\n        conference: getCurrentConference(state),\n        iAmRecorder: state['features/base/config'].iAmRecorder,\n        isVpaas: isVpaasMeeting(state)\n    };\n};\n\nexport default translate(connect(_mapStateToProps)(ChromeExtensionBanner));\n","// @flow\n\nimport React, { Fragment } from 'react';\n\nimport { BaseApp } from '../../base/app';\nimport { toURLString } from '../../base/util';\nimport { OverlayContainer } from '../../overlay';\nimport { appNavigate } from '../actions';\nimport { getDefaultURL } from '../functions';\n\n/**\n * The type of React {@code Component} props of {@link AbstractApp}.\n */\nexport type Props = {\n\n    /**\n     * XXX Refer to the implementation of loadURLObject: in\n     * ios/sdk/src/JitsiMeetView.m for further information.\n     */\n    timestamp: any,\n\n    /**\n     * The URL, if any, with which the app was launched.\n     */\n    url: Object | string\n};\n\n/**\n * Base (abstract) class for main App component.\n *\n * @abstract\n */\nexport class AbstractApp extends BaseApp<Props, *> {\n    _init: Promise<*>;\n\n    /**\n     * Initializes the app.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        this._init.then(() => {\n            // If a URL was explicitly specified to this React Component, then\n            // open it; otherwise, use a default.\n            this._openURL(toURLString(this.props.url) || this._getDefaultURL());\n        });\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        const previousUrl = toURLString(prevProps.url);\n        const currentUrl = toURLString(this.props.url);\n        const previousTimestamp = prevProps.timestamp;\n        const currentTimestamp = this.props.timestamp;\n\n        this._init.then(() => {\n            // Deal with URL changes.\n\n            if (previousUrl !== currentUrl\n\n                    // XXX Refer to the implementation of loadURLObject: in\n                    // ios/sdk/src/JitsiMeetView.m for further information.\n                    || previousTimestamp !== currentTimestamp) {\n                this._openURL(currentUrl || this._getDefaultURL());\n            }\n        });\n    }\n\n    /**\n     * Creates an extra {@link ReactElement}s to be added (unconditionally)\n     * alongside the main element.\n     *\n     * @abstract\n     * @protected\n     * @returns {ReactElement}\n     */\n    _createExtraElement() {\n        return (\n            <Fragment>\n                <OverlayContainer />\n            </Fragment>\n        );\n    }\n\n    _createMainElement: (React$Element<*>, Object) => ?React$Element<*>;\n\n    /**\n     * Gets the default URL to be opened when this {@code App} mounts.\n     *\n     * @protected\n     * @returns {string} The default URL to be opened when this {@code App}\n     * mounts.\n     */\n    _getDefaultURL() {\n        return getDefaultURL(this.state.store);\n    }\n\n    /**\n     * Navigates this {@code AbstractApp} to (i.e. Opens) a specific URL.\n     *\n     * @param {Object|string} url - The URL to navigate this {@code AbstractApp}\n     * to (i.e. The URL to open).\n     * @protected\n     * @returns {void}\n     */\n    _openURL(url) {\n        this.state.store.dispatch(appNavigate(toURLString(url)));\n    }\n}\n","// @flow\n\nimport { maybeRedirectToWelcomePage } from '../app/actions';\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT\n} from '../base/conference';\nimport { CONNECTION_ESTABLISHED } from '../base/connection';\nimport { hideDialog, isDialogOpen } from '../base/dialog';\nimport {\n    JitsiConferenceErrors\n} from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    CANCEL_LOGIN,\n    STOP_WAIT_FOR_OWNER,\n    WAIT_FOR_OWNER\n} from './actionTypes';\nimport {\n    hideLoginDialog,\n    openWaitForOwnerDialog,\n    stopWaitForOwner,\n    waitForOwner\n} from './actions.web';\nimport { LoginDialog, WaitForOwnerDialog } from './components';\n\n/**\n * Middleware that captures connection or conference failed errors and controls\n * {@link WaitForOwnerDialog} and {@link LoginDialog}.\n *\n * FIXME Some of the complexity was introduced by the lack of dialog stacking.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n\n    case CANCEL_LOGIN: {\n        if (!isDialogOpen(store, WaitForOwnerDialog)) {\n            if (_isWaitingForOwner(store)) {\n                store.dispatch(openWaitForOwnerDialog());\n\n                return next(action);\n            }\n\n            store.dispatch(hideLoginDialog());\n\n            store.dispatch(maybeRedirectToWelcomePage());\n        }\n        break;\n    }\n\n    case CONFERENCE_FAILED: {\n        const { error } = action;\n        let recoverable;\n\n        if (error.name === JitsiConferenceErrors.AUTHENTICATION_REQUIRED) {\n            if (typeof error.recoverable === 'undefined') {\n                error.recoverable = true;\n            }\n            recoverable = error.recoverable;\n        }\n        if (recoverable) {\n            store.dispatch(waitForOwner());\n        } else {\n            store.dispatch(stopWaitForOwner());\n        }\n        break;\n    }\n\n    case CONFERENCE_JOINED:\n        if (_isWaitingForOwner(store)) {\n            store.dispatch(stopWaitForOwner());\n        }\n        store.dispatch(hideLoginDialog());\n        break;\n\n    case CONFERENCE_LEFT:\n        store.dispatch(stopWaitForOwner());\n        break;\n\n    case CONNECTION_ESTABLISHED:\n        store.dispatch(hideLoginDialog());\n        break;\n\n    case STOP_WAIT_FOR_OWNER:\n        _clearExistingWaitForOwnerTimeout(store);\n        store.dispatch(hideDialog(WaitForOwnerDialog));\n        break;\n\n    case WAIT_FOR_OWNER: {\n        _clearExistingWaitForOwnerTimeout(store);\n\n        const { handler, timeoutMs } = action;\n\n        action.waitForOwnerTimeoutID = setTimeout(handler, timeoutMs);\n\n        isDialogOpen(store, LoginDialog)\n            || store.dispatch(openWaitForOwnerDialog());\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Will clear the wait for conference owner timeout handler if any is currently\n * set.\n *\n * @param {Object} store - The redux store.\n * @returns {void}\n */\nfunction _clearExistingWaitForOwnerTimeout(\n        { getState }: { getState: Function }) {\n    const { waitForOwnerTimeoutID } = getState()['features/authentication'];\n\n    waitForOwnerTimeoutID && clearTimeout(waitForOwnerTimeoutID);\n}\n\n/**\n * Checks if the cyclic \"wait for conference owner\" task is currently scheduled.\n *\n * @param {Object} store - The redux store.\n * @returns {void}\n */\nfunction _isWaitingForOwner({ getState }: { getState: Function }) {\n    return getState()['features/authentication'].waitForOwnerTimeoutID;\n}\n","// @flow\nimport { batch } from 'react-redux';\n\nimport { getConferenceState } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../base/media';\nimport {\n    getParticipantDisplayName,\n    isLocalParticipantModerator,\n    PARTICIPANT_UPDATED,\n    raiseHand\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport {\n    hideNotification,\n    NOTIFICATION_TIMEOUT,\n    showNotification\n} from '../notifications';\n\nimport {\n    DISABLE_MODERATION,\n    ENABLE_MODERATION,\n    LOCAL_PARTICIPANT_MODERATION_NOTIFICATION,\n    REQUEST_DISABLE_MODERATION,\n    REQUEST_ENABLE_MODERATION\n} from './actionTypes';\nimport {\n    disableModeration,\n    dismissPendingParticipant,\n    dismissPendingAudioParticipant,\n    enableModeration,\n    localParticipantApproved,\n    participantApproved,\n    participantPendingAudio\n} from './actions';\nimport {\n    isEnabledFromState,\n    isParticipantApproved,\n    isParticipantPending\n} from './functions';\n\nconst VIDEO_MODERATION_NOTIFICATION_ID = 'video-moderation';\nconst AUDIO_MODERATION_NOTIFICATION_ID = 'audio-moderation';\nconst CS_MODERATION_NOTIFICATION_ID = 'video-moderation';\n\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const { actor, mediaType, type } = action;\n\n    switch (type) {\n    case DISABLE_MODERATION:\n    case ENABLE_MODERATION: {\n        // Audio & video moderation are both enabled at the same time.\n        // Avoid displaying 2 different notifications.\n        if (mediaType === MEDIA_TYPE.VIDEO) {\n            const titleKey = type === ENABLE_MODERATION\n                ? 'notify.moderationStartedTitle'\n                : 'notify.moderationStoppedTitle';\n\n            dispatch(showNotification({\n                descriptionKey: actor ? 'notify.moderationToggleDescription' : undefined,\n                descriptionArguments: actor ? {\n                    participantDisplayName: getParticipantDisplayName(getState, actor.getId())\n                } : undefined,\n                titleKey\n            }, NOTIFICATION_TIMEOUT));\n        }\n\n        break;\n    }\n    case LOCAL_PARTICIPANT_MODERATION_NOTIFICATION: {\n        let descriptionKey;\n        let titleKey;\n        let uid;\n\n        switch (action.mediaType) {\n        case MEDIA_TYPE.AUDIO: {\n            titleKey = 'notify.moderationInEffectTitle';\n            descriptionKey = 'notify.moderationInEffectDescription';\n            uid = AUDIO_MODERATION_NOTIFICATION_ID;\n            break;\n        }\n        case MEDIA_TYPE.VIDEO: {\n            titleKey = 'notify.moderationInEffectVideoTitle';\n            descriptionKey = 'notify.moderationInEffectVideoDescription';\n            uid = VIDEO_MODERATION_NOTIFICATION_ID;\n            break;\n        }\n        case MEDIA_TYPE.PRESENTER: {\n            titleKey = 'notify.moderationInEffectCSTitle';\n            descriptionKey = 'notify.moderationInEffectCSDescription';\n            uid = CS_MODERATION_NOTIFICATION_ID;\n            break;\n        }\n        }\n\n        dispatch(showNotification({\n            customActionNameKey: 'notify.raiseHandAction',\n            customActionHandler: () => batch(() => {\n                dispatch(raiseHand(true));\n                dispatch(hideNotification(uid));\n            }),\n            descriptionKey,\n            sticky: true,\n            titleKey,\n            uid\n        }));\n\n        break;\n    }\n    case REQUEST_DISABLE_MODERATION: {\n        const { conference } = getConferenceState(getState());\n\n        conference.disableAVModeration(MEDIA_TYPE.AUDIO);\n        conference.disableAVModeration(MEDIA_TYPE.VIDEO);\n        break;\n    }\n    case REQUEST_ENABLE_MODERATION: {\n        const { conference } = getConferenceState(getState());\n\n        conference.enableAVModeration(MEDIA_TYPE.AUDIO);\n        conference.enableAVModeration(MEDIA_TYPE.VIDEO);\n        break;\n    }\n    case PARTICIPANT_UPDATED: {\n        const state = getState();\n        const audioModerationEnabled = isEnabledFromState(MEDIA_TYPE.AUDIO, state);\n\n        // this is handled only by moderators\n        if (audioModerationEnabled && isLocalParticipantModerator(state)) {\n            const participant = action.participant;\n\n            if (participant.raisedHand) {\n                // if participant raises hand show notification\n                !isParticipantApproved(participant.id, MEDIA_TYPE.AUDIO)(state)\n                    && dispatch(participantPendingAudio(participant));\n            } else {\n                // if participant lowers hand hide notification\n                isParticipantPending(participant, MEDIA_TYPE.AUDIO)(state)\n                    && dispatch(dismissPendingAudioParticipant(participant));\n            }\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Registers a change handler for state['features/base/conference'].conference to\n * set the event listeners needed for the A/V moderation feature to operate.\n */\nStateListenerRegistry.register(\n    state => state['features/base/conference'].conference,\n    (conference, { dispatch }, previousConference) => {\n        if (conference && !previousConference) {\n            // local participant is allowed to unmute\n            conference.on(JitsiConferenceEvents.AV_MODERATION_APPROVED, ({ mediaType }) => {\n                dispatch(localParticipantApproved(mediaType));\n\n                // Audio & video moderation are both enabled at the same time.\n                // Avoid displaying 2 different notifications.\n                if (mediaType === MEDIA_TYPE.VIDEO) {\n                    dispatch(showNotification({\n                        titleKey: 'notify.unmute',\n                        descriptionKey: 'notify.hostAskedUnmute',\n                        sticky: true\n                    }));\n                }\n            });\n\n            conference.on(JitsiConferenceEvents.AV_MODERATION_CHANGED, ({ enabled, mediaType, actor }) => {\n                enabled ? dispatch(enableModeration(mediaType, actor)) : dispatch(disableModeration(mediaType, actor));\n            });\n\n            // this is received by moderators\n            conference.on(\n                JitsiConferenceEvents.AV_MODERATION_PARTICIPANT_APPROVED,\n                ({ participant, mediaType }) => {\n                    const { _id: id } = participant;\n\n                    batch(() => {\n                        // store in the whitelist\n                        dispatch(participantApproved(id, mediaType));\n\n                        // remove from pending list\n                        dispatch(dismissPendingParticipant(id, mediaType));\n                    });\n                });\n        }\n    });\n","/* global APP */\n\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport { processExternalDeviceRequest } from '../../device-selection';\nimport { showNotification, showWarningNotification } from '../../notifications';\nimport { replaceAudioTrackById, replaceVideoTrackById, setDeviceStatusWarning } from '../../prejoin/actions';\nimport { isPrejoinPageVisible } from '../../prejoin/functions';\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport JitsiMeetJS, { JitsiMediaDevicesEvents, JitsiTrackErrors } from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\nimport { updateSettings } from '../settings';\n\nimport {\n    CHECK_AND_NOTIFY_FOR_NEW_DEVICE,\n    NOTIFY_CAMERA_ERROR,\n    NOTIFY_MIC_ERROR,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE,\n    UPDATE_DEVICE_LIST\n} from './actionTypes';\nimport {\n    devicePermissionsChanged,\n    removePendingDeviceRequests,\n    setAudioInputDevice,\n    setVideoInputDevice\n} from './actions';\nimport {\n    areDeviceLabelsInitialized,\n    formatDeviceLabel,\n    groupDevicesByKind,\n    setAudioOutputDeviceId\n} from './functions';\nimport logger from './logger';\n\nconst JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP = {\n    microphone: {\n        [JitsiTrackErrors.CONSTRAINT_FAILED]: 'dialog.micConstraintFailedError',\n        [JitsiTrackErrors.GENERAL]: 'dialog.micUnknownError',\n        [JitsiTrackErrors.NOT_FOUND]: 'dialog.micNotFoundError',\n        [JitsiTrackErrors.PERMISSION_DENIED]: 'dialog.micPermissionDeniedError',\n        [JitsiTrackErrors.TIMEOUT]: 'dialog.micTimeoutError'\n    },\n    camera: {\n        [JitsiTrackErrors.CONSTRAINT_FAILED]: 'dialog.cameraConstraintFailedError',\n        [JitsiTrackErrors.GENERAL]: 'dialog.cameraUnknownError',\n        [JitsiTrackErrors.NOT_FOUND]: 'dialog.cameraNotFoundError',\n        [JitsiTrackErrors.PERMISSION_DENIED]: 'dialog.cameraPermissionDeniedError',\n        [JitsiTrackErrors.UNSUPPORTED_RESOLUTION]: 'dialog.cameraUnsupportedResolutionError',\n        [JitsiTrackErrors.TIMEOUT]: 'dialog.cameraTimeoutError'\n    }\n};\n\n\n/**\n * A listener for device permissions changed reported from lib-jitsi-meet.\n */\nlet permissionsListener;\n\n/**\n * Logs the current device list.\n *\n * @param {Object} deviceList - Whatever is returned by {@link groupDevicesByKind}.\n * @returns {string}\n */\nfunction logDeviceList(deviceList) {\n    const devicesToStr = list => list.map(device => `\\t\\t${device.label}[${device.deviceId}]`).join('\\n');\n    const audioInputs = devicesToStr(deviceList.audioInput);\n    const audioOutputs = devicesToStr(deviceList.audioOutput);\n    const videoInputs = devicesToStr(deviceList.videoInput);\n\n    logger.debug('Device list updated:\\n'\n        + `audioInput:\\n${audioInputs}\\n`\n        + `audioOutput:\\n${audioOutputs}\\n`\n        + `videoInput:\\n${videoInputs}`);\n}\n\n/**\n * Implements the middleware of the feature base/devices.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT: {\n        const _permissionsListener = permissions => {\n            store.dispatch(devicePermissionsChanged(permissions));\n        };\n        const { mediaDevices } = JitsiMeetJS;\n\n        permissionsListener = _permissionsListener;\n        mediaDevices.addEventListener(JitsiMediaDevicesEvents.PERMISSIONS_CHANGED, permissionsListener);\n        Promise.all([\n            mediaDevices.isDevicePermissionGranted('audio'),\n            mediaDevices.isDevicePermissionGranted('video')\n        ])\n        .then(results => {\n            _permissionsListener({\n                audio: results[0],\n                video: results[1]\n            });\n        })\n        .catch(() => {\n            // Ignore errors.\n        });\n        break;\n    }\n    case APP_WILL_UNMOUNT:\n        if (typeof permissionsListener === 'function') {\n            JitsiMeetJS.mediaDevices.removeEventListener(\n                JitsiMediaDevicesEvents.PERMISSIONS_CHANGED, permissionsListener);\n            permissionsListener = undefined;\n        }\n        break;\n    case NOTIFY_CAMERA_ERROR: {\n        if (typeof APP !== 'object' || !action.error) {\n            break;\n        }\n\n        const { message, name } = action.error;\n\n        const cameraJitsiTrackErrorMsg\n            = JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP.camera[name];\n        const cameraErrorMsg = cameraJitsiTrackErrorMsg\n            || JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP\n                .camera[JitsiTrackErrors.GENERAL];\n        const additionalCameraErrorMsg = cameraJitsiTrackErrorMsg ? null : message;\n        const titleKey = name === JitsiTrackErrors.PERMISSION_DENIED\n            ? 'deviceError.cameraPermission' : 'deviceError.cameraError';\n\n        store.dispatch(showWarningNotification({\n            description: additionalCameraErrorMsg,\n            descriptionKey: cameraErrorMsg,\n            titleKey\n        }));\n\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(setDeviceStatusWarning(titleKey));\n        }\n\n        break;\n    }\n    case NOTIFY_MIC_ERROR: {\n        if (typeof APP !== 'object' || !action.error) {\n            break;\n        }\n\n        const { message, name } = action.error;\n\n        const micJitsiTrackErrorMsg\n            = JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP.microphone[name];\n        const micErrorMsg = micJitsiTrackErrorMsg\n            || JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP\n                .microphone[JitsiTrackErrors.GENERAL];\n        const additionalMicErrorMsg = micJitsiTrackErrorMsg ? null : message;\n        const titleKey = name === JitsiTrackErrors.PERMISSION_DENIED\n            ? 'deviceError.microphonePermission'\n            : 'deviceError.microphoneError';\n\n        store.dispatch(showWarningNotification({\n            description: additionalMicErrorMsg,\n            descriptionKey: micErrorMsg,\n            titleKey\n        }));\n\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(setDeviceStatusWarning(titleKey));\n        }\n\n        break;\n    }\n    case SET_AUDIO_INPUT_DEVICE:\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(replaceAudioTrackById(action.deviceId));\n        } else {\n            APP.UI.emitEvent(UIEvents.AUDIO_DEVICE_CHANGED, action.deviceId);\n        }\n        break;\n    case SET_VIDEO_INPUT_DEVICE:\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(replaceVideoTrackById(action.deviceId));\n        } else {\n            APP.UI.emitEvent(UIEvents.VIDEO_DEVICE_CHANGED, action.deviceId);\n        }\n        break;\n    case UPDATE_DEVICE_LIST:\n        logDeviceList(groupDevicesByKind(action.devices));\n        if (areDeviceLabelsInitialized(store.getState())) {\n            return _processPendingRequests(store, next, action);\n        }\n        break;\n    case CHECK_AND_NOTIFY_FOR_NEW_DEVICE:\n        _checkAndNotifyForNewDevice(store, action.newDevices, action.oldDevices);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Does extra sync up on properties that may need to be updated after the\n * conference was joined.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _processPendingRequests({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const state = getState();\n    const { pendingRequests } = state['features/base/devices'];\n\n    if (!pendingRequests || pendingRequests.length === 0) {\n        return result;\n    }\n\n    pendingRequests.forEach(request => {\n        processExternalDeviceRequest(\n            dispatch,\n            getState,\n            request,\n            request.responseCallback);\n    });\n    dispatch(removePendingDeviceRequests());\n\n    return result;\n}\n\n/**\n * Finds a new device by comparing new and old array of devices and dispatches\n * notification with the new device. For new devices with same groupId only one\n * notification will be shown, this is so to avoid showing multiple notifications\n * for audio input and audio output devices.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {MediaDeviceInfo[]} newDevices - The array of new devices we received.\n * @param {MediaDeviceInfo[]} oldDevices - The array of the old devices we have.\n * @private\n * @returns {void}\n */\nfunction _checkAndNotifyForNewDevice(store, newDevices, oldDevices) {\n    const { dispatch } = store;\n\n    // let's intersect both newDevices and oldDevices and handle thew newly\n    // added devices\n    const onlyNewDevices = newDevices.filter(\n        nDevice => !oldDevices.find(\n            device => device.deviceId === nDevice.deviceId));\n\n    // we group devices by groupID which normally is the grouping by physical device\n    // plugging in headset we provide normally two device, one input and one output\n    // and we want to show only one notification for this physical audio device\n    const devicesGroupBy = onlyNewDevices.reduce((accumulated, value) => {\n        accumulated[value.groupId] = accumulated[value.groupId] || [];\n        accumulated[value.groupId].push(value);\n\n        return accumulated;\n    }, {});\n\n    Object.values(devicesGroupBy).forEach(devicesArray => {\n\n        if (devicesArray.length < 1) {\n            return;\n        }\n\n        // let's get the first device as a reference, we will use it for\n        // label and type\n        const newDevice = devicesArray[0];\n\n        // we want to strip any device details that are not very\n        // user friendly, like usb ids put in brackets at the end\n        const description = formatDeviceLabel(newDevice.label);\n\n        let titleKey;\n\n        switch (newDevice.kind) {\n        case 'videoinput': {\n            titleKey = 'notify.newDeviceCameraTitle';\n            break;\n        }\n        case 'audioinput' :\n        case 'audiooutput': {\n            titleKey = 'notify.newDeviceAudioTitle';\n            break;\n        }\n        }\n\n        dispatch(showNotification({\n            description,\n            titleKey,\n            customActionNameKey: 'notify.newDeviceAction',\n            customActionHandler: _useDevice.bind(undefined, store, devicesArray)\n        }));\n    });\n}\n\n/**\n * Set a device to be currently used, selected by the user.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Array<MediaDeviceInfo|InputDeviceInfo>} devices - The devices to save.\n * @returns {boolean} - Returns true in order notifications to be dismissed.\n * @private\n */\nfunction _useDevice({ dispatch }, devices) {\n    devices.forEach(device => {\n        switch (device.kind) {\n        case 'videoinput': {\n            dispatch(updateSettings({\n                userSelectedCameraDeviceId: device.deviceId,\n                userSelectedCameraDeviceLabel: device.label\n            }));\n\n            dispatch(setVideoInputDevice(device.deviceId));\n            break;\n        }\n        case 'audioinput': {\n            dispatch(updateSettings({\n                userSelectedMicDeviceId: device.deviceId,\n                userSelectedMicDeviceLabel: device.label\n            }));\n\n            dispatch(setAudioInputDevice(device.deviceId));\n            break;\n        }\n        case 'audiooutput': {\n            setAudioOutputDeviceId(\n                device.deviceId,\n                dispatch,\n                true,\n                device.label)\n                .then(() => logger.log('changed audio output device'))\n                .catch(err => {\n                    logger.warn(\n                        'Failed to change audio output device.',\n                        'Default or previously set audio output device will',\n                        ' be used instead.',\n                        err);\n                });\n            break;\n        }\n        }\n    });\n\n    return true;\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/e2ee');\n","// @flow\n\nimport { batch } from 'react-redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { getCurrentConference } from '../base/conference';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantCount,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    participantUpdated,\n    getRemoteParticipants\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\n\nimport { TOGGLE_E2EE } from './actionTypes';\nimport { setEveryoneEnabledE2EE, setEveryoneSupportE2EE, toggleE2EE } from './actions';\nimport { E2EE_OFF_SOUND_ID, E2EE_ON_SOUND_ID } from './constants';\nimport logger from './logger';\nimport { E2EE_OFF_SOUND_FILE, E2EE_ON_SOUND_FILE } from './sounds';\n\n/**\n * Middleware that captures actions related to E2EE.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(\n            E2EE_OFF_SOUND_ID,\n            E2EE_OFF_SOUND_FILE));\n\n        dispatch(registerSound(\n            E2EE_ON_SOUND_ID,\n            E2EE_ON_SOUND_FILE));\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(E2EE_OFF_SOUND_ID));\n        dispatch(unregisterSound(E2EE_ON_SOUND_ID));\n        break;\n\n    case PARTICIPANT_UPDATED: {\n        const { id, e2eeEnabled, e2eeSupported } = action.participant;\n        const oldParticipant = getParticipantById(getState(), id);\n        const result = next(action);\n\n        if (e2eeEnabled !== oldParticipant?.e2eeEnabled\n            || e2eeSupported !== oldParticipant?.e2eeSupported) {\n            const state = getState();\n            let newEveryoneSupportE2EE = true;\n            let newEveryoneEnabledE2EE = true;\n\n            // eslint-disable-next-line no-unused-vars\n            for (const [ key, p ] of getRemoteParticipants(state)) {\n                if (!p.e2eeEnabled) {\n                    newEveryoneEnabledE2EE = false;\n                }\n\n                if (!p.e2eeSupported) {\n                    newEveryoneSupportE2EE = false;\n                }\n\n                if (!newEveryoneEnabledE2EE && !newEveryoneSupportE2EE) {\n                    break;\n                }\n            }\n\n            if (!getLocalParticipant(state)?.e2eeEnabled) {\n                newEveryoneEnabledE2EE = false;\n            }\n\n            batch(() => {\n                dispatch(setEveryoneEnabledE2EE(newEveryoneEnabledE2EE));\n                dispatch(setEveryoneSupportE2EE(newEveryoneSupportE2EE));\n            });\n        }\n\n        return result;\n    }\n    case PARTICIPANT_JOINED: {\n        const result = next(action);\n        const { e2eeEnabled, e2eeSupported, local } = action.participant;\n        const { everyoneEnabledE2EE } = getState()['features/e2ee'];\n        const participantCount = getParticipantCount(getState());\n\n        // the initial values\n        if (participantCount === 1) {\n            batch(() => {\n                dispatch(setEveryoneEnabledE2EE(e2eeEnabled));\n                dispatch(setEveryoneSupportE2EE(e2eeSupported));\n            });\n        }\n\n        // if all had it enabled and this one disabled it, change value in store\n        // otherwise there is no change in the value we store\n        if (everyoneEnabledE2EE && !e2eeEnabled) {\n            dispatch(setEveryoneEnabledE2EE(false));\n        }\n\n        if (local) {\n            return result;\n        }\n\n        const { everyoneSupportE2EE } = getState()['features/e2ee'];\n\n        // if all supported it and this one does not, change value in store\n        // otherwise there is no change in the value we store\n        if (everyoneSupportE2EE && !e2eeSupported) {\n            dispatch(setEveryoneSupportE2EE(false));\n        }\n\n        return result;\n    }\n\n    case PARTICIPANT_LEFT: {\n        const previosState = getState();\n        const participant = getParticipantById(previosState, action.participant?.id) || {};\n        const result = next(action);\n        const newState = getState();\n        const { e2eeEnabled = false, e2eeSupported = false } = participant;\n\n        const { everyoneEnabledE2EE, everyoneSupportE2EE } = newState['features/e2ee'];\n\n\n        // if it was not enabled by everyone, and the participant leaving had it disabled, or if it was not supported\n        // by everyone, and the participant leaving had it not supported let's check is it enabled for all that stay\n        if ((!everyoneEnabledE2EE && !e2eeEnabled) || (!everyoneSupportE2EE && !e2eeSupported)) {\n            let latestEveryoneEnabledE2EE = true;\n            let latestEveryoneSupportE2EE = true;\n\n            // eslint-disable-next-line no-unused-vars\n            for (const [ key, p ] of getRemoteParticipants(newState)) {\n                if (!p.e2eeEnabled) {\n                    latestEveryoneEnabledE2EE = false;\n                }\n\n                if (!p.e2eeSupported) {\n                    latestEveryoneSupportE2EE = false;\n                }\n\n                if (!latestEveryoneEnabledE2EE && !latestEveryoneSupportE2EE) {\n                    break;\n                }\n            }\n\n            if (!getLocalParticipant(newState)?.e2eeEnabled) {\n                latestEveryoneEnabledE2EE = false;\n            }\n\n            batch(() => {\n                if (!everyoneEnabledE2EE && latestEveryoneEnabledE2EE) {\n                    dispatch(setEveryoneEnabledE2EE(true));\n                }\n\n                if (!everyoneSupportE2EE && latestEveryoneSupportE2EE) {\n                    dispatch(setEveryoneSupportE2EE(true));\n                }\n            });\n        }\n\n        return result;\n    }\n\n    case TOGGLE_E2EE: {\n        const conference = getCurrentConference(getState);\n\n        if (conference && conference.isE2EEEnabled() !== action.enabled) {\n            logger.debug(`E2EE will be ${action.enabled ? 'enabled' : 'disabled'}`);\n            conference.toggleE2EE(action.enabled);\n\n            // Broadcast that we enabled / disabled E2EE.\n            const participant = getLocalParticipant(getState);\n\n            dispatch(participantUpdated({\n                e2eeEnabled: action.enabled,\n                id: participant.id,\n                local: true\n            }));\n\n            const soundID = action.enabled ? E2EE_ON_SOUND_ID : E2EE_OFF_SOUND_ID;\n\n            dispatch(playSound(soundID));\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch }, previousConference) => {\n        if (previousConference) {\n            dispatch(toggleE2EE(false));\n        }\n    });\n","// @flow\n\n/**\n * The identifier of the sound to be played when e2ee is disabled.\n *\n * @type {string}\n */\nexport const E2EE_OFF_SOUND_ID = 'E2EE_OFF_SOUND';\n\n/**\n * The identifier of the sound to be played when e2ee is enabled.\n *\n * @type {string}\n */\nexport const E2EE_ON_SOUND_ID = 'E2EE_ON_SOUND';\n","// @flow\n\n/**\n * The name of the bundled audio file which will be played when e2ee is disabled.\n *\n * @type {string}\n */\nexport const E2EE_OFF_SOUND_FILE = 'e2eeOff.mp3';\n\n/**\n * The name of the bundled audio file which will be played when e2ee is enabled.\n *\n * @type {string}\n */\nexport const E2EE_ON_SOUND_FILE = 'e2eeOn.mp3';\n","// @flow\n\nimport { getLocalParticipant } from '../base/participants';\nimport { StateListenerRegistry } from '../base/redux';\nimport { appendSuffix } from '../display-name';\nimport { shouldDisplayTileView } from '../video-layout';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * StateListenerRegistry provides a reliable way of detecting changes to\n * preferred layout state and dispatching additional actions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => shouldDisplayTileView(state),\n    /* listener */ displayTileView => {\n        APP.API.notifyTileViewChanged(displayTileView);\n    });\n\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/settings'].displayName,\n    /* listener */ (displayName, store) => {\n        const localParticipant = getLocalParticipant(store.getState());\n\n        // Initial setting of the display name occurs happens on app\n        // initialization, before the local participant is ready. The initial\n        // settings is not desired to be fired anyways, only changes.\n        if (localParticipant) {\n            const { id } = localParticipant;\n\n            APP.API.notifyDisplayNameChanged(id, {\n                displayName,\n                formattedDisplayName: appendSuffix(\n                    displayName,\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME)\n            });\n        }\n    });\n\n/**\n * Updates the on stage participant value.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/large-video'].participantId,\n    /* listener */ participantId => {\n        APP.API.notifyOnStageParticipantChanged(participantId);\n    }\n);\n","// @flow\n\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    KICKED_OUT\n} from '../base/conference';\nimport { NOTIFY_CAMERA_ERROR, NOTIFY_MIC_ERROR } from '../base/devices';\nimport { JitsiConferenceErrors } from '../base/lib-jitsi-meet';\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_KICKED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_ROLE_CHANGED,\n    SET_LOADABLE_AVATAR_URL,\n    getLocalParticipant,\n    getParticipantById\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { getBaseUrl } from '../base/util';\nimport { appendSuffix } from '../display-name';\nimport { SUBMIT_FEEDBACK_ERROR, SUBMIT_FEEDBACK_SUCCESS } from '../feedback';\nimport { SET_FILMSTRIP_VISIBLE } from '../filmstrip';\n\nimport './subscriber';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * The middleware of the feature {@code external-api}.\n *\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    // We need to do these before executing the rest of the middelware chain\n    switch (action.type) {\n    case SET_LOADABLE_AVATAR_URL: {\n        const { id, loadableAvatarUrl } = action.participant;\n        const participant = getParticipantById(\n            store.getState(),\n            id\n        );\n\n        const result = next(action);\n\n        if (participant) {\n            if (loadableAvatarUrl) {\n                participant.loadableAvatarUrl !== loadableAvatarUrl && APP.API.notifyAvatarChanged(\n                    id,\n                    loadableAvatarUrl\n                );\n            } else {\n                // There is no loadable explicit URL. In this case the Avatar component would\n                // decide to render initials or the default avatar, but the external API needs\n                // a URL when it needs to be rendered, so if there is no initials, we return the default\n                // Avatar URL as if it was a usual avatar URL. If there are (or may be) initials\n                // we send undefined to signal the api user that it's not an URL that needs to be rendered.\n                //\n                // NOTE: we may implement a special URL format later to signal that the avatar is based\n                // on initials, that API consumers can handle as they want, e.g. initials://jm\n                APP.API.notifyAvatarChanged(\n                    id,\n                    participant.name ? undefined : _getDefaultAvatarUrl()\n                );\n            }\n        }\n\n        return result;\n    }\n    }\n\n    const result = next(action);\n\n    // These should happen after the rest of the middleware chain ran\n    switch (action.type) {\n    case CONFERENCE_FAILED: {\n        if (action.conference\n            && action.error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) {\n            APP.API.notifyOnPasswordRequired();\n        }\n        break;\n    }\n\n    case CONFERENCE_JOINED: {\n        const state = store.getState();\n        const { room } = state['features/base/conference'];\n        const { loadableAvatarUrl, name, id } = getLocalParticipant(state);\n\n        APP.API.notifyConferenceJoined(\n            room,\n            id,\n            {\n                displayName: name,\n                formattedDisplayName: appendSuffix(\n                    name,\n                    interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME\n                ),\n                avatarURL: loadableAvatarUrl\n            }\n        );\n        break;\n    }\n\n    case DOMINANT_SPEAKER_CHANGED:\n        APP.API.notifyDominantSpeakerChanged(action.participant.id);\n        break;\n\n    case KICKED_OUT:\n        APP.API.notifyKickedOut(\n            {\n                id: getLocalParticipant(store.getState()).id,\n                local: true\n            },\n            { id: action.participant ? action.participant.getId() : undefined }\n        );\n        break;\n\n    case NOTIFY_CAMERA_ERROR:\n        if (action.error) {\n            APP.API.notifyOnCameraError(\n              action.error.name, action.error.message);\n        }\n        break;\n\n    case NOTIFY_MIC_ERROR:\n        if (action.error) {\n            APP.API.notifyOnMicError(action.error.name, action.error.message);\n        }\n        break;\n\n    case PARTICIPANT_KICKED:\n        APP.API.notifyKickedOut(\n            {\n                id: action.kicked,\n                local: false\n            },\n            { id: action.kicker });\n        break;\n\n    case PARTICIPANT_LEFT:\n        APP.API.notifyUserLeft(action.participant.id);\n        break;\n\n    case PARTICIPANT_JOINED: {\n        const { participant } = action;\n        const { id, local, name } = participant;\n\n        // The version of external api outside of middleware did not emit\n        // the local participant being created.\n        if (!local) {\n            APP.API.notifyUserJoined(id, {\n                displayName: name,\n                formattedDisplayName: appendSuffix(\n                    name || interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)\n            });\n        }\n\n        break;\n    }\n\n    case PARTICIPANT_ROLE_CHANGED:\n        APP.API.notifyUserRoleChanged(action.participant.id, action.participant.role);\n        break;\n\n    case SET_FILMSTRIP_VISIBLE:\n        APP.API.notifyFilmstripDisplayChanged(action.visible);\n        break;\n\n    case SUBMIT_FEEDBACK_ERROR:\n        APP.API.notifyFeedbackSubmitted(action.error || 'Unknown error');\n        break;\n\n    case SUBMIT_FEEDBACK_SUCCESS:\n        APP.API.notifyFeedbackSubmitted();\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Returns the absolute URL of the default avatar.\n *\n * @returns {string}\n */\nfunction _getDefaultAvatarUrl() {\n    return new URL('images/avatar.png', getBaseUrl()).href;\n}\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { OPEN_KEYBOARD_SHORTCUTS_DIALOG } from './actionTypes';\n\ndeclare var APP: Object;\n\n/**\n * Implements the middleware of the feature keyboard-shortcuts.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case OPEN_KEYBOARD_SHORTCUTS_DIALOG:\n        if (typeof APP === 'object') {\n            APP.keyboardshortcut.openDialog();\n        }\n        break;\n    }\n\n    return next(action);\n});\n","/* @flow */\n\nimport { createShortcutEvent, sendAnalytics } from '../analytics';\nimport { APP_WILL_UNMOUNT } from '../base/app/actionTypes';\nimport { CONFERENCE_JOINED } from '../base/conference/actionTypes';\nimport { toggleDialog } from '../base/dialog/actions';\nimport { i18next } from '../base/i18n';\nimport { SET_AUDIO_MUTED } from '../base/media/actionTypes';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { SETTINGS_UPDATED } from '../base/settings/actionTypes';\nimport { showNotification } from '../notifications/actions';\n\nimport { localRecordingEngaged, localRecordingUnengaged } from './actions';\nimport { LocalRecordingInfoDialog } from './components';\nimport { recordingController } from './controller';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(({ getState, dispatch }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        const { localRecording } = getState()['features/base/config'];\n        const isLocalRecordingEnabled = Boolean(\n            localRecording\n            && localRecording.enabled\n            && typeof APP === 'object'\n        );\n\n        if (!isLocalRecordingEnabled) {\n            break;\n        }\n\n        // realize the delegates on recordingController, allowing the UI to\n        // react to state changes in recordingController.\n        recordingController.onStateChanged = isEngaged => {\n            if (isEngaged) {\n                const nowTime = new Date();\n\n                dispatch(localRecordingEngaged(nowTime));\n            } else {\n                dispatch(localRecordingUnengaged());\n            }\n        };\n\n        recordingController.onWarning = (messageKey, messageParams) => {\n            dispatch(showNotification({\n                titleKey: 'localRecording.localRecording',\n                description: i18next.t(messageKey, messageParams)\n            }, 10000));\n        };\n\n        recordingController.onNotify = (messageKey, messageParams) => {\n            dispatch(showNotification({\n                titleKey: 'localRecording.localRecording',\n                description: i18next.t(messageKey, messageParams)\n            }, 10000));\n        };\n\n        typeof APP === 'object' && typeof APP.keyboardshortcut === 'object'\n            && APP.keyboardshortcut.registerShortcut('L', null, () => {\n                sendAnalytics(createShortcutEvent('local.recording'));\n                dispatch(toggleDialog(LocalRecordingInfoDialog));\n            }, 'keyboardShortcuts.localRecording');\n\n        if (localRecording.format) {\n            recordingController.switchFormat(localRecording.format);\n        }\n\n        const { conference } = getState()['features/base/conference'];\n\n        recordingController.registerEvents(conference);\n\n        break;\n    }\n    case APP_WILL_UNMOUNT:\n        recordingController.onStateChanged = null;\n        recordingController.onNotify = null;\n        recordingController.onWarning = null;\n        break;\n    case SET_AUDIO_MUTED:\n        recordingController.setMuted(action.muted);\n        break;\n    case SETTINGS_UPDATED: {\n        const { micDeviceId } = getState()['features/base/settings'];\n\n        if (micDeviceId) {\n            recordingController.setMicDevice(micDeviceId);\n        }\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\nimport { SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unset it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setNoAudioSignalNotificationUid(uid: ?number) {\n    return {\n        type: SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID,\n        uid\n    };\n}\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it when hiding the notification is necessary, or unset it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: ?number\n * }\n */\nexport const SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID = 'SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport { getDialInfoPageURL, shouldDisplayDialIn } from '../../invite';\n\n/**\n * The type of the React {@code Component} props of {@link DialInLink}.\n */\ntype Props = {\n\n    /**\n     * The redux state representing the dial-in numbers feature.\n     */\n    _dialIn: Object,\n\n    /**\n     * The url of the page containing the dial-in numbers list.\n     */\n    _dialInfoPageUrl: string,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * React {@code Component} responsible for displaying a telephone number and\n * conference ID for dialing into a conference.\n *\n * @extends Component\n */\nclass DialInLink extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _dialIn, _dialInfoPageUrl, t } = this.props;\n\n        if (!shouldDisplayDialIn(_dialIn)) {\n            return null;\n        }\n\n        return (\n            <div>{t('toolbar.noAudioSignalDialInDesc')}&nbsp;\n                <a\n                    href = { _dialInfoPageUrl }\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    {t('toolbar.noAudioSignalDialInLinkDesc')}\n                </a>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code DialInLink} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _dialIn: state['features/invite'],\n        _dialInfoPageUrl: getDialInfoPageURL(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DialInLink));\n","// @flow\n\nimport React from 'react';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport {\n    formatDeviceLabel,\n    setAudioInputDevice\n} from '../base/devices';\nimport JitsiMeetJS, { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { updateSettings } from '../base/settings';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { hideNotification, showNotification } from '../notifications';\n\nimport { setNoAudioSignalNotificationUid } from './actions';\nimport DialInLink from './components/DialInLink';\nimport { NO_AUDIO_SIGNAL_SOUND_ID } from './constants';\nimport { NO_AUDIO_SIGNAL_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => async action => {\n    const result = next(action);\n    const { dispatch } = store;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(NO_AUDIO_SIGNAL_SOUND_ID, NO_AUDIO_SIGNAL_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(NO_AUDIO_SIGNAL_SOUND_ID));\n        break;\n    case CONFERENCE_JOINED:\n        _handleNoAudioSignalNotification(store, action);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Handles the logic of displaying the no audio input detected notification as well as finding a valid device on the\n * system.\n *\n * @param {Store} store - The redux store in which the specified action is being dispatched.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is being dispatched in the specified redux\n * store.\n * @private\n * @returns {void}\n */\nasync function _handleNoAudioSignalNotification({ dispatch, getState }, action) {\n\n    const { conference } = action;\n\n    conference.on(JitsiConferenceEvents.AUDIO_INPUT_STATE_CHANGE, hasAudioInput => {\n        const { noAudioSignalNotificationUid } = getState()['features/no-audio-signal'];\n\n        // In case the notification is displayed but the conference detected audio input signal we hide it.\n        if (noAudioSignalNotificationUid && hasAudioInput) {\n            dispatch(hideNotification(noAudioSignalNotificationUid));\n            dispatch(setNoAudioSignalNotificationUid());\n        }\n    });\n    conference.on(JitsiConferenceEvents.NO_AUDIO_INPUT, async () => {\n        const { noSrcDataNotificationUid } = getState()['features/base/no-src-data'];\n\n        // In case the 'no data detected from source' notification was already shown, we prevent the\n        // no audio signal notification as it's redundant i.e. it's clear that the users microphone is\n        // muted from system settings.\n        if (noSrcDataNotificationUid) {\n            return;\n        }\n\n        const activeDevice = await JitsiMeetJS.getActiveAudioDevice();\n\n        // In case there is a previous notification displayed just hide it.\n        const { noAudioSignalNotificationUid } = getState()['features/no-audio-signal'];\n\n        if (noAudioSignalNotificationUid) {\n            dispatch(hideNotification(noAudioSignalNotificationUid));\n            dispatch(setNoAudioSignalNotificationUid());\n        }\n\n\n        let descriptionKey = 'toolbar.noAudioSignalDesc';\n        let customActionNameKey;\n        let customActionHandler;\n\n        // In case the detector picked up a device show a notification with a device suggestion\n        if (activeDevice.deviceLabel !== '') {\n            descriptionKey = 'toolbar.noAudioSignalDescSuggestion';\n\n            // Preferably the label should be passed as an argument paired with a i18next string, however\n            // at the point of the implementation the showNotification function only supports doing that for\n            // the description.\n            // TODO Add support for arguments to showNotification title and customAction strings.\n            customActionNameKey = `Switch to ${formatDeviceLabel(activeDevice.deviceLabel)}`;\n            customActionHandler = () => {\n                // Select device callback\n                dispatch(\n                        updateSettings({\n                            userSelectedMicDeviceId: activeDevice.deviceId,\n                            userSelectedMicDeviceLabel: activeDevice.deviceLabel\n                        })\n                );\n\n                dispatch(setAudioInputDevice(activeDevice.deviceId));\n            };\n        }\n\n        const notification = await dispatch(showNotification({\n            titleKey: 'toolbar.noAudioSignalTitle',\n            description: <DialInLink />,\n            descriptionKey,\n            customActionNameKey,\n            customActionHandler\n        }));\n\n        dispatch(playSound(NO_AUDIO_SIGNAL_SOUND_ID));\n\n        if (notification) {\n            // Store the current notification uid so we can check for this state and hide it in case\n            // a new track was added, thus changing the context of the notification\n            dispatch(setNoAudioSignalNotificationUid(notification.uid));\n        }\n    });\n}\n","/**\n * The identifier of the sound to be played when we got an event for no audio signal.\n *\n * @type {string}\n */\nexport const NO_AUDIO_SIGNAL_SOUND_ID = 'NO_AUDIO_SIGNAL_SOUND_ID';\n","/**\n * The file used for the no audio signal sound notification.\n *\n * @type {string}\n */\nexport const NO_AUDIO_SIGNAL_SOUND_FILE = 'noAudioSignal.mp3';\n","// @flow\n\nimport { SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unset it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setNoisyAudioInputNotificationUid(uid: ?number) {\n    return {\n        type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID,\n        uid\n    };\n}\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it when hiding the notification is necessary, or unset it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID\n *     uid: ?number\n * }\n */\nexport const SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID = 'SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID';\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { hideNotification, showNotification } from '../notifications';\n\nimport { setNoisyAudioInputNotificationUid } from './actions';\nimport { NOISY_AUDIO_INPUT_SOUND_ID } from './constants';\nimport { NOISY_AUDIO_INPUT_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        store.dispatch(registerSound(NOISY_AUDIO_INPUT_SOUND_ID, NOISY_AUDIO_INPUT_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        store.dispatch(unregisterSound(NOISY_AUDIO_INPUT_SOUND_ID));\n        break;\n    case CONFERENCE_JOINED: {\n        const { dispatch, getState } = store;\n        const { conference } = action;\n\n        conference.on(\n            JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n            track => {\n                const { noisyAudioInputNotificationUid } = getState()['features/noise-detection'];\n\n                // Hide the notification in case the user mutes the microphone\n                if (noisyAudioInputNotificationUid && track.isAudioTrack() && track.isLocal() && track.isMuted()) {\n                    dispatch(hideNotification(noisyAudioInputNotificationUid));\n                    dispatch(setNoisyAudioInputNotificationUid());\n                }\n            });\n        conference.on(\n            JitsiConferenceEvents.NOISY_MIC, async () => {\n                const notification = await dispatch(showNotification({\n                    titleKey: 'toolbar.noisyAudioInputTitle',\n                    descriptionKey: 'toolbar.noisyAudioInputDesc'\n                }));\n\n                dispatch(playSound(NOISY_AUDIO_INPUT_SOUND_ID));\n\n                if (notification) {\n                    // we store the last notification id so we can hide it if the mic is muted\n                    dispatch(setNoisyAudioInputNotificationUid(notification.uid));\n                }\n            });\n        break;\n    }\n    }\n\n    return result;\n});\n","/**\n * The identifier of the sound to be played when we display a you are noisy notification.\n *\n * @type {string}\n */\nexport const NOISY_AUDIO_INPUT_SOUND_ID = 'NOISY_AUDIO_INPUT_SOUND_ID';\n","/**\n * The file used for the noisy audio input notification.\n *\n * @type {string}\n */\nexport const NOISY_AUDIO_INPUT_SOUND_FILE = 'noisyAudioInput.mp3';\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\n\n/**\n * The type of the React {@code Component} props of {@link OldElectronAPPNotificationDescription}.\n */\ntype Props = {\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * A component that renders the description of the notification for old Jitsi Meet Electron clients.\n *\n * @extends AbstractApp\n */\nexport class OldElectronAPPNotificationDescription extends Component<Props> {\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n\n        return (\n            <div>\n                { t('notify.oldElectronClientDescription1') }\n                <a\n                    href = 'https://github.com/jitsi/jitsi-meet-electron/releases/latest'\n                    rel = 'noopener noreferrer'\n                    target = '_blank'>\n                    { t('notify.oldElectronClientDescription2') }\n                </a>\n                { t('notify.oldElectronClientDescription3') }\n            </div>);\n    }\n\n}\n\nexport default translate(OldElectronAPPNotificationDescription);\n","// @flow\n\nimport React from 'react';\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { showErrorNotification } from '../notifications';\n\nimport { OldElectronAPPNotificationDescription } from './components';\nimport { isOldJitsiMeetElectronApp } from './functions';\n\ndeclare var interfaceConfig: Object;\n\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature that the action {@link APP_WILL_MOUNT} has being dispatched.\n *\n * @param {Store} store - The redux store in which the specified {@code action} is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the specified {@code action}.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT} which is being dispatched.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the specified {@code action}.\n */\nfunction _appWillMount(store, next, action) {\n    if (isOldJitsiMeetElectronApp()) {\n        const { dispatch } = store;\n\n        dispatch(showErrorNotification({\n            titleKey: 'notify.OldElectronAPPTitle',\n            description: <OldElectronAPPNotificationDescription />\n        }));\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport { browser } from '../../../react/features/base/lib-jitsi-meet';\n\n/**\n * Returns true if Jitsi Meet is running in too old jitsi-meet-electron app and false otherwise.\n *\n * @returns {boolean} - True if Jitsi Meet is running in too old jitsi-meet-electron app and false otherwise.\n */\nexport function isOldJitsiMeetElectronApp() {\n    if (!browser.isElectron()) {\n        return false;\n    }\n\n    const match = navigator.userAgent.match(/(JitsiMeet)\\s*\\/\\s*((\\d+)\\.[^\\s]*)/);\n\n    if (!Array.isArray(match) || match.length < 3) {\n        return false;\n    }\n\n    const majorVersion = Number(match[3]);\n\n    if (isNaN(majorVersion) || majorVersion >= 2) {\n        return false;\n    }\n\n    return true;\n}\n","// @flow\n\n\nimport {\n    PostMessageTransportBackend,\n    Transport\n} from '../../../modules/transport';\nimport {\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT\n} from '../base/conference';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { destroyLocalTracks } from '../base/tracks';\n\nimport { SUSPEND_DETECTED } from './actionTypes';\nimport {\n    setTransport,\n    suspendDetected\n} from './actions';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n    const { dispatch, getState } = store;\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n\n        // listens for messages about suspend from power-monitor\n        const transport = new Transport({\n            backend: new PostMessageTransportBackend({\n                postisOptions: { scope: 'jitsi-power-monitor' }\n            })\n        });\n\n        transport.on('event', event => {\n            if (event && event.name === 'power-monitor' && event.event === 'suspend') {\n\n                dispatch(suspendDetected());\n\n                return true;\n            }\n\n            return false;\n        });\n\n        dispatch(setTransport(transport));\n        break;\n    }\n\n    case CONFERENCE_LEFT: {\n        const { transport } = getState()['features/power-monitor'];\n\n        if (transport) {\n            transport.dispose();\n        }\n\n        dispatch(setTransport());\n        break;\n    }\n\n    case SUSPEND_DETECTED: {\n        dispatch(destroyLocalTracks());\n\n        // FIXME: when refactoring conference.js\n        APP.conference.onSuspendDetected();\n\n        APP.API.notifySuspendDetected();\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\nimport { updateConfig } from '../base/config';\nimport { SET_AUDIO_MUTED, SET_VIDEO_MUTED } from '../base/media';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { updateSettings } from '../base/settings';\nimport {\n    getLocalTracks,\n    replaceLocalTrack,\n    TRACK_ADDED,\n    TRACK_NO_DATA_FROM_SOURCE\n} from '../base/tracks';\n\nimport { PREJOIN_START_CONFERENCE } from './actionTypes';\nimport {\n    setDeviceStatusOk,\n    setDeviceStatusWarning,\n    setPrejoinPageVisibility\n} from './actions';\nimport { isPrejoinPageVisible } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * The redux middleware for {@link PrejoinPage}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => async action => {\n    switch (action.type) {\n    case PREJOIN_START_CONFERENCE: {\n        const { getState, dispatch } = store;\n        const state = getState();\n        const { userSelectedSkipPrejoin } = state['features/prejoin'];\n        let localTracks = getLocalTracks(state['features/base/tracks']);\n        const { options } = action;\n\n        options && store.dispatch(updateConfig(options));\n\n        userSelectedSkipPrejoin && dispatch(updateSettings({\n            userSelectedSkipPrejoin\n        }));\n\n        // Do not signal audio/video tracks if the user joins muted.\n        for (const track of localTracks) {\n            if (track.muted) {\n                await dispatch(replaceLocalTrack(track.jitsiTrack, null));\n            }\n        }\n\n        // Re-fetch the local tracks after muted tracks have been removed above.\n        // This is needed, because the tracks are effectively disposed by the replaceLocalTrack and should not be used\n        // anymore.\n        localTracks = getLocalTracks(getState()['features/base/tracks']);\n\n        const jitsiTracks = localTracks.map(t => t.jitsiTrack);\n\n        dispatch(setPrejoinPageVisibility(false));\n        APP.conference.prejoinStart(jitsiTracks);\n\n        break;\n    }\n\n    case SET_AUDIO_MUTED: {\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(updateSettings({\n                startWithAudioMuted: Boolean(action.muted)\n            }));\n        }\n        break;\n    }\n\n    case SET_VIDEO_MUTED: {\n        if (isPrejoinPageVisible(store.getState())) {\n            store.dispatch(updateSettings({\n                startWithVideoMuted: Boolean(action.muted)\n            }));\n        }\n        break;\n    }\n\n    case TRACK_ADDED:\n    case TRACK_NO_DATA_FROM_SOURCE: {\n        const state = store.getState();\n\n        if (isPrejoinPageVisible(state)) {\n            const { track: { jitsiTrack: track } } = action;\n            const { deviceStatusType, deviceStatusText } = state['features/prejoin'];\n\n            if (!track.isAudioTrack()) {\n                break;\n            }\n\n            if (track.isReceivingData()) {\n                if (deviceStatusType === 'warning'\n                    && deviceStatusText === 'prejoin.audioDeviceProblem') {\n                    store.dispatch(setDeviceStatusOk('prejoin.lookGood'));\n                }\n            } else if (deviceStatusType === 'ok') {\n                store.dispatch(setDeviceStatusWarning('prejoin.audioDeviceProblem'));\n            }\n        }\n        break;\n    }\n\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { StateListenerRegistry } from '../base/redux';\n\nimport { resume, pause } from './actions';\n\n/**\n * Listens for large video participant ID changes.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const { participantId } = state['features/large-video'];\n        const { controller } = state['features/remote-control'];\n        const { controlled } = controller;\n\n        if (!controlled) {\n            return undefined;\n        }\n\n        return controlled === participantId;\n    },\n    /* listener */ (isControlledParticipantOnStage, { dispatch }) => {\n        if (isControlledParticipantOnStage === true) {\n            dispatch(resume());\n        } else if (isControlledParticipantOnStage === false) {\n            dispatch(pause());\n        }\n\n        // else {\n        // isControlledParticipantOnStage === undefined. Ignore!\n        // }\n    }\n);\n","// @flow\nimport { PostMessageTransportBackend, Transport } from '@jitsi/js-utils/transport';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { PARTICIPANT_LEFT } from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    clearRequest, setReceiverTransport, setRemoteControlActive, stopController, stopReceiver\n} from './actions';\nimport { REMOTE_CONTROL_MESSAGE_NAME } from './constants';\nimport { onRemoteControlAPIEvent } from './functions';\nimport './subscriber';\n\n/**\n * The redux middleware for the remote control feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => async action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT: {\n        const { dispatch } = store;\n\n        dispatch(setReceiverTransport(new Transport({\n            backend: new PostMessageTransportBackend({\n                postisOptions: { scope: 'jitsi-remote-control' }\n            })\n        })));\n\n        break;\n    }\n    case APP_WILL_UNMOUNT: {\n        const { getState, dispatch } = store;\n        const { transport } = getState()['features/remote-control'].receiver;\n\n        if (transport) {\n            transport.dispose();\n            dispatch(setReceiverTransport());\n        }\n\n        break;\n    }\n    case CONFERENCE_JOINED: {\n        const result = next(action);\n        const { getState } = store;\n        const { transport } = getState()['features/remote-control'].receiver;\n\n        if (transport) {\n            // We expect here that even if we receive the supported event earlier\n            // it will be cached and we'll receive it.\n            transport.on('event', event => {\n                if (event.name === REMOTE_CONTROL_MESSAGE_NAME) {\n                    onRemoteControlAPIEvent(event, store);\n\n                    return true;\n                }\n\n                return false;\n            });\n        }\n\n        return result;\n    }\n    case PARTICIPANT_LEFT: {\n        const { getState, dispatch } = store;\n        const state = getState();\n        const { id } = action.participant;\n        const { receiver, controller } = state['features/remote-control'];\n        const { requestedParticipant, controlled } = controller;\n\n        if (id === controlled) {\n            dispatch(stopController());\n        }\n\n        if (id === requestedParticipant) {\n            dispatch(clearRequest());\n            dispatch(setRemoteControlActive(false));\n        }\n\n        if (receiver?.controller === id) {\n            dispatch(stopReceiver(false, true));\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/screen-share');\n","// @flow\n\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { SET_SCREENSHARE_CAPTURE_FRAME_RATE } from './actionTypes';\nimport logger from './logger';\n\n/**\n * Implements the middleware of the feature screen-share.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        _setScreenshareCaptureFps(store);\n        break;\n    }\n    case SET_SCREENSHARE_CAPTURE_FRAME_RATE: {\n        const { captureFrameRate } = action;\n\n        _setScreenshareCaptureFps(store, captureFrameRate);\n        break;\n    }\n    }\n\n    return result;\n});\n\n/**\n * Sets the capture frame rate for screenshare.\n *\n * @param {Store} store - The redux store.\n * @param {number} frameRate - Frame rate to be configured.\n * @private\n * @returns {void}\n */\nfunction _setScreenshareCaptureFps(store, frameRate) {\n    const state = store.getState();\n    const { conference } = state['features/base/conference'];\n    const { captureFrameRate } = state['features/screen-share'];\n    const screenShareFps = frameRate ?? captureFrameRate;\n\n    if (!conference) {\n        return;\n    }\n\n    if (screenShareFps) {\n        logger.debug(`Setting screenshare capture frame rate as ${screenShareFps}`);\n        conference.setDesktopSharingFrameRate(screenShareFps);\n    }\n\n}\n","// @flow\n\nimport { SET_DISABLE_BUTTON } from './actionTypes';\n\nexport * from './actions.any';\n\n/**\n * Disabled share video button.\n *\n * @param {boolean} disabled - The current state of the share video button.\n * @returns {{\n *     type: SET_DISABLE_BUTTON,\n *     disabled: boolean\n * }}\n */\nexport function setDisableButton(disabled: boolean) {\n    return {\n        type: SET_DISABLE_BUTTON,\n        disabled\n    };\n}\n","// @flow\n\nimport { batch } from 'react-redux';\n\nimport { CONFERENCE_LEFT, getCurrentConference } from '../base/conference';\nimport {\n    PARTICIPANT_LEFT,\n    getLocalParticipant,\n    participantJoined,\n    participantLeft,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\n\nimport { SET_SHARED_VIDEO_STATUS, RESET_SHARED_VIDEO_STATUS } from './actionTypes';\nimport {\n    resetSharedVideoStatus,\n    setSharedVideoStatus\n} from './actions.any';\nimport { SHARED_VIDEO, VIDEO_PLAYER_PARTICIPANT_NAME } from './constants';\nimport { isSharingStatus } from './functions';\n\n/**\n * Middleware that captures actions related to video sharing and updates\n * components not hooked into redux.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch, getState } = store;\n    const state = getState();\n    const conference = getCurrentConference(state);\n    const localParticipantId = getLocalParticipant(state)?.id;\n    const { videoUrl, status, ownerId, time, muted, volume } = action;\n    const { ownerId: stateOwnerId, videoUrl: statevideoUrl } = state['features/shared-video'];\n\n    switch (action.type) {\n    case CONFERENCE_LEFT:\n        dispatch(resetSharedVideoStatus());\n        break;\n    case PARTICIPANT_LEFT:\n        if (action.participant.id === stateOwnerId) {\n            batch(() => {\n                dispatch(resetSharedVideoStatus());\n                dispatch(participantLeft(statevideoUrl, conference));\n            });\n        }\n        break;\n    case SET_SHARED_VIDEO_STATUS:\n        if (localParticipantId === ownerId) {\n            sendShareVideoCommand({\n                conference,\n                localParticipantId,\n                muted,\n                status,\n                time,\n                id: videoUrl,\n                volume\n            });\n        }\n        break;\n    case RESET_SHARED_VIDEO_STATUS:\n        if (localParticipantId === stateOwnerId) {\n            sendShareVideoCommand({\n                conference,\n                id: statevideoUrl,\n                localParticipantId,\n                muted: true,\n                status: 'stop',\n                time: 0,\n                volume: 0\n            });\n        }\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, e.g. clear messages or close the chat modal if it's left\n * open.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, store, previousConference) => {\n        if (conference && conference !== previousConference) {\n            conference.addCommandListener(SHARED_VIDEO,\n                ({ value, attributes }) => {\n\n                    const { dispatch, getState } = store;\n                    const { from } = attributes;\n                    const localParticipantId = getLocalParticipant(getState()).id;\n                    const status = attributes.state;\n\n                    if (isSharingStatus(status)) {\n                        handleSharingVideoStatus(store, value, attributes, conference);\n                    } else if (status === 'stop') {\n                        dispatch(participantLeft(value, conference));\n                        if (localParticipantId !== from) {\n                            dispatch(resetSharedVideoStatus());\n                        }\n                    }\n                }\n            );\n        }\n    }\n);\n\n/**\n * Handles the playing, pause and start statuses for the shared video.\n * Dispatches participantJoined event and, if necessary, pins it.\n * Sets the SharedVideoStatus if the event was triggered by the local user.\n *\n * @param {Store} store - The redux store.\n * @param {string} videoUrl - The id of the video to the shared.\n * @param {Object} attributes - The attributes received from the share video command.\n * @param {JitsiConference} conference - The current conference.\n * @returns {void}\n */\nfunction handleSharingVideoStatus(store, videoUrl, { state, time, from, muted }, conference) {\n    const { dispatch, getState } = store;\n    const localParticipantId = getLocalParticipant(getState()).id;\n    const oldStatus = getState()['features/shared-video']?.status;\n\n    if (state === 'start' || ![ 'playing', 'pause', 'start' ].includes(oldStatus)) {\n        const youtubeId = videoUrl.match(/http/) ? false : videoUrl;\n        const avatarURL = youtubeId ? `https://img.youtube.com/vi/${youtubeId}/0.jpg` : '';\n\n        dispatch(participantJoined({\n            conference,\n            id: videoUrl,\n            isFakeParticipant: true,\n            avatarURL,\n            name: VIDEO_PLAYER_PARTICIPANT_NAME\n        }));\n\n        dispatch(pinParticipant(videoUrl));\n    }\n\n    if (localParticipantId !== from) {\n        dispatch(setSharedVideoStatus({\n            muted: muted === 'true',\n            ownerId: from,\n            status: state,\n            time: Number(time),\n            videoUrl\n        }));\n    }\n}\n\n/* eslint-disable max-params */\n\n/**\n * Sends SHARED_VIDEO command.\n *\n * @param {string} id - The id of the video.\n * @param {string} status - The status of the shared video.\n * @param {JitsiConference} conference - The current conference.\n * @param {string} localParticipantId - The id of the local participant.\n * @param {string} time - The seek position of the video.\n * @returns {void}\n */\nfunction sendShareVideoCommand({ id, status, conference, localParticipantId, time, muted, volume }) {\n    conference.sendCommandOnce(SHARED_VIDEO, {\n        value: id,\n        attributes: {\n            from: localParticipantId,\n            muted,\n            state: status,\n            time,\n            volume\n        }\n    });\n}\n","// @flow\n\nimport { getCurrentConference } from '../base/conference';\nimport { getLocalParticipant } from '../base/participants';\nimport { StateListenerRegistry } from '../base/redux';\n\nimport { setDisableButton } from './actions.web';\nimport { SHARED_VIDEO } from './constants';\n\nimport './middleware.any';\n\n/**\n * Set up state change listener to disable or enable the share video button in\n * the toolbar menu.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, store, previousConference) => {\n        if (conference && conference !== previousConference) {\n            conference.addCommandListener(SHARED_VIDEO,\n                ({ attributes }) => {\n                    const { dispatch, getState } = store;\n                    const { from } = attributes;\n                    const localParticipantId = getLocalParticipant(getState()).id;\n                    const status = attributes.state;\n\n                    if (status === 'playing') {\n                        if (localParticipantId !== from) {\n                            dispatch(setDisableButton(true));\n                        }\n                    } else if (status === 'stop') {\n                        dispatch(setDisableButton(false));\n                    }\n                }\n            );\n        }\n    }\n);\n","// @flow\n\nimport { SET_CURRENT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Sets UID of the the pending notification to use it when hiding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setCurrentNotificationUid(uid: ?number) {\n    return {\n        type: SET_CURRENT_NOTIFICATION_UID,\n        uid\n    };\n}\n","/**\n * The type of Redux action which sets the pending notification UID\n * to use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_CURRENT_NOTIFICATION_UID,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_CURRENT_NOTIFICATION_UID = 'SET_CURRENT_NOTIFICATION_UID';\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { setAudioMuted } from '../base/media';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport {\n    hideNotification,\n    showNotification\n} from '../notifications';\n\nimport { setCurrentNotificationUid } from './actions';\nimport { TALK_WHILE_MUTED_SOUND_ID } from './constants';\nimport { TALK_WHILE_MUTED_SOUND_FILE } from './sounds';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n    const { dispatch, getState } = store;\n    const { conference } = action;\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(TALK_WHILE_MUTED_SOUND_ID, TALK_WHILE_MUTED_SOUND_FILE));\n        break;\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(TALK_WHILE_MUTED_SOUND_ID));\n        break;\n\n    case CONFERENCE_JOINED: {\n        conference.on(\n            JitsiConferenceEvents.TRACK_MUTE_CHANGED,\n            track => {\n                const { currentNotificationUid } = getState()['features/talk-while-muted'];\n\n                if (currentNotificationUid && track.isAudioTrack() && track.isLocal() && !track.isMuted()) {\n                    dispatch(hideNotification(currentNotificationUid));\n                    dispatch(setCurrentNotificationUid());\n                }\n            });\n        conference.on(\n            JitsiConferenceEvents.TALK_WHILE_MUTED, async () => {\n                const notification = await dispatch(showNotification({\n                    titleKey: 'toolbar.talkWhileMutedPopup',\n                    customActionNameKey: 'notify.unmute',\n                    customActionHandler: () => dispatch(setAudioMuted(false))\n                }));\n\n                const { soundsTalkWhileMuted } = getState()['features/base/settings'];\n\n                if (soundsTalkWhileMuted) {\n                    dispatch(playSound(TALK_WHILE_MUTED_SOUND_ID));\n                }\n\n\n                if (notification) {\n                    // we store the last start muted notification id that we showed,\n                    // so we can hide it when unmuted mic is detected\n                    dispatch(setCurrentNotificationUid(notification.uid));\n                }\n            });\n        break;\n    }\n    }\n\n    return result;\n});\n","/**\n * The identifier of the sound to be played when we got event for talking while muted.\n *\n * @type {string}\n */\nexport const TALK_WHILE_MUTED_SOUND_ID = 'TALK_WHILE_MUTED_SOUND_ID';\n","/**\n * The file used for the talk while muted sound notification.\n *\n * @type {string}\n */\nexport const TALK_WHILE_MUTED_SOUND_FILE = 'talkWhileMuted.mp3';\n","// @flow\n\nimport { VIDEO_TYPE } from '../base/media';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { getLocalVideoTrack } from '../base/tracks';\n\nimport { SET_VIRTUAL_BACKGROUND } from './actionTypes';\nimport { localTrackStopped } from './functions';\n\n/**\n * Middleware which intercepts the desktop video type on\n * virtual background. If the user stops the screen share\n * then the default virtual background is set to 'none' option\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch, getState } = store;\n    const virtualSource = getState()['features/virtual-background'].virtualSource;\n    const currentLocalTrack = getLocalVideoTrack(getState()['features/base/tracks']);\n\n    if (virtualSource?.videoType === VIDEO_TYPE.DESKTOP && action.type === SET_VIRTUAL_BACKGROUND) {\n        localTrackStopped(dispatch, virtualSource, currentLocalTrack?.jitsiTrack);\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport {\n    CONFERENCE_JOINED,\n    CONFERENCE_WILL_LEAVE,\n    SET_ROOM\n} from '../base/conference';\nimport { SET_CONFIG } from '../base/config';\nimport { SET_NETWORK_INFO } from '../base/net-info';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    getLocalAudioTrack,\n    getLocalVideoTrack,\n    TRACK_ADDED,\n    TRACK_REMOVED,\n    TRACK_UPDATED\n} from '../base/tracks';\n\nimport { createLocalTracksDurationEvent, createNetworkInfoEvent } from './AnalyticsEvents';\nimport { UPDATE_LOCAL_TRACKS_DURATION } from './actionTypes';\nimport { createHandlers, initAnalytics, resetAnalytics, sendAnalytics } from './functions';\n\n/**\n * Calculates the duration of the local tracks.\n *\n * @param {Object} state - The redux state.\n * @returns {Object} - The local tracks duration.\n */\nfunction calculateLocalTrackDuration(state) {\n    const now = Date.now();\n    const { localTracksDuration } = state['features/analytics'];\n    const { conference } = state['features/base/conference'];\n    const { audio, video } = localTracksDuration;\n    const { camera, desktop } = video;\n    const tracks = state['features/base/tracks'];\n    const audioTrack = getLocalAudioTrack(tracks);\n    const videoTrack = getLocalVideoTrack(tracks);\n    const newDuration = { ...localTracksDuration };\n\n    if (!audioTrack || audioTrack.muted || !conference) {\n        newDuration.audio = {\n            startedTime: -1,\n            value: audio.value + (audio.startedTime === -1 ? 0 : now - audio.startedTime)\n        };\n    } else if (audio.startedTime === -1) {\n        newDuration.audio.startedTime = now;\n    }\n\n    if (!videoTrack || videoTrack.muted || !conference) {\n        newDuration.video = {\n            camera: {\n                startedTime: -1,\n                value: camera.value + (camera.startedTime === -1 ? 0 : now - camera.startedTime)\n            },\n            desktop: {\n                startedTime: -1,\n                value: desktop.value + (desktop.startedTime === -1 ? 0 : now - desktop.startedTime)\n            }\n        };\n    } else {\n        const { videoType } = videoTrack;\n\n        if (video[videoType].startedTime === -1) {\n            newDuration.video[videoType].startedTime = now;\n        }\n    }\n\n    return {\n        ...localTracksDuration,\n        ...newDuration\n    };\n}\n\n/**\n * Middleware which intercepts config actions to handle evaluating analytics\n * config based on the config stored in the store.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case SET_CONFIG:\n        if (navigator.product === 'ReactNative') {\n            // Resetting the analytics is currently not needed for web because\n            // the user will be redirected to another page and new instance of\n            // Analytics will be created and initialized.\n            resetAnalytics();\n        }\n        break;\n    case SET_ROOM: {\n        // createHandlers is called before the SET_ROOM action is executed in order for Amplitude to initialize before\n        // the deeplinking logic is executed (after the SET_ROOM action) so that the Amplitude device id is available\n        // if needed.\n        const createHandlersPromise = createHandlers(store);\n        const result = next(action);\n\n        createHandlersPromise.then(handlers => {\n            initAnalytics(store, handlers);\n        });\n\n        return result;\n    }\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        const { dispatch, getState } = store;\n        const state = getState();\n\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: {\n                ...calculateLocalTrackDuration(state),\n                conference: {\n                    startedTime: Date.now(),\n                    value: 0\n                }\n            }\n        });\n        break;\n    }\n\n    case CONFERENCE_WILL_LEAVE: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { localTracksDuration } = state['features/analytics'];\n        const newLocalTracksDuration = {\n            ...calculateLocalTrackDuration(state),\n            conference: {\n                startedTime: -1,\n                value: Date.now() - localTracksDuration.conference.startedTime\n            }\n        };\n\n        sendAnalytics(createLocalTracksDurationEvent(newLocalTracksDuration));\n\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: newLocalTracksDuration\n        });\n        break;\n    }\n    case SET_NETWORK_INFO:\n        sendAnalytics(\n            createNetworkInfoEvent({\n                isOnline: action.isOnline,\n                details: action.details,\n                networkType: action.networkType\n            }));\n        break;\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n    case TRACK_UPDATED: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { localTracksDuration } = state['features/analytics'];\n\n        if (localTracksDuration.conference.startedTime === -1 || action.mediaType === 'presenter') {\n            // We don't want to track the media duration if the conference is not joined yet because otherwise we won't\n            // be able to compare them with the conference duration (from conference join to conference will leave).\n            // Also, do not track media duration for presenter tracks.\n            break;\n        }\n        dispatch({\n            type: UPDATE_LOCAL_TRACKS_DURATION,\n            localTracksDuration: {\n                ...localTracksDuration,\n                ...calculateLocalTrackDuration(state)\n            }\n        });\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\n/**\n * The type of (redux) action which signals that local media duration has changed.\n *\n * {\n *     type: UPDATE_LOCAL_TRACKS_DURATION,\n *     localTracksDuration: Object\n * }\n */\nexport const UPDATE_LOCAL_TRACKS_DURATION = 'UPDATE_LOCAL_TRACKS_DURATION';\n","/**\n * The action dispatched when the {@link NetworkInfo} structure is being updated.\n *\n * @type {string}\n */\nexport const SET_NETWORK_INFO = 'SET_NETWORK_INFO';\n\n/**\n * The action dispatched by 'base/net-info' middleware in order to store the cleanup function for later use.\n * @type {string}\n * @private\n */\nexport const _STORE_NETWORK_INFO_CLEANUP = 'STORE_NETWORK_INFO_CLEANUP';\n","// @flow\n\nimport {\n    ACTION_PINNED,\n    ACTION_UNPINNED,\n    createOfferAnswerFailedEvent,\n    createPinnedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { reloadNow } from '../../app/actions';\nimport { openDisplayNamePrompt } from '../../display-name';\nimport { showErrorNotification } from '../../notifications';\nimport { CONNECTION_ESTABLISHED, CONNECTION_FAILED, connectionDisconnected } from '../connection';\nimport { validateJwt } from '../jwt';\nimport { JitsiConferenceErrors } from '../lib-jitsi-meet';\nimport { MEDIA_TYPE } from '../media';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getPinnedParticipant,\n    PARTICIPANT_ROLE,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT\n} from '../participants';\nimport { MiddlewareRegistry } from '../redux';\nimport { TRACK_ADDED, TRACK_REMOVED } from '../tracks';\n\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_WILL_LEAVE,\n    SEND_TONES,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_ROOM\n} from './actionTypes';\nimport {\n    conferenceFailed,\n    conferenceWillLeave,\n    createConference,\n    setSubject\n} from './actions';\nimport {\n    _addLocalTracksToConference,\n    _removeLocalTracksFromConference,\n    forEachConference,\n    getCurrentConference\n} from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Handler for before unload event.\n */\nlet beforeUnloadHandler;\n\n/**\n * Implements the middleware of the feature base/conference.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n        return _conferenceFailed(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case CONNECTION_ESTABLISHED:\n        return _connectionEstablished(store, next, action);\n\n    case CONNECTION_FAILED:\n        return _connectionFailed(store, next, action);\n\n    case CONFERENCE_SUBJECT_CHANGED:\n        return _conferenceSubjectChanged(store, next, action);\n\n    case CONFERENCE_WILL_LEAVE:\n        _conferenceWillLeave();\n        break;\n\n    case PARTICIPANT_UPDATED:\n        return _updateLocalParticipantInConference(store, next, action);\n\n    case PIN_PARTICIPANT:\n        return _pinParticipant(store, next, action);\n\n    case SEND_TONES:\n        return _sendTones(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n        return _trackAddedOrRemoved(store, next, action);\n    }\n\n    return next(action);\n});\n\n\n/**\n * Makes sure to leave a failed conference in order to release any allocated\n * resources like peer connections, emit participant left events, etc.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_FAILED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceFailed({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const { conference, error } = action;\n    const { enableForcedReload } = getState()['features/base/config'];\n\n    // Handle specific failure reasons.\n    switch (error.name) {\n    case JitsiConferenceErrors.CONFERENCE_DESTROYED: {\n        const [ reason ] = error.params;\n\n        dispatch(showErrorNotification({\n            description: reason,\n            titleKey: 'dialog.sessTerminated'\n        }));\n\n        break;\n    }\n    case JitsiConferenceErrors.CONFERENCE_RESTARTED: {\n        if (enableForcedReload) {\n            dispatch(showErrorNotification({\n                description: 'Restart initiated because of a bridge failure',\n                titleKey: 'dialog.sessionRestarted'\n            }));\n        }\n\n        break;\n    }\n    case JitsiConferenceErrors.CONNECTION_ERROR: {\n        const [ msg ] = error.params;\n\n        dispatch(connectionDisconnected(getState()['features/base/connection'].connection));\n        dispatch(showErrorNotification({\n            descriptionArguments: { msg },\n            descriptionKey: msg ? 'dialog.connectErrorWithMsg' : 'dialog.connectError',\n            titleKey: 'connection.CONNFAIL'\n        }));\n\n        break;\n    }\n    case JitsiConferenceErrors.OFFER_ANSWER_FAILED:\n        sendAnalytics(createOfferAnswerFailedEvent());\n        break;\n    }\n\n    if (typeof APP === 'undefined') {\n        !error.recoverable\n        && conference\n        && conference.leave().catch(reason => {\n            // Even though we don't care too much about the failure, it may be\n            // good to know that it happen, so log it (on the info level).\n            logger.info('JitsiConference.leave() rejected with:', reason);\n        });\n    } else if (typeof beforeUnloadHandler !== 'undefined') {\n        // FIXME: Workaround for the web version. Currently, the creation of the\n        // conference is handled by /conference.js and appropriate failure handlers\n        // are set there.\n        window.removeEventListener('beforeunload', beforeUnloadHandler);\n        beforeUnloadHandler = undefined;\n    }\n\n    if (enableForcedReload && error?.name === JitsiConferenceErrors.CONFERENCE_RESTARTED) {\n        dispatch(conferenceWillLeave(conference));\n        dispatch(reloadNow());\n    }\n\n    return result;\n}\n\n/**\n * Does extra sync up on properties that may need to be updated after the\n * conference was joined.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceJoined({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const { conference } = action;\n    const { pendingSubjectChange } = getState()['features/base/conference'];\n    const { requireDisplayName } = getState()['features/base/config'];\n\n    pendingSubjectChange && dispatch(setSubject(pendingSubjectChange));\n\n    // FIXME: Very dirty solution. This will work on web only.\n    // When the user closes the window or quits the browser, lib-jitsi-meet\n    // handles the process of leaving the conference. This is temporary solution\n    // that should cover the described use case as part of the effort to\n    // implement the conferenceWillLeave action for web.\n    beforeUnloadHandler = () => {\n        dispatch(conferenceWillLeave(conference));\n    };\n    window.addEventListener('beforeunload', beforeUnloadHandler);\n\n    if (requireDisplayName\n        && !getLocalParticipant(getState)?.name\n        && !conference.isHidden()) {\n        dispatch(openDisplayNamePrompt(undefined));\n    }\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONNECTION_ESTABLISHED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_ESTABLISHED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _connectionEstablished({ dispatch }, next, action) {\n    const result = next(action);\n\n    // FIXME: Workaround for the web version. Currently, the creation of the\n    // conference is handled by /conference.js.\n    typeof APP === 'undefined' && dispatch(createConference());\n\n    return result;\n}\n\n/**\n * Logs jwt validation errors from xmpp and from the client-side validator.\n *\n * @param {string} message -The error message from xmpp.\n * @param {Object} state - The redux state.\n * @returns {void}\n */\nfunction _logJwtErrors(message, state) {\n    const { jwt } = state['features/base/jwt'];\n\n    if (!jwt) {\n        return;\n    }\n\n    const errorKeys = validateJwt(jwt);\n\n    message && logger.error(`JWT error: ${message}`);\n    errorKeys.length && logger.error('JWT parsing error:', errorKeys);\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONNECTION_FAILED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _connectionFailed({ dispatch, getState }, next, action) {\n    _logJwtErrors(action.error.message, getState());\n\n    const result = next(action);\n\n    if (typeof beforeUnloadHandler !== 'undefined') {\n        window.removeEventListener('beforeunload', beforeUnloadHandler);\n        beforeUnloadHandler = undefined;\n    }\n\n    // FIXME: Workaround for the web version. Currently, the creation of the\n    // conference is handled by /conference.js and appropriate failure handlers\n    // are set there.\n    if (typeof APP === 'undefined') {\n        const { connection } = action;\n        const { error } = action;\n\n        forEachConference(getState, conference => {\n            // It feels that it would make things easier if JitsiConference\n            // in lib-jitsi-meet would monitor it's connection and emit\n            // CONFERENCE_FAILED when it's dropped. It has more knowledge on\n            // whether it can recover or not. But because the reload screen\n            // and the retry logic is implemented in the app maybe it can be\n            // left this way for now.\n            if (conference.getConnection() === connection) {\n                // XXX Note that on mobile the error type passed to\n                // connectionFailed is always an object with .name property.\n                // This fact needs to be checked prior to enabling this logic on\n                // web.\n                const conferenceAction\n                    = conferenceFailed(conference, error.name);\n\n                // Copy the recoverable flag if set on the CONNECTION_FAILED\n                // action to not emit recoverable action caused by\n                // a non-recoverable one.\n                if (typeof error.recoverable !== 'undefined') {\n                    conferenceAction.error.recoverable = error.recoverable;\n                }\n\n                dispatch(conferenceAction);\n            }\n\n            return true;\n        });\n    }\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONFERENCE_SUBJECT_CHANGED} is being dispatched within a specific\n *  redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONFERENCE_SUBJECT_CHANGED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _conferenceSubjectChanged({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const { subject } = getState()['features/base/conference'];\n\n    if (subject) {\n        dispatch({\n            type: SET_PENDING_SUBJECT_CHANGE,\n            subject: undefined\n        });\n    }\n\n    typeof APP === 'object' && APP.API.notifySubjectChanged(subject);\n\n    return result;\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code CONFERENCE_WILL_LEAVE} is being dispatched within a specific redux\n * store.\n *\n * @private\n * @returns {void}\n */\nfunction _conferenceWillLeave() {\n    if (typeof beforeUnloadHandler !== 'undefined') {\n        window.removeEventListener('beforeunload', beforeUnloadHandler);\n        beforeUnloadHandler = undefined;\n    }\n}\n\n/**\n * Notifies the feature base/conference that the action {@code PIN_PARTICIPANT}\n * is being dispatched within a specific redux store. Pins the specified remote\n * participant in the associated conference, ignores the local participant.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code PIN_PARTICIPANT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _pinParticipant({ getState }, next, action) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (!conference) {\n        return next(action);\n    }\n\n    const id = action.participant.id;\n    const participantById = getParticipantById(state, id);\n    const pinnedParticipant = getPinnedParticipant(state);\n    const actionName = id ? ACTION_PINNED : ACTION_UNPINNED;\n    const local\n        = (participantById && participantById.local)\n            || (!id && pinnedParticipant && pinnedParticipant.local);\n    let participantIdForEvent;\n\n    if (local) {\n        participantIdForEvent = local;\n    } else {\n        participantIdForEvent\n            = actionName === ACTION_PINNED ? id : pinnedParticipant && pinnedParticipant.id;\n    }\n\n    sendAnalytics(createPinnedEvent(\n        actionName,\n        participantIdForEvent,\n        {\n            local,\n            'participant_count': conference.getParticipantCount()\n        }));\n\n    return next(action);\n}\n\n/**\n * Requests the specified tones to be played.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SEND_TONES} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _sendTones({ getState }, next, action) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (conference) {\n        const { duration, tones, pause } = action;\n\n        conference.sendTones(tones, duration, pause);\n    }\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/conference that the action\n * {@code SET_ROOM} is being dispatched within a specific\n *  redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_ROOM}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    const state = getState();\n    const { subject } = state['features/base/config'];\n    const { room } = action;\n\n    if (room) {\n        // Set the stored subject.\n        dispatch(setSubject(subject));\n    }\n\n    return next(action);\n}\n\n/**\n * Synchronizes local tracks from state with local tracks in JitsiConference\n * instance.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - Action object.\n * @private\n * @returns {Promise}\n */\nfunction _syncConferenceLocalTracksWithState({ getState }, action) {\n    const conference = getCurrentConference(getState);\n    let promise;\n\n    if (conference) {\n        const track = action.track.jitsiTrack;\n\n        if (action.type === TRACK_ADDED) {\n            promise = _addLocalTracksToConference(conference, [ track ]);\n        } else {\n            promise = _removeLocalTracksFromConference(conference, [ track ]);\n        }\n    }\n\n    return promise || Promise.resolve();\n}\n\n/**\n * Notifies the feature base/conference that the action {@code TRACK_ADDED}\n * or {@code TRACK_REMOVED} is being dispatched within a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code TRACK_ADDED} or\n * {@code TRACK_REMOVED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _trackAddedOrRemoved(store, next, action) {\n    const track = action.track;\n\n    // TODO All track swapping should happen here instead of conference.js.\n    // Since we swap the tracks for the web client in conference.js, ignore\n    // presenter tracks here and do not add/remove them to/from the conference.\n    if (track && track.local && track.mediaType !== MEDIA_TYPE.PRESENTER) {\n        return (\n            _syncConferenceLocalTracksWithState(store, action)\n                .then(() => next(action)));\n    }\n\n    return next(action);\n}\n\n/**\n * Updates the conference object when the local participant is updated.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action which is being dispatched in the\n * specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _updateLocalParticipantInConference({ dispatch, getState }, next, action) {\n    const { conference } = getState()['features/base/conference'];\n    const { participant } = action;\n    const result = next(action);\n\n    const localParticipant = getLocalParticipant(getState);\n\n    if (conference && participant.id === localParticipant.id) {\n        if ('name' in participant) {\n            conference.setDisplayName(participant.name);\n        }\n\n        if ('role' in participant && participant.role === PARTICIPANT_ROLE.MODERATOR) {\n            const { pendingSubjectChange, subject } = getState()['features/base/conference'];\n\n            // When the local user role is updated to moderator and we have a pending subject change\n            // which was not reflected we need to set it (the first time we tried was before becoming moderator).\n            if (typeof pendingSubjectChange !== 'undefined' && pendingSubjectChange !== subject) {\n                dispatch(setSubject(pendingSubjectChange));\n            }\n        }\n    }\n\n    return result;\n}\n","// @flow\n\nimport { setPrejoinPageVisibility, setSkipPrejoinOnReload } from '../../prejoin';\nimport { JitsiConferenceErrors } from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { CONFERENCE_FAILED, CONFERENCE_JOINED } from './actionTypes';\nimport './middleware.any';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const { enableForcedReload } = getState()['features/base/config'];\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        if (enableForcedReload) {\n            dispatch(setPrejoinPageVisibility(false));\n            dispatch(setSkipPrejoinOnReload(false));\n        }\n\n        break;\n    }\n    case CONFERENCE_FAILED: {\n        enableForcedReload\n            && action.error?.name === JitsiConferenceErrors.CONFERENCE_RESTARTED\n            && dispatch(setSkipPrejoinOnReload(true));\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { getFeatureFlag } from '../flags/functions';\nimport { addKnownDomains } from '../known-domains';\nimport { MiddlewareRegistry } from '../redux';\nimport { updateSettings } from '../settings';\nimport { parseURIString } from '../util';\n\nimport { SET_CONFIG, OVERWRITE_CONFIG } from './actionTypes';\nimport { updateConfig } from './actions';\nimport { _CONFIG_STORE_PREFIX } from './constants';\n\n/**\n * The middleware of the feature {@code base/config}.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n\n    case SET_CONFIG:\n        return _setConfig(store, next, action);\n\n    case OVERWRITE_CONFIG:\n        return _updateSettings(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature {@code base/config} that the {@link APP_WILL_MOUNT}\n * redux action is being {@code dispatch}ed in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action which is being {@code dispatch}ed\n * in the specified {@code store}.\n * @private\n * @returns {*} The return value of {@code next(action)}.\n */\nfunction _appWillMount(store, next, action) {\n    const result = next(action);\n\n    // It's an opportune time to transfer the feature base/config's knowledge\n    // about \"known domains\" (which is local to the feature) to the feature\n    // base/known-domains (which is global to the app).\n    //\n    // XXX Since the feature base/config predates the feature calendar-sync and,\n    // consequently, the feature known-domains, it's possible for the feature\n    // base/config to know of domains which the feature known-domains is yet to\n    // discover.\n\n    const prefix = `${_CONFIG_STORE_PREFIX}/`;\n    const knownDomains = [];\n\n    for (let i = 0; /* localStorage.key(i) */; ++i) {\n        const key = jitsiLocalStorage.key(i);\n\n        if (key) {\n            let baseURL;\n\n            if (key.startsWith(prefix)\n                    && (baseURL = key.substring(prefix.length))) {\n                const uri = parseURIString(baseURL);\n                let host;\n\n                uri && (host = uri.host) && knownDomains.push(host);\n            }\n        } else {\n            break;\n        }\n    }\n    knownDomains.length && store.dispatch(addKnownDomains(knownDomains));\n\n    return result;\n}\n\n/**\n * Notifies the feature {@code base/config} that the {@link SET_CONFIG} redux\n * action is being {@code dispatch}ed in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action which is being {@code dispatch}ed\n * in the specified {@code store}.\n * @private\n * @returns {*} The return value of {@code next(action)}.\n */\nfunction _setConfig({ dispatch, getState }, next, action) {\n    // The reducer is doing some alterations to the config passed in the action,\n    // so make sure it's the final state by waiting for the action to be\n    // reduced.\n    const result = next(action);\n    const state = getState();\n\n    // Update the config with user defined settings.\n    const settings = state['features/base/settings'];\n    const config = {};\n\n    if (typeof settings.disableP2P !== 'undefined') {\n        config.p2p = { enabled: !settings.disableP2P };\n    }\n\n    const resolutionFlag = getFeatureFlag(state, 'resolution');\n\n    if (typeof resolutionFlag !== 'undefined') {\n        config.resolution = resolutionFlag;\n    }\n\n    if (action.config.doNotFlipLocalVideo === true) {\n        dispatch(updateSettings({\n            localFlipX: false\n        }));\n    }\n\n    dispatch(updateConfig(config));\n\n    // FIXME On Web we rely on the global 'config' variable which gets altered\n    // multiple times, before it makes it to the reducer. At some point it may\n    // not be the global variable which is being modified anymore due to\n    // different merge methods being used along the way. The global variable\n    // must be synchronized with the final state resolved by the reducer.\n    if (typeof window.config !== 'undefined') {\n        window.config = state['features/base/config'];\n    }\n\n    return result;\n}\n\n/**\n * Updates settings based on some config values.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action which is being {@code dispatch}ed\n * in the specified {@code store}.\n * @private\n * @returns {*} The return value of {@code next(action)}.\n */\nfunction _updateSettings({ dispatch }, next, action) {\n    const { config: { doNotFlipLocalVideo } } = action;\n\n    if (doNotFlipLocalVideo === true) {\n        dispatch(updateSettings({\n            localFlipX: false\n        }));\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/jwt');\n","// @flow\n\nimport jwtDecode from 'jwt-decode';\n\nimport { SET_CONFIG } from '../config';\nimport { SET_LOCATION_URL } from '../connection';\nimport {\n    getLocalParticipant,\n    participantUpdated\n} from '../participants';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { SET_JWT } from './actionTypes';\nimport { setJWT } from './actions';\nimport { parseJWTFromURLParams } from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Middleware to parse token data upon setting a new room URL.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case SET_CONFIG:\n    case SET_LOCATION_URL:\n        // XXX The JSON Web Token (JWT) is not the only piece of state that we\n        // have decided to store in the feature jwt\n        return _setConfigOrLocationURL(store, next, action);\n\n    case SET_JWT:\n        return _setJWT(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Overwrites the properties {@code avatarURL}, {@code email}, and {@code name}\n * of the local participant stored in the redux state base/participants.\n *\n * @param {Store} store - The redux store.\n * @param {Object} localParticipant - The {@code Participant} structure to\n * overwrite the local participant stored in the redux store base/participants\n * with.\n * @private\n * @returns {void}\n */\nfunction _overwriteLocalParticipant(\n        { dispatch, getState },\n        { avatarURL, email, name, features }) {\n    let localParticipant;\n\n    if ((avatarURL || email || name)\n            && (localParticipant = getLocalParticipant(getState))) {\n        const newProperties: Object = {\n            id: localParticipant.id,\n            local: true\n        };\n\n        if (avatarURL) {\n            newProperties.avatarURL = avatarURL;\n        }\n        if (email) {\n            newProperties.email = email;\n        }\n        if (name) {\n            newProperties.name = name;\n        }\n        if (features) {\n            newProperties.features = features;\n        }\n        dispatch(participantUpdated(newProperties));\n    }\n}\n\n/**\n * Notifies the feature jwt that the action {@link SET_CONFIG} or\n * {@link SET_LOCATION_URL} is being dispatched within a specific redux\n * {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_CONFIG} or\n * {@code SET_LOCATION_URL} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setConfigOrLocationURL({ dispatch, getState }, next, action) {\n    const result = next(action);\n\n    const { locationURL } = getState()['features/base/connection'];\n\n    dispatch(\n        setJWT(locationURL ? parseJWTFromURLParams(locationURL) : undefined));\n\n    return result;\n}\n\n/**\n * Notifies the feature jwt that the action {@link SET_JWT} is being dispatched\n * within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_JWT} which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setJWT(store, next, action) {\n    // eslint-disable-next-line no-unused-vars\n    const { jwt, type, ...actionPayload } = action;\n\n    if (!Object.keys(actionPayload).length) {\n        if (jwt) {\n            let jwtPayload;\n\n            try {\n                jwtPayload = jwtDecode(jwt);\n            } catch (e) {\n                logger.error(e);\n            }\n\n            if (jwtPayload) {\n                const { context, iss, sub } = jwtPayload;\n\n                action.jwt = jwt;\n                action.issuer = iss;\n                if (context) {\n                    const user = _user2participant(context.user || {});\n\n                    action.callee = context.callee;\n                    action.group = context.group;\n                    action.server = context.server;\n                    action.tenant = context.tenant || sub || undefined;\n                    action.user = user;\n\n                    user && _overwriteLocalParticipant(\n                        store, { ...user,\n                            features: context.features });\n                }\n            }\n        } else if (typeof APP === 'undefined') {\n            // The logic of restoring JWT overrides make sense only on mobile.\n            // On Web it should eventually be restored from storage, but there's\n            // no such use case yet.\n\n            const { user } = store.getState()['features/base/jwt'];\n\n            user && _undoOverwriteLocalParticipant(store, user);\n        }\n    }\n\n    return next(action);\n}\n\n/**\n * Undoes/resets the values overwritten by {@link _overwriteLocalParticipant}\n * by either clearing them or setting to default values. Only the values that\n * have not changed since the overwrite happened will be restored.\n *\n * NOTE Once it is possible to edit and save participant properties, this\n * function should restore values from the storage instead.\n *\n * @param {Store} store - The redux store.\n * @param {Object} localParticipant - The {@code Participant} structure used\n * previously to {@link _overwriteLocalParticipant}.\n * @private\n * @returns {void}\n */\nfunction _undoOverwriteLocalParticipant(\n        { dispatch, getState },\n        { avatarURL, name, email }) {\n    let localParticipant;\n\n    if ((avatarURL || name || email)\n            && (localParticipant = getLocalParticipant(getState))) {\n        const newProperties: Object = {\n            id: localParticipant.id,\n            local: true\n        };\n\n        if (avatarURL === localParticipant.avatarURL) {\n            newProperties.avatarURL = undefined;\n        }\n        if (email === localParticipant.email) {\n            newProperties.email = undefined;\n        }\n        if (name === localParticipant.name) {\n            newProperties.name = undefined;\n        }\n        newProperties.features = undefined;\n\n        dispatch(participantUpdated(newProperties));\n    }\n}\n\n/**\n * Converts the JWT {@code context.user} structure to the {@code Participant}\n * structure stored in the redux state base/participants.\n *\n * @param {Object} user - The JWT {@code context.user} structure to convert.\n * @private\n * @returns {{\n *     avatarURL: ?string,\n *     email: ?string,\n *     id: ?string,\n *     name: ?string\n * }}\n */\nfunction _user2participant({ avatar, avatarUrl, email, id, name }) {\n    const participant = {};\n\n    if (typeof avatarUrl === 'string') {\n        participant.avatarURL = avatarUrl.trim();\n    } else if (typeof avatar === 'string') {\n        participant.avatarURL = avatar.trim();\n    }\n    if (typeof email === 'string') {\n        participant.email = email.trim();\n    }\n    if (typeof id === 'string') {\n        participant.id = id.trim();\n    }\n    if (typeof name === 'string') {\n        participant.name = name.trim();\n    }\n\n    return Object.keys(participant).length ? participant : undefined;\n}\n","// @flow\n\nimport { getDefaultURL } from '../../app/functions';\nimport { APP_WILL_MOUNT } from '../app';\nimport { SET_ROOM } from '../conference';\nimport { MiddlewareRegistry } from '../redux';\nimport { parseURIString } from '../util';\n\nimport { addKnownDomains } from './actions';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _appWillMount(store);\n        break;\n\n    case SET_ROOM:\n        _setRoom(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Adds the domain of the app's {@code defaultURL} to the list of domains known\n * to the feature base/known-domains.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {Promise}\n */\nfunction _appWillMount({ dispatch, getState }) {\n    const defaultURL = parseURIString(getDefaultURL(getState));\n\n    dispatch(addKnownDomains(defaultURL.host));\n}\n\n/**\n * Adds the domain of {@code locationURL} to the list of domains known to the\n * feature base/known-domains.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {Promise}\n */\nfunction _setRoom({ dispatch, getState }) {\n    const { locationURL } = getState()['features/base/connection'];\n    let host;\n\n    locationURL\n        && (host = locationURL.host)\n        && dispatch(addKnownDomains(host));\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/lastn');\n","// @flow\n\nimport { SET_FILMSTRIP_ENABLED } from '../../filmstrip/actionTypes';\nimport { SELECT_LARGE_VIDEO_PARTICIPANT } from '../../large-video/actionTypes';\nimport { APP_STATE_CHANGED } from '../../mobile/background/actionTypes';\nimport { SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED, SET_TILE_VIEW } from '../../video-layout/actionTypes';\nimport { SET_AUDIO_ONLY } from '../audio-only/actionTypes';\nimport { CONFERENCE_JOINED } from '../conference/actionTypes';\nimport {\n    PARTICIPANT_JOINED,\n    PARTICIPANT_KICKED,\n    PARTICIPANT_LEFT\n} from '../participants/actionTypes';\nimport {\n    getParticipantById,\n    getParticipantCount\n} from '../participants/functions';\nimport { MiddlewareRegistry } from '../redux';\nimport { isLocalVideoTrackDesktop } from '../tracks/functions';\n\nimport { setLastN } from './actions';\nimport { limitLastN } from './functions';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_STATE_CHANGED:\n    case CONFERENCE_JOINED:\n    case PARTICIPANT_JOINED:\n    case PARTICIPANT_KICKED:\n    case PARTICIPANT_LEFT:\n    case SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED:\n    case SELECT_LARGE_VIDEO_PARTICIPANT:\n    case SET_AUDIO_ONLY:\n    case SET_FILMSTRIP_ENABLED:\n    case SET_TILE_VIEW:\n        _updateLastN(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Updates the last N value in the conference based on the current state of the redux store.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _updateLastN({ dispatch, getState }) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n    const { enabled: audioOnly } = state['features/base/audio-only'];\n    const { appState } = state['features/background'] || {};\n    const { enabled: filmStripEnabled } = state['features/filmstrip'];\n    const config = state['features/base/config'];\n    const { lastNLimits, lastN } = state['features/base/lastn'];\n    const participantCount = getParticipantCount(state);\n\n    if (!conference) {\n        logger.debug('There is no active conference, not updating last N');\n\n        return;\n    }\n\n    // Select the lastN value based on the following preference order.\n    // 1. The last-n value in redux.\n    // 2. The last-n value from 'startLastN' if it is specified in config.js\n    // 3. The last-n value from 'channelLastN' if specified in config.js.\n    // 4. -1 as the default value.\n    let lastNSelected = lastN || (config.startLastN ?? (config.channelLastN ?? -1));\n\n    // Apply last N limit based on the # of participants and config settings.\n    const limitedLastN = limitLastN(participantCount, lastNLimits);\n\n    if (limitedLastN !== undefined) {\n        lastNSelected = lastNSelected === -1 ? limitedLastN : Math.min(limitedLastN, lastNSelected);\n    }\n\n    if (typeof appState !== 'undefined' && appState !== 'active') {\n        lastNSelected = isLocalVideoTrackDesktop(state) ? 1 : 0;\n    } else if (audioOnly) {\n        const { remoteScreenShares, tileViewEnabled } = state['features/video-layout'];\n        const largeVideoParticipantId = state['features/large-video'].participantId;\n        const largeVideoParticipant\n            = largeVideoParticipantId ? getParticipantById(state, largeVideoParticipantId) : undefined;\n\n        // Use tileViewEnabled state from redux here instead of determining if client should be in tile\n        // view since we make an exception only for screenshare when in audio-only mode. If the user unpins\n        // the screenshare, lastN will be set to 0 here. It will be set to 1 if screenshare has been auto pinned.\n        if (!tileViewEnabled && largeVideoParticipant && !largeVideoParticipant.local) {\n            lastNSelected = (remoteScreenShares || []).includes(largeVideoParticipantId) ? 1 : 0;\n        } else {\n            lastNSelected = 0;\n        }\n    } else if (!filmStripEnabled) {\n        lastNSelected = 1;\n    }\n\n    logger.info(`Setting last N to: ${lastNSelected}`);\n    dispatch(setLastN(lastNSelected));\n}\n","/**\n * The type of redux action to set the AppState API change event listener.\n *\n * {\n *     type: _SET_APP_STATE_LISTENER,\n *     listener: Function\n * }\n *\n * @protected\n */\nexport const _SET_APP_STATE_LISTENER = '_SET_APP_STATE_LISTENER';\n\n/**\n * The type of redux action which signals that the app state has changed (in\n * terms of execution mode). The app state can be one of 'active', 'inactive',\n * or 'background'.\n *\n * {\n *     type: APP_STATE_CHANGED,\n *     appState: string\n * }\n *\n * @public\n * @see {@link https://facebook.github.io/react-native/docs/appstate.html}\n */\nexport const APP_STATE_CHANGED = 'APP_STATE_CHANGED';\n","/* @flow */\n\nimport { SET_LOG_COLLECTOR, SET_LOGGING_CONFIG } from './actionTypes';\n\n/**\n * Stores a {@code Logger.LogCollector} instance which will be uploading logs\n * to CallStats.\n *\n * @param {Logger.LogCollector} logCollector - The log collector instance to be\n * stored in the Redux state of base/logging feature.\n * @returns {{\n *     type,\n *     logCollector: Object\n * }}\n */\nexport function setLogCollector(logCollector: ?Object) {\n    return {\n        type: SET_LOG_COLLECTOR,\n        logCollector\n    };\n}\n\n/**\n * Sets the configuration of the feature base/logging.\n *\n * @param {Object} config - The configuration to set on the features\n * base/logging.\n * @returns {{\n *     type: SET_LOGGING_CONFIG,\n *     config: Object\n * }}\n */\nexport function setLoggingConfig(config: Object) {\n    return {\n        type: SET_LOGGING_CONFIG,\n        config\n    };\n}\n","/**\n * The type of redux action which stores the log collector that will be\n * submitting the logs to CallStats.\n *\n * {\n *     type: SET_LOG_COLLECTOR,\n *     logCollector: Logger.LogCollector\n * }\n */\nexport const SET_LOG_COLLECTOR = 'SET_LOG_COLLECTOR';\n\n/**\n * The type of redux action which sets the configuration of the feature\n * base/logging.\n *\n * {\n *     type: SET_LOGGING_CONFIG,\n *     config: Object\n * }\n */\nexport const SET_LOGGING_CONFIG = 'SET_LOGGING_CONFIG';\n","/* @flow */\n\nimport { SET_CONFIG } from '../config';\nimport { setLoggingConfig } from '../logging';\nimport { SET_NETWORK_INFO } from '../net-info';\nimport { PARTICIPANT_LEFT } from '../participants';\nimport { MiddlewareRegistry } from '../redux';\n\nimport JitsiMeetJS from './_';\nimport { LIB_WILL_INIT } from './actionTypes';\nimport { disposeLib, initLib } from './actions';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures PARTICIPANT_LEFT action for a local participant\n * (which signalizes that we finally left the app) and disposes lib-jitsi-meet.\n * Also captures SET_CONFIG action and disposes previous instance (if any) of\n * lib-jitsi-meet, and initializes a new one with new config.\n *\n * @param {Store} store - Redux store.\n * @private\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case LIB_WILL_INIT:\n        // Moved from conference.js init method. It appears the error handlers\n        // are not used for mobile.\n        if (typeof APP !== 'undefined') {\n            _setErrorHandlers();\n        }\n        break;\n\n    case SET_NETWORK_INFO:\n        JitsiMeetJS.setNetworkInfo({\n            isOnline: action.isOnline\n        });\n        break;\n\n    case PARTICIPANT_LEFT:\n        action.participant.local && store.dispatch(disposeLib());\n        break;\n\n    case SET_CONFIG:\n        return _setConfig(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature base/lib-jitsi-meet that the action SET_CONFIG is being\n * dispatched within a specific Redux store.\n *\n * @param {Store} store - The Redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The Redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The Redux action SET_CONFIG which is being\n * dispatched in the specified store.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified action.\n */\nfunction _setConfig({ dispatch, getState }, next, action) {\n    const { initialized } = getState()['features/base/lib-jitsi-meet'];\n\n    // XXX Since the config is changing, the library lib-jitsi-meet must be\n    // initialized again with the new config. Consequently, it may need to be\n    // disposed of first.\n    // TODO Currently, disposeLib actually does not dispose of lib-jitsi-meet\n    // because lib-jitsi-meet does not implement such functionality.\n    if (initialized) {\n        dispatch(disposeLib());\n    }\n\n    // Let the new config into the Redux store (because initLib will read it\n    // from there).\n    const result = next(action);\n\n    // FIXME Obviously, the following is bad design. However, I'm currently\n    // introducing the features base/config and base/logging and I'm trying to\n    // minimize the scope of the changes while I'm attempting to preserve\n    // compatibility with the existing partially React-ified Web source code and\n    // what was already executing on React Native. Additionally, I do not care\n    // to load logging_config.js on React Native.\n    dispatch(setLoggingConfig(window.loggingConfig));\n\n    dispatch(initLib());\n\n    return result;\n}\n\n/**\n * Attaches our custom error handlers to the window object.\n *\n * @returns {void}\n */\nfunction _setErrorHandlers() {\n    // attaches global error handler, if there is already one, respect it\n    if (JitsiMeetJS.getGlobalOnErrorHandler) {\n        const oldOnErrorHandler = window.onerror;\n\n        // eslint-disable-next-line max-params\n        window.onerror = (message, source, lineno, colno, error) => {\n            const errMsg = message || (error && error.message);\n            const stack = error && error.stack;\n\n            JitsiMeetJS.getGlobalOnErrorHandler(errMsg, source, lineno, colno, stack);\n\n            if (oldOnErrorHandler) {\n                oldOnErrorHandler(message, source, lineno, colno, error);\n            }\n        };\n\n        const oldOnUnhandledRejection = window.onunhandledrejection;\n\n        window.onunhandledrejection = function(event) {\n            let message = event.reason;\n            let stack = 'n/a';\n\n            if (event.reason instanceof Error) {\n                ({ message, stack } = event.reason);\n            }\n\n            JitsiMeetJS.getGlobalOnErrorHandler(message, null, null, null, stack);\n\n            if (oldOnUnhandledRejection) {\n                oldOnUnhandledRejection(event);\n            }\n        };\n    }\n}\n","// @flow\n\ndeclare var APP: Object;\n\n/**\n * Constructs a log transport object for use with external API.\n *\n * @param {Array} levels - The log levels forwarded to the external API.\n\n * @returns {Object} - The transport object.\n */\nfunction buildTransport(levels: Array<string>) {\n    return levels.reduce((logger, level) => {\n        logger[level] = (...args) => {\n            APP.API.notifyLog(level, args);\n        };\n\n        return logger;\n    }, {});\n}\n\nexport default buildTransport;\n","/**\n * Implements in memory logs storage, used for testing/debugging.\n *\n */\nexport default class JitsiMeetInMemoryLogStorage {\n\n    /**\n     * Creates new <tt>JitsiMeetInMemoryLogStorage</tt>.\n     */\n    constructor() {\n        /**\n         * Array of the log entries to keep.\n         * @type {array}\n         */\n        this.logs = [];\n    }\n\n    /**\n     * Checks if this storage instance is ready.\n     *\n     * @returns {boolean} <tt>true</tt> when this storage is ready or\n     * <tt>false</tt> otherwise.\n     */\n    isReady() {\n        return true;\n    }\n\n    /**\n     * Called by the <tt>LogCollector</tt> to store a series of log lines into\n     * batch.\n     *\n     * @param {string|Object[]} logEntries - An array containing strings\n     * representing log lines or aggregated lines objects.\n     * @returns {void}\n     */\n    storeLogs(logEntries) {\n        for (let i = 0, len = logEntries.length; i < len; i++) {\n            const logEntry = logEntries[i];\n\n            if (typeof logEntry === 'object') {\n                this.logs.push(logEntry.text);\n            } else {\n                // Regular message\n                this.logs.push(logEntry);\n            }\n        }\n    }\n\n    /**\n     * Returns the logs stored in the memory.\n     *\n     * @returns {Array<string>} The collected log entries.\n     */\n    getLogs() {\n        return this.logs;\n    }\n}\n","\nimport { getCurrentConference } from '../conference';\n\n/**\n * Implements log storage interface from the jitsi-meet-logger lib. Captured\n * logs are sent to CallStats.\n */\nexport default class JitsiMeetLogStorage {\n\n    /**\n     * Creates new <tt>JitsiMeetLogStorage</tt>.\n     *\n     * @param {Function} getState - The Redux store's {@code getState} method.\n     */\n    constructor(getState) {\n        /**\n         * Counts each log entry, increases on every batch log entry stored.\n         * @type {number}\n         */\n        this.counter = 1;\n\n        /**\n         * The Redux store's {@code getState} method.\n         *\n         * @type {Function}\n         */\n        this.getState = getState;\n    }\n\n    /**\n     * The JitsiMeetLogStorage is ready when the CallStats are started and\n     * before refactoring the code it was after the conference has been joined.\n     * A conference is considered joined when the 'conference' field is defined\n     * in the base/conference state.\n     *\n     * @returns {boolean} <tt>true</tt> when this storage is ready or\n     * <tt>false</tt> otherwise.\n     */\n    isReady() {\n        const { conference } = this.getState()['features/base/conference'];\n\n        return Boolean(conference);\n    }\n\n    /**\n     * Called by the <tt>LogCollector</tt> to store a series of log lines into\n     * batch.\n     *\n     * @param {Array<string|Object>} logEntries - An array containing strings\n     * representing log lines or aggregated lines objects.\n     * @returns {void}\n     */\n    storeLogs(logEntries) {\n        const conference = getCurrentConference(this.getState());\n\n        if (!conference || !conference.isCallstatsEnabled()) {\n            // Discard the logs if CallStats is not enabled.\n            return;\n        }\n\n        let logMessage = `{\"log${this.counter}\":\"\\n`;\n\n        for (let i = 0, len = logEntries.length; i < len; i++) {\n            const logEntry = logEntries[i];\n\n            if (logEntry.timestamp) {\n                logMessage += `${logEntry.timestamp} `;\n            }\n            if (logEntry.count > 1) {\n                logMessage += `(${logEntry.count}) `;\n            }\n            logMessage += `${logEntry.text}\\n`;\n        }\n        logMessage += '\"}';\n\n        this.counter += 1;\n\n        // Try catch was used, because there are many variables\n        // on the way that could be uninitialized if the storeLogs\n        // attempt would be made very early (which is unlikely)\n        try {\n            conference.sendApplicationLog(logMessage);\n        } catch (error) {\n            // NOTE console is intentional here\n            console.error(\n                `Failed to store the logs, msg length: ${logMessage.length}`\n                    + `error: ${JSON.stringify(error)}`);\n        }\n    }\n}\n","/* @flow */\n\nimport Logger from 'jitsi-meet-logger';\n\nimport { APP_WILL_MOUNT } from '../app';\nimport { CONFERENCE_JOINED, getCurrentConference } from '../conference';\nimport JitsiMeetJS, {\n    LIB_WILL_INIT,\n    JitsiConferenceEvents\n} from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\nimport { isTestModeEnabled } from '../testing';\n\nimport buildExternalApiLogTransport from './ExternalApiLogTransport';\nimport JitsiMeetInMemoryLogStorage from './JitsiMeetInMemoryLogStorage';\nimport JitsiMeetLogStorage from './JitsiMeetLogStorage';\nimport { SET_LOGGING_CONFIG } from './actionTypes';\nimport { setLogCollector } from './actions';\n\ndeclare var APP: Object;\n\n/**\n * The Redux middleware of the feature base/logging.\n *\n * @param {Store} store - The Redux store.\n * @returns {Function}\n * @private\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _appWillMount(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case LIB_WILL_INIT:\n        return _libWillInit(store, next, action);\n\n    case SET_LOGGING_CONFIG:\n        return _setLoggingConfig(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature base/logging that the action {@link APP_WILL_MOUNT} is\n * being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code APP_WILL_MOUNT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _appWillMount({ getState }, next, action) {\n    const { config } = getState()['features/base/logging'];\n\n    _setLogLevels(Logger, config);\n\n    // FIXME Until the logic of conference.js is rewritten into the React\n    // app we, JitsiMeetJS.init is to not be used for the React app.\n    // Consequently, LIB_WILL_INIT will not be dispatched. In the meantime, do\n    // the following:\n    typeof APP === 'undefined' || _setLogLevels(JitsiMeetJS, config);\n\n    return next(action);\n}\n\n/**\n * Starts the log collector, after {@link CONFERENCE_JOINED} action is reduced.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code CONFERENCE_JOINED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {*}\n */\nfunction _conferenceJoined({ getState }, next, action) {\n\n    // Wait until the joined event is processed, so that the JitsiMeetLogStorage\n    // will be ready.\n    const result = next(action);\n\n    const { conference } = action;\n    const { logCollector } = getState()['features/base/logging'];\n\n    if (logCollector && conference === getCurrentConference(getState())) {\n        // Start the LogCollector's periodic \"store logs\" task\n        logCollector.start();\n\n        // Make an attempt to flush in case a lot of logs have been cached,\n        // before the collector was started.\n        logCollector.flush();\n\n        // This event listener will flush the logs, before the statistics module\n        // (CallStats) is stopped.\n        //\n        // NOTE The LogCollector is not stopped, because this event can be\n        // triggered multiple times during single conference (whenever\n        // statistics module is stopped). That includes the case when Jicofo\n        // terminates a single person conference (one person left in the room\n        // waiting for someone to join). It will then restart the media session\n        // when someone eventually joins the room which will start the stats\n        // again.\n        conference.on(\n            JitsiConferenceEvents.BEFORE_STATISTICS_DISPOSED,\n            () => logCollector.flush()\n        );\n    }\n\n    return result;\n}\n\n/**\n * Initializes logging in the app.\n *\n * @param {Store} store - The Redux store in which context the logging is to be\n * initialized.\n * @param {Object} loggingConfig - The configuration with which logging is to be\n * initialized.\n * @param {boolean} isTestingEnabled - Is debug logging enabled.\n * @private\n * @returns {void}\n */\nfunction _initLogging({ dispatch, getState }, loggingConfig, isTestingEnabled) {\n    const { logCollector } = getState()['features/base/logging'];\n\n    // Create the LogCollector and register it as the global log transport. It\n    // is done early to capture as much logs as possible. Captured logs will be\n    // cached, before the JitsiMeetLogStorage gets ready (statistics module is\n    // initialized).\n    if (!logCollector && !loggingConfig.disableLogCollector) {\n        const _logCollector\n            = new Logger.LogCollector(new JitsiMeetLogStorage(getState));\n\n        const { apiLogLevels } = getState()['features/base/config'];\n\n        if (apiLogLevels && Array.isArray(apiLogLevels) && typeof APP === 'object') {\n            const transport = buildExternalApiLogTransport(apiLogLevels);\n\n            Logger.addGlobalTransport(transport);\n            JitsiMeetJS.addGlobalLogTransport(transport);\n        }\n\n        Logger.addGlobalTransport(_logCollector);\n        JitsiMeetJS.addGlobalLogTransport(_logCollector);\n        dispatch(setLogCollector(_logCollector));\n\n        // The JitsiMeetInMemoryLogStorage can not be accessed on mobile through\n        // the 'executeScript' method like it's done in torture tests for WEB.\n        if (isTestingEnabled && typeof APP === 'object') {\n            APP.debugLogs = new JitsiMeetInMemoryLogStorage();\n            const debugLogCollector = new Logger.LogCollector(\n                APP.debugLogs, { storeInterval: 1000 });\n\n            Logger.addGlobalTransport(debugLogCollector);\n            JitsiMeetJS.addGlobalLogTransport(debugLogCollector);\n            debugLogCollector.start();\n        }\n    } else if (logCollector && loggingConfig.disableLogCollector) {\n        Logger.removeGlobalTransport(logCollector);\n        JitsiMeetJS.removeGlobalLogTransport(logCollector);\n        logCollector.stop();\n        dispatch(setLogCollector(undefined));\n    }\n}\n\n/**\n * Notifies the feature base/logging that the action {@link LIB_WILL_INIT} is\n * being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code LIB_WILL_INIT} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _libWillInit({ getState }, next, action) {\n    // Adding the if in order to preserve the logic for web after enabling\n    // LIB_WILL_INIT action for web in initLib action.\n    if (typeof APP === 'undefined') {\n        _setLogLevels(JitsiMeetJS, getState()['features/base/logging'].config);\n    }\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/logging that the action {@link SET_LOGGING_CONFIG}\n * is being dispatched within a specific Redux {@code store}.\n *\n * @param {Store} store - The Redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The Redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The Redux action {@code SET_LOGGING_CONFIG} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setLoggingConfig({ dispatch, getState }, next, action) {\n    const result = next(action);\n    const newValue = getState()['features/base/logging'].config;\n    const isTestingEnabled = isTestModeEnabled(getState());\n\n    // TODO Generally, we'll want to _setLogLevels and _initLogging only if the\n    // logging config values actually change.\n    // XXX Unfortunately, we don't currently have a (nice) way of determining\n    // whether _setLogLevels or _initLogging have been invoked so we have to\n    // invoke them unconditionally even if none of the values have actually\n    // changed.\n    _setLogLevels(Logger, newValue);\n    _setLogLevels(JitsiMeetJS, newValue);\n\n    _initLogging({\n        dispatch,\n        getState\n    }, newValue, isTestingEnabled);\n\n    return result;\n}\n\n/**\n * Sets the log levels of {@link Logger} or {@link JitsiMeetJS} in accord with\n * a specific configuration.\n *\n * @param {Object} logger - The object on which the log levels are to be set.\n * @param {Object} config - The configuration specifying the log levels to be\n * set on {@code Logger} or {@code JitsiMeetJS}.\n * @private\n * @returns {void}\n */\nfunction _setLogLevels(logger, config) {\n    // XXX The loggers of the library lib-jitsi-meet and the application\n    // jitsi-meet are separate, so the log levels have to be set in both.\n\n    // First, set the default log level.\n    logger.setLogLevel(config.defaultLogLevel);\n\n    // Second, set the log level of each logger explicitly overridden by config.\n    Object.keys(config).forEach(\n        id =>\n            id === 'defaultLogLevel' || logger.setLogLevelById(config[id], id));\n}\n","import { combineReducers } from 'redux';\n\nimport { CONFERENCE_FAILED, CONFERENCE_LEFT } from '../conference/actionTypes';\nimport { ReducerRegistry } from '../redux';\nimport { TRACK_REMOVED } from '../tracks/actionTypes';\n\nimport {\n    SET_AUDIO_AVAILABLE,\n    SET_AUDIO_MUTED,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_AVAILABLE,\n    SET_VIDEO_MUTED,\n    STORE_VIDEO_TRANSFORM,\n    TOGGLE_CAMERA_FACING_MODE\n} from './actionTypes';\nimport { CAMERA_FACING_MODE } from './constants';\n\n/**\n * Media state object for local audio.\n *\n * @typedef {Object} AudioMediaState\n * @property {boolean} muted=false - Audio muted state.\n */\n\n// FIXME Technically, _AUDIO_INITIAL_MEDIA_STATE is a constant internal to the\n// feature base/media and used in multiple files so it should be in\n// constants.js. Practically though, AudioMediaState would then be used in\n// multiple files as well so I don't know where and how to move it.\n/**\n * Initial state for local audio.\n *\n * @type {AudioMediaState}\n */\nexport const _AUDIO_INITIAL_MEDIA_STATE = {\n    available: true,\n    muted: false\n};\n\n/**\n * Reducer for audio media state.\n *\n * @param {AudioMediaState} state - Media state of local audio.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @private\n * @returns {AudioMediaState}\n */\nfunction _audio(state = _AUDIO_INITIAL_MEDIA_STATE, action) {\n    switch (action.type) {\n    case SET_AUDIO_AVAILABLE:\n        return {\n            ...state,\n            available: action.available\n        };\n\n    case SET_AUDIO_MUTED:\n        return {\n            ...state,\n            muted: action.muted\n        };\n\n    default:\n        return state;\n    }\n}\n\n/**\n * Media state object for local video.\n *\n * @typedef {Object} VideoMediaState\n * @property {CAMERA_FACING_MODE} facingMode='user' - Camera facing mode.\n * @property {boolean} muted=false - Video muted state.\n */\n\n// FIXME Technically, _VIDEO_INITIAL_MEDIA_STATE is a constant internal to the\n// feature base/media and used in multiple files so it should be in\n// constants.js. Practically though, VideoMediaState would then be used in\n// multiple files as well so I don't know where and how to move it.\n/**\n * Initial state for video.\n *\n * @type {VideoMediaState}\n */\nexport const _VIDEO_INITIAL_MEDIA_STATE = {\n    available: true,\n    facingMode: CAMERA_FACING_MODE.USER,\n    muted: 0,\n\n    /**\n     * The video {@link Transform}s applied to {@code MediaStream}s by\n     * {@code id} i.e. \"pinch to zoom\".\n     */\n    transforms: {}\n};\n\n/**\n * Reducer for camera media state.\n *\n * @param {VideoMediaState} state - Media state of local video.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @private\n * @returns {VideoMediaState}\n */\nfunction _video(state = _VIDEO_INITIAL_MEDIA_STATE, action) {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n    case CONFERENCE_LEFT:\n        return _clearAllVideoTransforms(state);\n\n    case SET_CAMERA_FACING_MODE:\n        return {\n            ...state,\n            facingMode: action.cameraFacingMode\n        };\n\n    case SET_VIDEO_AVAILABLE:\n        return {\n            ...state,\n            available: action.available\n        };\n\n    case SET_VIDEO_MUTED:\n        return {\n            ...state,\n            muted: action.muted\n        };\n\n    case STORE_VIDEO_TRANSFORM:\n        return _storeVideoTransform(state, action);\n\n    case TOGGLE_CAMERA_FACING_MODE: {\n        let cameraFacingMode = state.facingMode;\n\n        cameraFacingMode\n            = cameraFacingMode === CAMERA_FACING_MODE.USER\n                ? CAMERA_FACING_MODE.ENVIRONMENT\n                : CAMERA_FACING_MODE.USER;\n\n        return {\n            ...state,\n            facingMode: cameraFacingMode\n        };\n    }\n\n    case TRACK_REMOVED:\n        return _trackRemoved(state, action);\n\n    default:\n        return state;\n    }\n}\n\n/**\n * Listen for various actions related to media devices.\n *\n * @param {Object} state - State of media devices.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Object} action.media - Information about media devices to be\n * modified.\n * @returns {Object}\n */\nReducerRegistry.register('features/base/media', combineReducers({\n    audio: _audio,\n    video: _video\n}));\n\n/**\n * Removes all stored video {@link Transform}s.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @private\n * @returns {Object}\n */\nfunction _clearAllVideoTransforms(state) {\n    return {\n        ...state,\n        transforms: _VIDEO_INITIAL_MEDIA_STATE.transforms\n    };\n}\n\n/**\n * Stores the last applied transform to a stream.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @param {Object} action - The redux action {@link STORE_VIDEO_TRANSFORM}.\n * @private\n * @returns {Object}\n */\nfunction _storeVideoTransform(state, { streamId, transform }) {\n    return {\n        ...state,\n        transforms: {\n            ...state.transforms,\n            [streamId]: transform\n        }\n    };\n}\n\n/**\n * Removes the stored video {@link Transform} associated with a\n * {@code MediaStream} when its respective track is removed.\n *\n * @param {Object} state - The {@code video} state of the feature base/media.\n * @param {Object} action - The redux action {@link TRACK_REMOVED}.\n * @private\n * @returns {Object}\n */\nfunction _trackRemoved(state, { track: { jitsiTrack } }) {\n    if (jitsiTrack) {\n        const streamId = jitsiTrack.getStreamId();\n\n        if (streamId && streamId in state.transforms) {\n            const nextTransforms = {\n                ...state.transforms\n            };\n\n            delete nextTransforms[streamId];\n\n            return {\n                ...state,\n                transforms: nextTransforms\n            };\n        }\n    }\n\n    return state;\n}\n","// @flow\n\nimport {\n    createStartAudioOnlyEvent,\n    createStartMutedConfigurationEvent,\n    createSyncTrackStateEvent,\n    createTrackMutedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { APP_STATE_CHANGED } from '../../mobile/background';\nimport { SET_AUDIO_ONLY, setAudioOnly } from '../audio-only';\nimport { isRoomValid, SET_ROOM } from '../conference';\nimport { MiddlewareRegistry } from '../redux';\nimport { getPropertyValue } from '../settings';\nimport { isLocalVideoTrackDesktop, setTrackMuted, TRACK_ADDED } from '../tracks';\n\nimport { setAudioMuted, setCameraFacingMode, setVideoMuted } from './actions';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    VIDEO_MUTISM_AUTHORITY\n} from './constants';\nimport { getStartWithAudioMuted, getStartWithVideoMuted } from './functions';\nimport logger from './logger';\nimport {\n    _AUDIO_INITIAL_MEDIA_STATE,\n    _VIDEO_INITIAL_MEDIA_STATE\n} from './reducer';\n\n/**\n * Implements the entry point of the middleware of the feature base/media.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_STATE_CHANGED:\n        return _appStateChanged(store, next, action);\n\n    case SET_AUDIO_ONLY:\n        return _setAudioOnly(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n\n    case TRACK_ADDED: {\n        const result = next(action);\n        const { track } = action;\n\n        // Don't sync track mute state with the redux store for screenshare\n        // since video mute state represents local camera mute state only.\n        track.local && track.videoType !== 'desktop'\n            && _syncTrackMutedState(store, track);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Adjusts the video muted state based on the app state.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code APP_STATE_CHANGED} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _appStateChanged({ dispatch, getState }, next, action) {\n    if (navigator.product === 'ReactNative') {\n        const { appState } = action;\n        const mute = appState !== 'active' && !isLocalVideoTrackDesktop(getState());\n\n        sendAnalytics(createTrackMutedEvent('video', 'background mode', mute));\n\n        dispatch(setVideoMuted(mute, MEDIA_TYPE.VIDEO, VIDEO_MUTISM_AUTHORITY.BACKGROUND));\n    }\n\n    return next(action);\n}\n\n/**\n * Adjusts the video muted state based on the audio-only state.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code SET_AUDIO_ONLY} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setAudioOnly({ dispatch }, next, action) {\n    const { audioOnly, ensureVideoTrack } = action;\n\n    sendAnalytics(createTrackMutedEvent('video', 'audio-only mode', audioOnly));\n\n    // Make sure we mute both the desktop and video tracks.\n    dispatch(setVideoMuted(audioOnly, MEDIA_TYPE.VIDEO, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY, ensureVideoTrack));\n\n    if (navigator.product !== 'ReactNative') {\n        dispatch(setVideoMuted(audioOnly, MEDIA_TYPE.PRESENTER, VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY, ensureVideoTrack));\n    }\n\n    return next(action);\n}\n\n/**\n * Notifies the feature base/media that the action {@link SET_ROOM} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action, {@code SET_ROOM}, which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    // Figure out the desires/intents i.e. the state of base/media. There are\n    // multiple desires/intents ordered by precedence such as server-side\n    // config, config overrides in the user-supplied URL, user's own app\n    // settings, etc.\n\n    const state = getState();\n    const { room } = action;\n    const roomIsValid = isRoomValid(room);\n    const audioMuted = roomIsValid ? getStartWithAudioMuted(state) : _AUDIO_INITIAL_MEDIA_STATE.muted;\n    const videoMuted = roomIsValid ? getStartWithVideoMuted(state) : _VIDEO_INITIAL_MEDIA_STATE.muted;\n\n    sendAnalytics(\n        createStartMutedConfigurationEvent('local', audioMuted, videoMuted));\n    logger.log(\n        `Start muted: ${audioMuted ? 'audio, ' : ''}${\n            videoMuted ? 'video' : ''}`);\n\n    // Unconditionally express the desires/expectations/intents of the app and\n    // the user i.e. the state of base/media. Eventually, practice/reality i.e.\n    // the state of base/tracks will or will not agree with the desires.\n    dispatch(setAudioMuted(audioMuted));\n    dispatch(setCameraFacingMode(CAMERA_FACING_MODE.USER));\n    dispatch(setVideoMuted(videoMuted));\n\n    // startAudioOnly\n    //\n    // FIXME Technically, the audio-only feature is owned by base/conference,\n    // not base/media so the following should be in base/conference.\n    // Practically, I presume it was easier to write the source code here\n    // because it looks like startWithAudioMuted and startWithVideoMuted.\n    //\n    // XXX After the introduction of the \"Video <-> Voice\" toggle on the\n    // WelcomePage, startAudioOnly is utilized even outside of\n    // conferences/meetings.\n    const audioOnly\n        = Boolean(\n            getPropertyValue(\n                state,\n                'startAudioOnly',\n                /* sources */ {\n                    // FIXME Practically, base/config is (really) correct\n                    // only if roomIsValid. At the time of this writing,\n                    // base/config is overwritten by URL params which leaves\n                    // base/config incorrect on the WelcomePage after\n                    // leaving a conference which explicitly overwrites\n                    // base/config with URL params.\n                    config: roomIsValid,\n\n                    // XXX We've already overwritten base/config with\n                    // urlParams if roomIsValid. However, settings are more\n                    // important than the server-side config. Consequently,\n                    // we need to read from urlParams anyway. We also\n                    // probably want to read from urlParams when\n                    // !roomIsValid.\n                    urlParams: true,\n\n                    // The following don't have complications around whether\n                    // they are defined or not:\n                    jwt: false,\n                    settings: true\n                }));\n\n    sendAnalytics(createStartAudioOnlyEvent(audioOnly));\n    logger.log(`Start audio only set to ${audioOnly.toString()}`);\n\n    dispatch(setAudioOnly(audioOnly, false));\n\n    return next(action);\n}\n\n/**\n * Syncs muted state of local media track with muted state from media state.\n *\n * @param {Store} store - The redux store.\n * @param {Track} track - The local media track.\n * @private\n * @returns {void}\n */\nfunction _syncTrackMutedState({ getState }, track) {\n    const state = getState()['features/base/media'];\n    const mediaType = track.mediaType === MEDIA_TYPE.PRESENTER\n        ? MEDIA_TYPE.VIDEO : track.mediaType;\n    const muted = Boolean(state[mediaType].muted);\n\n    // XXX If muted state of track when it was added is different from our media\n    // muted state, we need to mute track and explicitly modify 'muted' property\n    // on track. This is because though TRACK_ADDED action was dispatched it's\n    // not yet in redux state and JitsiTrackEvents.TRACK_MUTE_CHANGED may be\n    // fired before track gets to state.\n    if (track.muted !== muted) {\n        sendAnalytics(createSyncTrackStateEvent(track.mediaType, muted));\n        logger.log(\n            `Sync ${track.mediaType} track muted state to ${\n                muted ? 'muted' : 'unmuted'}`);\n\n        track.muted = muted;\n        setTrackMuted(track.jitsiTrack, muted);\n    }\n}\n","import EventEmitter from 'events';\n\nimport { ONLINE_STATE_CHANGED_EVENT } from './events';\n\n/**\n * The network info service implementation for web (Chrome, Firefox and Safari).\n */\nexport default class NetworkInfoService extends EventEmitter {\n\n    /**\n     * Creates new instance...\n     */\n    constructor() {\n        super();\n        this._onlineStateListener = this._handleOnlineStatusChange.bind(this, /* online */ true);\n        this._offlineStateListener = this._handleOnlineStatusChange.bind(this, /* offline */ false);\n    }\n\n    /**\n     * Callback function to track the online state.\n     *\n     * @param {boolean} isOnline - Is the browser online or not.\n     * @private\n     * @returns {void}\n     */\n    _handleOnlineStatusChange(isOnline) {\n        this.emit(ONLINE_STATE_CHANGED_EVENT, { isOnline });\n    }\n\n    /**\n     * Checks for support.\n     *\n     * @returns {boolean}\n     */\n    static isSupported() {\n        return window.addEventListener && typeof navigator.onLine !== 'undefined';\n    }\n\n    /**\n     * Starts the service.\n     *\n     * @returns {void}\n     */\n    start() {\n        window.addEventListener('online', this._onlineStateListener);\n        window.addEventListener('offline', this._offlineStateListener);\n    }\n\n    /**\n     * Stops the service.\n     *\n     * @returns {void}\n     */\n    stop() {\n        window.removeEventListener('online', this._onlineStateListener);\n        window.removeEventListener('offline', this._offlineStateListener);\n    }\n}\n","export const ONLINE_STATE_CHANGED_EVENT = 'network-info-online-status-change';\n","// @flow\n\nimport { SET_NETWORK_INFO, _STORE_NETWORK_INFO_CLEANUP } from './actionTypes';\nimport type { NetworkInfo } from './types';\n\n/**\n * Up[dates the network info state.\n *\n * @param {NetworkInfo} networkInfo - The new network state to be set.\n * @returns {{\n *     type: SET_NETWORK_INFO,\n *     isOnline: boolean,\n *     networkType: string,\n *     details: Object\n * }}\n */\nexport function setNetworkInfo({ isOnline, networkType, details }: NetworkInfo): Object {\n    return {\n        type: SET_NETWORK_INFO,\n        isOnline,\n        networkType,\n        details\n    };\n}\n\n/**\n * Stored the cleanup function used to shutdown the {@code NetworkInfoService}.\n *\n * @param {Function} cleanup - The cleanup function to be called on {@code APP_WILL_UNMOUNT}.\n * @returns {{\n *     type: _STORE_NETWORK_INFO_CLEANUP,\n *     cleanup: Function\n * }}\n * @private\n */\nexport function _storeNetworkInfoCleanup(cleanup: Function): Object {\n    return {\n        type: _STORE_NETWORK_INFO_CLEANUP,\n        cleanup\n    };\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/net-info');\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { MiddlewareRegistry } from '../redux';\n\nimport NetworkInfoService from './NetworkInfoService';\nimport { _storeNetworkInfoCleanup, setNetworkInfo } from './actions';\nimport { STORE_NAME } from './constants';\nimport { ONLINE_STATE_CHANGED_EVENT } from './events';\nimport logger from './logger';\nimport type { NetworkInfo } from './types';\n\n/**\n * Middleware for 'base/net-info' feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        if (NetworkInfoService.isSupported()) {\n            const networkInfoService = new NetworkInfoService();\n            const stop = () => {\n                networkInfoService.stop();\n                networkInfoService.removeAllListeners();\n            };\n\n            networkInfoService.addListener(\n                ONLINE_STATE_CHANGED_EVENT,\n                ({ isOnline, networkType, details }: NetworkInfo) => {\n                    logger.info('Network changed', JSON.stringify({\n                        isOnline,\n                        details,\n                        networkType\n                    }));\n                    dispatch(setNetworkInfo({\n                        isOnline,\n                        networkType,\n                        details\n                    }));\n                });\n\n            dispatch(_storeNetworkInfoCleanup(stop));\n\n            networkInfoService.start();\n        }\n        break;\n    case APP_WILL_UNMOUNT: {\n        const { _cleanup } = getState()[STORE_NAME];\n\n        if (_cleanup) {\n            _cleanup();\n            dispatch(_storeNetworkInfoCleanup(undefined));\n        }\n    }\n        break;\n    }\n\n    return result;\n});\n","// @flow\n\nimport { batch } from 'react-redux';\n\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport { toggleE2EE } from '../../e2ee/actions';\nimport { NOTIFICATION_TIMEOUT, showNotification } from '../../notifications';\nimport { CALLING, INVITED } from '../../presence-status';\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport {\n    CONFERENCE_WILL_JOIN,\n    forEachConference,\n    getCurrentConference\n} from '../conference';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../redux';\nimport { playSound, registerSound, unregisterSound } from '../sounds';\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    GRANT_MODERATOR,\n    KICK_PARTICIPANT,\n    LOCAL_PARTICIPANT_RAISE_HAND,\n    MUTE_REMOTE_PARTICIPANT,\n    PARTICIPANT_DISPLAY_NAME_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED\n} from './actionTypes';\nimport {\n    localParticipantIdChanged,\n    localParticipantJoined,\n    localParticipantLeft,\n    participantLeft,\n    participantUpdated,\n    setLoadableAvatarUrl\n} from './actions';\nimport {\n    LOCAL_PARTICIPANT_DEFAULT_ID,\n    PARTICIPANT_JOINED_SOUND_ID,\n    PARTICIPANT_LEFT_SOUND_ID\n} from './constants';\nimport {\n    getFirstLoadableAvatarUrl,\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantCount,\n    getParticipantDisplayName,\n    getRemoteParticipants\n} from './functions';\nimport { PARTICIPANT_JOINED_FILE, PARTICIPANT_LEFT_FILE } from './sounds';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures CONFERENCE_JOINED and CONFERENCE_LEFT actions and\n * updates respectively ID of local participant.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _registerSounds(store);\n\n        return _localParticipantJoined(store, next, action);\n\n    case APP_WILL_UNMOUNT:\n        _unregisterSounds(store);\n\n        return _localParticipantLeft(store, next, action);\n\n    case CONFERENCE_WILL_JOIN:\n        store.dispatch(localParticipantIdChanged(action.conference.myUserId()));\n        break;\n\n    case DOMINANT_SPEAKER_CHANGED: {\n        // Ensure the raised hand state is cleared for the dominant speaker\n        // and only if it was set when this is the local participant\n\n        const { conference, id } = action.participant;\n        const participant = getLocalParticipant(store.getState());\n        const isLocal = participant && participant.id === id;\n\n        if (isLocal && participant.raisedHand === undefined) {\n            // if local was undefined, let's leave it like that\n            // avoids sending unnecessary presence updates\n            break;\n        }\n\n        participant\n            && store.dispatch(participantUpdated({\n                conference,\n                id,\n                local: isLocal,\n                raisedHand: false\n            }));\n\n        break;\n    }\n\n    case GRANT_MODERATOR: {\n        const { conference } = store.getState()['features/base/conference'];\n\n        conference.grantOwner(action.id);\n        break;\n    }\n\n    case KICK_PARTICIPANT: {\n        const { conference } = store.getState()['features/base/conference'];\n\n        conference.kickParticipant(action.id);\n        break;\n    }\n\n    case LOCAL_PARTICIPANT_RAISE_HAND: {\n        const { enabled } = action;\n        const localId = getLocalParticipant(store.getState())?.id;\n\n        store.dispatch(participantUpdated({\n            // XXX Only the local participant is allowed to update without\n            // stating the JitsiConference instance (i.e. participant property\n            // `conference` for a remote participant) because the local\n            // participant is uniquely identified by the very fact that there is\n            // only one local participant.\n\n            id: localId,\n            local: true,\n            raisedHand: enabled\n        }));\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyRaiseHandUpdated(localId, enabled);\n        }\n\n        break;\n    }\n\n    case MUTE_REMOTE_PARTICIPANT: {\n        const { conference } = store.getState()['features/base/conference'];\n\n        conference.muteParticipant(action.id, action.mediaType);\n        break;\n    }\n\n    // TODO Remove this middleware when the local display name update flow is\n    // fully brought into redux.\n    case PARTICIPANT_DISPLAY_NAME_CHANGED: {\n        if (typeof APP !== 'undefined') {\n            const participant = getLocalParticipant(store.getState());\n\n            if (participant && participant.id === action.id) {\n                APP.UI.emitEvent(UIEvents.NICKNAME_CHANGED, action.name);\n            }\n        }\n\n        break;\n    }\n\n    case PARTICIPANT_JOINED: {\n        _maybePlaySounds(store, action);\n\n        return _participantJoinedOrUpdated(store, next, action);\n    }\n\n    case PARTICIPANT_LEFT:\n        _maybePlaySounds(store, action);\n        break;\n\n    case PARTICIPANT_UPDATED:\n        return _participantJoinedOrUpdated(store, next, action);\n\n    }\n\n    return next(action);\n});\n\n/**\n * Syncs the redux state features/base/participants up with the redux state\n * features/base/conference by ensuring that the former does not contain remote\n * participants no longer relevant to the latter. Introduced to address an issue\n * with multiplying thumbnails in the filmstrip.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch, getState }) => {\n        batch(() => {\n            for (const [ id, p ] of getRemoteParticipants(getState())) {\n                (!conference || p.conference !== conference)\n                    && dispatch(participantLeft(id, p.conference, p.isReplaced));\n            }\n        });\n    });\n\n/**\n * Reset the ID of the local participant to\n * {@link LOCAL_PARTICIPANT_DEFAULT_ID}. Such a reset is deemed possible only if\n * the local participant and, respectively, her ID is not involved in a\n * conference which is still of interest to the user and, consequently, the app.\n * For example, a conference which is in the process of leaving is no longer of\n * interest the user, is unrecoverable from the perspective of the user and,\n * consequently, the app.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/conference'],\n    /* listener */ ({ leaving }, { dispatch, getState }) => {\n        const state = getState();\n        const localParticipant = getLocalParticipant(state);\n        let id;\n\n        if (!localParticipant\n                || (id = localParticipant.id)\n                    === LOCAL_PARTICIPANT_DEFAULT_ID) {\n            // The ID of the local participant has been reset already.\n            return;\n        }\n\n        // The ID of the local may be reset only if it is not in use.\n        const dispatchLocalParticipantIdChanged\n            = forEachConference(\n                state,\n                conference =>\n                    conference === leaving || conference.myUserId() !== id);\n\n        dispatchLocalParticipantIdChanged\n            && dispatch(\n                localParticipantIdChanged(LOCAL_PARTICIPANT_DEFAULT_ID));\n    });\n\n/**\n * Registers listeners for participant change events.\n */\nStateListenerRegistry.register(\n    state => state['features/base/conference'].conference,\n    (conference, store) => {\n        if (conference) {\n            const propertyHandlers = {\n                'e2ee.enabled': (participant, value) => _e2eeUpdated(store, conference, participant.getId(), value),\n                'features_e2ee': (participant, value) =>\n                    store.dispatch(participantUpdated({\n                        conference,\n                        id: participant.getId(),\n                        e2eeSupported: value\n                    })),\n                'features_jigasi': (participant, value) =>\n                    store.dispatch(participantUpdated({\n                        conference,\n                        id: participant.getId(),\n                        isJigasi: value\n                    })),\n                'features_screen-sharing': (participant, value) => // eslint-disable-line no-unused-vars\n                    store.dispatch(participantUpdated({\n                        conference,\n                        id: participant.getId(),\n                        features: { 'screen-sharing': true }\n                    })),\n                'raisedHand': (participant, value) => _raiseHandUpdated(store, conference, participant.getId(), value),\n                'remoteControlSessionStatus': (participant, value) =>\n                    store.dispatch(participantUpdated({\n                        conference,\n                        id: participant.getId(),\n                        remoteControlSessionStatus: value\n                    }))\n            };\n\n            // update properties for the participants that are already in the conference\n            conference.getParticipants().forEach(participant => {\n                Object.keys(propertyHandlers).forEach(propertyName => {\n                    const value = participant.getProperty(propertyName);\n\n                    if (value !== undefined) {\n                        propertyHandlers[propertyName](participant, value);\n                    }\n                });\n            });\n\n            // We joined a conference\n            conference.on(\n                JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED,\n                (participant, propertyName, oldValue, newValue) => {\n                    if (propertyHandlers.hasOwnProperty(propertyName)) {\n                        propertyHandlers[propertyName](participant, newValue);\n                    }\n                });\n        } else {\n            const localParticipantId = getLocalParticipant(store.getState).id;\n\n            // We left the conference, the local participant must be updated.\n            _e2eeUpdated(store, conference, localParticipantId, false);\n            _raiseHandUpdated(store, conference, localParticipantId, false);\n        }\n    }\n);\n\n/**\n * Handles a E2EE enabled status update.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {Object} conference - The conference for which we got an update.\n * @param {string} participantId - The ID of the participant from which we got an update.\n * @param {boolean} newValue - The new value of the E2EE enabled status.\n * @returns {void}\n */\nfunction _e2eeUpdated({ dispatch }, conference, participantId, newValue) {\n    const e2eeEnabled = newValue === 'true';\n\n    dispatch(toggleE2EE(e2eeEnabled));\n\n    dispatch(participantUpdated({\n        conference,\n        id: participantId,\n        e2eeEnabled\n    }));\n}\n\n/**\n * Initializes the local participant and signals that it joined.\n *\n * @private\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action which is being dispatched\n * in the specified store.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _localParticipantJoined({ getState, dispatch }, next, action) {\n    const result = next(action);\n\n    const settings = getState()['features/base/settings'];\n\n    dispatch(localParticipantJoined({\n        avatarURL: settings.avatarURL,\n        email: settings.email,\n        name: settings.displayName\n    }));\n\n    return result;\n}\n\n/**\n * Signals that the local participant has left.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} into the specified {@code store}.\n * @param {Action} action - The redux action which is being dispatched in the\n * specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _localParticipantLeft({ dispatch }, next, action) {\n    const result = next(action);\n\n    dispatch(localParticipantLeft());\n\n    return result;\n}\n\n/**\n * Plays sounds when participants join/leave conference.\n *\n * @param {Store} store - The redux store.\n * @param {Action} action - The redux action. Should be either\n * {@link PARTICIPANT_JOINED} or {@link PARTICIPANT_LEFT}.\n * @private\n * @returns {void}\n */\nfunction _maybePlaySounds({ getState, dispatch }, action) {\n    const state = getState();\n    const { startAudioMuted, disableJoinLeaveSounds } = state['features/base/config'];\n    const { soundsParticipantJoined: joinSound, soundsParticipantLeft: leftSound } = state['features/base/settings'];\n\n    // If we have join/leave sounds disabled, don't play anything.\n    if (disableJoinLeaveSounds) {\n        return;\n    }\n\n    // We're not playing sounds for local participant\n    // nor when the user is joining past the \"startAudioMuted\" limit.\n    // The intention there was to not play user joined notification in big\n    // conferences where 100th person is joining.\n    if (!action.participant.local\n            && (!startAudioMuted\n                || getParticipantCount(state) < startAudioMuted)) {\n        const { isReplacing, isReplaced } = action.participant;\n\n        if (action.type === PARTICIPANT_JOINED) {\n            if (!joinSound) {\n                return;\n            }\n            const { presence } = action.participant;\n\n            // The sounds for the poltergeist are handled by features/invite.\n            if (presence !== INVITED && presence !== CALLING && !isReplacing) {\n                dispatch(playSound(PARTICIPANT_JOINED_SOUND_ID));\n            }\n        } else if (action.type === PARTICIPANT_LEFT && !isReplaced && leftSound) {\n            dispatch(playSound(PARTICIPANT_LEFT_SOUND_ID));\n        }\n    }\n}\n\n/**\n * Notifies the feature base/participants that the action\n * {@code PARTICIPANT_JOINED} or {@code PARTICIPANT_UPDATED} is being dispatched\n * within a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} in the specified {@code store}.\n * @param {Action} action - The redux action {@code PARTICIPANT_JOINED} or\n * {@code PARTICIPANT_UPDATED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _participantJoinedOrUpdated(store, next, action) {\n    const { dispatch, getState } = store;\n    const { participant: { avatarURL, email, id, local, name, raisedHand } } = action;\n\n    // Send an external update of the local participant's raised hand state\n    // if a new raised hand state is defined in the action.\n    if (typeof raisedHand !== 'undefined') {\n        if (local) {\n            const { conference } = getState()['features/base/conference'];\n\n            // Send raisedHand signalling only if there is a change\n            if (conference && raisedHand !== getLocalParticipant(getState()).raisedHand) {\n                conference.setLocalParticipantProperty('raisedHand', raisedHand);\n            }\n        }\n    }\n\n    // Allow the redux update to go through and compare the old avatar\n    // to the new avatar and emit out change events if necessary.\n    const result = next(action);\n\n    // Only run this if the config is populated, otherwise we preload external resources\n    // even if disableThirdPartyRequests is set to true in config\n    if (Object.keys(getState()['features/base/config']).length) {\n        const { disableThirdPartyRequests } = getState()['features/base/config'];\n\n        if (!disableThirdPartyRequests && (avatarURL || email || id || name)) {\n            const participantId = !id && local ? getLocalParticipant(getState()).id : id;\n            const updatedParticipant = getParticipantById(getState(), participantId);\n\n            getFirstLoadableAvatarUrl(updatedParticipant, store)\n                .then(url => {\n                    dispatch(setLoadableAvatarUrl(participantId, url));\n                });\n        }\n    }\n\n    // Notify external listeners of potential avatarURL changes.\n    if (typeof APP === 'object') {\n        const currentKnownId = local ? APP.conference.getMyUserId() : id;\n\n        // Force update of local video getting a new id.\n        APP.UI.refreshAvatarDisplay(currentKnownId);\n    }\n\n    return result;\n}\n\n/**\n * Handles a raise hand status update.\n *\n * @param {Function} dispatch - The Redux dispatch function.\n * @param {Object} conference - The conference for which we got an update.\n * @param {string} participantId - The ID of the participant from which we got an update.\n * @param {boolean} newValue - The new value of the raise hand status.\n * @returns {void}\n */\nfunction _raiseHandUpdated({ dispatch, getState }, conference, participantId, newValue) {\n    const raisedHand = newValue === 'true';\n\n    dispatch(participantUpdated({\n        conference,\n        id: participantId,\n        raisedHand\n    }));\n\n    if (typeof APP !== 'undefined') {\n        APP.API.notifyRaiseHandUpdated(participantId, raisedHand);\n    }\n\n    if (raisedHand) {\n        dispatch(showNotification({\n            titleArguments: {\n                name: getParticipantDisplayName(getState, participantId)\n            },\n            titleKey: 'notify.raisedHand'\n        }, NOTIFICATION_TIMEOUT));\n    }\n}\n\n/**\n * Registers sounds related with the participants feature.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _registerSounds({ dispatch }) {\n    dispatch(\n        registerSound(PARTICIPANT_JOINED_SOUND_ID, PARTICIPANT_JOINED_FILE));\n    dispatch(registerSound(PARTICIPANT_LEFT_SOUND_ID, PARTICIPANT_LEFT_FILE));\n}\n\n/**\n * Unregisters sounds related with the participants feature.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _unregisterSounds({ dispatch }) {\n    dispatch(unregisterSound(PARTICIPANT_JOINED_SOUND_ID));\n    dispatch(unregisterSound(PARTICIPANT_LEFT_SOUND_ID));\n}\n","/**\n * The name of the bundled sound file which will be played when new participant\n * joins the conference.\n */\nexport const PARTICIPANT_JOINED_FILE = 'joined.wav';\n\n/**\n * The name of the bundled sound file which will be played when any participant\n * leaves the conference.\n */\nexport const PARTICIPANT_LEFT_FILE = 'left.wav';\n","// @flow\n\nimport _ from 'lodash';\n\nimport MiddlewareRegistry from './MiddlewareRegistry';\nimport PersistenceRegistry from './PersistenceRegistry';\nimport { toState } from './functions';\n\n/**\n * The delay in milliseconds that passes between the last state change and the\n * persisting of that state in the storage.\n */\nconst PERSIST_STATE_DELAY = 2000;\n\n/**\n * A throttled function to avoid repetitive state persisting.\n */\nconst throttledPersistState\n    = _.throttle(\n        state => PersistenceRegistry.persistState(state),\n        PERSIST_STATE_DELAY);\n\n// Web only code.\n// We need the <tt>if</tt> because it appears that on mobile the polyfill is not\n// executed yet.\nif (typeof window.addEventListener === 'function') {\n    window.addEventListener('unload', () => {\n        throttledPersistState.flush();\n    });\n}\n\n/**\n * A master MiddleWare to selectively persist state. Please use the\n * {@link persisterconfig.json} to set which subtrees of the redux state should\n * be persisted.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const oldState = toState(store);\n    const result = next(action);\n    const newState = toState(store);\n\n    oldState === newState || throttledPersistState(newState);\n\n    return result;\n});\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { CHAT_SIZE } from '../../chat/constants';\nimport { getParticipantsPaneOpen } from '../../participants-pane/functions';\nimport theme from '../../participants-pane/theme.json';\n\nimport { CLIENT_RESIZED, SET_ASPECT_RATIO, SET_REDUCED_UI } from './actionTypes';\nimport { ASPECT_RATIO_NARROW, ASPECT_RATIO_WIDE } from './constants';\n\n/**\n * Size threshold for determining if we are in reduced UI mode or not.\n *\n * FIXME The logic to base {@code reducedUI} on a hardcoded width or height is\n * very brittle because it's completely disconnected from the UI which wants to\n * be rendered and, naturally, it broke on iPad where even the secondary Toolbar\n * didn't fit in the height. We do need to measure the actual UI at runtime and\n * determine whether and how to render it.\n */\nconst REDUCED_UI_THRESHOLD = 300;\n\n/**\n * Indicates a resize of the window.\n *\n * @param {number} clientWidth - The width of the window.\n * @param {number} clientHeight - The height of the window.\n * @returns {Object}\n */\nexport function clientResized(clientWidth: number, clientHeight: number) {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const state = getState();\n        const { isOpen: isChatOpen } = state['features/chat'];\n        const isParticipantsPaneOpen = getParticipantsPaneOpen(state);\n        let availableWidth = clientWidth;\n\n        if (navigator.product !== 'ReactNative') {\n            if (isChatOpen) {\n                availableWidth -= CHAT_SIZE;\n            }\n\n            if (isParticipantsPaneOpen) {\n                availableWidth -= theme.participantsPaneWidth;\n            }\n        }\n\n        return dispatch({\n            type: CLIENT_RESIZED,\n            clientHeight,\n            clientWidth: availableWidth\n        });\n    };\n}\n\n/**\n * Sets the aspect ratio of the app's user interface based on specific width and\n * height.\n *\n * @param {number} width - The width of the app's user interface.\n * @param {number} height - The height of the app's user interface.\n * @returns {{\n *     type: SET_ASPECT_RATIO,\n *     aspectRatio: Symbol\n * }}\n */\nexport function setAspectRatio(width: number, height: number): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        // Don't change the aspect ratio if width and height are the same, that\n        // is, if we transition to a 1:1 aspect ratio.\n        if (width !== height) {\n            const aspectRatio\n                = width < height ? ASPECT_RATIO_NARROW : ASPECT_RATIO_WIDE;\n\n            if (aspectRatio\n                    !== getState()['features/base/responsive-ui'].aspectRatio) {\n                return dispatch({\n                    type: SET_ASPECT_RATIO,\n                    aspectRatio\n                });\n            }\n        }\n    };\n}\n\n/**\n * Sets the \"reduced UI\" property. In reduced UI mode some components will\n * be hidden if there is no space to render them.\n *\n * @param {number} width - Current usable width.\n * @param {number} height - Current usable height.\n * @returns {{\n *     type: SET_REDUCED_UI,\n *     reducedUI: boolean\n * }}\n */\nexport function setReducedUI(width: number, height: number): Function {\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        const reducedUI = Math.min(width, height) < REDUCED_UI_THRESHOLD;\n\n        if (reducedUI !== getState()['features/base/responsive-ui'].reducedUI) {\n            return dispatch({\n                type: SET_REDUCED_UI,\n                reducedUI\n            });\n        }\n    };\n}\n","/**\n * The type of (redux) action which indicates that the client window has been resized.\n *\n * {\n *     type: CLIENT_RESIZED\n * }\n */\nexport const CLIENT_RESIZED = 'CLIENT_RESIZED';\n\n/**\n * The type of (redux) action which sets the aspect ratio of the app's user\n * interface.\n *\n * {\n *     type: SET_ASPECT_RATIO,\n *     aspectRatio: Symbol\n * }\n */\nexport const SET_ASPECT_RATIO = 'SET_ASPECT_RATIO';\n\n/**\n * The type of redux action which signals that the reduces UI mode was enabled\n * or disabled.\n *\n * {\n *     type: SET_REDUCED_UI,\n *     reducedUI: boolean\n * }\n *\n * @public\n */\nexport const SET_REDUCED_UI = 'SET_REDUCED_UI';\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../../base/app';\nimport { MiddlewareRegistry } from '../../base/redux';\n\nimport { clientResized } from './actions';\n\n/**\n * Dimensions change handler.\n */\nlet handler;\n\n/**\n * Middleware that handles window dimension changes.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_UNMOUNT: {\n        _appWillUnmount();\n        break;\n    }\n    case APP_WILL_MOUNT:\n        _appWillMount(store);\n        break;\n\n    }\n\n    return result;\n});\n\n/**\n * Notifies this feature that the action {@link APP_WILL_MOUNT} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @private\n * @returns {void}\n */\nfunction _appWillMount(store) {\n    handler = () => {\n        const {\n            innerHeight,\n            innerWidth\n        } = window;\n\n        store.dispatch(clientResized(innerWidth, innerHeight));\n    };\n\n    window.addEventListener('resize', handler);\n}\n\n/**\n * Notifies this feature that the action {@link APP_WILL_UNMOUNT} is being\n * dispatched within a specific redux {@code store}.\n *\n * @private\n * @returns {void}\n */\nfunction _appWillUnmount() {\n    window.removeEventListener('resize', handler);\n\n    handler = undefined;\n}\n","// @flow\nimport _ from 'lodash';\n\nimport { PREJOIN_INITIALIZED } from '../../prejoin/actionTypes';\nimport { APP_WILL_MOUNT } from '../app';\nimport { setAudioOnly } from '../audio-only';\nimport { SET_LOCATION_URL } from '../connection/actionTypes'; // minimize imports to avoid circular imports\nimport { getJwtName } from '../jwt/functions';\nimport { getLocalParticipant, participantUpdated } from '../participants';\nimport { MiddlewareRegistry } from '../redux';\nimport { parseURLParams } from '../util';\n\nimport { SETTINGS_UPDATED } from './actionTypes';\nimport { updateSettings } from './actions';\nimport { handleCallIntegrationChange, handleCrashReportingChange } from './functions';\n\n\n/**\n * The middleware of the feature base/settings. Distributes changes to the state\n * of base/settings to the states of other features computed from the state of\n * base/settings.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _initializeCallIntegration(store);\n        break;\n    case PREJOIN_INITIALIZED: {\n        _maybeUpdateDisplayName(store);\n        break;\n    }\n    case SETTINGS_UPDATED:\n        _maybeHandleCallIntegrationChange(action);\n        _maybeSetAudioOnly(store, action);\n        _updateLocalParticipant(store, action);\n        _maybeCrashReportingChange(action);\n        break;\n    case SET_LOCATION_URL:\n        _updateLocalParticipantFromUrl(store);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Initializes the audio device handler based on the `disableCallIntegration` setting.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _initializeCallIntegration({ getState }) {\n    const { disableCallIntegration } = getState()['features/base/settings'];\n\n    if (typeof disableCallIntegration === 'boolean') {\n        handleCallIntegrationChange(disableCallIntegration);\n    }\n}\n\n/**\n * Maps the settings field names to participant names where they don't match.\n * Currently there is only one such field, but may be extended in the future.\n *\n * @private\n * @param {string} settingsField - The name of the settings field to map.\n * @returns {string}\n */\nfunction _mapSettingsFieldToParticipant(settingsField) {\n    switch (settingsField) {\n    case 'displayName':\n        return 'name';\n    }\n\n    return settingsField;\n}\n\n/**\n * Handles a change in the `disableCallIntegration` setting.\n *\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeHandleCallIntegrationChange({ settings: { disableCallIntegration } }) {\n    if (typeof disableCallIntegration === 'boolean') {\n        handleCallIntegrationChange(disableCallIntegration);\n    }\n}\n\n/**\n * Handles a change in the `disableCrashReporting` setting.\n *\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeCrashReportingChange({ settings: { disableCrashReporting } }) {\n    if (typeof disableCrashReporting === 'boolean') {\n        handleCrashReportingChange(disableCrashReporting);\n    }\n}\n\n/**\n * Updates {@code startAudioOnly} flag if it's updated in the settings.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - The redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeSetAudioOnly(\n        { dispatch },\n        { settings: { startAudioOnly } }) {\n    if (typeof startAudioOnly === 'boolean') {\n        dispatch(setAudioOnly(startAudioOnly, true));\n    }\n}\n\n/**\n * Updates the display name to the one in JWT if there is one.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _maybeUpdateDisplayName({ dispatch, getState }) {\n    const state = getState();\n    const hasJwt = Boolean(state['features/base/jwt'].jwt);\n\n    if (hasJwt) {\n        const displayName = getJwtName(state);\n\n        if (displayName) {\n            dispatch(updateSettings({\n                displayName\n            }));\n        }\n    }\n}\n\n/**\n * Updates the local participant according to settings changes.\n *\n * @param {Store} store - The redux store.\n * @param {Object} action - The dispatched action.\n * @private\n * @returns {void}\n */\nfunction _updateLocalParticipant({ dispatch, getState }, action) {\n    const { settings } = action;\n    const localParticipant = getLocalParticipant(getState());\n    const newLocalParticipant = {\n        ...localParticipant\n    };\n\n    for (const key in settings) {\n        if (settings.hasOwnProperty(key)) {\n            newLocalParticipant[_mapSettingsFieldToParticipant(key)]\n                = settings[key];\n        }\n    }\n\n    dispatch(participantUpdated(newLocalParticipant));\n}\n\n\n/**\n * Returns the userInfo set in the URL.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _updateLocalParticipantFromUrl({ dispatch, getState }) {\n    const urlParams\n        = parseURLParams(getState()['features/base/connection'].locationURL);\n    const urlEmail = urlParams['userInfo.email'];\n    const urlDisplayName = urlParams['userInfo.displayName'];\n\n    if (!urlEmail && !urlDisplayName) {\n        return;\n    }\n\n    const localParticipant = getLocalParticipant(getState());\n\n    if (localParticipant) {\n        const displayName = _.escape(urlDisplayName);\n        const email = _.escape(urlEmail);\n\n        dispatch(participantUpdated({\n            ...localParticipant,\n            email,\n            name: displayName\n        }));\n\n        dispatch(updateSettings({\n            displayName,\n            email\n        }));\n    }\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/sounds');\n","// @flow\n\nimport { MiddlewareRegistry } from '../redux';\n\nimport { PLAY_SOUND, STOP_SOUND } from './actionTypes';\nimport logger from './logger';\n\n/**\n * Implements the entry point of the middleware of the feature base/media.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case PLAY_SOUND:\n        _playSound(store, action.soundId);\n        break;\n    case STOP_SOUND:\n        _stopSound(store, action.soundId);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Plays sound from audio element registered in the Redux store.\n *\n * @param {Store} store - The Redux store instance.\n * @param {string} soundId - Audio element identifier.\n * @private\n * @returns {void}\n */\nfunction _playSound({ getState }, soundId) {\n    const sounds = getState()['features/base/sounds'];\n    const sound = sounds.get(soundId);\n\n    if (sound) {\n        if (sound.audioElement) {\n            sound.audioElement.play();\n        } else {\n            logger.warn(`PLAY_SOUND: sound not loaded yet for id: ${soundId}`);\n        }\n    } else {\n        logger.warn(`PLAY_SOUND: no sound found for id: ${soundId}`);\n    }\n}\n\n/**\n * Stop sound from audio element registered in the Redux store.\n *\n * @param {Store} store - The Redux store instance.\n * @param {string} soundId - Audio element identifier.\n * @private\n * @returns {void}\n */\nfunction _stopSound({ getState }, soundId) {\n    const sounds = getState()['features/base/sounds'];\n    const sound = sounds.get(soundId);\n\n    if (sound) {\n        const { audioElement } = sound;\n\n        if (audioElement) {\n            audioElement.stop();\n        } else {\n            logger.warn(`STOP_SOUND: sound not loaded yet for id: ${soundId}`);\n        }\n    } else {\n        logger.warn(`STOP_SOUND: no sound found for id: ${soundId}`);\n    }\n}\n","// @flow\n\nimport { getLogger } from '../logging/functions';\n\nexport default getLogger('features/base/testing');\n","// @flow\n\nimport { CONFERENCE_WILL_JOIN } from '../conference';\nimport { SET_CONFIG } from '../config';\nimport { JitsiConferenceEvents } from '../lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../redux';\nimport { getJitsiMeetGlobalNS } from '../util';\n\nimport { setConnectionState } from './actions';\nimport {\n    getRemoteVideoType,\n    isLargeVideoReceived,\n    isRemoteVideoReceived,\n    isTestModeEnabled\n} from './functions';\nimport logger from './logger';\n\n/**\n * The Redux middleware of the feature testing.\n *\n * @param {Store} store - The Redux store.\n * @returns {Function}\n * @private\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN:\n        _bindConferenceConnectionListener(action.conference, store);\n        break;\n    case SET_CONFIG: {\n        const result = next(action);\n\n        _bindTortureHelpers(store);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Binds a handler which will listen for the connection related conference\n * events (in the lib-jitsi-meet internals those are associated with the ICE\n * connection state).\n *\n * @param {JitsiConference} conference - The {@link JitsiConference} for which\n * the conference will join even is dispatched.\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @private\n * @returns {void}\n */\nfunction _bindConferenceConnectionListener(conference, { dispatch }) {\n\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_ESTABLISHED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_ESTABLISHED, dispatch));\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_RESTORED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_RESTORED, dispatch));\n    conference.on(\n        JitsiConferenceEvents.CONNECTION_INTERRUPTED,\n        _onConnectionEvent.bind(\n            null, JitsiConferenceEvents.CONNECTION_INTERRUPTED, dispatch));\n}\n\n/**\n * Binds all the helper functions needed by torture.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _bindTortureHelpers(store) {\n    const { getState } = store;\n\n    // We bind helpers only if testing mode is enabled\n    if (!isTestModeEnabled(getState())) {\n        return;\n    }\n\n    // All torture helper methods go in here\n    getJitsiMeetGlobalNS().testing = {\n        getRemoteVideoType: getRemoteVideoType.bind(null, store),\n        isLargeVideoReceived: isLargeVideoReceived.bind(null, store),\n        isRemoteVideoReceived: isRemoteVideoReceived.bind(null, store)\n    };\n}\n\n/**\n * The handler function for conference connection events which will store the\n * latest even name in the Redux store of feature testing.\n *\n * @param {string} event - One of the lib-jitsi-meet JitsiConferenceEvents.\n * @param {Function} dispatch - The dispatch function of the current Redux\n * store.\n * @returns {void}\n * @private\n */\nfunction _onConnectionEvent(event, dispatch) {\n    switch (event) {\n    case JitsiConferenceEvents.CONNECTION_ESTABLISHED:\n    case JitsiConferenceEvents.CONNECTION_INTERRUPTED:\n    case JitsiConferenceEvents.CONNECTION_RESTORED:\n        dispatch(setConnectionState(event));\n        break;\n    default:\n        logger.error(`onConnectionEvent - unsupported event type: ${event}`);\n        break;\n    }\n}\n\n","/* @flow */\n\nimport { SET_CONNECTION_STATE } from './actionTypes';\n\n// eslint-disable-next-line jsdoc/require-description-complete-sentence\n/**\n * Sets the conference connection state of the testing feature.\n *\n * @param {string} connectionState - This is the lib-jitsi-meet event name. Can\n * be one of (with the string values at the time of this writing):\n * <li>{@link JitsiConferenceEvents.CONNECTION_ESTABLISHED}\n * - (\"conference.connectionEstablished\"</li>\n * <li>{@link JitsiConferenceEvents.CONNECTION_INTERRUPTED}\n * - (\"conference.connectionInterrupted\")</li>\n * <li>{@link JitsiConferenceEvents.CONNECTION_RESTORED}\n * - (\"conference.connectionRestored\")</li>\n * In the reducer the value will be an empty string until first event is\n * received.\n *\n * @returns {{\n *     type: SET_CONNECTION_STATE,\n *     connectionState: string\n * }}\n */\nexport function setConnectionState(connectionState: string) {\n    return {\n        type: SET_CONNECTION_STATE,\n        connectionState\n    };\n}\n","/**\n * The type of redux action which sets the configuration of the feature\n * base/logging.\n *\n * {\n *     type: SET_CONNECTION_STATE\n * }\n */\nexport const SET_CONNECTION_STATE = 'SET_CONNECTION_STATE';\n","// @flow\n\nimport UIEvents from '../../../../service/UI/UIEvents';\nimport { showModeratedNotification } from '../../av-moderation/actions';\nimport { shouldShowModeratedNotification } from '../../av-moderation/functions';\nimport { hideNotification } from '../../notifications';\nimport { isPrejoinPageVisible } from '../../prejoin/functions';\nimport { getAvailableDevices } from '../devices/actions';\nimport {\n    CAMERA_FACING_MODE,\n    MEDIA_TYPE,\n    SET_AUDIO_MUTED,\n    SET_CAMERA_FACING_MODE,\n    SET_VIDEO_MUTED,\n    VIDEO_MUTISM_AUTHORITY,\n    TOGGLE_CAMERA_FACING_MODE,\n    toggleCameraFacingMode\n} from '../media';\nimport { MiddlewareRegistry } from '../redux';\n\nimport {\n    TRACK_ADDED,\n    TOGGLE_SCREENSHARING,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_UPDATED\n} from './actionTypes';\nimport {\n    createLocalTracksA,\n    showNoDataFromSourceVideoError,\n    trackNoDataFromSourceNotificationInfoChanged\n} from './actions';\nimport {\n    getLocalTrack,\n    getTrackByJitsiTrack,\n    isUserInteractionRequiredForUnmute,\n    setTrackMuted\n} from './functions';\n\nimport './subscriber';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures LIB_DID_DISPOSE and LIB_DID_INIT actions and,\n * respectively, creates/destroys local media tracks. Also listens to\n * media-related actions and performs corresponding operations with tracks.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case TRACK_ADDED: {\n        // The devices list needs to be refreshed when no initial video permissions\n        // were granted and a local video track is added by umuting the video.\n        if (action.track.local) {\n            store.dispatch(getAvailableDevices());\n        }\n\n        break;\n    }\n    case TRACK_NO_DATA_FROM_SOURCE: {\n        const result = next(action);\n\n        _handleNoDataFromSourceErrors(store, action);\n\n        return result;\n    }\n    case TRACK_REMOVED: {\n        _removeNoDataFromSourceNotification(store, action.track);\n        break;\n    }\n    case SET_AUDIO_MUTED:\n        if (!action.muted\n                && isUserInteractionRequiredForUnmute(store.getState())) {\n            return;\n        }\n\n        _setMuted(store, action, MEDIA_TYPE.AUDIO);\n        break;\n\n    case SET_CAMERA_FACING_MODE: {\n        // XXX The camera facing mode of a MediaStreamTrack can be specified\n        // only at initialization time and then it can only be toggled. So in\n        // order to set the camera facing mode, one may destroy the track and\n        // then initialize a new instance with the new camera facing mode. But\n        // that is inefficient on mobile at least so the following relies on the\n        // fact that there are 2 camera facing modes and merely toggles between\n        // them to (hopefully) get the camera in the specified state.\n        const localTrack = _getLocalTrack(store, MEDIA_TYPE.VIDEO);\n        let jitsiTrack;\n\n        if (localTrack\n                && (jitsiTrack = localTrack.jitsiTrack)\n                && jitsiTrack.getCameraFacingMode()\n                    !== action.cameraFacingMode) {\n            store.dispatch(toggleCameraFacingMode());\n        }\n        break;\n    }\n\n    case SET_VIDEO_MUTED:\n        if (!action.muted\n                && isUserInteractionRequiredForUnmute(store.getState())) {\n            return;\n        }\n\n        _setMuted(store, action, action.mediaType);\n        break;\n\n    case TOGGLE_CAMERA_FACING_MODE: {\n        const localTrack = _getLocalTrack(store, MEDIA_TYPE.VIDEO);\n        let jitsiTrack;\n\n        if (localTrack && (jitsiTrack = localTrack.jitsiTrack)) {\n            // XXX MediaStreamTrack._switchCamera is a custom function\n            // implemented in react-native-webrtc for video which switches\n            // between the cameras via a native WebRTC library implementation\n            // without making any changes to the track.\n            jitsiTrack._switchCamera();\n\n            // Don't mirror the video of the back/environment-facing camera.\n            const mirror\n                = jitsiTrack.getCameraFacingMode() === CAMERA_FACING_MODE.USER;\n\n            store.dispatch({\n                type: TRACK_UPDATED,\n                track: {\n                    jitsiTrack,\n                    mirror\n                }\n            });\n        }\n        break;\n    }\n\n    case TOGGLE_SCREENSHARING:\n        if (typeof APP === 'object') {\n\n            // check for A/V Moderation when trying to start screen sharing\n            if (action.enabled && shouldShowModeratedNotification(MEDIA_TYPE.VIDEO, store.getState())) {\n                store.dispatch(showModeratedNotification(MEDIA_TYPE.PRESENTER));\n\n                return;\n            }\n\n            const { enabled, audioOnly } = action;\n\n            APP.UI.emitEvent(UIEvents.TOGGLE_SCREENSHARING, { enabled,\n                audioOnly });\n        }\n        break;\n\n    case TRACK_UPDATED:\n        // TODO Remove the following calls to APP.UI once components interested\n        // in track mute changes are moved into React and/or redux.\n        if (typeof APP !== 'undefined') {\n            const result = next(action);\n\n            if (isPrejoinPageVisible(store.getState())) {\n                return result;\n            }\n\n            const { jitsiTrack } = action.track;\n            const muted = jitsiTrack.isMuted();\n            const participantID = jitsiTrack.getParticipantId();\n            const isVideoTrack = jitsiTrack.type !== MEDIA_TYPE.AUDIO;\n\n            if (isVideoTrack) {\n                // Do not change the video mute state for local presenter tracks.\n                if (jitsiTrack.type === MEDIA_TYPE.PRESENTER) {\n                    APP.conference.mutePresenter(muted);\n                } else if (jitsiTrack.isLocal()) {\n                    APP.conference.setVideoMuteStatus();\n                } else {\n                    APP.UI.setVideoMuted(participantID);\n                }\n            } else if (jitsiTrack.isLocal()) {\n                APP.conference.setAudioMuteStatus(muted);\n            } else {\n                APP.UI.setAudioMuted(participantID, muted);\n            }\n\n            return result;\n        }\n\n    }\n\n    return next(action);\n});\n\n/**\n * Handles no data from source errors.\n *\n * @param {Store} store - The redux store in which the specified action is\n * dispatched.\n * @param {Action} action - The redux action dispatched in the specified store.\n * @private\n * @returns {void}\n */\nfunction _handleNoDataFromSourceErrors(store, action) {\n    const { getState, dispatch } = store;\n\n    const track = getTrackByJitsiTrack(getState()['features/base/tracks'], action.track.jitsiTrack);\n\n    if (!track || !track.local) {\n        return;\n    }\n\n    const { jitsiTrack } = track;\n\n    if (track.mediaType === MEDIA_TYPE.AUDIO && track.isReceivingData) {\n        _removeNoDataFromSourceNotification(store, action.track);\n    }\n\n    if (track.mediaType === MEDIA_TYPE.VIDEO) {\n        const { noDataFromSourceNotificationInfo = {} } = track;\n\n        if (track.isReceivingData) {\n            if (noDataFromSourceNotificationInfo.timeout) {\n                clearTimeout(noDataFromSourceNotificationInfo.timeout);\n                dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, undefined));\n            }\n\n            // try to remove the notification if there is one.\n            _removeNoDataFromSourceNotification(store, action.track);\n        } else {\n            if (noDataFromSourceNotificationInfo.timeout) {\n                return;\n            }\n\n            const timeout = setTimeout(() => dispatch(showNoDataFromSourceVideoError(jitsiTrack)), 5000);\n\n            dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, { timeout }));\n        }\n    }\n}\n\n/**\n * Gets the local track associated with a specific {@code MEDIA_TYPE} in a\n * specific redux store.\n *\n * @param {Store} store - The redux store from which the local track associated\n * with the specified {@code mediaType} is to be retrieved.\n * @param {MEDIA_TYPE} mediaType - The {@code MEDIA_TYPE} of the local track to\n * be retrieved from the specified {@code store}.\n * @param {boolean} [includePending] - Indicates whether a local track is to be\n * returned if it is still pending. A local track is pending if\n * {@code getUserMedia} is still executing to create it and, consequently, its\n * {@code jitsiTrack} property is {@code undefined}. By default a pending local\n * track is not returned.\n * @private\n * @returns {Track} The local {@code Track} associated with the specified\n * {@code mediaType} in the specified {@code store}.\n */\nfunction _getLocalTrack(\n        { getState }: { getState: Function },\n        mediaType: MEDIA_TYPE,\n        includePending: boolean = false) {\n    return (\n        getLocalTrack(\n            getState()['features/base/tracks'],\n            mediaType,\n            includePending));\n}\n\n/**\n * Removes the no data from source notification associated with the JitsiTrack if displayed.\n *\n * @param {Store} store - The redux store.\n * @param {Track} track - The redux action dispatched in the specified store.\n * @returns {void}\n */\nfunction _removeNoDataFromSourceNotification({ getState, dispatch }, track) {\n    const t = getTrackByJitsiTrack(getState()['features/base/tracks'], track.jitsiTrack);\n    const { jitsiTrack, noDataFromSourceNotificationInfo = {} } = t || {};\n\n    if (noDataFromSourceNotificationInfo && noDataFromSourceNotificationInfo.uid) {\n        dispatch(hideNotification(noDataFromSourceNotificationInfo.uid));\n        dispatch(trackNoDataFromSourceNotificationInfoChanged(jitsiTrack, undefined));\n    }\n}\n\n/**\n * Mutes or unmutes a local track with a specific media type.\n *\n * @param {Store} store - The redux store in which the specified action is\n * dispatched.\n * @param {Action} action - The redux action dispatched in the specified store.\n * @param {MEDIA_TYPE} mediaType - The {@link MEDIA_TYPE} of the local track\n * which is being muted or unmuted.\n * @private\n * @returns {void}\n */\nfunction _setMuted(store, { ensureTrack, authority, muted }, mediaType: MEDIA_TYPE) {\n    const localTrack\n        = _getLocalTrack(store, mediaType, /* includePending */ true);\n\n    if (localTrack) {\n        // The `jitsiTrack` property will have a value only for a localTrack for\n        // which `getUserMedia` has already completed. If there's no\n        // `jitsiTrack`, then the `muted` state will be applied once the\n        // `jitsiTrack` is created.\n        const { jitsiTrack } = localTrack;\n        const isAudioOnly = authority === VIDEO_MUTISM_AUTHORITY.AUDIO_ONLY;\n\n        // screenshare cannot be muted or unmuted using the video mute button\n        // anymore, unless it is muted by audioOnly.\n        jitsiTrack && (jitsiTrack.videoType !== 'desktop' || isAudioOnly)\n            && setTrackMuted(jitsiTrack, muted);\n    } else if (!muted && ensureTrack && (typeof APP === 'undefined' || isPrejoinPageVisible(store.getState()))) {\n        // FIXME: This only runs on mobile now because web has its own way of\n        // creating local tracks. Adjust the check once they are unified.\n        store.dispatch(createLocalTracksA({ devices: [ mediaType ] }));\n    }\n}\n","// @flow\n\nimport _ from 'lodash';\n\nimport { StateListenerRegistry } from '../../base/redux';\n\nimport { isLocalCameraTrackMuted } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Notifies when the list of currently sharing participants changes.\n */\nStateListenerRegistry.register(\n    /* selector */ state =>\n        state['features/base/tracks'].filter(tr => tr.videoType === 'desktop').map(t => t.participantId),\n    /* listener */ (participantIDs, store, previousParticipantIDs) => {\n        if (typeof APP !== 'object') {\n            return;\n        }\n\n        if (!_.isEqual(_.sortBy(participantIDs), _.sortBy(previousParticipantIDs))) {\n            APP.API.notifySharingParticipantsChanged(participantIDs);\n        }\n    }\n);\n\n\n/**\n * Notifies when the local video mute state changes.\n */\nStateListenerRegistry.register(\n    /* selector */ state => isLocalCameraTrackMuted(state['features/base/tracks']),\n    /* listener */ (muted, store, previousMuted) => {\n        if (typeof APP !== 'object') {\n            return;\n        }\n\n        if (muted !== previousMuted) {\n            APP.API.notifyVideoMutedStatusChanged(muted);\n        }\n    }\n);\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { MiddlewareRegistry } from '../redux';\n\nimport { USER_INTERACTION_RECEIVED } from './actionTypes';\n\n/**\n * Reference to any callback that has been created to be invoked on user\n * interaction.\n *\n * @type {Function|null}\n */\nlet userInteractionListener = null;\n\n/**\n * Implements the entry point of the middleware of the feature base/user-interaction.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        _startListeningForUserInteraction(store);\n        break;\n\n    case APP_WILL_UNMOUNT:\n        _stopListeningForUserInteraction();\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Callback invoked when the user interacts with the page.\n *\n * @param {Function} dispatch - The redux dispatch function.\n * @param {Object} event - The DOM event for a user interacting with the page.\n * @private\n * @returns {void}\n */\nfunction _onUserInteractionReceived(dispatch, event) {\n    if (event.isTrusted) {\n        dispatch({\n            type: USER_INTERACTION_RECEIVED\n        });\n\n        _stopListeningForUserInteraction();\n    }\n}\n\n/**\n * Registers listeners to notify redux of any user interaction with the page.\n *\n * @param {Object} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _startListeningForUserInteraction({ dispatch }) {\n    _stopListeningForUserInteraction();\n\n    userInteractionListener = _onUserInteractionReceived.bind(null, dispatch);\n\n    window.addEventListener('mousedown', userInteractionListener);\n    window.addEventListener('keydown', userInteractionListener);\n}\n\n/**\n * De-registers listeners for user interaction with the page.\n *\n * @private\n * @returns {void}\n */\nfunction _stopListeningForUserInteraction() {\n    window.removeEventListener('mousedown', userInteractionListener);\n    window.removeEventListener('keydown', userInteractionListener);\n\n    userInteractionListener = null;\n}\n","/**\n * The type of (redux) action which signals the user has interacted with the\n * page.\n *\n * {\n *     type: USER_INTERACTION_RECEIVED,\n * }\n */\nexport const USER_INTERACTION_RECEIVED = 'USER_INTERACTION_RECEIVED';\n","// @flow\n\nimport { SET_CONFIG } from '../base/config';\nimport { ADD_KNOWN_DOMAINS } from '../base/known-domains';\nimport { equals, MiddlewareRegistry } from '../base/redux';\nimport { APP_STATE_CHANGED } from '../mobile/background/actionTypes';\n\nimport { REFRESH_CALENDAR } from './actionTypes';\nimport { setCalendarAuthorization } from './actions';\nimport { _fetchCalendarEntries, isCalendarEnabled } from './functions';\n\nMiddlewareRegistry.register(store => next => action => {\n    const { getState } = store;\n\n    if (!isCalendarEnabled(getState)) {\n        return next(action);\n    }\n\n    switch (action.type) {\n    case ADD_KNOWN_DOMAINS: {\n        // XXX Fetch new calendar entries only when an actual domain has\n        // become known.\n        const oldValue = getState()['features/base/known-domains'];\n        const result = next(action);\n        const newValue = getState()['features/base/known-domains'];\n\n        equals(oldValue, newValue)\n            || _fetchCalendarEntries(store, false, false);\n\n        return result;\n    }\n\n    case APP_STATE_CHANGED: {\n        const result = next(action);\n\n        _maybeClearAccessStatus(store, action);\n\n        return result;\n    }\n\n    case SET_CONFIG: {\n        const result = next(action);\n\n        _fetchCalendarEntries(store, false, false);\n\n        return result;\n    }\n\n    case REFRESH_CALENDAR: {\n        const result = next(action);\n\n        _fetchCalendarEntries(\n            store, action.isInteractive, action.forcePermission);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Clears the calendar access status when the app comes back from the\n * background. This is needed as some users may never quit the app, but puts it\n * into the background and we need to try to request for a permission as often\n * as possible, but not annoyingly often.\n *\n * @param {Object} store - The redux store.\n * @param {Object} action - The Redux action.\n * @private\n * @returns {void}\n */\nfunction _maybeClearAccessStatus(store, { appState }) {\n    appState === 'background'\n        && store.dispatch(setCalendarAuthorization(undefined));\n}\n","// @flow\n\nimport { SET_ACTIVE_MODAL_ID } from './actionTypes';\n\n/**\n * Action to set the ID of the active modal (or undefined if needs to be hidden).\n *\n * @param {string} activeModalId - The new modal ID or undefined.\n * @param {Object} modalProps - The props to pass to the modal.\n * @returns {{\n *     activeModalId: string,\n *     type: SET_ACTIVE_MODAL_ID\n * }}\n */\nexport function setActiveModalId(activeModalId: ?string, modalProps: Object = {}) {\n    return {\n        activeModalId,\n        modalProps,\n        type: SET_ACTIVE_MODAL_ID\n    };\n}\n","// @flow\n\n/**\n * Action type to set the ID of the active modal (or undefined if needs to be hidden).\n */\nexport const SET_ACTIVE_MODAL_ID = 'SET_ACTIVE_MODAL_ID';\n","// @flow\n\nimport { Component } from 'react';\n\nexport const JitsiModal = Component;\n\n","// @flow\n\nimport { batch } from 'react-redux';\n\nimport { ENDPOINT_REACTION_NAME } from '../../../modules/API/constants';\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport {\n    CONFERENCE_JOINED,\n    getCurrentConference\n} from '../base/conference';\nimport { openDialog } from '../base/dialog';\nimport {\n    JitsiConferenceErrors,\n    JitsiConferenceEvents\n} from '../base/lib-jitsi-meet';\nimport { setActiveModalId } from '../base/modal';\nimport {\n    getLocalParticipant,\n    getParticipantById,\n    getParticipantDisplayName\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { playSound, registerSound, unregisterSound } from '../base/sounds';\nimport { openDisplayNamePrompt } from '../display-name';\nimport { ADD_REACTION_MESSAGE } from '../reactions/actionTypes';\nimport { pushReactions } from '../reactions/actions.any';\nimport { getReactionMessageFromBuffer } from '../reactions/functions.any';\nimport { endpointMessageReceived } from '../subtitles';\nimport { showToolbox } from '../toolbox/actions';\nimport {\n    hideToolbox,\n    setToolboxTimeout,\n    setToolboxVisible\n} from '../toolbox/actions.web';\n\nimport { ADD_MESSAGE, SEND_MESSAGE, OPEN_CHAT, CLOSE_CHAT } from './actionTypes';\nimport { addMessage, clearMessages } from './actions';\nimport { closeChat } from './actions.any';\nimport { ChatPrivacyDialog } from './components';\nimport {\n    CHAT_VIEW_MODAL_ID,\n    INCOMING_MSG_SOUND_ID,\n    MESSAGE_TYPE_ERROR,\n    MESSAGE_TYPE_LOCAL,\n    MESSAGE_TYPE_REMOTE\n} from './constants';\nimport { getUnreadCount } from './functions';\nimport { INCOMING_MSG_SOUND_FILE } from './sounds';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig : Object;\n\n/**\n * Timeout for when to show the privacy notice after a private message was received.\n *\n * E.g. if this value is 20 secs (20000ms), then we show the privacy notice when sending a non private\n * message after we have received a private message in the last 20 seconds.\n */\nconst PRIVACY_NOTICE_TIMEOUT = 20 * 1000;\n\n/**\n * Implements the middleware of the chat feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch, getState } = store;\n    const localParticipant = getLocalParticipant(getState());\n    let isOpen, unreadCount;\n\n    switch (action.type) {\n    case ADD_MESSAGE:\n        unreadCount = action.hasRead ? 0 : getUnreadCount(getState()) + 1;\n        isOpen = getState()['features/chat'].isOpen;\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyChatUpdated(unreadCount, isOpen);\n        }\n        break;\n\n    case APP_WILL_MOUNT:\n        dispatch(\n                registerSound(INCOMING_MSG_SOUND_ID, INCOMING_MSG_SOUND_FILE));\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(INCOMING_MSG_SOUND_ID));\n        break;\n\n    case CONFERENCE_JOINED:\n        _addChatMsgListener(action.conference, store);\n        break;\n\n    case OPEN_CHAT:\n        if (navigator.product === 'ReactNative') {\n            if (localParticipant.name) {\n                dispatch(setActiveModalId(CHAT_VIEW_MODAL_ID));\n            } else {\n                dispatch(openDisplayNamePrompt(() => {\n                    dispatch(setActiveModalId(CHAT_VIEW_MODAL_ID));\n                }));\n            }\n        } else {\n            dispatch(setActiveModalId(CHAT_VIEW_MODAL_ID));\n        }\n\n        unreadCount = 0;\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyChatUpdated(unreadCount, true);\n        }\n        break;\n\n    case CLOSE_CHAT:\n        unreadCount = 0;\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyChatUpdated(unreadCount, false);\n        }\n\n        dispatch(setActiveModalId());\n        break;\n\n    case SEND_MESSAGE: {\n        const state = store.getState();\n        const { conference } = state['features/base/conference'];\n\n        if (conference) {\n            // There may be cases when we intend to send a private message but we forget to set the\n            // recipient. This logic tries to mitigate this risk.\n            const shouldSendPrivateMessageTo = _shouldSendPrivateMessageTo(state, action);\n\n            if (shouldSendPrivateMessageTo) {\n                dispatch(openDialog(ChatPrivacyDialog, {\n                    message: action.message,\n                    participantID: shouldSendPrivateMessageTo\n                }));\n            } else {\n                // Sending the message if privacy notice doesn't need to be shown.\n\n                const { privateMessageRecipient } = state['features/chat'];\n\n                if (typeof APP !== 'undefined') {\n                    APP.API.notifySendingChatMessage(action.message, Boolean(privateMessageRecipient));\n                }\n\n                if (privateMessageRecipient) {\n                    conference.sendPrivateTextMessage(privateMessageRecipient.id, action.message);\n                    _persistSentPrivateMessage(store, privateMessageRecipient.id, action.message);\n                } else {\n                    conference.sendTextMessage(action.message);\n                }\n            }\n        }\n        break;\n    }\n\n    case ADD_REACTION_MESSAGE: {\n        _handleReceivedMessage(store, {\n            id: localParticipant.id,\n            message: action.message,\n            privateMessage: false,\n            timestamp: Date.now()\n        }, false);\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, e.g. clear messages or close the chat modal if it's left\n * open.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, previousConference) => {\n        if (conference !== previousConference) {\n            // conference changed, left or failed...\n\n            if (getState()['features/chat'].isOpen) {\n                // Closes the chat if it's left open.\n                dispatch(closeChat());\n            }\n\n            // Clear chat messages.\n            dispatch(clearMessages());\n        }\n    });\n\nStateListenerRegistry.register(\n    state => state['features/chat'].isOpen,\n    (isOpen, { dispatch }) => {\n        if (typeof APP !== 'undefined' && isOpen) {\n            dispatch(showToolbox());\n        }\n    }\n);\n\n/**\n * Registers listener for {@link JitsiConferenceEvents.MESSAGE_RECEIVED} that\n * will perform various chat related activities.\n *\n * @param {JitsiConference} conference - The conference instance on which the\n * new event listener will be registered.\n * @param {Object} store - The redux store object.\n * @private\n * @returns {void}\n */\nfunction _addChatMsgListener(conference, store) {\n    if (store.getState()['features/base/config'].iAmRecorder) {\n        // We don't register anything on web if we are in iAmRecorder mode\n        return;\n    }\n\n    conference.on(\n        JitsiConferenceEvents.MESSAGE_RECEIVED,\n        (id, message, timestamp) => {\n            _handleReceivedMessage(store, {\n                id,\n                message,\n                privateMessage: false,\n                timestamp\n            });\n        }\n    );\n\n    conference.on(\n        JitsiConferenceEvents.PRIVATE_MESSAGE_RECEIVED,\n        (id, message, timestamp) => {\n            _handleReceivedMessage(store, {\n                id,\n                message,\n                privateMessage: true,\n                timestamp\n            });\n        }\n    );\n\n    conference.on(\n        JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,\n        (...args) => {\n            store.dispatch(endpointMessageReceived(...args));\n\n            if (args && args.length >= 2) {\n                const [ { _id }, eventData ] = args;\n\n                if (eventData.name === ENDPOINT_REACTION_NAME) {\n                    batch(() => {\n                        store.dispatch(setToolboxVisible(true));\n                        store.dispatch(setToolboxTimeout(\n                                () => store.dispatch(hideToolbox()),\n                                5000)\n                        );\n                        store.dispatch(pushReactions(eventData.reactions));\n                    });\n\n                    _handleReceivedMessage(store, {\n                        id: _id,\n                        message: getReactionMessageFromBuffer(eventData.reactions),\n                        privateMessage: false,\n                        timestamp: eventData.timestamp\n                    }, false);\n                }\n            }\n        });\n\n    conference.on(\n        JitsiConferenceEvents.CONFERENCE_ERROR, (errorType, error) => {\n            errorType === JitsiConferenceErrors.CHAT_ERROR && _handleChatError(store, error);\n        });\n}\n\n/**\n * Handles a chat error received from the xmpp server.\n *\n * @param {Store} store - The Redux store.\n * @param  {string} error - The error message.\n * @returns {void}\n */\nfunction _handleChatError({ dispatch }, error) {\n    dispatch(addMessage({\n        hasRead: true,\n        messageType: MESSAGE_TYPE_ERROR,\n        message: error,\n        privateMessage: false,\n        timestamp: Date.now()\n    }));\n}\n\n/**\n * Function to handle an incoming chat message.\n *\n * @param {Store} store - The Redux store.\n * @param {Object} message - The message object.\n * @param {boolean} shouldPlaySound - Whether or not to play the incoming message sound.\n * @returns {void}\n */\nfunction _handleReceivedMessage({ dispatch, getState },\n        { id, message, privateMessage, timestamp },\n        shouldPlaySound = true\n) {\n    // Logic for all platforms:\n    const state = getState();\n    const { isOpen: isChatOpen } = state['features/chat'];\n    const { disableIncomingMessageSound } = state['features/base/config'];\n    const { soundsIncomingMessage: soundEnabled } = state['features/base/settings'];\n\n    if (!disableIncomingMessageSound && soundEnabled && shouldPlaySound && !isChatOpen) {\n        dispatch(playSound(INCOMING_MSG_SOUND_ID));\n    }\n\n    // Provide a default for for the case when a message is being\n    // backfilled for a participant that has left the conference.\n    const participant = getParticipantById(state, id) || {};\n    const localParticipant = getLocalParticipant(getState);\n    const displayName = getParticipantDisplayName(state, id);\n    const hasRead = participant.local || isChatOpen;\n    const timestampToDate = timestamp ? new Date(timestamp) : new Date();\n    const millisecondsTimestamp = timestampToDate.getTime();\n\n    dispatch(addMessage({\n        displayName,\n        hasRead,\n        id,\n        messageType: participant.local ? MESSAGE_TYPE_LOCAL : MESSAGE_TYPE_REMOTE,\n        message,\n        privateMessage,\n        recipient: getParticipantDisplayName(state, localParticipant.id),\n        timestamp: millisecondsTimestamp\n    }));\n\n    if (typeof APP !== 'undefined') {\n        // Logic for web only:\n\n        APP.API.notifyReceivedChatMessage({\n            body: message,\n            id,\n            nick: displayName,\n            privateMessage,\n            ts: timestamp\n        });\n\n        dispatch(showToolbox(4000));\n    }\n}\n\n/**\n * Persists the sent private messages as if they were received over the muc.\n *\n * This is required as we rely on the fact that we receive all messages from the muc that we send\n * (as they are sent to everybody), but we don't receive the private messages we send to another participant.\n * But those messages should be in the store as well, otherwise they don't appear in the chat window.\n *\n * @param {Store} store - The Redux store.\n * @param {string} recipientID - The ID of the recipient the private message was sent to.\n * @param {string} message - The sent message.\n * @returns {void}\n */\nfunction _persistSentPrivateMessage({ dispatch, getState }, recipientID, message) {\n    const localParticipant = getLocalParticipant(getState);\n    const displayName = getParticipantDisplayName(getState, localParticipant.id);\n\n    dispatch(addMessage({\n        displayName,\n        hasRead: true,\n        id: localParticipant.id,\n        messageType: MESSAGE_TYPE_LOCAL,\n        message,\n        privateMessage: true,\n        recipient: getParticipantDisplayName(getState, recipientID),\n        timestamp: Date.now()\n    }));\n}\n\n/**\n * Returns the ID of the participant who we may have wanted to send the message\n * that we're about to send.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} action - The action being dispatched now.\n * @returns {string?}\n */\nfunction _shouldSendPrivateMessageTo(state, action): ?string {\n    if (action.ignorePrivacy) {\n        // Shortcut: this is only true, if we already displayed the notice, so no need to show it again.\n        return undefined;\n    }\n\n    const { messages, privateMessageRecipient } = state['features/chat'];\n\n    if (privateMessageRecipient) {\n        // We're already sending a private message, no need to warn about privacy.\n        return undefined;\n    }\n\n    if (!messages.length) {\n        // No messages yet, no need to warn for privacy.\n        return undefined;\n    }\n\n    // Platforms sort messages differently\n    const lastMessage = navigator.product === 'ReactNative'\n        ? messages[0] : messages[messages.length - 1];\n\n    if (lastMessage.messageType === MESSAGE_TYPE_LOCAL) {\n        // The sender is probably aware of any private messages as already sent\n        // a message since then. Doesn't make sense to display the notice now.\n        return undefined;\n    }\n\n    if (lastMessage.privateMessage) {\n        // We show the notice if the last received message was private.\n        return lastMessage.id;\n    }\n\n    // But messages may come rapidly, we want to protect our users from mis-sending a message\n    // even when there was a reasonable recently received private message.\n    const now = Date.now();\n    const recentPrivateMessages = messages.filter(\n        message =>\n            message.messageType !== MESSAGE_TYPE_LOCAL\n            && message.privateMessage\n            && message.timestamp + PRIVACY_NOTICE_TIMEOUT > now);\n    const recentPrivateMessage = navigator.product === 'ReactNative'\n        ? recentPrivateMessages[0] : recentPrivateMessages[recentPrivateMessages.length - 1];\n\n    if (recentPrivateMessage) {\n        return recentPrivateMessage.id;\n    }\n\n    return undefined;\n}\n","/**\n * The name of the bundled audio file which will be played for the incoming chat\n * message sound.\n *\n * @type {string}\n */\nexport const INCOMING_MSG_SOUND_FILE = 'incomingMessage.wav';\n","// @flow\nimport { appNavigate } from '../app/actions';\nimport {\n    CONFERENCE_JOINED,\n    KICKED_OUT,\n    conferenceLeft,\n    getCurrentConference\n} from '../base/conference';\nimport { hideDialog, isDialogOpen } from '../base/dialog';\nimport { setActiveModalId } from '../base/modal';\nimport { pinParticipant } from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { SET_REDUCED_UI } from '../base/responsive-ui';\nimport { FeedbackDialog } from '../feedback';\nimport { setFilmstripEnabled } from '../filmstrip';\nimport { setToolboxEnabled } from '../toolbox/actions';\n\nimport { notifyKickedOut } from './actions';\n\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED:\n    case SET_REDUCED_UI: {\n        const { dispatch, getState } = store;\n        const state = getState();\n        const { reducedUI } = state['features/base/responsive-ui'];\n\n        dispatch(setToolboxEnabled(!reducedUI));\n        dispatch(setFilmstripEnabled(!reducedUI));\n\n        break;\n    }\n\n    case KICKED_OUT: {\n        const { dispatch } = store;\n\n        dispatch(notifyKickedOut(\n            action.participant,\n            () => {\n                dispatch(conferenceLeft(action.conference));\n                dispatch(appNavigate(undefined));\n            }\n        ));\n\n        break;\n    }\n    }\n\n    return result;\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, close all dialogs and unpin any pinned participants.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, prevConference) => {\n        const { authRequired, membersOnly, passwordRequired }\n            = getState()['features/base/conference'];\n\n        if (conference !== prevConference) {\n            // Unpin participant, in order to avoid the local participant\n            // remaining pinned, since it's not destroyed across runs.\n            dispatch(pinParticipant(null));\n\n            // XXX I wonder if there is a better way to do this. At this stage\n            // we do know what dialogs we want to keep but the list of those\n            // we want to hide is a lot longer. Thus we take a bit of a shortcut\n            // and explicitly check.\n            if (typeof authRequired === 'undefined'\n                    && typeof passwordRequired === 'undefined'\n                    && typeof membersOnly === 'undefined'\n                    && !isDialogOpen(getState(), FeedbackDialog)) {\n                // Conference changed, left or failed... and there is no\n                // pending authentication, nor feedback request, so close any\n                // dialog we might have open.\n                dispatch(hideDialog());\n            }\n\n            // We want to close all modals.\n            dispatch(setActiveModalId());\n        }\n    });\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { getParticipantDisplayName } from '../base/participants';\nimport {\n    NOTIFICATION_TYPE,\n    showNotification\n} from '../notifications';\n\n/**\n * Notify that we've been kicked out of the conference.\n *\n * @param {JitsiParticipant} participant - The {@link JitsiParticipant}\n * instance which initiated the kick event.\n * @param {?Function} _ - Used only in native code.\n * @returns {Function}\n */\nexport function notifyKickedOut(participant: Object, _: ?Function) { // eslint-disable-line no-unused-vars\n    return (dispatch: Dispatch<any>, getState: Function) => {\n        if (!participant || (participant.isReplaced && participant.isReplaced())) {\n            return;\n        }\n\n        const args = {\n            participantDisplayName:\n                getParticipantDisplayName(getState, participant.getId())\n        };\n\n        dispatch(showNotification({\n            appearance: NOTIFICATION_TYPE.ERROR,\n            hideErrorSupportLink: true,\n            descriptionKey: 'dialog.kickMessage',\n            descriptionArguments: args,\n            titleKey: 'dialog.kickTitle',\n            titleArguments: args\n        }));\n    };\n}\n","// @flow\n\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { statsEmitter } from './index';\n\n/**\n * Implements the middleware of the feature connection-indicator.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        statsEmitter.startListeningForStats(action.conference);\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n","// @flow\n\nimport type { Dispatch } from 'redux';\n\nimport { appNavigate } from '../app/actions';\n\nimport { OPEN_DESKTOP_APP, OPEN_WEB_APP } from './actionTypes';\n\n/**\n * Continue to the conference page.\n *\n * @returns {Function}\n */\nexport function openWebApp() {\n    return (dispatch: Dispatch<any>) => {\n        // In order to go to the web app we need to skip the deep linking\n        // interceptor. OPEN_WEB_APP action should set launchInWeb to true in\n        // the redux store. After this when appNavigate() is called the\n        // deep linking interceptor will be skipped (will return undefined).\n        dispatch({ type: OPEN_WEB_APP });\n        dispatch(appNavigate());\n    };\n}\n\n/**\n * Opens the desktop app.\n *\n * @returns {{\n *     type: OPEN_DESKTOP_APP\n * }}\n */\nexport function openDesktopApp() {\n    return {\n        type: OPEN_DESKTOP_APP\n    };\n}\n","/* @flow */\n\n/**\n * The type of the action which signals to open the conference in the desktop\n * app.\n *\n * {\n *     type: OPEN_DESKTOP\n * }\n */\nexport const OPEN_DESKTOP_APP = 'OPEN_DESKTOP_APP';\n\n/**\n * The type of the action which signals to open the conference in the web app.\n *\n * {\n *     type: OPEN_WEB_APP\n * }\n */\nexport const OPEN_WEB_APP = 'OPEN_WEB_APP';\n","/**\n * The namespace of the i18n/translation keys.\n *\n * @type {string}\n */\nexport const _TNS = 'deepLinking';\n","// @flow\n\nimport ButtonGroup from '@atlaskit/button/button-group';\nimport Button from '@atlaskit/button/standard-button';\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\nimport { isSupportedBrowser } from '../../base/environment';\nimport { translate } from '../../base/i18n';\nimport { connect } from '../../base/redux';\nimport {\n    openWebApp,\n    openDesktopApp\n} from '../actions';\nimport { _TNS } from '../constants';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The type of the React {@code Component} props of\n * {@link DeepLinkingDesktopPage}.\n */\n type Props = {\n\n    /**\n     * Used to dispatch actions from the buttons.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * Used to obtain translations.\n     */\n    t: Function\n};\n\n/**\n * React component representing the deep linking page.\n *\n * @class DeepLinkingDesktopPage\n */\nclass DeepLinkingDesktopPage<P : Props> extends Component<P> {\n    /**\n     * Initializes a new {@code DeepLinkingDesktopPage} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: P) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onLaunchWeb = this._onLaunchWeb.bind(this);\n        this._onTryAgain = this._onTryAgain.bind(this);\n    }\n\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'DeepLinkingDesktop', { isMobileBrowser: false }));\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const { t } = this.props;\n        const { HIDE_DEEP_LINKING_LOGO, NATIVE_APP_NAME, SHOW_DEEP_LINKING_IMAGE } = interfaceConfig;\n        const rightColumnStyle\n            = SHOW_DEEP_LINKING_IMAGE ? null : { width: '100%' };\n\n        return (\n\n            // Enabling light theme because of the color of the buttons.\n            <AtlasKitThemeProvider mode = 'light'>\n                <div className = 'deep-linking-desktop'>\n                    <div className = 'header'>\n                        {\n                            HIDE_DEEP_LINKING_LOGO\n                                ? null\n                                : <img\n                                    alt = { t('welcomepage.logo.logoDeepLinking') }\n                                    className = 'logo'\n                                    src = 'images/logo-deep-linking.png' />\n                        }\n                    </div>\n                    <div className = 'content'>\n                        {\n                            SHOW_DEEP_LINKING_IMAGE\n                                ? <div className = 'leftColumn'>\n                                    <div className = 'leftColumnContent'>\n                                        <div className = 'image' />\n                                    </div>\n                                </div> : null\n                        }\n                        <div\n                            className = 'rightColumn'\n                            style = { rightColumnStyle }>\n                            <div className = 'rightColumnContent'>\n                                <h1 className = 'title'>\n                                    {\n                                        t(`${_TNS}.title`,\n                                        { app: NATIVE_APP_NAME })\n                                    }\n                                </h1>\n                                <p className = 'description'>\n                                    {\n                                        t(\n                                            `${_TNS}.${isSupportedBrowser()\n                                                ? 'description'\n                                                : 'descriptionWithoutWeb'}`,\n                                            { app: NATIVE_APP_NAME }\n                                        )\n                                    }\n                                </p>\n                                <div className = 'buttons'>\n                                    <ButtonGroup>\n                                        <Button\n                                            appearance = 'default'\n                                            onClick = { this._onTryAgain }>\n                                            { t(`${_TNS}.tryAgainButton`) }\n                                        </Button>\n                                        {\n                                            isSupportedBrowser()\n                                                && <Button onClick = { this._onLaunchWeb }>\n                                                    { t(`${_TNS}.launchWebButton`) }\n                                                </Button>\n                                        }\n                                    </ButtonGroup>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </AtlasKitThemeProvider>\n        );\n    }\n\n    _onTryAgain: () => void;\n\n    /**\n     * Handles try again button clicks.\n     *\n     * @returns {void}\n     */\n    _onTryAgain() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'tryAgainButton', { isMobileBrowser: false }));\n        this.props.dispatch(openDesktopApp());\n    }\n\n    _onLaunchWeb: () => void;\n\n    /**\n     * Handles launch web button clicks.\n     *\n     * @returns {void}\n     */\n    _onLaunchWeb() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'launchWebButton', { isMobileBrowser: false }));\n        this.props.dispatch(openWebApp());\n    }\n}\n\nexport default translate(connect()(DeepLinkingDesktopPage));\n","// @flow\n\nimport React, { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\nimport { isSupportedMobileBrowser } from '../../base/environment';\nimport { translate } from '../../base/i18n';\nimport { Platform } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { DialInSummary } from '../../invite';\nimport { openWebApp } from '../actions';\nimport { _TNS } from '../constants';\nimport { generateDeepLinkingURL } from '../functions';\nimport { renderPromotionalFooter } from '../renderPromotionalFooter';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The namespace of the CSS styles of DeepLinkingMobilePage.\n *\n * @private\n * @type {string}\n */\nconst _SNS = 'deep-linking-mobile';\n\n/**\n * The type of the React {@code Component} props of\n * {@link DeepLinkingMobilePage}.\n */\ntype Props = {\n\n    /**\n     * Application download URL.\n     */\n    _downloadUrl: ?string,\n\n    /**\n     * The name of the conference attempting to being joined.\n     */\n    _room: string,\n\n    /**\n     * Used to dispatch actions from the buttons.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component representing mobile browser page.\n *\n * @class DeepLinkingMobilePage\n */\nclass DeepLinkingMobilePage extends Component<Props> {\n    /**\n     * Initializes a new {@code DeepLinkingMobilePage} instance.\n     *\n     * @param {Object} props - The read-only React {@code Component} props with\n     * which the new instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onDownloadApp = this._onDownloadApp.bind(this);\n        this._onLaunchWeb = this._onLaunchWeb.bind(this);\n        this._onOpenApp = this._onOpenApp.bind(this);\n    }\n\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'DeepLinkingMobile', { isMobileBrowser: true }));\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { _downloadUrl, _room, t } = this.props;\n        const { HIDE_DEEP_LINKING_LOGO, NATIVE_APP_NAME, SHOW_DEEP_LINKING_IMAGE } = interfaceConfig;\n        const downloadButtonClassName\n            = `${_SNS}__button ${_SNS}__button_primary`;\n\n\n        const onOpenLinkProperties = _downloadUrl\n            ? {\n                // When opening a link to the download page, we want to let the\n                // OS itself handle intercepting and opening the appropriate\n                // app store. This avoids potential issues with browsers, such\n                // as iOS Chrome, not opening the store properly.\n            }\n            : {\n                // When falling back to another URL (Firebase) let the page be\n                // opened in a new window. This helps prevent the user getting\n                // trapped in an app-open-cycle where going back to the mobile\n                // browser re-triggers the app-open behavior.\n                target: '_blank',\n                rel: 'noopener noreferrer'\n            };\n\n        return (\n            <div className = { _SNS }>\n                <div className = 'header'>\n                    {\n                        HIDE_DEEP_LINKING_LOGO\n                            ? null\n                            : <img\n                                alt = { t('welcomepage.logo.logoDeepLinking') }\n                                className = 'logo'\n                                src = 'images/logo-deep-linking.png' />\n                    }\n                </div>\n                <div className = { `${_SNS}__body` }>\n                    {\n                        SHOW_DEEP_LINKING_IMAGE\n                            ? <img\n                                alt = { t('welcomepage.logo.logoDeepLinking') }\n                                className = 'image'\n                                src = 'images/deep-linking-image.png' />\n                            : null\n                    }\n                    <p className = { `${_SNS}__text` }>\n                        { t(`${_TNS}.appNotInstalled`, { app: NATIVE_APP_NAME }) }\n                    </p>\n                    <p className = { `${_SNS}__text` }>\n                        { t(`${_TNS}.ifHaveApp`) }\n                    </p>\n                    <a\n                        { ...onOpenLinkProperties }\n                        className = { `${_SNS}__href` }\n                        href = { generateDeepLinkingURL() }\n                        onClick = { this._onOpenApp }\n                        target = '_top'>\n                        <button className = { `${_SNS}__button ${_SNS}__button_primary` }>\n                            { t(`${_TNS}.joinInApp`) }\n                        </button>\n                    </a>\n                    <p className = { `${_SNS}__text` }>\n                        { t(`${_TNS}.ifDoNotHaveApp`) }\n                    </p>\n                    <a\n                        { ...onOpenLinkProperties }\n                        href = { this._generateDownloadURL() }\n                        onClick = { this._onDownloadApp }\n                        target = '_top'>\n                        <button className = { downloadButtonClassName }>\n                            { t(`${_TNS}.downloadApp`) }\n                        </button>\n                    </a>\n                    {\n                        isSupportedMobileBrowser()\n                            && <a\n                                onClick = { this._onLaunchWeb }\n                                target = '_top'>\n                                <button className = { downloadButtonClassName }>\n                                    { t(`${_TNS}.launchWebButton`) }\n                                </button>\n                            </a>\n                    }\n                    { renderPromotionalFooter() }\n                    <DialInSummary\n                        className = 'deep-linking-dial-in'\n                        clickableNumbers = { true }\n                        room = { _room } />\n                </div>\n            </div>\n        );\n    }\n\n    /**\n     * Generates the URL for downloading the app.\n     *\n     * @private\n     * @returns {string} - The URL for downloading the app.\n     */\n    _generateDownloadURL() {\n        const { _downloadUrl: url } = this.props;\n\n        if (url && typeof interfaceConfig.MOBILE_DYNAMIC_LINK === 'undefined') {\n            return url;\n        }\n\n        // For information about the properties of\n        // interfaceConfig.MOBILE_DYNAMIC_LINK check:\n        // https://firebase.google.com/docs/dynamic-links/create-manually\n        const {\n            APN = 'org.jitsi.meet',\n            APP_CODE = 'w2atb',\n            CUSTOM_DOMAIN = undefined,\n            IBI = 'com.atlassian.JitsiMeet.ios',\n            ISI = '1165103905'\n        } = interfaceConfig.MOBILE_DYNAMIC_LINK || {};\n\n        const domain = CUSTOM_DOMAIN ?? `https://${APP_CODE}.app.goo.gl`;\n        const IUS = interfaceConfig.APP_SCHEME || 'org.jitsi.meet';\n\n        return `${domain}/?link=${\n            encodeURIComponent(window.location.href)}&apn=${\n            APN}&ibi=${\n            IBI}&isi=${\n            ISI}&ius=${\n            IUS}&efr=1`;\n    }\n\n    _onDownloadApp: () => void;\n\n    /**\n     * Handles download app button clicks.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onDownloadApp() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'downloadAppButton', { isMobileBrowser: true }));\n    }\n\n    _onLaunchWeb: () => void;\n\n    /**\n     * Handles launch web button clicks.\n     *\n     * @returns {void}\n     */\n    _onLaunchWeb() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'launchWebButton', { isMobileBrowser: true }));\n        this.props.dispatch(openWebApp());\n    }\n\n    _onOpenApp: () => void;\n\n    /**\n     * Handles open app button clicks.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onOpenApp() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'clicked', 'openAppButton', { isMobileBrowser: true }));\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code DeepLinkingMobilePage} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    return {\n        _downloadUrl: interfaceConfig[`MOBILE_DOWNLOAD_LINK_${Platform.OS.toUpperCase()}`],\n        _room: decodeURIComponent(state['features/base/conference'].room)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(DeepLinkingMobilePage));\n","// @flow\n/**\n * Method used in order to render a custom promotional footer.\n *\n * @returns {HTMLElement}\n */\nexport function renderPromotionalFooter() {\n    return null;\n}\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { createDeepLinkingPageEvent, sendAnalytics } from '../../analytics';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * React component representing no mobile app page.\n *\n * @class NoMobileApp\n */\nexport default class NoMobileApp extends Component<*> {\n    /**\n     * Implements the Component's componentDidMount method.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        sendAnalytics(\n            createDeepLinkingPageEvent(\n                'displayed', 'noMobileApp', { isMobileBrowser: true }));\n    }\n\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        const ns = 'no-mobile-app';\n\n        return (\n            <div className = { ns }>\n                <h2 className = { `${ns}__title` }>\n                    Video chat isn't available on mobile.\n                </h2>\n                <p className = { `${ns}__description` }>\n                    Please use { interfaceConfig.NATIVE_APP_NAME } on desktop to\n                    join calls.\n                </p>\n            </div>\n        );\n    }\n}\n","// @flow\n\n/**\n * Opens the desktop app.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<boolean>} - Resolves with true if the attempt to open the desktop app was successful and resolves\n * with false otherwise.\n */\nexport function _openDesktopApp(state: Object) { // eslint-disable-line no-unused-vars\n    return Promise.resolve(false);\n}\n","/* global interfaceConfig */\n\nimport { isMobileBrowser } from '../base/environment/utils';\nimport { Platform } from '../base/react';\nimport { URI_PROTOCOL_PATTERN } from '../base/util';\nimport { isVpaasMeeting } from '../jaas/functions';\n\nimport {\n    DeepLinkingDesktopPage,\n    DeepLinkingMobilePage,\n    NoMobileApp\n} from './components';\nimport { _openDesktopApp } from './openDesktopApp';\n\n/**\n * Generates a deep linking URL based on the current window URL.\n *\n * @returns {string} - The generated URL.\n */\nexport function generateDeepLinkingURL() {\n    // If the user installed the app while this Component was displayed\n    // (e.g. the user clicked the Download the App button), then we would\n    // like to open the current URL in the mobile app. The only way to do it\n    // appears to be a link with an app-specific scheme, not a Universal\n    // Link.\n\n    const appScheme = interfaceConfig.APP_SCHEME || 'org.jitsi.meet';\n    const { href } = window.location;\n    const regex = new RegExp(URI_PROTOCOL_PATTERN, 'gi');\n\n    // Android: use an intent link, custom schemes don't work in all browsers.\n    // https://developer.chrome.com/multidevice/android/intents\n    if (Platform.OS === 'android') {\n        // https://meet.jit.si/foo -> meet.jit.si/foo\n        const url = href.replace(regex, '').substr(2);\n        const pkg = interfaceConfig.ANDROID_APP_PACKAGE || 'org.jitsi.meet';\n\n        return `intent://${url}#Intent;scheme=${appScheme};package=${pkg};end`;\n    }\n\n    // iOS: Replace the protocol part with the app scheme.\n    return href.replace(regex, `${appScheme}:`);\n}\n\n/**\n * Resolves with the component that should be displayed if the deep linking page\n * should be shown and with <tt>undefined</tt> otherwise.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<Component>}\n */\nexport function getDeepLinkingPage(state) {\n    const { room } = state['features/base/conference'];\n    const { launchInWeb } = state['features/deep-linking'];\n    const appScheme = typeof interfaceConfig !== 'undefined' && interfaceConfig.APP_SCHEME;\n\n    // Show only if we are about to join a conference.\n    if (launchInWeb\n            || !room\n            || state['features/base/config'].disableDeepLinking\n            || (isVpaasMeeting(state) && (!appScheme || appScheme === 'com.8x8.meet'))) {\n        return Promise.resolve();\n    }\n\n    if (isMobileBrowser()) { // mobile\n        const mobileAppPromo\n            = typeof interfaceConfig === 'object'\n                && interfaceConfig.MOBILE_APP_PROMO;\n\n        return Promise.resolve(\n            typeof mobileAppPromo === 'undefined' || Boolean(mobileAppPromo)\n                ? DeepLinkingMobilePage : NoMobileApp);\n    }\n\n    return _openDesktopApp(state).then(\n        // eslint-disable-next-line no-confusing-arrow\n        result => result ? DeepLinkingDesktopPage : undefined);\n}\n\n/**\n * Opens the desktop app.\n *\n * @param {Object} state - Object containing current redux state.\n * @returns {Promise<boolean>} - Resolves with true if the attempt to open the desktop app was successful and resolves\n * with false otherwise.\n */\nexport function openDesktopApp(state) {\n    return _openDesktopApp(state);\n}\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { OPEN_DESKTOP_APP } from './actionTypes';\nimport { openDesktopApp } from './functions';\n\n/**\n * Implements the middleware of the deep linking feature.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case OPEN_DESKTOP_APP:\n        openDesktopApp(store.getState());\n        break;\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { UPDATE_DEVICE_LIST } from '../base/devices';\nimport { MiddlewareRegistry } from '../base/redux';\n\ndeclare var APP: Object;\n\n/**\n * Implements the middleware of the feature device-selection.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    if (action.type === UPDATE_DEVICE_LIST) {\n        const state = store.getState();\n        const { availableDevices } = state['features/base/devices'] || {};\n\n        if (typeof APP !== 'undefined') {\n            APP.API.notifyDeviceListChanged(availableDevices);\n        }\n    }\n\n    return result;\n});\n","// @flow\n\nimport { hideDialog, isDialogOpen } from '../base/dialog';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { SETTINGS_UPDATED } from '../base/settings';\n\nimport { DisplayNamePrompt } from './components';\n\n/**\n * Middleware that captures actions related to display name setting.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case SETTINGS_UPDATED: {\n        if (action.settings.displayName\n            && isDialogOpen(getState, DisplayNamePrompt)) {\n            dispatch(hideDialog(DisplayNamePrompt));\n        }\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport UIEvents from '../../../service/UI/UIEvents';\nimport { getCurrentConference } from '../base/conference';\nimport { setActiveModalId } from '../base/modal';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\n\nimport { TOGGLE_DOCUMENT_EDITING } from './actionTypes';\nimport { setDocumentEditingState, setDocumentUrl } from './actions';\nimport { SHARE_DOCUMENT_VIEW_ID } from './constants';\n\ndeclare var APP: Object;\n\nconst ETHERPAD_COMMAND = 'etherpad';\n\n/**\n * Middleware that captures actions related to collaborative document editing\n * and notifies components not hooked into redux.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    switch (action.type) {\n    case TOGGLE_DOCUMENT_EDITING: {\n        if (typeof APP === 'undefined') {\n            const editing = !getState()['features/etherpad'].editing;\n\n            dispatch(setDocumentEditingState(editing));\n\n            if (editing) {\n                dispatch(setActiveModalId(SHARE_DOCUMENT_VIEW_ID));\n            } else if (getState()['features/base/modal'].activeModalId === SHARE_DOCUMENT_VIEW_ID) {\n                dispatch(setActiveModalId(undefined));\n            }\n        } else {\n            APP.UI.emitEvent(UIEvents.ETHERPAD_CLICKED);\n        }\n        break;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed, e.g. clear messages or close the chat modal if it's left\n * open.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch, getState }, previousConference) => {\n        if (conference) {\n            conference.addCommandListener(ETHERPAD_COMMAND,\n                ({ value }) => {\n                    let url;\n                    const { etherpad_base: etherpadBase } = getState()['features/base/config'];\n\n                    if (etherpadBase) {\n                        const u = new URL(value, etherpadBase);\n\n                        url = u.toString();\n                    }\n\n                    dispatch(setDocumentUrl(url));\n                }\n            );\n        }\n\n        if (previousConference) {\n            dispatch(setDocumentUrl(undefined));\n        }\n    });\n","// @flow\n\nimport { getParticipantCountWithFake } from '../base/participants';\nimport { StateListenerRegistry, equals } from '../base/redux';\nimport { clientResized } from '../base/responsive-ui';\nimport { setFilmstripVisible } from '../filmstrip/actions';\nimport { getParticipantsPaneOpen } from '../participants-pane/functions';\nimport { setOverflowDrawer } from '../toolbox/actions.web';\nimport { getCurrentLayout, getTileViewGridDimensions, shouldDisplayTileView, LAYOUTS } from '../video-layout';\n\nimport { setHorizontalViewDimensions, setTileViewDimensions, setVerticalViewDimensions } from './actions.web';\nimport {\n    ASPECT_RATIO_BREAKPOINT,\n    DISPLAY_DRAWER_THRESHOLD,\n    SINGLE_COLUMN_BREAKPOINT,\n    TWO_COLUMN_BREAKPOINT\n} from './constants';\n\n/**\n * Listens for changes in the number of participants to calculate the dimensions of the tile view grid and the tiles.\n */\nStateListenerRegistry.register(\n    /* selector */ getParticipantCountWithFake,\n    /* listener */ (numberOfParticipants, store) => {\n        const state = store.getState();\n\n        if (shouldDisplayTileView(state)) {\n            const gridDimensions = getTileViewGridDimensions(state);\n            const oldGridDimensions = state['features/filmstrip'].tileViewDimensions.gridDimensions;\n\n            if (!equals(gridDimensions, oldGridDimensions)) {\n                store.dispatch(setTileViewDimensions(gridDimensions));\n            }\n        }\n    });\n\n/**\n * Listens for changes in the selected layout to calculate the dimensions of the tile view grid and horizontal view.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentLayout(state),\n    /* listener */ (layout, store) => {\n        const state = store.getState();\n\n        switch (layout) {\n        case LAYOUTS.TILE_VIEW:\n            store.dispatch(setTileViewDimensions(getTileViewGridDimensions(state)));\n            break;\n        case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW:\n            store.dispatch(setHorizontalViewDimensions());\n            break;\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            store.dispatch(setVerticalViewDimensions());\n            break;\n        }\n    });\n\n/**\n * Listens for changes in the chat state to recompute available width.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/chat'].isOpen,\n    /* listener */ (isChatOpen, store) => {\n        const { innerWidth, innerHeight } = window;\n\n        if (isChatOpen) {\n            // $FlowFixMe\n            document.body.classList.add('shift-right');\n        } else {\n            // $FlowFixMe\n            document.body.classList.remove('shift-right');\n        }\n\n        store.dispatch(clientResized(innerWidth, innerHeight));\n    });\n\n/**\n * Listens for changes in the participant pane state to calculate the\n * dimensions of the tile view grid and the tiles.\n */\nStateListenerRegistry.register(\n    /* selector */ getParticipantsPaneOpen,\n    /* listener */ (isOpen, store) => {\n        const { innerWidth, innerHeight } = window;\n\n        store.dispatch(clientResized(innerWidth, innerHeight));\n    });\n\n\n/**\n * Listens for changes in the client width to determine whether the overflow menu(s) should be displayed as drawers.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/responsive-ui'].clientWidth < DISPLAY_DRAWER_THRESHOLD,\n    /* listener */ (widthBelowThreshold, store) => {\n        store.dispatch(setOverflowDrawer(widthBelowThreshold));\n    });\n\n/**\n * Gracefully hide/show the filmstrip when going past threshold.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/responsive-ui'].clientWidth < ASPECT_RATIO_BREAKPOINT,\n    /* listener */ (widthBelowThreshold, store) => {\n        const state = store.getState();\n        const { disableFilmstripAutohiding } = state['features/base/config'];\n\n        if (!disableFilmstripAutohiding) {\n            store.dispatch(setFilmstripVisible(!widthBelowThreshold));\n        }\n    });\n\n/**\n * Symbol mapping used for the tile view responsiveness computation.\n */\nconst responsiveColumnMapping = {\n    multipleColumns: Symbol('multipleColumns'),\n    singleColumn: Symbol('singleColumn'),\n    twoColumns: Symbol('twoColumns'),\n    twoParticipantsSingleColumn: Symbol('twoParticipantsSingleColumn')\n};\n\n/**\n * Listens for changes in the screen size to recompute\n * the dimensions of the tile view grid and the tiles for responsiveness.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const { clientWidth } = state['features/base/responsive-ui'];\n\n        if (clientWidth < TWO_COLUMN_BREAKPOINT && clientWidth >= ASPECT_RATIO_BREAKPOINT) {\n            // Forcing the recomputation of tiles when screen switches in or out of\n            // the (TWO_COLUMN_BREAKPOINT, ASPECT_RATIO_BREAKPOINT] interval.\n            return responsiveColumnMapping.twoColumns;\n        } else if (clientWidth < ASPECT_RATIO_BREAKPOINT && clientWidth >= SINGLE_COLUMN_BREAKPOINT) {\n            // Forcing the recomputation of tiles when screen switches in or out of\n            // the (ASPECT_RATIO_BREAKPOINT, SINGLE_COLUMN_BREAKPOINT] interval.\n            return responsiveColumnMapping.twoParticipantsSingleColumn;\n        } else if (clientWidth < SINGLE_COLUMN_BREAKPOINT) {\n            // Forcing the recomputation of tiles when screen switches below SINGLE_COLUMN_BREAKPOINT.\n            return responsiveColumnMapping.singleColumn;\n        }\n\n        // Forcing the recomputation of tiles when screen switches above TWO_COLUMN_BREAKPOINT.\n        return responsiveColumnMapping.multipleColumns;\n    },\n    /* listener */ (_, store) => {\n        const state = store.getState();\n\n        if (shouldDisplayTileView(state)) {\n            const gridDimensions = getTileViewGridDimensions(state);\n\n            store.dispatch(setTileViewDimensions(gridDimensions));\n        }\n    });\n","// @flow\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { CLIENT_RESIZED } from '../base/responsive-ui';\nimport { SETTINGS_UPDATED } from '../base/settings';\nimport {\n    getCurrentLayout,\n    LAYOUTS\n} from '../video-layout';\n\nimport { setHorizontalViewDimensions, setTileViewDimensions, setVerticalViewDimensions } from './actions.web';\n\nimport './subscriber.web';\n\n/**\n * The middleware of the feature Filmstrip.\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CLIENT_RESIZED: {\n        const state = store.getState();\n        const layout = getCurrentLayout(state);\n\n        switch (layout) {\n        case LAYOUTS.TILE_VIEW: {\n            const { gridDimensions } = state['features/filmstrip'].tileViewDimensions;\n\n            store.dispatch(setTileViewDimensions(gridDimensions));\n            break;\n        }\n        case LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW:\n            store.dispatch(setHorizontalViewDimensions());\n            break;\n\n        case LAYOUTS.VERTICAL_FILMSTRIP_VIEW:\n            store.dispatch(setVerticalViewDimensions());\n            break;\n        }\n        break;\n    }\n    case SETTINGS_UPDATED: {\n        if (typeof action.settings?.localFlipX === 'boolean') {\n            // TODO: This needs to be removed once the large video is Reactified.\n            VideoLayout.onLocalFlipXChanged();\n        }\n        break;\n    }\n    }\n\n    return result;\n});\n\n","// @flow\n\nimport {\n    SET_FOLLOW_ME_MODERATOR,\n    SET_FOLLOW_ME_STATE\n} from './actionTypes';\n\n/**\n * Sets the current moderator id or clears it.\n *\n * @param {?string} id - The Follow Me moderator participant id.\n * @returns {{\n *     type: SET_FOLLOW_ME_MODERATOR,\n *     id, string\n * }}\n */\nexport function setFollowMeModerator(id: ?string) {\n    return {\n        type: SET_FOLLOW_ME_MODERATOR,\n        id\n    };\n}\n\n/**\n * Sets the Follow Me feature state.\n *\n * @param {?Object} state - The current state.\n * @returns {{\n *     type: SET_FOLLOW_ME_STATE,\n *     state: Object\n * }}\n */\nexport function setFollowMeState(state: ?Object) {\n    return {\n        type: SET_FOLLOW_ME_STATE,\n        state\n    };\n}\n","// @flow\n\n/**\n * The id of the Follow Me moderator.\n *\n * {\n *     type: SET_FOLLOW_ME_MODERATOR,\n *     id: boolean\n * }\n */\nexport const SET_FOLLOW_ME_MODERATOR = 'SET_FOLLOW_ME_MODERATOR';\n\n/**\n * The type of (redux) action which updates the current known state of the\n * Follow Me feature.\n *\n *\n * {\n *     type: SET_FOLLOW_ME_STATE,\n *     state: boolean\n * }\n */\nexport const SET_FOLLOW_ME_STATE = 'SET_FOLLOW_ME_STATE';\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/follow-me');\n","// @flow\n\nimport { getCurrentConference } from '../base/conference';\nimport {\n    getPinnedParticipant,\n    isLocalParticipantModerator\n} from '../base/participants';\nimport { StateListenerRegistry } from '../base/redux';\nimport { shouldDisplayTileView } from '../video-layout/functions';\n\nimport { FOLLOW_ME_COMMAND } from './constants';\n\n/**\n * Subscribes to changes to the Follow Me setting for the local participant to\n * notify remote participants of current user interface status.\n * Changing newSelectedValue param to off, when feature is turned of so we can\n * notify all listeners.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/conference'].followMeEnabled,\n    /* listener */ (newSelectedValue, store) => _sendFollowMeCommand(newSelectedValue || 'off', store));\n\n/**\n * Subscribes to changes to the currently pinned participant in the user\n * interface of the local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const pinnedParticipant = getPinnedParticipant(state);\n\n        return pinnedParticipant ? pinnedParticipant.id : null;\n    },\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the shared document (etherpad) visibility in the\n * user interface of the local participant.\n *\n * @param sharedDocumentVisible {Boolean} {true} if the shared document was\n * shown (as a result of the toggle) or {false} if it was hidden\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/etherpad'].editing,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the filmstrip visibility in the user interface of\n * the local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/filmstrip'].visible,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Subscribes to changes to the tile view setting in the user interface of the\n * local participant.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/video-layout'].tileViewEnabled,\n    /* listener */ _sendFollowMeCommand);\n\n/**\n * Private selector for returning state from redux that should be respected by\n * other participants while follow me is enabled.\n *\n * @param {Object} state - The redux state.\n * @returns {Object}\n */\nfunction _getFollowMeState(state) {\n    const pinnedParticipant = getPinnedParticipant(state);\n\n    return {\n        filmstripVisible: state['features/filmstrip'].visible,\n        nextOnStage: pinnedParticipant && pinnedParticipant.id,\n        sharedDocumentVisible: state['features/etherpad'].editing,\n        tileViewEnabled: shouldDisplayTileView(state)\n    };\n}\n\n/**\n * Sends the follow-me command, when a local property change occurs.\n *\n * @param {*} newSelectedValue - The changed selected value from the selector.\n * @param {Object} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _sendFollowMeCommand(\n        newSelectedValue, store) { // eslint-disable-line no-unused-vars\n    const state = store.getState();\n    const conference = getCurrentConference(state);\n\n    if (!conference) {\n        return;\n    }\n\n    // Only a moderator is allowed to send commands.\n    if (!isLocalParticipantModerator(state)) {\n        return;\n    }\n\n    if (newSelectedValue === 'off') {\n        // if the change is to off, local user turned off follow me and\n        // we want to signal this\n\n        conference.sendCommandOnce(\n            FOLLOW_ME_COMMAND,\n            { attributes: { off: true } }\n        );\n\n        return;\n    } else if (!state['features/base/conference'].followMeEnabled) {\n        return;\n    }\n\n    conference.sendCommand(\n        FOLLOW_ME_COMMAND,\n        { attributes: _getFollowMeState(state) }\n    );\n}\n","/**\n * The (name of the) command which transports the state (represented by\n * {State} for the local state at the time of this writing) of a {FollowMe}\n * (instance) between participants.\n */\nexport const FOLLOW_ME_COMMAND = 'follow-me';\n","// @flow\n\nimport { CONFERENCE_WILL_JOIN } from '../base/conference/actionTypes';\nimport {\n    getParticipantById,\n    getPinnedParticipant,\n    PARTICIPANT_LEFT,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { setFilmstripVisible } from '../filmstrip';\nimport { setTileView } from '../video-layout';\n\nimport {\n    setFollowMeModerator,\n    setFollowMeState\n} from './actions';\nimport { FOLLOW_ME_COMMAND } from './constants';\nimport { isFollowMeActive } from './functions';\nimport logger from './logger';\n\nimport './subscriber';\n\ndeclare var APP: Object;\n\n/**\n * The timeout after which a follow-me command that has been received will be\n * ignored if not consumed.\n *\n * @type {number} in seconds\n * @private\n */\nconst _FOLLOW_ME_RECEIVED_TIMEOUT = 30;\n\n/**\n * An instance of a timeout used as a workaround when attempting to pin a\n * non-existent particapant, which may be caused by participant join information\n * not being received yet.\n *\n * @type {TimeoutID}\n */\nlet nextOnStageTimeout;\n\n/**\n * A count of how many seconds the nextOnStageTimeout has ticked while waiting\n * for a participant to be discovered that should be pinned. This variable\n * works in conjunction with {@code _FOLLOW_ME_RECEIVED_TIMEOUT} and\n * {@code nextOnStageTimeout}.\n *\n * @type {number}\n */\nlet nextOnStageTimer = 0;\n\n/**\n * Represents \"Follow Me\" feature which enables a moderator to (partially)\n * control the user experience/interface (e.g. filmstrip visibility) of (other)\n * non-moderator participant.\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN: {\n        const { conference } = action;\n\n        conference.addCommandListener(\n            FOLLOW_ME_COMMAND, ({ attributes }, id) => {\n                _onFollowMeCommand(attributes, id, store);\n            });\n        break;\n    }\n    case PARTICIPANT_LEFT:\n        if (store.getState()['features/follow-me'].moderator === action.participant.id) {\n            store.dispatch(setFollowMeModerator());\n        }\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies this instance about a \"Follow Me\" command received by the Jitsi\n * conference.\n *\n * @param {Object} attributes - The attributes carried by the command.\n * @param {string} id - The identifier of the participant who issuing the\n * command. A notable idiosyncrasy to be mindful of here is that the command\n * may be issued by the local participant.\n * @param {Object} store - The redux store. Used to calculate and dispatch\n * updates.\n * @private\n * @returns {void}\n */\nfunction _onFollowMeCommand(attributes = {}, id, store) {\n    const state = store.getState();\n\n    // We require to know who issued the command because (1) only a\n    // moderator is allowed to send commands and (2) a command MUST be\n    // issued by a defined commander.\n    if (typeof id === 'undefined') {\n        return;\n    }\n\n    const participantSendingCommand = getParticipantById(state, id);\n\n    // The Command(s) API will send us our own commands and we don't want\n    // to act upon them.\n    if (participantSendingCommand.local) {\n        return;\n    }\n\n    if (participantSendingCommand.role !== 'moderator') {\n        logger.warn('Received follow-me command not from moderator');\n\n        return;\n    }\n\n    if (!isFollowMeActive(state)) {\n        store.dispatch(setFollowMeModerator(id));\n    }\n\n    // just a command that follow me was turned off\n    if (attributes.off) {\n        store.dispatch(setFollowMeModerator());\n\n        return;\n    }\n\n    const oldState = state['features/follow-me'].state || {};\n\n    store.dispatch(setFollowMeState(attributes));\n\n    // XMPP will translate all booleans to strings, so explicitly check against\n    // the string form of the boolean {@code true}.\n    if (oldState.filmstripVisible !== attributes.filmstripVisible) {\n        store.dispatch(setFilmstripVisible(attributes.filmstripVisible === 'true'));\n    }\n\n    if (oldState.tileViewEnabled !== attributes.tileViewEnabled) {\n        store.dispatch(setTileView(attributes.tileViewEnabled === 'true'));\n    }\n\n    // For now gate etherpad checks behind a web-app check to be extra safe\n    // against calling a web-app global.\n    if (typeof APP !== 'undefined'\n        && oldState.sharedDocumentVisible !== attributes.sharedDocumentVisible) {\n        const isEtherpadVisible = attributes.sharedDocumentVisible === 'true';\n        const documentManager = APP.UI.getSharedDocumentManager();\n\n        if (documentManager\n                && isEtherpadVisible !== state['features/etherpad'].editing) {\n            documentManager.toggleEtherpad();\n        }\n    }\n\n    const pinnedParticipant = getPinnedParticipant(state);\n    const idOfParticipantToPin = attributes.nextOnStage;\n\n    if (typeof idOfParticipantToPin !== 'undefined'\n            && (!pinnedParticipant || idOfParticipantToPin !== pinnedParticipant.id)\n            && oldState.nextOnStage !== attributes.nextOnStage) {\n        _pinVideoThumbnailById(store, idOfParticipantToPin);\n    } else if (typeof idOfParticipantToPin === 'undefined' && pinnedParticipant) {\n        store.dispatch(pinParticipant(null));\n    }\n}\n\n/**\n * Pins the video thumbnail given by clickId.\n *\n * @param {Object} store - The redux store.\n * @param {string} clickId - The identifier of the participant to pin.\n * @private\n * @returns {void}\n */\nfunction _pinVideoThumbnailById(store, clickId) {\n    if (getParticipantById(store.getState(), clickId)) {\n        clearTimeout(nextOnStageTimeout);\n        nextOnStageTimer = 0;\n\n        store.dispatch(pinParticipant(clickId));\n    } else {\n        nextOnStageTimeout = setTimeout(() => {\n            if (nextOnStageTimer > _FOLLOW_ME_RECEIVED_TIMEOUT) {\n                nextOnStageTimer = 0;\n\n                return;\n            }\n\n            nextOnStageTimer++;\n\n            _pinVideoThumbnailById(store, clickId);\n        }, 1000);\n    }\n}\n","import {\n    OUTGOING_CALL_EXPIRED_SOUND_ID,\n    OUTGOING_CALL_REJECTED_SOUND_ID,\n    OUTGOING_CALL_RINGING_SOUND_ID,\n    OUTGOING_CALL_START_SOUND_ID\n} from './constants';\n\n/**\n * Maps the sounds IDs with the filenames sounds associated with them.\n *\n * @type {Map<string, string>}\n */\nexport const sounds = new Map([\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * expired.\n     */\n    [ OUTGOING_CALL_EXPIRED_SOUND_ID, { file: 'rejected.wav' } ],\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * rejected.\n     */\n    [ OUTGOING_CALL_REJECTED_SOUND_ID, { file: 'rejected.wav' } ],\n\n    /**\n     * The name of the sound file which will be played when the status of an\n     * outgoing call is ringing.\n     */\n    [\n        OUTGOING_CALL_RINGING_SOUND_ID,\n        {\n            file: 'outgoingRinging.wav',\n            options: { loop: true }\n        }\n    ],\n\n    /**\n     * The name of the sound file which will be played when outgoing call is\n     * started.\n     */\n    [ OUTGOING_CALL_START_SOUND_ID, { file: 'outgoingStart.wav' } ]\n]);\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport {\n    CONFERENCE_JOINED\n} from '../base/conference';\nimport {\n    getLocalParticipant,\n    getParticipantCount,\n    getParticipantPresenceStatus,\n    getRemoteParticipants,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_JOINED_SOUND_ID,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    pinParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    playSound,\n    registerSound,\n    stopSound,\n    unregisterSound\n} from '../base/sounds';\nimport {\n    CALLING,\n    CONNECTED_USER,\n    EXPIRED,\n    INVITED,\n    REJECTED,\n    RINGING\n} from '../presence-status';\n\nimport {\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED\n} from './actionTypes';\nimport {\n    invite,\n    removePendingInviteRequests,\n    setCalleeInfoVisible\n} from './actions';\nimport {\n    OUTGOING_CALL_EXPIRED_SOUND_ID,\n    OUTGOING_CALL_REJECTED_SOUND_ID,\n    OUTGOING_CALL_RINGING_SOUND_ID,\n    OUTGOING_CALL_START_SOUND_ID\n} from './constants';\nimport logger from './logger';\nimport { sounds } from './sounds';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Maps the presence status with the ID of the sound that will be played when\n * the status is received.\n */\nconst statusToRingtone = {\n    [CALLING]: OUTGOING_CALL_START_SOUND_ID,\n    [CONNECTED_USER]: PARTICIPANT_JOINED_SOUND_ID,\n    [EXPIRED]: OUTGOING_CALL_EXPIRED_SOUND_ID,\n    [INVITED]: OUTGOING_CALL_START_SOUND_ID,\n    [REJECTED]: OUTGOING_CALL_REJECTED_SOUND_ID,\n    [RINGING]: OUTGOING_CALL_RINGING_SOUND_ID\n};\n\n/**\n * The middleware of the feature invite common to mobile/react-native and\n * Web/React.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    let oldParticipantPresence;\n    const { dispatch, getState } = store;\n    const state = getState();\n\n    if (action.type === PARTICIPANT_UPDATED\n        || action.type === PARTICIPANT_LEFT) {\n        oldParticipantPresence\n            = getParticipantPresenceStatus(state, action.participant.id);\n    }\n\n    if (action.type === SET_CALLEE_INFO_VISIBLE) {\n        if (action.calleeInfoVisible) {\n            dispatch(pinParticipant(getLocalParticipant(state).id));\n        } else {\n            // unpin participant\n            dispatch(pinParticipant());\n        }\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        for (const [ soundId, sound ] of sounds.entries()) {\n            dispatch(registerSound(soundId, sound.file, sound.options));\n        }\n        break;\n\n    case APP_WILL_UNMOUNT:\n        for (const soundId of sounds.keys()) {\n            dispatch(unregisterSound(soundId));\n        }\n        break;\n\n    case CONFERENCE_JOINED:\n        _onConferenceJoined(store);\n        break;\n\n    case PARTICIPANT_JOINED:\n    case PARTICIPANT_LEFT:\n    case PARTICIPANT_UPDATED: {\n        _maybeHideCalleeInfo(action, store);\n\n        const newParticipantPresence\n            = getParticipantPresenceStatus(state, action.participant.id);\n\n        if (oldParticipantPresence === newParticipantPresence) {\n            break;\n        }\n\n        const oldSoundId\n            = oldParticipantPresence\n                && statusToRingtone[oldParticipantPresence];\n        const newSoundId\n            = newParticipantPresence\n                && statusToRingtone[newParticipantPresence];\n\n\n        if (oldSoundId === newSoundId) {\n            break;\n        }\n\n        if (oldSoundId) {\n            dispatch(stopSound(oldSoundId));\n        }\n\n        if (newSoundId) {\n            dispatch(playSound(newSoundId));\n        }\n\n        break;\n    }\n    case UPDATE_DIAL_IN_NUMBERS_FAILED:\n        logger.error(\n            'Error encountered while fetching dial-in numbers:',\n            action.error);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Hides the callee info layot if there are more than 1 real\n * (not poltergeist, shared video, etc.) participants in the call.\n *\n * @param {Object} action - The redux action.\n * @param {ReduxStore} store - The redux store.\n * @returns {void}\n */\nfunction _maybeHideCalleeInfo(action, store) {\n    const state = store.getState();\n\n    if (!state['features/invite'].calleeInfoVisible) {\n        return;\n    }\n    const participants = getRemoteParticipants(state);\n    const participantCount = getParticipantCount(state);\n    let numberOfPoltergeists = 0;\n\n    participants.forEach(p => {\n        if (p.botType === 'poltergeist') {\n            numberOfPoltergeists++;\n        }\n    });\n    const numberOfRealParticipants = participantCount - numberOfPoltergeists;\n\n    if ((numberOfPoltergeists > 1 || numberOfRealParticipants > 1)\n        || (action.type === PARTICIPANT_LEFT && participantCount === 1)) {\n        store.dispatch(setCalleeInfoVisible(false));\n    }\n}\n\n/**\n * Executes the pending invitation requests if any.\n *\n * @param {ReduxStore} store - The redux store.\n * @returns {void}\n */\nfunction _onConferenceJoined(store) {\n    const { dispatch, getState } = store;\n\n    const pendingInviteRequests\n        = getState()['features/invite'].pendingInviteRequests || [];\n\n    pendingInviteRequests.forEach(({ invitees, callback }) => {\n        dispatch(invite(invitees))\n            .then(failedInvitees => {\n                callback(failedInvitees);\n            });\n    });\n\n    dispatch(removePendingInviteRequests());\n}\n","// @flow\n\nimport { hideDialog, openDialog } from '../base/dialog';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { BEGIN_ADD_PEOPLE, HIDE_ADD_PEOPLE_DIALOG } from './actionTypes';\nimport { AddPeopleDialog } from './components';\nimport './middleware.any';\n\n/**\n * The middleware of the feature invite specific to Web/React.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case BEGIN_ADD_PEOPLE:\n        return _beginAddPeople(store, next, action);\n    case HIDE_ADD_PEOPLE_DIALOG:\n        return _hideAddPeopleDialog(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature invite that the action {@link BEGIN_ADD_PEOPLE} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code BEGIN_ADD_PEOPLE} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {*} The value returned by {@code next(action)}.\n */\nfunction _beginAddPeople({ dispatch }, next, action) {\n    const result = next(action);\n\n    dispatch(openDialog(AddPeopleDialog));\n\n    return result;\n}\n\n/**\n * Notifies the feature invite that the action {@link HIDE_ADD_PEOPLE_DIALOG} is being\n * dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code HIDE_ADD_PEOPLE_DIALOG} which is\n * being dispatched in the specified {@code store}.\n * @private\n * @returns {*} The value returned by {@code next(action)}.\n */\nfunction _hideAddPeopleDialog({ dispatch }, next, action) {\n    dispatch(hideDialog(AddPeopleDialog));\n\n    return next(action);\n}\n","import { redirectToStaticPage } from '../app/actions';\nimport { CONFERENCE_JOINED } from '../base/conference/actionTypes';\nimport { CONNECTION_FAILED } from '../base/connection';\nimport { JitsiConnectionErrors } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\n\n\nimport { SET_DETAILS } from './actionTypes';\nimport { getCustomerDetails } from './actions';\nimport { STATUSES } from './constants';\nimport { isVpaasMeeting } from './functions';\n\n/**\n * The redux middleware for jaas.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => async action => {\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        store.dispatch(getCustomerDetails());\n        break;\n    }\n\n    case CONNECTION_FAILED: {\n        const { error } = action;\n\n        if (!isVpaasMeeting(store.getState()) || !error) {\n            break;\n        }\n\n        if (error.name === JitsiConnectionErrors.PASSWORD_REQUIRED) {\n            if (error.message !== 'could not obtain public key') {\n                break;\n            }\n\n            store.dispatch(redirectToStaticPage('/static/planLimit.html'));\n        }\n        break;\n    }\n    case SET_DETAILS: {\n        const { status } = action.payload;\n\n        if (status === STATUSES.BLOCKED) {\n            store.dispatch(redirectToStaticPage('/static/planLimit.html'));\n        }\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/large-video');\n","// @flow\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout';\nimport { StateListenerRegistry } from '../base/redux';\n\n/**\n * Updates the on stage participant video.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/large-video'].participantId,\n    /* listener */ participantId => {\n        VideoLayout.updateLargeVideo(participantId, true);\n    }\n);\n","// @flow\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PIN_PARTICIPANT,\n    getLocalParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { isTestModeEnabled } from '../base/testing';\nimport {\n    TRACK_ADDED,\n    TRACK_REMOVED\n} from '../base/tracks';\n\nimport { selectParticipantInLargeVideo } from './actions';\nimport logger from './logger';\n\nimport './subscriber';\n\n/**\n * Middleware that catches actions related to participants and tracks and\n * dispatches an action to select a participant depicted by LargeVideo.\n *\n * @param {Store} store - Redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case DOMINANT_SPEAKER_CHANGED: {\n        const state = store.getState();\n        const localParticipant = getLocalParticipant(state);\n\n        if (isTestModeEnabled(state)) {\n            logger.info(`Dominant speaker changed event for: ${action.participant.id}`);\n        }\n\n        if (localParticipant && localParticipant.id !== action.participant.id) {\n            store.dispatch(selectParticipantInLargeVideo());\n        }\n\n        break;\n    }\n    case PARTICIPANT_JOINED:\n    case PARTICIPANT_LEFT:\n    case PIN_PARTICIPANT:\n    case TRACK_ADDED:\n    case TRACK_REMOVED:\n        store.dispatch(selectParticipantInLargeVideo());\n        break;\n    }\n\n    return result;\n});\n","// @flow\n\nimport { CONFERENCE_FAILED, CONFERENCE_JOINED } from '../base/conference';\nimport { JitsiConferenceErrors, JitsiConferenceEvents } from '../base/lib-jitsi-meet';\nimport { getFirstLoadableAvatarUrl, getParticipantDisplayName } from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { isTestModeEnabled } from '../base/testing';\nimport { NOTIFICATION_TYPE, showNotification } from '../notifications';\nimport { shouldAutoKnock } from '../prejoin/functions';\n\nimport { KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED } from './actionTypes';\nimport {\n    hideLobbyScreen,\n    knockingParticipantLeft,\n    openLobbyScreen,\n    participantIsKnockingOrUpdated,\n    setLobbyModeEnabled,\n    startKnocking,\n    setPasswordJoinFailed\n} from './actions';\n\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n        return _conferenceFailed(store, next, action);\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n    case KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED: {\n        // We need the full update result to be in the store already\n        const result = next(action);\n\n        _findLoadableAvatarForKnockingParticipant(store, action.participant);\n\n        return result;\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * Registers a change handler for state['features/base/conference'].conference to\n * set the event listeners needed for the lobby feature to operate.\n */\nStateListenerRegistry.register(\n    state => state['features/base/conference'].conference,\n    (conference, { dispatch, getState }, previousConference) => {\n        if (conference && !previousConference) {\n            conference.on(JitsiConferenceEvents.MEMBERS_ONLY_CHANGED, enabled => {\n                dispatch(setLobbyModeEnabled(enabled));\n            });\n\n            conference.on(JitsiConferenceEvents.LOBBY_USER_JOINED, (id, name) => {\n                dispatch(participantIsKnockingOrUpdated({\n                    id,\n                    name\n                }));\n            });\n\n            conference.on(JitsiConferenceEvents.LOBBY_USER_UPDATED, (id, participant) => {\n                dispatch(participantIsKnockingOrUpdated({\n                    ...participant,\n                    id\n                }));\n            });\n\n            conference.on(JitsiConferenceEvents.LOBBY_USER_LEFT, id => {\n                dispatch(knockingParticipantLeft(id));\n            });\n\n            conference.on(JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED, (origin, sender) =>\n                _maybeSendLobbyNotification(origin, sender, {\n                    dispatch,\n                    getState\n                })\n            );\n        }\n    });\n\n/**\n * Function to handle the conference failed event and navigate the user to the lobby screen\n * based on the failure reason.\n *\n * @param {Object} store - The Redux store.\n * @param {Function} next - The Redux next function.\n * @param {Object} action - The Redux action.\n * @returns {Object}\n */\nfunction _conferenceFailed({ dispatch, getState }, next, action) {\n    const { error } = action;\n    const state = getState();\n    const nonFirstFailure = Boolean(state['features/base/conference'].membersOnly);\n\n    if (error.name === JitsiConferenceErrors.MEMBERS_ONLY_ERROR) {\n        if (typeof error.recoverable === 'undefined') {\n            error.recoverable = true;\n        }\n\n        const result = next(action);\n\n        dispatch(openLobbyScreen());\n\n        if (shouldAutoKnock(state)) {\n            dispatch(startKnocking());\n        }\n\n        dispatch(setPasswordJoinFailed(nonFirstFailure));\n\n        return result;\n    }\n\n    dispatch(hideLobbyScreen());\n\n    if (error.name === JitsiConferenceErrors.CONFERENCE_ACCESS_DENIED) {\n        dispatch(showNotification({\n            appearance: NOTIFICATION_TYPE.ERROR,\n            hideErrorSupportLink: true,\n            titleKey: 'lobby.joinRejectedMessage'\n        }));\n    }\n\n    return next(action);\n}\n\n/**\n * Handles cleanup of lobby state when a conference is joined.\n *\n * @param {Object} store - The Redux store.\n * @param {Function} next - The Redux next function.\n * @param {Object} action - The Redux action.\n * @returns {Object}\n */\nfunction _conferenceJoined({ dispatch }, next, action) {\n    dispatch(hideLobbyScreen());\n\n    return next(action);\n}\n\n/**\n * Finds the loadable avatar URL and updates the participant accordingly.\n *\n * @param {Object} store - The Redux store.\n * @param {Object} participant - The knocking participant.\n * @returns {void}\n */\nfunction _findLoadableAvatarForKnockingParticipant(store, { id }) {\n    const { dispatch, getState } = store;\n    const updatedParticipant = getState()['features/lobby'].knockingParticipants.find(p => p.id === id);\n    const { disableThirdPartyRequests } = getState()['features/base/config'];\n\n    if (!disableThirdPartyRequests && updatedParticipant && !updatedParticipant.loadableAvatarUrl) {\n        getFirstLoadableAvatarUrl(updatedParticipant, store).then(loadableAvatarUrl => {\n            if (loadableAvatarUrl) {\n                dispatch(participantIsKnockingOrUpdated({\n                    loadableAvatarUrl,\n                    id\n                }));\n            }\n        });\n    }\n}\n\n/**\n * Check the endpoint message that arrived through the conference and\n * sends a lobby notification, if the message belongs to the feature.\n *\n * @param {Object} origin - The origin (initiator) of the message.\n * @param {Object} message - The actual message.\n * @param {Object} store - The Redux store.\n * @returns {void}\n */\nfunction _maybeSendLobbyNotification(origin, message, { dispatch, getState }) {\n    if (!origin?._id || message?.type !== 'lobby-notify') {\n        return;\n    }\n\n    const notificationProps: any = {\n        descriptionArguments: {\n            originParticipantName: getParticipantDisplayName(getState, origin._id),\n            targetParticipantName: message.name\n        },\n        titleKey: 'lobby.notificationTitle'\n    };\n\n    switch (message.event) {\n    case 'LOBBY-ENABLED':\n        notificationProps.descriptionKey = `lobby.notificationLobby${message.value ? 'En' : 'Dis'}abled`;\n        break;\n    case 'LOBBY-ACCESS-GRANTED':\n        notificationProps.descriptionKey = 'lobby.notificationLobbyAccessGranted';\n        break;\n    case 'LOBBY-ACCESS-DENIED':\n        notificationProps.descriptionKey = 'lobby.notificationLobbyAccessDenied';\n        break;\n    }\n\n    dispatch(showNotification(notificationProps, isTestModeEnabled(getState()) ? undefined : 5000));\n}\n","/* @flow */\n\nimport { getCurrentConference } from '../base/conference';\nimport {\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_ROLE,\n    PARTICIPANT_UPDATED,\n    getParticipantById,\n    getParticipantDisplayName\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\n\nimport {\n    clearNotifications,\n    showNotification,\n    showParticipantJoinedNotification\n} from './actions';\nimport { NOTIFICATION_TIMEOUT } from './constants';\nimport { joinLeaveNotificationsDisabled } from './functions';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Middleware that captures actions to display notifications.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case PARTICIPANT_JOINED: {\n        const result = next(action);\n        const { participant: p } = action;\n        const { dispatch, getState } = store;\n\n        if (!p.local && !joinLeaveNotificationsDisabled() && !p.isReplacing) {\n            dispatch(showParticipantJoinedNotification(\n                getParticipantDisplayName(getState, p.id)\n            ));\n        }\n\n        if (typeof interfaceConfig === 'object'\n                && !interfaceConfig.DISABLE_FOCUS_INDICATOR && p.role === PARTICIPANT_ROLE.MODERATOR) {\n            // Do not show the notification for mobile and also when the focus indicator is disabled.\n            const displayName = getParticipantDisplayName(getState, p.id);\n\n            if (!p.isReplacing) {\n                dispatch(showNotification({\n                    descriptionArguments: { to: displayName || '$t(notify.somebody)' },\n                    descriptionKey: 'notify.grantedTo',\n                    titleKey: 'notify.somebody',\n                    title: displayName\n                },\n                NOTIFICATION_TIMEOUT));\n            }\n        }\n\n        return result;\n    }\n    case PARTICIPANT_LEFT: {\n        if (!joinLeaveNotificationsDisabled()) {\n            const participant = getParticipantById(\n                store.getState(),\n                action.participant.id\n            );\n\n            if (typeof interfaceConfig === 'object'\n                && participant\n                && !participant.local\n                && !action.participant.isReplaced) {\n                store.dispatch(showNotification({\n                    descriptionKey: 'notify.disconnected',\n                    titleKey: 'notify.somebody',\n                    title: participant.name\n                }, NOTIFICATION_TIMEOUT));\n            }\n        }\n\n        return next(action);\n    }\n    case PARTICIPANT_UPDATED: {\n        if (typeof interfaceConfig === 'undefined' || interfaceConfig.DISABLE_FOCUS_INDICATOR) {\n            // Do not show the notification for mobile and also when the focus indicator is disabled.\n            return next(action);\n        }\n\n        const { id, role } = action.participant;\n        const state = store.getState();\n        const oldParticipant = getParticipantById(state, id);\n        const oldRole = oldParticipant?.role;\n\n        if (oldRole && oldRole !== role && role === PARTICIPANT_ROLE.MODERATOR) {\n            const displayName = getParticipantDisplayName(state, id);\n\n            store.dispatch(showNotification({\n                descriptionArguments: { to: displayName || '$t(notify.somebody)' },\n                descriptionKey: 'notify.grantedTo',\n                titleKey: 'notify.somebody',\n                title: displayName\n            },\n            NOTIFICATION_TIMEOUT));\n        }\n\n        return next(action);\n    }\n    }\n\n    return next(action);\n});\n\n/**\n * StateListenerRegistry provides a reliable way to detect the leaving of a\n * conference, where we need to clean up the notifications.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch }) => {\n        if (!conference) {\n            dispatch(clearNotifications());\n        }\n    }\n);\n","// @flow\n\nimport { JitsiConferenceErrors } from '../base/lib-jitsi-meet';\nimport { StateListenerRegistry } from '../base/redux';\n\nimport { setFatalError } from './actions';\n\ndeclare var APP: Object;\n\n/**\n * List of errors that are not fatal (or handled differently) so then the overlays won't kick in.\n */\nconst NON_OVERLAY_ERRORS = [\n    JitsiConferenceErrors.CONFERENCE_ACCESS_DENIED,\n    JitsiConferenceErrors.CONFERENCE_DESTROYED,\n    JitsiConferenceErrors.CONNECTION_ERROR\n];\n\n/**\n * State listener which emits the {@code fatalErrorOccurred} action which works\n * as a catch all for critical errors which have not been claimed by any other\n * feature for error recovery (the recoverable flag is not set).\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const { error: conferenceError } = state['features/base/conference'];\n        const { error: configError } = state['features/base/config'];\n        const { error: connectionError } = state['features/base/connection'];\n\n        return configError || connectionError || conferenceError;\n    },\n    /* listener */ (error, { dispatch }) => {\n        error\n            && NON_OVERLAY_ERRORS.indexOf(error.name) === -1\n            && typeof error.recoverable === 'undefined'\n            && dispatch(setFatalError(error));\n    }\n);\n","// @flow\n\nimport { batch } from 'react-redux';\n\nimport { ENDPOINT_REACTION_NAME } from '../../../modules/API/constants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { isVpaasMeeting } from '../jaas/functions';\n\nimport {\n    ADD_REACTION_BUFFER,\n    FLUSH_REACTION_BUFFER,\n    SEND_REACTIONS,\n    PUSH_REACTIONS\n} from './actionTypes';\nimport {\n    addReactionsToChat,\n    flushReactionBuffer,\n    pushReactions,\n    sendReactions,\n    setReactionQueue\n} from './actions.any';\nimport { getReactionMessageFromBuffer, getReactionsWithId, sendReactionsWebhook } from './functions.any';\n\n\ndeclare var APP: Object;\n\n/**\n * Middleware which intercepts Reactions actions to handle changes to the\n * visibility timeout of the Reactions.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const { dispatch, getState } = store;\n\n    switch (action.type) {\n    case ADD_REACTION_BUFFER: {\n        const { timeoutID, buffer } = getState()['features/reactions'];\n        const { reaction } = action;\n\n        clearTimeout(timeoutID);\n        buffer.push(reaction);\n        action.buffer = buffer;\n        action.timeoutID = setTimeout(() => {\n            dispatch(flushReactionBuffer());\n        }, 500);\n\n        break;\n    }\n\n    case FLUSH_REACTION_BUFFER: {\n        const state = getState();\n        const { buffer } = state['features/reactions'];\n\n        batch(() => {\n            dispatch(sendReactions());\n            dispatch(addReactionsToChat(getReactionMessageFromBuffer(buffer)));\n            dispatch(pushReactions(buffer));\n        });\n\n        if (isVpaasMeeting(state)) {\n            sendReactionsWebhook(state, buffer);\n        }\n\n        break;\n    }\n\n    case SEND_REACTIONS: {\n        const state = getState();\n        const { buffer } = state['features/reactions'];\n        const { conference } = state['features/base/conference'];\n\n        if (conference) {\n            conference.sendEndpointMessage('', {\n                name: ENDPOINT_REACTION_NAME,\n                reactions: buffer,\n                timestamp: Date.now()\n            });\n        }\n        break;\n    }\n\n    case PUSH_REACTIONS: {\n        const queue = store.getState()['features/reactions'].queue;\n        const reactions = action.reactions;\n\n        dispatch(setReactionQueue([ ...queue, ...getReactionsWithId(reactions) ]));\n    }\n    }\n\n    return next(action);\n});\n","/* global interfaceConfig */\n\nimport { parseURIString, safeDecodeURIComponent } from '../base/util';\n\n\n/**\n * Transforms the history list to a displayable list.\n *\n * @private\n * @param {Array<Object>} recentList - The recent list form the redux store.\n * @returns {Array<Object>}\n */\nexport function toDisplayableList(recentList) {\n    return (\n        [ ...recentList ].reverse()\n            .map(item => {\n                return {\n                    date: item.date,\n                    duration: item.duration,\n                    time: [ item.date ],\n                    title: safeDecodeURIComponent(parseURIString(item.conference).room),\n                    url: item.conference\n                };\n            }));\n}\n\n/**\n * Returns <tt>true</tt> if recent list is enabled and <tt>false</tt> otherwise.\n *\n * @returns {boolean} <tt>true</tt> if recent list is enabled and <tt>false</tt>\n * otherwise.\n */\nexport function isRecentListEnabled() {\n    return interfaceConfig.RECENT_LIST_ENABLED;\n}\n","// @flow\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport {\n    CONFERENCE_WILL_LEAVE,\n    SET_ROOM,\n    JITSI_CONFERENCE_URL_KEY\n} from '../base/conference';\nimport { addKnownDomains } from '../base/known-domains';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { parseURIString } from '../base/util';\n\nimport { _storeCurrentConference, _updateConferenceDuration } from './actions';\nimport { isRecentListEnabled } from './functions';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures joined rooms so they can be saved into\n * {@code window.localStorage}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    if (isRecentListEnabled()) {\n        switch (action.type) {\n        case APP_WILL_MOUNT:\n            return _appWillMount(store, next, action);\n\n        case CONFERENCE_WILL_LEAVE:\n            return _conferenceWillLeave(store, next, action);\n\n        case SET_ROOM:\n            return _setRoom(store, next, action);\n        }\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature recent-list that the redux action {@link APP_WILL_MOUNT}\n * is being dispatched in a specific redux store.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT} which is\n * being dispatched in the specified redux store.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _appWillMount({ dispatch, getState }, next, action) {\n    const result = next(action);\n\n    // It's an opportune time to transfer the feature recent-list's knowledge\n    // about \"known domains\" (which is local to the feature) to the feature\n    // base/known-domains (which is global to the app).\n    //\n    // XXX Since the feature recent-list predates the feature calendar-sync and,\n    // consequently, the feature known-domains, it's possible for the feature\n    // known-list to know of domains which the feature known-domains is yet to\n    // discover.\n    const knownDomains = [];\n\n    for (const { conference } of getState()['features/recent-list']) {\n        const uri = parseURIString(conference);\n        let host;\n\n        uri && (host = uri.host) && knownDomains.push(host);\n    }\n    knownDomains.length && dispatch(addKnownDomains(knownDomains));\n\n    return result;\n}\n\n/**\n * Updates the duration of the last conference stored in the list.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function.\n * @param {Action} action - The redux action {@link CONFERENCE_WILL_LEAVE}.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _conferenceWillLeave({ dispatch, getState }, next, action) {\n    const { doNotStoreRoom } = getState()['features/base/config'];\n\n    if (!doNotStoreRoom) {\n        let locationURL;\n\n        /**\n         * FIXME:\n         * It is better to use action.conference[JITSI_CONFERENCE_URL_KEY]\n         * in order to make sure we get the url the conference is leaving\n         * from (i.e. the room we are leaving from) because if the order of events\n         * is different, we cannot be guaranteed that the location URL in base\n         * connection is the url we are leaving from... not the one we are going to\n         * (the latter happens on mobile -- if we use the web implementation);\n         * however, the conference object on web does not have\n         * JITSI_CONFERENCE_URL_KEY so we cannot call it and must use the other way\n         */\n        if (typeof APP === 'undefined') {\n            locationURL = action.conference[JITSI_CONFERENCE_URL_KEY];\n        } else {\n            locationURL = getState()['features/base/connection'].locationURL;\n        }\n        dispatch(\n            _updateConferenceDuration(\n                locationURL));\n    }\n\n    return next(action);\n}\n\n/**\n * Checks if there is a current conference (upon SET_ROOM action), and saves it\n * if necessary.\n *\n * @param {Store} store - The redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function.\n * @param {Action} action - The redux action {@link SET_ROOM}.\n * @private\n * @returns {*} The result returned by {@code next(action)}.\n */\nfunction _setRoom({ dispatch, getState }, next, action) {\n    const { doNotStoreRoom } = getState()['features/base/config'];\n\n    if (!doNotStoreRoom && action.room) {\n        const { locationURL } = getState()['features/base/connection'];\n\n        if (locationURL) {\n            dispatch(_storeCurrentConference(locationURL));\n\n            // Whatever domain the feature recent-list knows about, the app as a\n            // whole should know about.\n            //\n            // XXX Technically, _storeCurrentConference could be turned into an\n            // asynchronous action creator which dispatches both\n            // _STORE_CURRENT_CONFERENCE and addKnownDomains but...\n            dispatch(addKnownDomains(locationURL.host));\n        }\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport {\n    _STORE_CURRENT_CONFERENCE,\n    _UPDATE_CONFERENCE_DURATION,\n    DELETE_RECENT_LIST_ENTRY\n} from './actionTypes';\n\n/**\n * Deletes a recent list entry based on url and date.\n *\n * @param {Object} entryId - An object constructed of the url and the date of\n * the entry for easy identification.\n * @returns {{\n *     type: DELETE_RECENT_LIST_ENTRY,\n *     entryId: Object\n * }}\n */\nexport function deleteRecentListEntry(entryId: Object) {\n    return {\n        type: DELETE_RECENT_LIST_ENTRY,\n        entryId\n    };\n}\n\n/**\n * Action to initiate a new addition to the list.\n *\n * @param {Object} locationURL - The current location URL.\n * @protected\n * @returns {{\n *     type: _STORE_CURRENT_CONFERENCE,\n *     locationURL: Object\n * }}\n */\nexport function _storeCurrentConference(locationURL: Object) {\n    return {\n        type: _STORE_CURRENT_CONFERENCE,\n        locationURL\n    };\n}\n\n/**\n * Action to initiate the update of the duration of the last conference.\n *\n * @param {Object} locationURL - The current location URL.\n * @protected\n * @returns {{\n *     type: _UPDATE_CONFERENCE_DURATION,\n *     locationURL: Object\n * }}\n */\nexport function _updateConferenceDuration(locationURL: Object) {\n    return {\n        type: _UPDATE_CONFERENCE_DURATION,\n        locationURL\n    };\n}\n","// @flow\n\n/**\n * Action type to signal the deletion of a list entry.\n *\n * {\n *     type: DELETE_RECENT_LIST_ENTRY,\n *     entryId: Object\n * }\n */\nexport const DELETE_RECENT_LIST_ENTRY = 'DELETE_RECENT_LIST_ENTRY';\n\n/**\n * Action type to signal a new addition to the list.\n *\n * {\n *     type: _STORE_CURRENT_CONFERENCE,\n *     locationURL: Object\n * }\n *\n * @protected\n */\nexport const _STORE_CURRENT_CONFERENCE = '_STORE_CURRENT_CONFERENCE';\n\n/**\n * Action type to signal that a new conference duration info is available.\n *\n * {\n *     type: _UPDATE_CONFERENCE_DURATION,\n *     locationURL: Object\n * }\n *\n * @protected\n */\nexport const _UPDATE_CONFERENCE_DURATION\n    = '_UPDATE_CONFERENCE_DURATION';\n","/* @flow */\n\n\nimport {\n    createRecordingEvent,\n    sendAnalytics\n} from '../analytics';\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app';\nimport { CONFERENCE_WILL_JOIN, getCurrentConference } from '../base/conference';\nimport JitsiMeetJS, {\n    JitsiConferenceEvents,\n    JitsiRecordingConstants\n} from '../base/lib-jitsi-meet';\nimport { getParticipantDisplayName } from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport {\n    playSound,\n    registerSound,\n    stopSound,\n    unregisterSound\n} from '../base/sounds';\n\nimport { RECORDING_SESSION_UPDATED } from './actionTypes';\nimport {\n    clearRecordingSessions,\n    hidePendingRecordingNotification,\n    showPendingRecordingNotification,\n    showRecordingError,\n    showRecordingLimitNotification,\n    showStartedRecordingNotification,\n    showStoppedRecordingNotification,\n    updateRecordingSessionData\n} from './actions';\nimport {\n    LIVE_STREAMING_OFF_SOUND_ID,\n    LIVE_STREAMING_ON_SOUND_ID,\n    RECORDING_OFF_SOUND_ID,\n    RECORDING_ON_SOUND_ID\n} from './constants';\nimport { getSessionById, getResourceId } from './functions';\nimport {\n    LIVE_STREAMING_OFF_SOUND_FILE,\n    LIVE_STREAMING_ON_SOUND_FILE,\n    RECORDING_OFF_SOUND_FILE,\n    RECORDING_ON_SOUND_FILE\n} from './sounds';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * StateListenerRegistry provides a reliable way to detect the leaving of a\n * conference, where we need to clean up the recording sessions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => getCurrentConference(state),\n    /* listener */ (conference, { dispatch }) => {\n        if (!conference) {\n            dispatch(clearRecordingSessions());\n        }\n    }\n);\n\n/**\n * The redux middleware to handle the recorder updates in a React way.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    let oldSessionData;\n\n    if (action.type === RECORDING_SESSION_UPDATED) {\n        oldSessionData\n            = getSessionById(getState(), action.sessionData.id);\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        dispatch(registerSound(\n            LIVE_STREAMING_OFF_SOUND_ID,\n            LIVE_STREAMING_OFF_SOUND_FILE));\n\n        dispatch(registerSound(\n            LIVE_STREAMING_ON_SOUND_ID,\n            LIVE_STREAMING_ON_SOUND_FILE));\n\n        dispatch(registerSound(\n            RECORDING_OFF_SOUND_ID,\n            RECORDING_OFF_SOUND_FILE));\n\n        dispatch(registerSound(\n            RECORDING_ON_SOUND_ID,\n            RECORDING_ON_SOUND_FILE));\n\n        break;\n\n    case APP_WILL_UNMOUNT:\n        dispatch(unregisterSound(LIVE_STREAMING_OFF_SOUND_ID));\n        dispatch(unregisterSound(LIVE_STREAMING_ON_SOUND_ID));\n        dispatch(unregisterSound(RECORDING_OFF_SOUND_ID));\n        dispatch(unregisterSound(RECORDING_ON_SOUND_ID));\n\n        break;\n\n    case CONFERENCE_WILL_JOIN: {\n        const { conference } = action;\n\n        conference.on(\n            JitsiConferenceEvents.RECORDER_STATE_CHANGED,\n            recorderSession => {\n\n                if (recorderSession) {\n                    recorderSession.getID()\n                        && dispatch(\n                            updateRecordingSessionData(recorderSession));\n\n                    recorderSession.getError()\n                        && _showRecordingErrorNotification(\n                            recorderSession, dispatch);\n                }\n\n                return;\n            });\n\n        break;\n    }\n\n    case RECORDING_SESSION_UPDATED: {\n        // When in recorder mode no notifications are shown\n        // or extra sounds are also not desired\n        // but we want to indicate those in case of sip gateway\n        const {\n            iAmRecorder,\n            iAmSipGateway,\n            disableRecordAudioNotification,\n            recordingLimit\n        } = getState()['features/base/config'];\n\n        if (iAmRecorder && !iAmSipGateway) {\n            break;\n        }\n\n        const updatedSessionData\n            = getSessionById(getState(), action.sessionData.id);\n        const { initiator, mode, terminator } = updatedSessionData;\n        const { PENDING, OFF, ON } = JitsiRecordingConstants.status;\n\n        if (updatedSessionData.status === PENDING\n            && (!oldSessionData || oldSessionData.status !== PENDING)) {\n            dispatch(showPendingRecordingNotification(mode));\n        } else if (updatedSessionData.status !== PENDING) {\n            dispatch(hidePendingRecordingNotification(mode));\n\n            if (updatedSessionData.status === ON\n                && (!oldSessionData || oldSessionData.status !== ON)) {\n                if (typeof recordingLimit === 'object') {\n                    // Show notification with additional information to the initiator.\n                    dispatch(showRecordingLimitNotification(mode));\n                } else {\n                    dispatch(showStartedRecordingNotification(mode, initiator, action.sessionData.id));\n                }\n\n                sendAnalytics(createRecordingEvent('start', mode));\n\n                if (disableRecordAudioNotification) {\n                    break;\n                }\n\n                let soundID;\n\n                if (mode === JitsiRecordingConstants.mode.FILE) {\n                    soundID = RECORDING_ON_SOUND_ID;\n                } else if (mode === JitsiRecordingConstants.mode.STREAM) {\n                    soundID = LIVE_STREAMING_ON_SOUND_ID;\n                }\n\n                if (soundID) {\n                    dispatch(playSound(soundID));\n                }\n\n                if (typeof APP !== 'undefined') {\n                    APP.API.notifyRecordingStatusChanged(true, mode);\n                }\n            } else if (updatedSessionData.status === OFF\n                && (!oldSessionData || oldSessionData.status !== OFF)) {\n                if (terminator) {\n                    dispatch(\n                        showStoppedRecordingNotification(\n                            mode, getParticipantDisplayName(getState, getResourceId(terminator))));\n                }\n\n                let duration = 0, soundOff, soundOn;\n\n                if (oldSessionData && oldSessionData.timestamp) {\n                    duration\n                        = (Date.now() / 1000) - oldSessionData.timestamp;\n                }\n                sendAnalytics(createRecordingEvent('stop', mode, duration));\n\n                if (disableRecordAudioNotification) {\n                    break;\n                }\n\n                if (mode === JitsiRecordingConstants.mode.FILE) {\n                    soundOff = RECORDING_OFF_SOUND_ID;\n                    soundOn = RECORDING_ON_SOUND_ID;\n                } else if (mode === JitsiRecordingConstants.mode.STREAM) {\n                    soundOff = LIVE_STREAMING_OFF_SOUND_ID;\n                    soundOn = LIVE_STREAMING_ON_SOUND_ID;\n                }\n\n                if (soundOff && soundOn) {\n                    dispatch(stopSound(soundOn));\n                    dispatch(playSound(soundOff));\n                }\n\n                if (typeof APP !== 'undefined') {\n                    APP.API.notifyRecordingStatusChanged(false, mode);\n                }\n            }\n        }\n\n        break;\n    }\n    }\n\n    return result;\n});\n\n/**\n * Shows a notification about an error in the recording session. A\n * default notification will display if no error is specified in the passed\n * in recording session.\n *\n * @private\n * @param {Object} recorderSession - The recorder session model from the\n * lib.\n * @param {Dispatch} dispatch - The Redux Dispatch function.\n * @returns {void}\n */\nfunction _showRecordingErrorNotification(recorderSession, dispatch) {\n    const mode = recorderSession.getMode();\n    const error = recorderSession.getError();\n    const isStreamMode = mode === JitsiMeetJS.constants.recording.mode.STREAM;\n\n    switch (error) {\n    case JitsiMeetJS.constants.recording.error.SERVICE_UNAVAILABLE:\n        dispatch(showRecordingError({\n            descriptionKey: 'recording.unavailable',\n            descriptionArguments: {\n                serviceName: isStreamMode\n                    ? '$t(liveStreaming.serviceName)'\n                    : '$t(recording.serviceName)'\n            },\n            titleKey: isStreamMode\n                ? 'liveStreaming.unavailableTitle'\n                : 'recording.unavailableTitle'\n        }));\n        break;\n    case JitsiMeetJS.constants.recording.error.RESOURCE_CONSTRAINT:\n        dispatch(showRecordingError({\n            descriptionKey: isStreamMode\n                ? 'liveStreaming.busy'\n                : 'recording.busy',\n            titleKey: isStreamMode\n                ? 'liveStreaming.busyTitle'\n                : 'recording.busyTitle'\n        }));\n        break;\n    default:\n        dispatch(showRecordingError({\n            descriptionKey: isStreamMode\n                ? 'liveStreaming.error'\n                : 'recording.error',\n            titleKey: isStreamMode\n                ? 'liveStreaming.failedToStart'\n                : 'recording.failedToStart'\n        }));\n        break;\n    }\n\n    if (typeof APP !== 'undefined') {\n        APP.API.notifyRecordingStatusChanged(false, mode, error);\n    }\n}\n","/**\n * The name of the bundled audio file which will be played for when live streaming is stopped.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_OFF_SOUND_FILE = 'liveStreamingOff.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a live streaming is started.\n *\n * @type {string}\n */\nexport const LIVE_STREAMING_ON_SOUND_FILE = 'liveStreamingOn.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a recording is stopped.\n *\n * @type {string}\n */\nexport const RECORDING_OFF_SOUND_FILE = 'recordingOff.mp3';\n\n/**\n * The name of the bundled audio file which will be played for when a recording is started.\n *\n * @type {string}\n */\nexport const RECORDING_ON_SOUND_FILE = 'recordingOn.mp3';\n","import { createRejoinedEvent, sendAnalytics } from '../analytics';\nimport { StateListenerRegistry } from '../base/redux';\n\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const recentList = state['features/recent-list'];\n\n        // Return the most recent conference entry\n        return recentList && recentList.length && recentList[recentList.length - 1];\n    },\n    // eslint-disable-next-line no-empty-pattern\n    /* listener */ (newMostRecent, { }, prevMostRecent) => {\n        if (prevMostRecent && newMostRecent) {\n\n            // Send the rejoined event just before the duration is reset on the most recent entry\n            if (prevMostRecent.conference === newMostRecent.conference && newMostRecent.duration === 0) {\n                sendAnalytics(\n                    createRejoinedEvent({\n                        lastConferenceDuration: prevMostRecent.duration / 1000,\n                        timeSinceLeft: (Date.now() - (prevMostRecent.date + prevMostRecent.duration)) / 1000,\n                        url: prevMostRecent.conference\n                    })\n                );\n            }\n        }\n    });\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/room-lock');\n","// @flow\n\nimport UIEvents from '../../../service/UI/UIEvents';\nimport {\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    LOCK_STATE_CHANGED,\n    SET_PASSWORD_FAILED\n} from '../base/conference';\nimport { hideDialog } from '../base/dialog';\nimport { JitsiConferenceErrors } from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    NOTIFICATION_TIMEOUT,\n    showNotification\n} from '../notifications';\n\nimport { _openPasswordRequiredPrompt } from './actions';\nimport { PasswordRequiredPrompt } from './components';\nimport { LOCKED_REMOTELY } from './constants';\nimport logger from './logger';\n\ndeclare var APP: Object;\n\n/**\n * Middleware that captures conference failed and checks for password required\n * error and requests a dialog for user to enter password.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONFERENCE_FAILED:\n        return _conferenceFailed(store, next, action);\n\n    case CONFERENCE_JOINED:\n        return _conferenceJoined(store, next, action);\n\n    case LOCK_STATE_CHANGED: {\n        // TODO Remove this logic when all components interested in the lock\n        // state change event are moved into react/redux.\n        if (typeof APP !== 'undefined') {\n            APP.UI.emitEvent(UIEvents.TOGGLE_ROOM_LOCK, action.locked);\n        }\n\n        const previousLockedState = store.getState()['features/base/conference'].locked;\n\n        const result = next(action);\n\n        const currentLockedState = store.getState()['features/base/conference'].locked;\n\n        if (currentLockedState === LOCKED_REMOTELY) {\n            store.dispatch(\n                showNotification({\n                    titleKey: 'notify.passwordSetRemotely'\n                }, NOTIFICATION_TIMEOUT));\n        } else if (previousLockedState === LOCKED_REMOTELY && !currentLockedState) {\n            store.dispatch(\n                showNotification({\n                    titleKey: 'notify.passwordRemovedRemotely'\n                }, NOTIFICATION_TIMEOUT));\n        }\n\n        return result;\n    }\n    case SET_PASSWORD_FAILED:\n        return _setPasswordFailed(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Handles cleanup of lock prompt state when a conference is joined.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code CONFERENCE_JOINED} which\n * specifies the details associated with joining the conference.\n * @private\n * @returns {*}\n */\nfunction _conferenceJoined({ dispatch }, next, action) {\n    dispatch(hideDialog(PasswordRequiredPrompt));\n\n    return next(action);\n}\n\n/**\n * Handles errors that occur when a conference fails.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code CONFERENCE_FAILED} which\n * specifies the details associated with the error and the failed conference.\n * @private\n * @returns {*}\n */\nfunction _conferenceFailed({ dispatch }, next, action) {\n    const { conference, error } = action;\n\n    if (conference && error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) {\n        // XXX The feature room-lock affords recovery after CONFERENCE_FAILED\n        // caused by JitsiConferenceErrors.PASSWORD_REQUIRED.\n        if (typeof error.recoverable === 'undefined') {\n            error.recoverable = true;\n        }\n        if (error.recoverable) {\n            dispatch(_openPasswordRequiredPrompt(conference));\n        }\n    } else {\n        dispatch(hideDialog(PasswordRequiredPrompt));\n    }\n\n    return next(action);\n}\n\n/**\n * Handles errors that occur when a password fails to be set.\n *\n * @param {Store} store - The redux store in which the specified action is being\n * dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action {@code SET_PASSWORD_ERROR} which\n * has the error type that should be handled.\n * @private\n * @returns {*}\n */\nfunction _setPasswordFailed(store, next, action) {\n    if (typeof APP !== 'undefined') {\n        // TODO Remove this logic when displaying of error messages on web is\n        // handled through react/redux.\n        const { error } = action;\n        let descriptionKey;\n        let titleKey;\n\n        if (error === JitsiConferenceErrors.PASSWORD_NOT_SUPPORTED) {\n            logger.warn('room passwords not supported');\n            descriptionKey = 'dialog.passwordNotSupported';\n            titleKey = 'dialog.passwordNotSupportedTitle';\n        } else {\n            logger.warn('setting password failed', error);\n            descriptionKey = 'dialog.lockMessage';\n            titleKey = 'dialog.lockTitle';\n        }\n        APP.UI.messageHandler.showError({\n            descriptionKey,\n            titleKey\n        });\n    }\n\n    return next(action);\n}\n","// TODO: Maybe fix the values to 'Chrome', 'Internet Explorer', etc. Currently\n// this values needs to be as they are becuse they are going to analytics,\n// callstats, etc.\n\nexport const CHROME = 'chrome';\n\nexport const OPERA = 'opera';\n\nexport const FIREFOX = 'firefox';\n\nexport const INTERNET_EXPLORER = 'iexplorer';\n\nexport const SAFARI = 'safari';\n\nexport const NWJS = 'nwjs';\n\nexport const ELECTRON = 'electron';\n\nexport const REACT_NATIVE = 'react-native';\n\nexport const UNKNOWN = 'unknown';\n","import Bowser from 'bowser';\n\nimport {\n    CHROME,\n    OPERA,\n    FIREFOX,\n    INTERNET_EXPLORER,\n    SAFARI,\n    NWJS,\n    ELECTRON,\n    REACT_NATIVE,\n    UNKNOWN\n} from './browsers';\n\n/**\n * Maps the names of the browsers from bowser to the internal names defined in\n * ./browsers.js\n */\nconst bowserNameToJitsiName = {\n    'Chrome': CHROME,\n    'Chromium': CHROME,\n    'Opera': OPERA,\n    'Firefox': FIREFOX,\n    'Internet Explorer': INTERNET_EXPLORER,\n    'Safari': SAFARI\n};\n\n/**\n * Detects a Chromium based environent.\n *\n * NOTE: Here we cannot check solely for \"Chrome\" in the UA, because Edge has\n * it too. We need to check explicitly for chromium based Edge first and then\n * detect other chromium based browsers.\n *\n * @returns {Object|undefined} - The name (CHROME) and version.\n */\nfunction _detectChromiumBased() {\n    const userAgent = navigator.userAgent;\n    const browserInfo = {\n        name: UNKNOWN,\n        version: undefined\n    };\n\n    if (userAgent.match(/Chrome/) && !userAgent.match(/Edge/)) {\n        // Edge is currenly supported only on desktop and android.\n        if (userAgent.match(/Edg(A?)/)) {\n            // Compare the underlying chromium version.\n            const version = userAgent.match(/Chrome\\/([\\d.]+)/)[1];\n\n            if (Number.parseInt(version, 10) > 72) {\n                browserInfo.name = CHROME;\n                browserInfo.version = version;\n            }\n        } else {\n            browserInfo.name = CHROME;\n            browserInfo.version = userAgent.match(/Chrome\\/([\\d.]+)/)[1];\n        }\n    }\n\n    return browserInfo;\n}\n\n/**\n * Detects Electron environment.\n *\n * @returns {Object|undefined} - The name (ELECTRON) and version.\n */\nfunction _detectElectron() {\n    const userAgent = navigator.userAgent;\n\n    if (userAgent.match(/Electron/)) {\n        const version = userAgent.match(/Electron\\/([\\d.]+)/)[1];\n\n        return {\n            name: ELECTRON,\n            version\n        };\n    }\n}\n\n/**\n * Detects NWJS environment.\n *\n * @returns {Object|undefined} - The name (NWJS) and version.\n */\nfunction _detectNWJS() {\n    const userAgent = navigator.userAgent;\n\n    if (userAgent.match(/JitsiMeetNW/)) {\n        const version = userAgent.match(/JitsiMeetNW\\/([\\d.]+)/)[1];\n\n        return {\n            name: NWJS,\n            version\n        };\n    }\n}\n\n/**\n * Detects React Native environment.\n * @returns {Object|undefined} - The name (REACT_NATIVE) and version.\n */\nfunction _detectReactNative() {\n    const match\n        = navigator.userAgent.match(/\\b(react[ \\t_-]*native)(?:\\/(\\S+))?/i);\n    let version;\n\n    // If we're remote debugging a React Native app, it may be treated as\n    // Chrome. Check navigator.product as well and always return some version\n    // even if we can't get the real one.\n\n    if (match || navigator.product === 'ReactNative') {\n        let name;\n\n        if (match && match.length > 2) {\n            name = match[1];\n            version = match[2];\n        }\n        name || (name = 'react-native');\n        version || (version = 'unknown');\n\n        return {\n            name: REACT_NATIVE,\n            version\n        };\n    }\n}\n\n/**\n * Returns information about the current browser.\n * @param {Object} - The bowser instance.\n * @returns {Object} - The name and version of the browser.\n */\nfunction _detect(bowser) {\n    let browserInfo;\n    const detectors = [\n        _detectReactNative,\n        _detectElectron,\n        _detectNWJS\n    ];\n\n    // Try all browser detectors\n    for (let i = 0; i < detectors.length; i++) {\n        browserInfo = detectors[i]();\n        if (browserInfo) {\n            return browserInfo;\n        }\n    }\n\n    const name = bowser.getBrowserName();\n\n    if (name in bowserNameToJitsiName) {\n        return {\n            name: bowserNameToJitsiName[name],\n            version: bowser.getBrowserVersion()\n        };\n    }\n\n    // Detect other browsers with the Chrome engine, such as Vivaldi and Brave.\n    browserInfo = _detectChromiumBased();\n    if (browserInfo) {\n        return browserInfo;\n    }\n\n    return {\n        name: UNKNOWN,\n        version: undefined\n    };\n}\n\n/**\n * Implements browser detection.\n */\nexport default class BrowserDetection {\n    /**\n     * Creates new BrowserDetection instance.\n     *\n     * @param {Object} [browserInfo] - Information about the browser.\n     * @param {string} browserInfo.name - The name of the browser.\n     * @param {string} browserInfo.version - The version of the browser.\n     */\n    constructor(browserInfo) {\n        let name, version;\n\n        this._bowser = Bowser.getParser(navigator.userAgent);\n        if (typeof browserInfo === 'undefined') {\n            const detectedBrowserInfo = _detect(this._bowser);\n\n            name = detectedBrowserInfo.name;\n            version = detectedBrowserInfo.version;\n        } else if (browserInfo.name in bowserNameToJitsiName) {\n            name = bowserNameToJitsiName[browserInfo.name];\n            version = browserInfo.version;\n        } else {\n            name = UNKNOWN;\n            version = undefined;\n        }\n\n        this._name = name;\n        this._version = version;\n    }\n\n    /**\n     * Gets current browser name.\n     * @returns {string}\n     */\n    getName() {\n        return this._name;\n    }\n\n    /**\n     * Checks if current browser is Chrome.\n     * @returns {boolean}\n     */\n    isChrome() {\n        return this._name === CHROME;\n    }\n\n    /**\n     * Checks if current browser is Opera.\n     * @returns {boolean}\n     */\n    isOpera() {\n        return this._name === OPERA;\n    }\n\n    /**\n     * Checks if current browser is Firefox.\n     * @returns {boolean}\n     */\n    isFirefox() {\n        return this._name === FIREFOX;\n    }\n\n    /**\n     * Checks if current browser is Internet Explorer.\n     * @returns {boolean}\n     */\n    isIExplorer() {\n        return this._name === INTERNET_EXPLORER;\n    }\n\n    /**\n     * Checks if current browser is Safari.\n     * @returns {boolean}\n     */\n    isSafari() {\n        return this._name === SAFARI;\n    }\n\n    /**\n     * Checks if current environment is NWJS.\n     * @returns {boolean}\n     */\n    isNWJS() {\n        return this._name === NWJS;\n    }\n\n    /**\n     * Checks if current environment is Electron.\n     * @returns {boolean}\n     */\n    isElectron() {\n        return this._name === ELECTRON;\n    }\n\n    /**\n     * Checks if current environment is React Native.\n     * @returns {boolean}\n     */\n    isReactNative() {\n        return this._name === REACT_NATIVE;\n    }\n\n    /**\n     * Returns the version of the current browser.\n     * @returns {string}\n     */\n    getVersion() {\n        return this._version;\n    }\n\n    /**\n     * Check if the parsed browser matches the passed condition.\n     *\n     * @param {Object} checkTree - It's one or two layered object, which can include a\n     * platform or an OS on the first layer and should have browsers specs on the\n     * bottom layer.\n     * Eg. { chrome: '>71.1.0' }\n     *     { windows: { chrome: '<70.2' } }\n     * @returns {boolean | undefined} - Returns true if the browser satisfies the set\n     * conditions, false if not and undefined when the browser is not defined in the\n     * checktree object or when the current browser's version is unknown.\n     * @private\n     */\n    _checkCondition(checkTree) {\n        if (this._version) {\n            return this._bowser.satisfies(checkTree);\n        }\n    }\n\n    /**\n     * Compares the passed version with the current browser version.\n     *\n     * @param {*} version - The version to compare with. Anything different\n     * than string will be converted to string.\n     * @returns {boolean|undefined} - Returns true if the current version is\n     * greater than the passed version and false otherwise. Returns undefined if\n     * the current browser version is unknown.\n     */\n    isVersionGreaterThan(version) {\n        return this._checkCondition({ [this._name]: `>${version}` });\n    }\n\n    /**\n     * Compares the passed version with the current browser version.\n     *\n     * @param {*} version - The version to compare with. Anything different\n     * than string will be converted to string.\n     * @returns {boolean|undefined} - Returns true if the current version is\n     * lower than the passed version and false otherwise. Returns undefined if\n     * the current browser version is unknown.\n     */\n    isVersionLessThan(version) {\n        return this._checkCondition({ [this._name]: `<${version}` });\n    }\n\n    /**\n     * Compares the passed version with the current browser version.\n     *\n     * @param {*} version - The version to compare with. Anything different\n     * than string will be converted to string.\n     * @returns {boolean|undefined} - Returns true if the current version is\n     * equal to the passed version and false otherwise. Returns undefined if\n     * the current browser version is unknown.\n     * A loose-equality operator is used here so that it matches the sub-versions as well.\n     */\n    isVersionEqualTo(version) {\n        return this._checkCondition({ [this._name]: `~${version}` });\n    }\n}\n","/**\n * Dummy implementation of Storage interface with empty methods.\n */\nclass DummyLocalStorage {\n    /* eslint-disable no-empty-function */\n    /**\n     * Empty function\n     */\n    getItem() { }\n\n    /**\n     * Empty function\n     */\n    setItem() { }\n\n    /**\n     * Empty function\n     */\n    removeItem() { }\n\n    /**\n     * Empty function\n     */\n    key() { }\n    /* eslint-enable no-empty-function */\n}\n\n/**\n * Wrapper class for browser's local storage object.\n */\nclass JitsiLocalStorage extends DummyLocalStorage {\n    /**\n     * @constructor\n     * @param {Storage} storage browser's local storage object.\n     */\n    constructor() {\n        super();\n        let storage;\n\n        try {\n            storage = window.localStorage;\n        } catch (error) {\n            // do nothing\n        }\n        this.storage = storage || new DummyLocalStorage();\n    }\n\n    /**\n     * Returns that passed key's value.\n     * @param {string} keyName the name of the key you want to retrieve\n     * the value of.\n     * @returns {String|null} the value of the key. If the key does not exist,\n     * null is returned.\n     */\n    getItem(keyName) {\n        return this.storage.getItem(keyName);\n    }\n\n    /**\n     * Adds a key to the storage, or update key's value if it already exists.\n     * @param {string} keyName the name of the key you want to create/update.\n     * @param {string} keyValue the value you want to give the key you are\n     * creating/updating.\n     */\n    setItem(keyName, keyValue) {\n        return this.storage.setItem(keyName, keyValue);\n    }\n\n    /**\n     * Remove a key from the storage.\n     * @param {string} keyName the name of the key you want to remove.\n     */\n    removeItem(keyName) {\n        return this.storage.removeItem(keyName);\n    }\n\n    /**\n     * Returns the name of the nth key in the list, or null if n is greater\n     * than or equal to the number of key/value pairs in the object.\n     *\n     * @param {number} i - The index of the key in the list.\n     * @returns {string}\n     */\n    key(i) {\n        return this.storage.key(i);\n    }\n}\n\nexport const jitsiLocalStorage = new JitsiLocalStorage();\n","/* eslint-disable prefer-rest-params */\n/* eslint-disable no-param-reassign */\nimport { BrowserDetection } from '@jitsi/js-utils';\n\n/**\n * transforms a maplike to an object. Mostly for getStats + JSON.parse(JSON.stringify())\n * @param {*} m\n */\nfunction map2obj(m) {\n    if (!m.entries) {\n        return m;\n    }\n    const o = {};\n\n    m.forEach((v, k) => {\n        o[k] = v;\n    });\n\n    return o;\n}\n\n/**\n *\n * @param {*} pc\n * @param {*} response\n */\nfunction mangleChromeStats(pc, response) {\n    const standardReport = {};\n    const reports = response.result();\n\n    reports.forEach(report => {\n        const standardStats = {\n            id: report.id,\n            timestamp: report.timestamp.getTime(),\n            type: report.type\n        };\n\n        report.names().forEach(name => {\n            standardStats[name] = report.stat(name);\n        });\n        standardReport[standardStats.id] = standardStats;\n    });\n\n    return standardReport;\n}\n\n/**\n * Apply a delta compression to the stats report. Reduces size by ~90%.\n * To reduce further, report keys could be compressed.\n * @param {*} oldStats\n * @param {*} newStats\n */\nfunction deltaCompression(oldStats, newStatsArg) {\n    const newStats = JSON.parse(JSON.stringify(newStatsArg));\n\n    // Go through each report of the newly fetches stats entry and compare it with the previous one (old)\n    // If a field value (e.g. ssrc.id) from the new report matches the corresponding one from the old report\n    // delete it.\n    // The new stats entry will be returned thus any reports from the old stats entry that are no longer found\n    // in the new one will me considered as removed.\n    // stats entries are expected to have the following format:\n    // {reportName1: {\n    //    key1: value,\n    //    key2: value2\n    // },\n    // reportName2: {\n    //    key1: value,\n    //    key2, value2,\n    // }}\n\n    Object.keys(newStats).forEach(id => {\n        const report = newStats[id];\n\n        delete report.id;\n        if (!oldStats[id]) {\n            return;\n        }\n        Object.keys(report).forEach(name => {\n            if (report[name] === oldStats[id][name]) {\n                delete newStats[id][name];\n            }\n        });\n    });\n\n    // TODO Snippet bellow adds the last timestamp as a stats level fields, probably used in feature extraction on the\n    // rtcstats-server side, most likely not used anymore, verify if this can be removed.\n    let timestamp = -Infinity;\n\n    Object.keys(newStats).forEach(id => {\n        const report = newStats[id];\n\n        if (report.timestamp > timestamp) {\n            timestamp = report.timestamp;\n        }\n    });\n    Object.keys(newStats).forEach(id => {\n        const report = newStats[id];\n\n        if (report.timestamp === timestamp) {\n            report.timestamp = 0;\n        }\n    });\n    newStats.timestamp = timestamp;\n\n    return newStats;\n}\n\n/**\n *\n * @param {*} stream\n */\nfunction dumpStream(stream) {\n    return {\n        id: stream.id,\n        tracks: stream.getTracks().map(track => {\n            return {\n                id: track.id, // unique identifier (GUID) for the track\n                kind: track.kind, // `audio` or `video`\n                label: track.label, // identified the track source\n                enabled: track.enabled, // application can control it\n                muted: track.muted, // application cannot control it (read-only)\n                readyState: track.readyState // `live` or `ended`\n            };\n        })\n    };\n}\n\n/**\n *\n * @param {*} trace\n * @param {*} getStatsInterval\n * @param {*} prefixesToWrap\n * @param {*} connectionFilter\n */\nexport default function(\n        { statsEntry: sendStatsEntry },\n        { connectionFilter, pollInterval, useLegacy, prefixesToWrap = [ '' ] }\n) {\n    let peerconnectioncounter = 0;\n\n    const browserDetection = new BrowserDetection();\n    const isFirefox = browserDetection.isFirefox();\n    const isSafari = browserDetection.isSafari();\n    const isChrome = browserDetection.isChrome();\n    const isElectron = browserDetection.isElectron();\n\n    // Only initialize rtcstats if it's run in a supported browser\n    if (!(isFirefox || isSafari || isChrome || isElectron)) {\n        throw new Error('RTCStats unsupported browser.');\n    }\n\n    prefixesToWrap.forEach(prefix => {\n        if (!window[`${prefix}RTCPeerConnection`]) {\n            return;\n        }\n\n        const OrigPeerConnection = window[`${prefix}RTCPeerConnection`];\n        const peerconnection = function(config, constraints) {\n            // We want to make sure that any potential errors that occur at this point, caused by rtcstats logic,\n            // does not affect the normal flow of any application that might integrate it.\n            const origConfig = { ...config };\n            const origConstraints = { ...constraints };\n\n            try {\n                const pc = new OrigPeerConnection(config, constraints);\n\n                // In case the client wants to skip some rtcstats connections, a filter function can be provided which\n                // will return the original PC object without any strings attached.\n                if (connectionFilter && connectionFilter(config)) {\n                    return pc;\n                }\n\n                const id = `PC_${peerconnectioncounter++}`;\n\n                pc.__rtcStatsId = id;\n\n                if (!config) {\n                    config = { nullConfig: true };\n                }\n\n                config = JSON.parse(JSON.stringify(config)); // deepcopy\n                // don't log credentials\n                ((config && config.iceServers) || []).forEach(server => {\n                    delete server.credential;\n                });\n\n                if (isFirefox) {\n                    config.browserType = 'moz';\n                } else {\n                    config.browserType = 'webkit';\n                }\n\n                sendStatsEntry('create', id, config);\n\n                // TODO: do we want to log constraints here? They are chrome-proprietary.\n                // eslint-disable-next-line max-len\n                // http://stackoverflow.com/questions/31003928/what-do-each-of-these-experimental-goog-rtcpeerconnectionconstraints-do\n                if (constraints) {\n                    sendStatsEntry('constraints', id, constraints);\n                }\n\n                pc.addEventListener('icecandidate', e => {\n                    sendStatsEntry('onicecandidate', id, e.candidate);\n                });\n                pc.addEventListener('addstream', e => {\n                    sendStatsEntry(\n                        'onaddstream',\n                        id,\n                        `${e.stream.id} ${e.stream.getTracks().map(t => `${t.kind}:${t.id}`)}`\n                    );\n                });\n                pc.addEventListener('track', e => {\n                    sendStatsEntry(\n                        'ontrack',\n                        id,\n                        `${e.track.kind}:${e.track.id} ${e.streams.map(stream => `stream:${stream.id}`)}`\n                    );\n                });\n                pc.addEventListener('removestream', e => {\n                    sendStatsEntry(\n                        'onremovestream',\n                        id,\n                        `${e.stream.id} ${e.stream.getTracks().map(t => `${t.kind}:${t.id}`)}`\n                    );\n                });\n                pc.addEventListener('signalingstatechange', () => {\n                    sendStatsEntry('onsignalingstatechange', id, pc.signalingState);\n                });\n                pc.addEventListener('iceconnectionstatechange', () => {\n                    sendStatsEntry('oniceconnectionstatechange', id, pc.iceConnectionState);\n                });\n                pc.addEventListener('icegatheringstatechange', () => {\n                    sendStatsEntry('onicegatheringstatechange', id, pc.iceGatheringState);\n                });\n                pc.addEventListener('connectionstatechange', () => {\n                    sendStatsEntry('onconnectionstatechange', id, pc.connectionState);\n                });\n                pc.addEventListener('negotiationneeded', () => {\n                    sendStatsEntry('onnegotiationneeded', id, undefined);\n                });\n                pc.addEventListener('datachannel', event => {\n                    sendStatsEntry('ondatachannel', id, [ event.channel.id, event.channel.label ]);\n                });\n\n                let prev = {};\n\n                const getStats = function() {\n                    if (isFirefox || isSafari || ((isChrome || isElectron) && !useLegacy)) {\n                        pc.getStats(null).then(res => {\n                            const now = map2obj(res);\n                            const base = JSON.parse(JSON.stringify(now)); // our new prev\n\n                            sendStatsEntry('getstats', id, deltaCompression(prev, now));\n                            prev = base;\n                        });\n                    } else if (isChrome || isElectron) {\n                        // for chromium based env we have the option of using the chrome getstats api via the\n                        // useLegacy flag.\n                        pc.getStats(res => {\n                            const now = mangleChromeStats(pc, res);\n                            const base = JSON.parse(JSON.stringify(now)); // our new prev\n\n                            sendStatsEntry('getstats', id, deltaCompression(prev, now));\n                            prev = base;\n                        });\n                    }\n\n                    // If the current env doesn't support any getstats call do nothing.\n                };\n\n                // TODO: do we want one big interval and all peerconnections\n                //    queried in that or one setInterval per PC?\n                //    we have to collect results anyway so...\n                if (pollInterval) {\n                    const interval = window.setInterval(() => {\n                        if (pc.signalingState === 'closed') {\n                            window.clearInterval(interval);\n\n                            return;\n                        }\n                        getStats();\n                    }, pollInterval);\n                }\n\n                pc.addEventListener('iceconnectionstatechange', () => {\n                    if (pc.iceConnectionState === 'connected') {\n                        getStats();\n                    }\n                });\n\n                return pc;\n            } catch (error) {\n                // If something went wrong, return a normal PeerConnection\n                console.error('RTCStats PeerConnection bind failed: ', error);\n\n                return new OrigPeerConnection(origConfig, origConstraints);\n            }\n        };\n\n        [ 'createDataChannel', 'close' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    try {\n                        sendStatsEntry(method, this.__rtcStatsId, arguments);\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, arguments);\n                };\n            }\n        });\n\n        [ 'addStream', 'removeStream' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    try {\n                        const stream = arguments[0];\n                        const streamInfo = stream\n                            .getTracks()\n                            .map(t => `${t.kind}:${t.id}`)\n                            .join(',');\n\n                        sendStatsEntry(method, this.__rtcStatsId, `${stream.id} ${streamInfo}`);\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, arguments);\n                };\n            }\n        });\n\n        [ 'addTrack' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    try {\n                        const track = arguments[0];\n                        const streams = [].slice.call(arguments, 1);\n\n                        sendStatsEntry(\n                            method,\n                            this.__rtcStatsId,\n                            `${track.kind}:${track.id} ${streams.map(s => `stream:${s.id}`).join(';') || '-'}`\n                        );\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, arguments);\n                };\n            }\n        });\n\n        [ 'removeTrack' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    try {\n                        const track = arguments[0].track;\n\n                        sendStatsEntry(method, this.__rtcStatsId, track ? `${track.kind}:${track.id}` : 'null');\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, arguments);\n                };\n            }\n        });\n\n        [ 'createOffer', 'createAnswer' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    // The logic here extracts the arguments and establishes if the API\n                    // is callback or Promise based.\n                    const rtcStatsId = this.__rtcStatsId;\n                    const args = arguments;\n                    let opts;\n\n                    if (arguments.length === 1 && typeof arguments[0] === 'object') {\n                        opts = arguments[0];\n                    } else if (arguments.length === 3 && typeof arguments[2] === 'object') {\n                        opts = arguments[2];\n                    }\n\n                    // We can only put a \"barrier\" at this point because the above logic is\n                    // necessary in all cases, if something fails there we can't just bypass it.\n                    try {\n                        sendStatsEntry(method, this.__rtcStatsId, opts);\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, opts ? [ opts ] : undefined).then(\n                        description => {\n                            try {\n                                sendStatsEntry(`${method}OnSuccess`, rtcStatsId, description);\n                            } catch (error) {\n                                console.error(`RTCStats ${method} promise success bind failed: `, error);\n                            }\n\n                            // We can't safely bypass this part of logic because it's necessary for Proxying this\n                            // request. It determines weather the call is callback or promise based.\n                            if (args.length > 0 && typeof args[0] === 'function') {\n                                args[0].apply(null, [ description ]);\n\n                                return undefined;\n                            }\n\n                            return description;\n                        },\n                        err => {\n                            try {\n                                sendStatsEntry(`${method}OnFailure`, rtcStatsId, err.toString());\n                            } catch (error) {\n                                console.error(`RTCStats ${method} promise failure bind failed: `, error);\n                            }\n\n                            // We can't safely bypass this part of logic because it's necessary for\n                            // Proxying this request. It determines weather the call is callback or promise based.\n                            if (args.length > 1 && typeof args[1] === 'function') {\n                                args[1].apply(null, [ err ]);\n\n                                return;\n                            }\n                            throw err;\n                        }\n                    );\n                };\n            }\n        });\n\n        [ 'setLocalDescription', 'setRemoteDescription', 'addIceCandidate' ].forEach(method => {\n            const nativeMethod = OrigPeerConnection.prototype[method];\n\n            if (nativeMethod) {\n                OrigPeerConnection.prototype[method] = function() {\n                    const rtcStatsId = this.__rtcStatsId;\n                    const args = arguments;\n\n                    try {\n                        sendStatsEntry(method, this.__rtcStatsId, args[0]);\n                    } catch (error) {\n                        console.error(`RTCStats ${method} bind failed: `, error);\n                    }\n\n                    return nativeMethod.apply(this, [ args[0] ]).then(\n                        () => {\n                            try {\n                                sendStatsEntry(`${method}OnSuccess`, rtcStatsId, undefined);\n                            } catch (error) {\n                                console.error(`RTCStats ${method} promise success bind failed: `, error);\n                            }\n\n                            // We can't safely bypass this part of logic because it's necessary for\n                            // Proxying this request. It determines weather the call is callback or promise based.\n                            if (args.length >= 2 && typeof args[1] === 'function') {\n                                args[1].apply(null, []);\n\n                                return undefined;\n                            }\n\n                            return undefined;\n                        },\n                        err => {\n                            try {\n                                sendStatsEntry(`${method}OnFailure`, rtcStatsId, err.toString());\n                            } catch (error) {\n                                console.error(`RTCStats ${method} promise failure bind failed: `, error);\n                            }\n\n                            // We can't safely bypass this part of logic because it's necessary for\n                            // Proxying this request. It determines weather the call is callback or promise based\n                            if (args.length >= 3 && typeof args[2] === 'function') {\n                                args[2].apply(null, [ err ]);\n\n                                return undefined;\n                            }\n                            throw err;\n                        }\n                    );\n                };\n            }\n        });\n\n        // wrap static methods. Currently just generateCertificate.\n        if (OrigPeerConnection.generateCertificate) {\n            Object.defineProperty(peerconnection, 'generateCertificate', {\n                get() {\n                    return arguments.length\n                        ? OrigPeerConnection.generateCertificate.apply(null, arguments)\n                        : OrigPeerConnection.generateCertificate;\n                }\n            });\n        }\n        window[`${prefix}RTCPeerConnection`] = peerconnection;\n        window[`${prefix}RTCPeerConnection`].prototype = OrigPeerConnection.prototype;\n    });\n\n    // getUserMedia wrappers\n    prefixesToWrap.forEach(prefix => {\n        const name = prefix + (prefix.length ? 'GetUserMedia' : 'getUserMedia');\n\n        if (!navigator[name]) {\n            return;\n        }\n        const origGetUserMedia = navigator[name].bind(navigator);\n        const gum = function() {\n            try {\n                sendStatsEntry('getUserMedia', null, arguments[0]);\n            } catch (error) {\n                console.error('RTCStats getUserMedia bind failed: ', error);\n            }\n\n            const cb = arguments[1];\n            const eb = arguments[2];\n\n            origGetUserMedia(\n                arguments[0],\n                stream => {\n                    try {\n                        sendStatsEntry('getUserMediaOnSuccess', null, dumpStream(stream));\n                    } catch (error) {\n                        console.error('RTCStats getUserMediaOnSuccess bind failed: ', error);\n                    }\n\n                    // we log the stream id, track ids and tracks readystate since that is ended GUM fails\n                    // to acquire the cam (in chrome)\n                    if (cb) {\n                        cb(stream);\n                    }\n                },\n                err => {\n                    try {\n                        sendStatsEntry('getUserMediaOnFailure', null, err.name);\n                    } catch (error) {\n                        console.error('RTCStats getUserMediaOnFailure bind failed: ', error);\n                    }\n\n                    if (eb) {\n                        eb(err);\n                    }\n                }\n            );\n        };\n\n        navigator[name] = gum.bind(navigator);\n    });\n\n    if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n        const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n        const gum = function() {\n            try {\n                sendStatsEntry('navigator.mediaDevices.getUserMedia', null, arguments[0]);\n            } catch (error) {\n                console.error('RTCStats navigator.mediaDevices.getUserMedia bind failed: ', error);\n            }\n\n            return origGetUserMedia.apply(navigator.mediaDevices, arguments).then(\n                stream => {\n                    try {\n                        sendStatsEntry('navigator.mediaDevices.getUserMediaOnSuccess', null, dumpStream(stream));\n                    } catch (error) {\n                        console.error('RTCStats navigator.mediaDevices.getUserMediaOnSuccess bind failed: ', error);\n                    }\n\n                    return stream;\n                },\n                err => {\n                    try {\n                        sendStatsEntry('navigator.mediaDevices.getUserMediaOnFailure', null, err.name);\n                    } catch (error) {\n                        console.error('RTCStats navigator.mediaDevices.getUserMediaOnFailure bind failed: ', error);\n                    }\n\n                    return Promise.reject(err);\n                }\n            );\n        };\n\n        navigator.mediaDevices.getUserMedia = gum.bind(navigator.mediaDevices);\n    }\n\n    // getDisplayMedia\n    if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {\n        const origGetDisplayMedia = navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);\n        const gdm = function() {\n            try {\n                sendStatsEntry('navigator.mediaDevices.getDisplayMedia', null, arguments[0]);\n            } catch (error) {\n                console.error('RTCStats navigator.mediaDevices.getDisplayMedia bind failed: ', error);\n            }\n\n            return origGetDisplayMedia.apply(navigator.mediaDevices, arguments).then(\n                stream => {\n                    try {\n                        sendStatsEntry('navigator.mediaDevices.getDisplayMediaOnSuccess', null, dumpStream(stream));\n                    } catch (error) {\n                        console.error('RTCStats navigator.mediaDevices.getDisplayMediaOnSuccess bind failed: ', error);\n                    }\n\n                    return stream;\n                },\n                err => {\n                    try {\n                        sendStatsEntry('navigator.mediaDevices.getDisplayMediaOnFailure', null, err.name);\n                    } catch (error) {\n                        console.error('RTCStats navigator.mediaDevices.getDisplayMediaOnFailure bind failed: ', error);\n                    }\n\n                    return Promise.reject(err);\n                }\n            );\n        };\n\n        navigator.mediaDevices.getDisplayMedia = gdm.bind(navigator.mediaDevices);\n    }\n}\n","/* eslint-disable prefer-rest-params */\nimport uuid from 'uuid';\n\nconst PROTOCOL_ITERATION = '3.1';\n\n/**\n *\n * @param {*} endpoint\n * @param {*} onCloseCallback\n * @param {*} pingInterval\n */\nexport default function({ endpoint, onCloseCallback, useLegacy, pingInterval = 30000 }) {\n    const buffer = [];\n    const statsSessionId = uuid.v4();\n    let connection;\n    let keepAliveInterval;\n\n    // We maintain support for legacy chrome rtcstats just in case we need some critical statistic\n    // only obtainable from that format, ideally we'd remove this in the future.\n    const protocolVersion = useLegacy ? `${PROTOCOL_ITERATION}_LEGACY` : `${PROTOCOL_ITERATION}_STANDARD`;\n\n    const trace = function(msg) {\n        const serializedMsg = JSON.stringify(msg);\n\n        if (connection && (connection.readyState === WebSocket.OPEN)) {\n            connection.send(serializedMsg);\n        } else if (connection && (connection.readyState >= WebSocket.CLOSING)) {\n            // no-op\n        } else if (buffer.length < 300) {\n            // We need to cache the initial getStats calls as they are used by the delta compression algorithm and\n            // without the data from the initial calls the server wouldn't know how to decompress.\n            // Ideally we wouldn't reach this limit as the connect should fairly soon after the PC init, but just\n            // in case add a limit to the buffer, so we don't transform this into a memory leek.\n            buffer.push(serializedMsg);\n        }\n    };\n\n    trace.identity = function(...data) {\n\n        data.push(new Date().getTime());\n\n        const identityMsg = {\n            statsSessionId,\n            type: 'identity',\n            data\n        };\n\n        trace(identityMsg);\n    };\n\n    trace.statsEntry = function(...data) {\n\n        data.push(new Date().getTime());\n\n        const statsEntryMsg = {\n            statsSessionId,\n            type: 'stats-entry',\n            data: JSON.stringify(data)\n        };\n\n        trace(statsEntryMsg);\n    };\n\n\n    trace.keepAlive = function() {\n\n        const keepaliveMsg = {\n            statsSessionId,\n            type: 'keepalive'\n        };\n\n        trace(keepaliveMsg);\n    };\n    trace.close = function() {\n        connection && connection.close();\n    };\n    trace.connect = function() {\n    // Because the connect function can be deferred now, we don't want to clear the buffer on connect so that\n    // we don't lose queued up operations.\n    // buffer = [];\n        if (connection) {\n            connection.close();\n        }\n        connection = new WebSocket(endpoint + window.location.pathname, protocolVersion);\n\n        connection.onclose = function(closeEvent) {\n            keepAliveInterval && clearInterval(keepAliveInterval);\n\n            // reconnect?\n            onCloseCallback({ code: closeEvent.code,\n                reason: closeEvent.reason });\n        };\n\n        connection.onopen = function() {\n            keepAliveInterval = setInterval(trace.keepAlive, pingInterval);\n\n            while (buffer.length) {\n                // Buffer contains serialized msg's so no need to stringify\n                connection.send(buffer.shift());\n            }\n        };\n\n    /*\n    connection.onmessage = function(msg) {\n      // no messages from the server defined yet.\n    };\n    */\n    };\n\n    return trace;\n}\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/rtcstats');\n","import rtcstatsInit from 'rtcstats/rtcstats';\nimport traceInit from 'rtcstats/trace-ws';\n\nimport {\n    createRTCStatsTraceCloseEvent,\n    sendAnalytics\n} from '../analytics';\n\nimport logger from './logger';\n\n/**\n * Filter out RTCPeerConnection that are created by callstats.io.\n *\n * @param {*} config - Config object sent to the PC c'tor.\n * @returns {boolean}\n */\nfunction connectionFilter(config) {\n    if (config && config.iceServers[0] && config.iceServers[0].urls) {\n        for (const iceUrl of config.iceServers[0].urls) {\n            if (iceUrl.indexOf('taas.callstats.io') >= 0) {\n                return true;\n            }\n        }\n    }\n}\n\n/**\n * Class that controls the rtcstats flow, because it overwrites and proxies global function it should only be\n * initialized once.\n */\nclass RTCStats {\n    /**\n     * Initialize the rtcstats components. First off we initialize the trace, which is a wrapped websocket\n     * that does the actual communication with the server. Secondly, the rtcstats component is initialized,\n     * it overwrites GUM and PeerConnection global functions and adds a proxy over them used to capture stats.\n     * Note, lib-jitsi-meet takes references to these methods before initializing so the init method needs to be\n     * loaded before it does.\n     *\n     * @param {Object} options -.\n     * @param {string} options.endpoint - The Amplitude app key required.\n     * @param {string} options.useLegacy - Switch to legacy chrome webrtc statistics. Parameter will only have\n     * an effect on chrome based applications.\n     * @param {number} options.pollInterval - The getstats poll interval in ms.\n     * @returns {void}\n     */\n    init(options) {\n\n        const { endpoint, useLegacy, pollInterval } = options;\n\n        const traceOptions = {\n            endpoint,\n            onCloseCallback: this.handleTraceWSClose.bind(this),\n            useLegacy\n        };\n\n        const rtcstatsOptions = {\n            connectionFilter,\n            pollInterval,\n            useLegacy\n        };\n\n        this.trace = traceInit(traceOptions);\n        rtcstatsInit(this.trace, rtcstatsOptions);\n        this.initialized = true;\n    }\n\n    /**\n     * Check whether or not the RTCStats is initialized.\n     *\n     * @returns {boolean}\n     */\n    isInitialized() {\n        return this.initialized;\n    }\n\n    /**\n     * Send identity data to rtcstats server, this will be reflected in the identity section of the stats dump.\n     * It can be generally used to send additional metadata that might be relevant such as amplitude user data\n     * or deployment specific information.\n     *\n     * @param {Object} identityData - Metadata object to send as identity.\n     * @returns {void}\n     */\n    sendIdentityData(identityData) {\n        this.trace && this.trace.identity('identity', null, identityData);\n    }\n\n    /**\n     * Connect to the rtcstats server instance. Stats (data obtained from getstats) won't be send until the\n     * connect successfully initializes, however calls to GUM are recorded in an internal buffer even if not\n     * connected and sent once it is established.\n     *\n     * @returns {void}\n     */\n    connect() {\n        this.trace && this.trace.connect();\n    }\n\n    /**\n     * Self explanatory; closes the web socked connection.\n     * Note, at the point of writing this documentation there was no method to reset the function overwrites,\n     * thus even if the websocket is closed the global function proxies are still active but send no data,\n     * this shouldn't influence the normal flow of the application.\n     *\n     * @returns {void}\n     */\n    close() {\n        this.trace && this.trace.close();\n    }\n\n    /**\n     * The way rtcstats is currently designed the ws wouldn't normally be closed by the application logic but rather\n     * by the page being closed/reloaded. Using this assumption any onclose event is most likely something abnormal\n     * that happened on the ws. We then track this in order to determine how many rtcstats connection were closed\n     * prematurely.\n     *\n     * @param {Object} closeEvent - Event sent by ws onclose.\n     * @returns {void}\n     */\n    handleTraceWSClose(closeEvent) {\n        logger.info('RTCStats trace ws closed', closeEvent);\n\n        sendAnalytics(createRTCStatsTraceCloseEvent(closeEvent));\n    }\n}\n\nexport default new RTCStats();\n","// @flow\n\nimport { toState } from '../base/redux';\n\n/**\n * Checks whether rtcstats is enabled or not.\n *\n * @param {Function|Object} stateful - The redux store or {@code getState} function.\n * @returns {boolean}\n */\nexport function isRtcstatsEnabled(stateful: Function | Object) {\n    // TODO: Remove when rtcstats is fully cimpatible with mobile.\n    if (navigator.product === 'ReactNative') {\n        return false;\n    }\n\n    const state = toState(stateful);\n    const config = state['features/base/config'];\n\n    return config?.analytics?.rtcstatsEnabled ?? false;\n}\n","// @flow\n\nimport { getAmplitudeIdentity } from '../analytics';\nimport { CONFERENCE_UNIQUE_ID_SET, getRoomName } from '../base/conference';\nimport { LIB_WILL_INIT } from '../base/lib-jitsi-meet';\nimport { getLocalParticipant } from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport RTCStats from './RTCStats';\nimport { isRtcstatsEnabled } from './functions';\nimport logger from './logger';\n\n/**\n * Middleware which intercepts lib-jitsi-meet initialization and conference join in order init the\n * rtcstats-client.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    const state = store.getState();\n    const config = state['features/base/config'];\n    const { analytics } = config;\n\n\n    switch (action.type) {\n    case LIB_WILL_INIT: {\n        if (isRtcstatsEnabled(state)) {\n            // RTCStats \"proxies\" WebRTC functions such as GUM and RTCPeerConnection by rewriting the global\n            // window functions. Because lib-jitsi-meet uses references to those functions that are taken on\n            // init, we need to add these proxies before it initializes, otherwise lib-jitsi-meet will use the\n            // original non proxy versions of these functions.\n            try {\n                // Default poll interval is 1000ms and standard stats will be used, if not provided in the config.\n                const pollInterval = analytics.rtcstatsPollInterval || 1000;\n                const useLegacy = analytics.rtcstatsUseLegacy || false;\n\n\n                // Initialize but don't connect to the rtcstats server wss, as it will start sending data for all\n                // media calls made even before the conference started.\n                RTCStats.init({\n                    endpoint: analytics.rtcstatsEndpoint,\n                    useLegacy,\n                    pollInterval\n                });\n            } catch (error) {\n                logger.error('Failed to initialize RTCStats: ', error);\n            }\n        }\n        break;\n    }\n    case CONFERENCE_UNIQUE_ID_SET: {\n        if (isRtcstatsEnabled(state) && RTCStats.isInitialized()) {\n            // Once the conference started connect to the rtcstats server and send data.\n            try {\n                RTCStats.connect();\n\n                const localParticipant = getLocalParticipant(state);\n\n                // Unique identifier for a conference session, not to be confused with meeting name\n                // i.e. If all participants leave a meeting it will have a different value on the next join.\n                const { conference } = action;\n                const meetingUniqueId = conference && conference.getMeetingUniqueId();\n\n                // The current implementation of rtcstats-server is configured to send data to amplitude, thus\n                // we add identity specific information so we can correlate on the amplitude side. If amplitude is\n                // not configured an empty object will be sent.\n                // The current configuration of the conference is also sent as metadata to rtcstats server.\n                // This is done in order to facilitate queries based on different conference configurations.\n                // e.g. Find all RTCPeerConnections that connect to a specific shard or were created in a\n                // conference with a specific version.\n                RTCStats.sendIdentityData({\n                    ...getAmplitudeIdentity(),\n                    ...config,\n                    confName: getRoomName(state),\n                    displayName: localParticipant?.name,\n                    meetingUniqueId\n                });\n            } catch (error) {\n                // If the connection failed do not impact jitsi-meet just silently fail.\n                logger.error('RTCStats connect failed with: ', error);\n            }\n        }\n        break;\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/subtitles');\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    ENDPOINT_MESSAGE_RECEIVED,\n    TOGGLE_REQUESTING_SUBTITLES\n} from './actionTypes';\nimport {\n    removeTranscriptMessage,\n    updateTranscriptMessage\n} from './actions';\nimport logger from './logger';\n\n/**\n * The type of json-message which indicates that json carries a\n * transcription result.\n */\nconst JSON_TYPE_TRANSCRIPTION_RESULT = 'transcription-result';\n\n/**\n * The type of json-message which indicates that json carries a\n * translation result.\n */\nconst JSON_TYPE_TRANSLATION_RESULT = 'translation-result';\n\n/**\n * The local participant property which is used to set whether the local\n * participant wants to have a transcriber in the room.\n */\nconst P_NAME_REQUESTING_TRANSCRIPTION = 'requestingTranscription';\n\n/**\n * The local participant property which is used to store the language\n * preference for translation for a participant.\n */\nconst P_NAME_TRANSLATION_LANGUAGE = 'translation_language';\n\n/**\n* Time after which the rendered subtitles will be removed.\n*/\nconst REMOVE_AFTER_MS = 3000;\n\n/**\n * Middleware that catches actions related to transcript messages to be rendered\n * in {@link Captions}.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case ENDPOINT_MESSAGE_RECEIVED:\n        return _endpointMessageReceived(store, next, action);\n\n    case TOGGLE_REQUESTING_SUBTITLES:\n        _requestingSubtitlesToggled(store);\n        break;\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature transcription that the action\n * {@code ENDPOINT_MESSAGE_RECEIVED} is being dispatched within a specific redux\n * store.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to\n * dispatch the specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code ENDPOINT_MESSAGE_RECEIVED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _endpointMessageReceived({ dispatch, getState }, next, action) {\n    const { json } = action;\n\n    if (!(json\n            && (json.type === JSON_TYPE_TRANSCRIPTION_RESULT\n                || json.type === JSON_TYPE_TRANSLATION_RESULT))) {\n        return next(action);\n    }\n\n    const state = getState();\n    const translationLanguage\n        = state['features/base/conference'].conference\n            .getLocalParticipantProperty(P_NAME_TRANSLATION_LANGUAGE);\n\n    try {\n        const transcriptMessageID = json.message_id;\n        const participantName = json.participant.name;\n\n        if (json.type === JSON_TYPE_TRANSLATION_RESULT\n                && json.language === translationLanguage) {\n            // Displays final results in the target language if translation is\n            // enabled.\n\n            const newTranscriptMessage = {\n                clearTimeOut: undefined,\n                final: json.text,\n                participantName\n            };\n\n            _setClearerOnTranscriptMessage(dispatch,\n                transcriptMessageID, newTranscriptMessage);\n            dispatch(updateTranscriptMessage(transcriptMessageID,\n                newTranscriptMessage));\n\n        } else if (json.type === JSON_TYPE_TRANSCRIPTION_RESULT\n                && !translationLanguage) {\n            // Displays interim and final results without any translation if\n            // translations are disabled.\n\n            const { text } = json.transcript[0];\n\n            // We update the previous transcript message with the same\n            // message ID or adds a new transcript message if it does not\n            // exist in the map.\n            const newTranscriptMessage = {\n                ...state['features/subtitles']._transcriptMessages\n                        .get(transcriptMessageID)\n                    || { participantName }\n            };\n\n            _setClearerOnTranscriptMessage(dispatch,\n                transcriptMessageID, newTranscriptMessage);\n\n            // If this is final result, update the state as a final result\n            // and start a count down to remove the subtitle from the state\n            if (!json.is_interim) {\n                newTranscriptMessage.final = text;\n\n            } else if (json.stability > 0.85) {\n                // If the message has a high stability, we can update the\n                // stable field of the state and remove the previously\n                // unstable results\n                newTranscriptMessage.stable = text;\n                newTranscriptMessage.unstable = undefined;\n\n            } else {\n                // Otherwise, this result has an unstable result, which we\n                // add to the state. The unstable result will be appended\n                // after the stable part.\n                newTranscriptMessage.unstable = text;\n            }\n\n            dispatch(\n                updateTranscriptMessage(\n                    transcriptMessageID,\n                    newTranscriptMessage));\n        }\n    } catch (error) {\n        logger.error('Error occurred while updating transcriptions\\n', error);\n    }\n\n    return next(action);\n}\n\n/**\n * Toggle the local property 'requestingTranscription'. This will cause Jicofo\n * and Jigasi to decide whether the transcriber needs to be in the room.\n *\n * @param {Store} store - The redux store.\n * @private\n * @returns {void}\n */\nfunction _requestingSubtitlesToggled({ getState }) {\n    const state = getState();\n    const { _requestingSubtitles } = state['features/subtitles'];\n    const { conference } = state['features/base/conference'];\n\n    conference.setLocalParticipantProperty(\n        P_NAME_REQUESTING_TRANSCRIPTION,\n        !_requestingSubtitles);\n}\n\n/**\n * Set a timeout on a TranscriptMessage object so it clears itself when it's not\n * updated.\n *\n * @param {Function} dispatch - Dispatch remove action to store.\n * @param {string} transcriptMessageID - The id of the message to remove.\n * @param {Object} transcriptMessage - The message to remove.\n * @returns {void}\n */\nfunction _setClearerOnTranscriptMessage(\n        dispatch,\n        transcriptMessageID,\n        transcriptMessage) {\n    if (transcriptMessage.clearTimeOut) {\n        clearTimeout(transcriptMessage.clearTimeOut);\n    }\n\n    transcriptMessage.clearTimeOut\n        = setTimeout(\n            () => dispatch(removeTranscriptMessage(transcriptMessageID)),\n            REMOVE_AFTER_MS);\n}\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT,\n    SET_FULL_SCREEN\n} from './actionTypes';\n\n\ndeclare var APP: Object;\n\n/**\n * Middleware which intercepts Toolbox actions to handle changes to the\n * visibility timeout of the Toolbox.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n\n    switch (action.type) {\n    case CLEAR_TOOLBOX_TIMEOUT: {\n        const { timeoutID } = store.getState()['features/toolbox'];\n\n        clearTimeout(timeoutID);\n        break;\n    }\n\n    case SET_FULL_SCREEN:\n        return _setFullScreen(next, action);\n\n    case SET_TOOLBOX_TIMEOUT: {\n        const { timeoutID } = store.getState()['features/toolbox'];\n        const { handler, timeoutMS } = action;\n\n        clearTimeout(timeoutID);\n        action.timeoutID = setTimeout(handler, timeoutMS);\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n\ntype DocumentElement = {\n    +requestFullscreen?: Function,\n    +mozRequestFullScreen?: Function,\n    +webkitRequestFullscreen?: Function\n}\n\n/**\n * Makes an external request to enter or exit full screen mode.\n *\n * @param {Dispatch} next - The redux dispatch function to dispatch the\n * specified action to the specified store.\n * @param {Action} action - The redux action SET_FULL_SCREEN which is being\n * dispatched in the specified store.\n * @private\n * @returns {Object} The value returned by {@code next(action)}.\n */\nfunction _setFullScreen(next, action) {\n    if (typeof APP === 'object') {\n        const { fullScreen } = action;\n\n        if (fullScreen) {\n            const documentElement: DocumentElement\n                = document.documentElement || {};\n\n            if (typeof documentElement.requestFullscreen === 'function') {\n                documentElement.requestFullscreen();\n            } else if (\n                typeof documentElement.mozRequestFullScreen === 'function') {\n                documentElement.mozRequestFullScreen();\n            } else if (\n                typeof documentElement.webkitRequestFullscreen === 'function') {\n                documentElement.webkitRequestFullscreen();\n            }\n        } else {\n            /* eslint-disable no-lonely-if */\n\n            // $FlowFixMe\n            if (typeof document.exitFullscreen === 'function') {\n                document.exitFullscreen();\n\n            // $FlowFixMe\n            } else if (typeof document.mozCancelFullScreen === 'function') {\n                document.mozCancelFullScreen();\n\n            // $FlowFixMe\n            } else if (typeof document.webkitExitFullscreen === 'function') {\n                document.webkitExitFullscreen();\n            }\n\n            /* eslint-enable no-loney-if */\n        }\n    }\n\n    return next(action);\n}\n","// @flow\n\nimport {\n    NOTIFICATION_TIMEOUT,\n    hideNotification,\n    showErrorNotification,\n    showNotification\n} from '../notifications';\n\nimport {\n    _POTENTIAL_TRANSCRIBER_JOINED,\n    _TRANSCRIBER_JOINED,\n    _TRANSCRIBER_LEFT,\n    SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n} from './actionTypes';\n\n/**\n * Notify that the transcriber, with a unique ID, has joined.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _TRANSCRIBER_JOINED,\n *     participantId: string\n * }}\n */\nexport function transcriberJoined(participantId: string) {\n    return {\n        type: _TRANSCRIBER_JOINED,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Notify that the transcriber, with a unique ID, has left.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _TRANSCRIBER_LEFT,\n *     participantId: string\n * }}\n */\nexport function transcriberLeft(participantId: string) {\n    return {\n        type: _TRANSCRIBER_LEFT,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Notify that a potential transcriber, with a unique ID, has joined.\n *\n * @param {string} participantId - The participant id of the transcriber.\n * @returns {{\n *     type: _POTENTIAL_TRANSCRIBER_JOINED,\n *     participantId: string\n * }}\n */\nexport function potentialTranscriberJoined(participantId: string) {\n    return {\n        type: _POTENTIAL_TRANSCRIBER_JOINED,\n        transcriberJID: participantId\n    };\n}\n\n/**\n * Signals that the pending transcribing notification should be shown on the\n * screen.\n *\n * @returns {Function}\n */\nexport function showPendingTranscribingNotification() {\n    return async (dispatch: Function) => {\n        const notification = await dispatch(showNotification({\n            descriptionKey: 'transcribing.pending',\n            isDismissAllowed: false,\n            titleKey: 'dialog.transcribing'\n        }));\n\n        if (notification) {\n            dispatch(setPendingTranscribingNotificationUid(notification.uid));\n        }\n    };\n}\n\n/**\n * Sets UID of the the pending transcribing notification to use it when hiding\n * the notification is necessary, or unsets it when undefined (or no param) is\n * passed.\n *\n * @param {?number} uid - The UID of the notification.\n * @returns {{\n *     type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n *     uid: number\n * }}\n */\nexport function setPendingTranscribingNotificationUid(uid: ?number) {\n    return {\n        type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n        uid\n    };\n}\n\n/**\n * Signals that the pending transcribing notification should be removed from the\n * screen.\n *\n * @returns {Function}\n */\nexport function hidePendingTranscribingNotification() {\n    return (dispatch: Function, getState: Function) => {\n        const { pendingNotificationUid } = getState()['features/transcribing'];\n\n        if (pendingNotificationUid) {\n            dispatch(hideNotification(pendingNotificationUid));\n            dispatch(setPendingTranscribingNotificationUid());\n        }\n    };\n}\n\n/**\n * Signals that the stopped transcribing notification should be shown on the\n * screen.\n *\n * @returns {showNotification}\n */\nexport function showStoppedTranscribingNotification() {\n    return showNotification({\n        descriptionKey: 'transcribing.off',\n        titleKey: 'dialog.transcribing'\n    }, NOTIFICATION_TIMEOUT);\n}\n\n\n/**\n * Signals that the transcribing error notification should be shown.\n *\n * @returns {showErrorNotification}\n */\nexport function showTranscribingError() {\n    return showErrorNotification({\n        descriptionKey: 'transcribing.error',\n        titleKey: 'transcribing.failedToStart'\n    });\n}\n","/**\n * The type of Redux action triggering storage of participantId of transcriber,\n * so that it can later be kicked\n *\n * {\n *     type: TRANSCRIBER_JOINED,\n *     participantId: String\n * }\n * @private\n */\nexport const _TRANSCRIBER_JOINED = 'TRANSCRIBER_JOINED';\n\n/**\n * The type of Redux action signalling that the transcriber has left\n *\n * {\n *     type: TRANSCRIBER_LEFT,\n *     participantId: String\n * }\n * @private\n */\nexport const _TRANSCRIBER_LEFT = 'TRANSCRIBER_LEFT';\n\n/**\n * The type of a Redux action signalling that a hidden participant has joined,\n * which can be candidate for being a transcriber.\n *\n * {\n *     type: _POTENTIAL_TRANSCRIBER_JOINED,\n * }\n * @private\n */\nexport const _POTENTIAL_TRANSCRIBER_JOINED\n    = 'POTENTIAL_TRANSCRIBER_JOINED';\n\n/**\n * The type of Redux action which sets the pending transcribing notification UID\n * to use it for when hiding the notification is necessary, or unsets it when\n * undefined (or no param) is passed.\n *\n * {\n *     type: SET_PENDING_TRANSCRIBING_NOTIFICATION_UID,\n *     uid: ?number\n * }\n * @public\n */\nexport const SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n    = 'SET_PENDING_TRANSCRIBING_NOTIFICATION_UID';\n","// @flow\n\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport {\n    HIDDEN_PARTICIPANT_JOINED,\n    HIDDEN_PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED\n} from './../base/participants';\nimport {\n    _TRANSCRIBER_LEFT\n} from './actionTypes';\nimport {\n    hidePendingTranscribingNotification,\n    potentialTranscriberJoined,\n    showStoppedTranscribingNotification,\n    transcriberJoined,\n    transcriberLeft\n} from './actions';\n\nconst TRANSCRIBER_DISPLAY_NAME = 'Transcriber';\n\n/**\n * Implements the middleware of the feature transcribing.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    const {\n        transcriberJID,\n        potentialTranscriberJIDs\n    } = store.getState()['features/transcribing'];\n\n    switch (action.type) {\n    case _TRANSCRIBER_LEFT:\n        store.dispatch(showStoppedTranscribingNotification());\n        break;\n    case HIDDEN_PARTICIPANT_JOINED:\n        if (action.displayName\n                && action.displayName === TRANSCRIBER_DISPLAY_NAME) {\n            store.dispatch(transcriberJoined(action.id));\n        } else {\n            store.dispatch(potentialTranscriberJoined(action.id));\n        }\n\n        break;\n    case HIDDEN_PARTICIPANT_LEFT:\n        if (action.id === transcriberJID) {\n            store.dispatch(transcriberLeft(action.id));\n        }\n        break;\n    case PARTICIPANT_UPDATED: {\n        const { participant } = action;\n\n        if (potentialTranscriberJIDs.includes(participant.id)\n            && participant.name === TRANSCRIBER_DISPLAY_NAME) {\n            store.dispatch(transcriberJoined(participant.id));\n            store.dispatch(hidePendingTranscribingNotification());\n        }\n\n        break;\n    }\n    }\n\n    return next(action);\n});\n","// @flow\n\nimport { getCurrentConference } from '../base/conference';\nimport {\n    PARTICIPANT_LEFT,\n    PIN_PARTICIPANT,\n    pinParticipant,\n    getParticipantById,\n    getPinnedParticipant\n} from '../base/participants';\nimport { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';\nimport { SET_DOCUMENT_EDITING_STATUS } from '../etherpad';\nimport { isFollowMeActive } from '../follow-me';\n\nimport { SET_TILE_VIEW } from './actionTypes';\nimport { setTileView } from './actions';\nimport { getAutoPinSetting, updateAutoPinnedParticipant } from './functions';\n\nimport './subscriber';\n\nlet previousTileViewEnabled;\n\n/**\n * Middleware which intercepts actions and updates tile view related state.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(store => next => action => {\n\n    // we want to extract the leaving participant and check its type before actually the participant being removed.\n    let shouldUpdateAutoPin = false;\n\n    switch (action.type) {\n    case PARTICIPANT_LEFT: {\n        if (!getAutoPinSetting() || isFollowMeActive(store)) {\n            break;\n        }\n        shouldUpdateAutoPin = getParticipantById(store.getState(), action.participant.id)?.isFakeParticipant;\n        break;\n    }\n    }\n\n    const result = next(action);\n\n    switch (action.type) {\n\n    // Actions that temporarily clear the user preferred state of tile view,\n    // then re-set it when needed.\n    case PIN_PARTICIPANT: {\n        const pinnedParticipant = getPinnedParticipant(store.getState());\n\n        if (pinnedParticipant) {\n            _storeTileViewStateAndClear(store);\n        } else {\n            _restoreTileViewState(store);\n        }\n        break;\n    }\n    case SET_DOCUMENT_EDITING_STATUS:\n        if (action.editing) {\n            _storeTileViewStateAndClear(store);\n        } else {\n            _restoreTileViewState(store);\n        }\n        break;\n\n    // Things to update when tile view state changes\n    case SET_TILE_VIEW:\n        if (action.enabled && getPinnedParticipant(store)) {\n            store.dispatch(pinParticipant(null));\n        }\n    }\n\n    if (shouldUpdateAutoPin) {\n        const screenShares = store.getState()['features/video-layout'].remoteScreenShares || [];\n\n        updateAutoPinnedParticipant(screenShares, store);\n    }\n\n    return result;\n});\n\n/**\n * Set up state change listener to perform maintenance tasks when the conference\n * is left or failed.\n */\nStateListenerRegistry.register(\n    state => getCurrentConference(state),\n    (conference, { dispatch }, previousConference) => {\n        if (conference !== previousConference) {\n            // conference changed, left or failed...\n            // Clear tile view state.\n            dispatch(setTileView());\n        }\n    });\n\n/**\n * Restores tile view state, if it wasn't updated since then.\n *\n * @param {Object} store - The Redux Store.\n * @returns {void}\n */\nfunction _restoreTileViewState({ dispatch, getState }) {\n    const { tileViewEnabled } = getState()['features/video-layout'];\n\n    if (tileViewEnabled === undefined && previousTileViewEnabled !== undefined) {\n        dispatch(setTileView(previousTileViewEnabled));\n    }\n\n    previousTileViewEnabled = undefined;\n}\n\n/**\n * Stores the current tile view state and clears it.\n *\n * @param {Object} store - The Redux Store.\n * @returns {void}\n */\nfunction _storeTileViewStateAndClear({ dispatch, getState }) {\n    const { tileViewEnabled } = getState()['features/video-layout'];\n\n    if (tileViewEnabled !== undefined) {\n        previousTileViewEnabled = tileViewEnabled;\n        dispatch(setTileView(undefined));\n    }\n}\n","// @flow\n\nimport debounce from 'lodash/debounce';\n\nimport { StateListenerRegistry, equals } from '../base/redux';\nimport { isFollowMeActive } from '../follow-me';\n\nimport { setRemoteParticipantsWithScreenShare } from './actions';\nimport { getAutoPinSetting, updateAutoPinnedParticipant } from './functions';\n\n/**\n * For auto-pin mode, listen for changes to the known media tracks and look\n * for updates to screen shares. The listener is debounced to avoid state\n * thrashing that might occur, especially when switching in or out of p2p.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/tracks'],\n    /* listener */ debounce((tracks, store) => {\n        if (!getAutoPinSetting() || isFollowMeActive(store)) {\n            return;\n        }\n\n        const oldScreenSharesOrder = store.getState()['features/video-layout'].remoteScreenShares || [];\n        const knownSharingParticipantIds = tracks.reduce((acc, track) => {\n            if (track.mediaType === 'video' && track.videoType === 'desktop') {\n                const skipTrack = getAutoPinSetting() === 'remote-only' && track.local;\n\n                if (!skipTrack) {\n                    acc.push(track.participantId);\n                }\n            }\n\n            return acc;\n        }, []);\n\n        // Filter out any participants which are no longer screen sharing\n        // by looping through the known sharing participants and removing any\n        // participant IDs which are no longer sharing.\n        const newScreenSharesOrder = oldScreenSharesOrder.filter(\n            participantId => knownSharingParticipantIds.includes(participantId));\n\n        // Make sure all new sharing participant get added to the end of the\n        // known screen shares.\n        knownSharingParticipantIds.forEach(participantId => {\n            if (!newScreenSharesOrder.includes(participantId)) {\n                newScreenSharesOrder.push(participantId);\n            }\n        });\n\n        if (!equals(oldScreenSharesOrder, newScreenSharesOrder)) {\n            store.dispatch(\n                setRemoteParticipantsWithScreenShare(newScreenSharesOrder));\n\n            updateAutoPinnedParticipant(oldScreenSharesOrder, store);\n        }\n    }, 100));\n","// @flow\n\nimport VideoLayout from '../../../modules/UI/videolayout/VideoLayout.js';\nimport { CONFERENCE_WILL_LEAVE } from '../base/conference';\nimport { MEDIA_TYPE } from '../base/media';\nimport {\n    getLocalParticipant,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_UPDATED\n} from '../base/participants';\nimport { MiddlewareRegistry } from '../base/redux';\nimport { TRACK_ADDED, TRACK_REMOVED, TRACK_STOPPED } from '../base/tracks';\nimport { SET_FILMSTRIP_VISIBLE } from '../filmstrip';\nimport { PARTICIPANTS_PANE_CLOSE, PARTICIPANTS_PANE_OPEN } from '../participants-pane/actionTypes.js';\n\nimport './middleware.any';\n\ndeclare var APP: Object;\n\n/**\n * Middleware which intercepts actions and updates the legacy component\n * {@code VideoLayout} as needed. The purpose of this middleware is to redux-ify\n * {@code VideoLayout} without having to simultaneously react-ifying it.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\n// eslint-disable-next-line no-unused-vars\nMiddlewareRegistry.register(store => next => action => {\n    // Purposefully perform additional actions after state update to mimic\n    // being connected to the store for updates.\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_WILL_LEAVE:\n        VideoLayout.reset();\n        break;\n\n    case PARTICIPANT_JOINED:\n        if (!action.participant.local) {\n            VideoLayout.updateVideoMutedForNoTracks(action.participant.id);\n        }\n        break;\n\n    case PARTICIPANT_UPDATED: {\n        // Look for actions that triggered a change to connectionStatus. This is\n        // done instead of changing the connection status change action to be\n        // explicit in order to minimize changes to other code.\n        if (typeof action.participant.connectionStatus !== 'undefined') {\n            VideoLayout.onParticipantConnectionStatusChanged(\n                action.participant.id,\n                action.participant.connectionStatus);\n        }\n        break;\n    }\n\n    case PARTICIPANTS_PANE_CLOSE:\n    case PARTICIPANTS_PANE_OPEN:\n    case SET_FILMSTRIP_VISIBLE:\n        VideoLayout.resizeVideoArea();\n        break;\n\n    case TRACK_ADDED:\n        if (action.track.mediaType !== MEDIA_TYPE.AUDIO) {\n            VideoLayout._updateLargeVideoIfDisplayed(action.track.participantId, true);\n        }\n\n        break;\n\n    case TRACK_STOPPED: {\n        if (action.track.jitsiTrack.isLocal()) {\n            const participant = getLocalParticipant(store.getState);\n\n            VideoLayout._updateLargeVideoIfDisplayed(participant?.id);\n        }\n        break;\n    }\n    case TRACK_REMOVED:\n        if (!action.track.local && action.track.mediaType !== MEDIA_TYPE.AUDIO) {\n            VideoLayout.updateVideoMutedForNoTracks(action.track.jitsiTrack.getParticipantId());\n        }\n\n        break;\n    }\n\n    return result;\n});\n","// @flow\n\nimport debounce from 'lodash/debounce';\n\nimport { _handleParticipantError } from '../base/conference';\nimport { getParticipantCount } from '../base/participants';\nimport { StateListenerRegistry } from '../base/redux';\nimport { reportError } from '../base/util';\nimport { shouldDisplayTileView } from '../video-layout';\n\nimport { setMaxReceiverVideoQuality } from './actions';\nimport { VIDEO_QUALITY_LEVELS } from './constants';\nimport { getReceiverVideoQualityLevel } from './functions';\nimport logger from './logger';\nimport { getMinHeightForQualityLvlMap } from './selector';\n\ndeclare var APP: Object;\n\n/**\n * Handles changes in the visible participants in the filmstrip. The listener is debounced\n * so that the client doesn't end up sending too many bridge messages when the user is\n * scrolling through the thumbnails prompting updates to the selected endpoints.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/filmstrip'].visibleParticipants,\n    /* listener */ debounce((visibleParticipants, store) => {\n        _updateReceiverVideoConstraints(store);\n    }, 100));\n\n/**\n * Handles the use case when the on-stage participant has changed.\n */\nStateListenerRegistry.register(\n    state => state['features/large-video'].participantId,\n    (participantId, store) => {\n        _updateReceiverVideoConstraints(store);\n    }\n);\n\n/**\n * Handles the use case when we have set some of the constraints in redux but the conference object wasn't available\n * and we haven't been able to pass the constraints to lib-jitsi-meet.\n */\nStateListenerRegistry.register(\n    state => state['features/base/conference'].conference,\n    (conference, store) => {\n        _updateReceiverVideoConstraints(store);\n    }\n);\n\n/**\n * Updates the receiver constraints when the layout changes. When we are in stage view we need to handle the\n * on-stage participant differently.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/video-layout'].tileViewEnabled,\n    /* listener */ (tileViewEnabled, store) => {\n        _updateReceiverVideoConstraints(store);\n    }\n);\n\n/**\n * StateListenerRegistry provides a reliable way of detecting changes to\n * lastn state and dispatching additional actions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => state['features/base/lastn'].lastN,\n    /* listener */ (lastN, store) => {\n        _updateReceiverVideoConstraints(store);\n    });\n\n/**\n * StateListenerRegistry provides a reliable way of detecting changes to\n * maxReceiverVideoQuality and preferredVideoQuality state and dispatching additional actions.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const {\n            maxReceiverVideoQuality,\n            preferredVideoQuality\n        } = state['features/video-quality'];\n\n        return {\n            maxReceiverVideoQuality,\n            preferredVideoQuality\n        };\n    },\n    /* listener */ (currentState, store, previousState = {}) => {\n        const { maxReceiverVideoQuality, preferredVideoQuality } = currentState;\n        const changedPreferredVideoQuality = preferredVideoQuality !== previousState.preferredVideoQuality;\n        const changedReceiverVideoQuality = maxReceiverVideoQuality !== previousState.maxReceiverVideoQuality;\n\n        if (changedPreferredVideoQuality) {\n            _setSenderVideoConstraint(preferredVideoQuality, store);\n            typeof APP !== 'undefined' && APP.API.notifyVideoQualityChanged(preferredVideoQuality);\n        }\n        changedReceiverVideoQuality && _updateReceiverVideoConstraints(store);\n    }, {\n        deepEquals: true\n    });\n\n/**\n * Implements a state listener in order to calculate max receiver video quality.\n */\nStateListenerRegistry.register(\n    /* selector */ state => {\n        const { reducedUI } = state['features/base/responsive-ui'];\n        const _shouldDisplayTileView = shouldDisplayTileView(state);\n        const thumbnailSize = state['features/filmstrip']?.tileViewDimensions?.thumbnailSize;\n        const participantCount = getParticipantCount(state);\n\n        return {\n            displayTileView: _shouldDisplayTileView,\n            participantCount,\n            reducedUI,\n            thumbnailHeight: thumbnailSize?.height\n        };\n    },\n    /* listener */ ({ displayTileView, participantCount, reducedUI, thumbnailHeight }, { dispatch, getState }) => {\n        const state = getState();\n        const { maxReceiverVideoQuality } = state['features/video-quality'];\n        const { maxFullResolutionParticipants = 2 } = state['features/base/config'];\n\n        let newMaxRecvVideoQuality = VIDEO_QUALITY_LEVELS.ULTRA;\n\n        if (reducedUI) {\n            newMaxRecvVideoQuality = VIDEO_QUALITY_LEVELS.LOW;\n        } else if (displayTileView && !Number.isNaN(thumbnailHeight)) {\n            newMaxRecvVideoQuality = getReceiverVideoQualityLevel(thumbnailHeight, getMinHeightForQualityLvlMap(state));\n\n            // Override HD level calculated for the thumbnail height when # of participants threshold is exceeded\n            if (maxReceiverVideoQuality !== newMaxRecvVideoQuality && maxFullResolutionParticipants !== -1) {\n                const override\n                    = participantCount > maxFullResolutionParticipants\n                        && newMaxRecvVideoQuality > VIDEO_QUALITY_LEVELS.STANDARD;\n\n                logger.info(`Video quality level for thumbnail height: ${thumbnailHeight}, `\n                    + `is: ${newMaxRecvVideoQuality}, `\n                    + `override: ${String(override)}, `\n                    + `max full res N: ${maxFullResolutionParticipants}`);\n\n                if (override) {\n                    newMaxRecvVideoQuality = VIDEO_QUALITY_LEVELS.STANDARD;\n                }\n            }\n        }\n\n        if (maxReceiverVideoQuality !== newMaxRecvVideoQuality) {\n            dispatch(setMaxReceiverVideoQuality(newMaxRecvVideoQuality));\n        }\n    }, {\n        deepEquals: true\n    });\n\n/**\n * Helper function for updating the preferred sender video constraint, based on the user preference.\n *\n * @param {number} preferred - The user preferred max frame height.\n * @returns {void}\n */\nfunction _setSenderVideoConstraint(preferred, { getState }) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (!conference) {\n        return;\n    }\n\n    logger.info(`Setting sender resolution to ${preferred}`);\n    conference.setSenderVideoConstraint(preferred)\n        .catch(error => {\n            _handleParticipantError(error);\n            reportError(error, `Changing sender resolution to ${preferred} failed.`);\n        });\n}\n\n/**\n * Private helper to calculate the receiver video constraints and set them on the bridge channel.\n *\n * @param {*} store - The redux store.\n * @returns {void}\n */\nfunction _updateReceiverVideoConstraints({ getState }) {\n    const state = getState();\n    const { conference } = state['features/base/conference'];\n\n    if (!conference) {\n        return;\n    }\n    const { lastN } = state['features/base/lastn'];\n    const { maxReceiverVideoQuality, preferredVideoQuality } = state['features/video-quality'];\n    const { visibleParticipants } = state['features/filmstrip'];\n    const { participantId: largeVideoParticipantId } = state['features/large-video'];\n    const maxFrameHeight = Math.min(maxReceiverVideoQuality, preferredVideoQuality);\n    const receiverConstraints = {\n        constraints: {},\n        defaultConstraints: { 'maxHeight': VIDEO_QUALITY_LEVELS.NONE },\n        lastN,\n        onStageEndpoints: [],\n        selectedEndpoints: []\n    };\n\n    // Tile view.\n    if (shouldDisplayTileView(state)) {\n        if (!visibleParticipants?.length) {\n            return;\n        }\n\n        visibleParticipants.forEach(participantId => {\n            receiverConstraints.constraints[participantId] = { 'maxHeight': maxFrameHeight };\n        });\n\n    // Stage view.\n    } else {\n        if (!visibleParticipants?.length && !largeVideoParticipantId) {\n            return;\n        }\n\n        if (visibleParticipants?.length > 0) {\n            visibleParticipants.forEach(participantId => {\n                receiverConstraints.constraints[participantId] = { 'maxHeight': VIDEO_QUALITY_LEVELS.LOW };\n            });\n        }\n\n        if (largeVideoParticipantId) {\n            receiverConstraints.constraints[largeVideoParticipantId] = { 'maxHeight': maxFrameHeight };\n            receiverConstraints.onStageEndpoints = [ largeVideoParticipantId ];\n        }\n    }\n\n    logger.info(`Setting receiver video constraints to ${JSON.stringify(receiverConstraints)}`);\n    try {\n        conference.setReceiverConstraints(receiverConstraints);\n    } catch (error) {\n        _handleParticipantError(error);\n        reportError(error, `Failed to set receiver video constraints ${JSON.stringify(receiverConstraints)}`);\n    }\n}\n","// @flow\n\n/**\n * Selects the thumbnail height to the quality level mapping from the config.\n *\n * @param {Object} state - The redux state.\n * @returns {Map<number,number>}\n */\nexport function getMinHeightForQualityLvlMap(state: Object): Map<number, number> {\n    return state['features/video-quality'].minHeightForQualityLvl;\n}\n","// @flow\n\nimport { CONFERENCE_JOINED } from '../base/conference';\nimport { SET_CONFIG } from '../base/config';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { setPreferredVideoQuality } from './actions';\nimport logger from './logger';\n\nimport './subscriber';\n\n/**\n * Implements the middleware of the feature video-quality.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_JOINED: {\n        if (navigator.product === 'ReactNative') {\n            const { resolution } = getState()['features/base/config'];\n\n            if (typeof resolution !== 'undefined') {\n                dispatch(setPreferredVideoQuality(Number.parseInt(resolution, 10)));\n                logger.info(`Configured preferred receiver video frame height to: ${resolution}`);\n            }\n        }\n        break;\n    }\n    case SET_CONFIG: {\n        const state = getState();\n        const { videoQuality = {} } = state['features/base/config'];\n        const { persistedPrefferedVideoQuality } = state['features/video-quality-persistent-storage'];\n\n        if (videoQuality.persist && typeof persistedPrefferedVideoQuality !== 'undefined') {\n            dispatch(setPreferredVideoQuality(persistedPrefferedVideoQuality));\n        }\n\n        break;\n    }\n    }\n\n    return result;\n});\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/videosipgw');\n","// @flow\n\nimport { CONFERENCE_WILL_JOIN } from '../base/conference';\nimport {\n    JitsiConferenceEvents,\n    JitsiSIPVideoGWStatus\n} from '../base/lib-jitsi-meet';\nimport { MiddlewareRegistry } from '../base/redux';\nimport {\n    showErrorNotification,\n    showNotification,\n    showWarningNotification\n} from '../notifications';\n\nimport {\n    SIP_GW_AVAILABILITY_CHANGED,\n    SIP_GW_INVITE_ROOMS\n} from './actionTypes';\nimport logger from './logger';\n\n/**\n * Middleware that captures conference video sip gw events and stores\n * the global sip gw availability in redux or show appropriate notification\n * for sip gw sessions.\n * Captures invitation actions that create sip gw sessions or display\n * appropriate error/warning notifications.\n *\n * @param {Store} store - The redux store.\n * @returns {Function}\n */\nMiddlewareRegistry.register(({ dispatch, getState }) => next => action => {\n    const result = next(action);\n\n    switch (action.type) {\n    case CONFERENCE_WILL_JOIN: {\n        const conference = getState()['features/base/conference'].joining;\n\n        conference.on(\n            JitsiConferenceEvents.VIDEO_SIP_GW_AVAILABILITY_CHANGED,\n            (...args) => dispatch(_availabilityChanged(...args)));\n        conference.on(\n            JitsiConferenceEvents.VIDEO_SIP_GW_SESSION_STATE_CHANGED,\n            event => {\n                const toDispatch = _sessionStateChanged(event);\n\n                // sessionStateChanged can decide there is nothing to dispatch\n                if (toDispatch) {\n                    dispatch(toDispatch);\n                }\n            });\n\n        break;\n    }\n    case SIP_GW_INVITE_ROOMS:\n        _inviteRooms(action.rooms, action.conference, dispatch);\n        break;\n    }\n\n    return result;\n});\n\n/**\n * Signals that sip gw availability had changed.\n *\n * @param {string} status - The new status of the service.\n * @returns {{\n *     type: SIP_GW_AVAILABILITY_CHANGED,\n *     status: string\n * }}\n * @private\n */\nfunction _availabilityChanged(status: string) {\n    return {\n        type: SIP_GW_AVAILABILITY_CHANGED,\n        status\n    };\n}\n\n/**\n * Processes the action from the actionType {@code SIP_GW_INVITE_ROOMS} by\n * inviting rooms into the conference or showing an error message.\n *\n * @param {Array} rooms - The conference rooms to invite.\n * @param {Object} conference - The JitsiConference to invite the rooms to.\n * @param {Function} dispatch - The redux dispatch function for emitting state\n * changes (queuing error notifications).\n * @private\n * @returns {void}\n */\nfunction _inviteRooms(rooms, conference, dispatch) {\n    for (const room of rooms) {\n        const { id: sipAddress, name: displayName } = room;\n\n        if (sipAddress && displayName) {\n            const newSession = conference\n                .createVideoSIPGWSession(sipAddress, displayName);\n\n            if (newSession instanceof Error) {\n                const e = newSession;\n\n                switch (e.message) {\n                case JitsiSIPVideoGWStatus.ERROR_NO_CONNECTION: {\n                    dispatch(showErrorNotification({\n                        descriptionKey: 'videoSIPGW.errorInvite',\n                        titleKey: 'videoSIPGW.errorInviteTitle'\n                    }));\n\n                    return;\n                }\n                case JitsiSIPVideoGWStatus.ERROR_SESSION_EXISTS: {\n                    dispatch(showWarningNotification({\n                        titleKey: 'videoSIPGW.errorAlreadyInvited',\n                        titleArguments: { displayName }\n                    }));\n\n                    return;\n                }\n                }\n\n                logger.error(\n                    'Unknown error trying to create sip videogw session',\n                    e);\n\n                return;\n            }\n\n            newSession.start();\n        } else {\n            logger.error(`No display name or sip number for ${\n                JSON.stringify(room)}`);\n        }\n    }\n}\n\n/**\n * Signals that a session we created has a change in its status.\n *\n * @param {string} event - The event describing the session state change.\n * @returns {{\n *     type: SHOW_NOTIFICATION\n * }}|null\n * @private\n */\nfunction _sessionStateChanged(\n        event: Object) {\n    switch (event.newState) {\n    case JitsiSIPVideoGWStatus.STATE_PENDING: {\n        return showNotification({\n            titleKey: 'videoSIPGW.pending',\n            titleArguments: {\n                displayName: event.displayName\n            }\n        }, 2000);\n    }\n    case JitsiSIPVideoGWStatus.STATE_FAILED: {\n        return showErrorNotification({\n            titleKey: 'videoSIPGW.errorInviteFailedTitle',\n            titleArguments: {\n                displayName: event.displayName\n            },\n            descriptionKey: 'videoSIPGW.errorInviteFailed'\n        });\n    }\n    case JitsiSIPVideoGWStatus.STATE_OFF: {\n        if (event.failureReason === JitsiSIPVideoGWStatus.STATUS_BUSY) {\n            return showErrorNotification({\n                descriptionKey: 'videoSIPGW.busy',\n                titleKey: 'videoSIPGW.busyTitle'\n            });\n        } else if (event.failureReason) {\n            logger.error(`Unknown sip videogw error ${event.newState} ${\n                event.failureReason}`);\n        }\n    }\n    }\n\n    // nothing to show\n    return null;\n}\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\n\nimport NotificationWithParticipants from '../../notifications/components/web/NotificationWithParticipants';\nimport {\n    approveParticipant,\n    dismissPendingAudioParticipant\n} from '../actions';\nimport { getParticipantsAskingToAudioUnmute } from '../functions';\n\n\n/**\n * Component used to display a list of participants who asked to be unmuted.\n * This is visible only to moderators.\n *\n * @returns {React$Element<'ul'> | null}\n */\nexport default function() {\n    const participants = useSelector(getParticipantsAskingToAudioUnmute);\n    const { t } = useTranslation();\n\n    return participants.length\n        ? (\n            <>\n                <div className = 'title'>\n                    { t('raisedHand') }\n                </div>\n                <NotificationWithParticipants\n                    approveButtonText = { t('notify.unmute') }\n                    onApprove = { approveParticipant }\n                    onReject = { dismissPendingAudioParticipant }\n                    participants = { participants }\n                    rejectButtonText = { t('dialog.dismiss') }\n                    testIdPrefix = 'avModeration' />\n            </>\n        ) : null;\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { Icon, IconHorizontalPoints } from '../../../base/icons';\nimport { ACTION_TRIGGER } from '../../constants';\n\nexport const ignoredChildClassName = 'ignore-child';\n\nexport const AntiCollapse = styled.br`\n  font-size: 0;\n`;\n\nexport const Button = styled.button`\n  align-items: center;\n  background-color: ${\n    // eslint-disable-next-line no-confusing-arrow\n    props => props.primary ? '#0056E0' : '#3D3D3D'\n};\n  border: 0;\n  border-radius: 6px;\n  display: flex;\n  font-weight: unset;\n  justify-content: center;\n  min-height: 32px;\n\n  &:hover {\n    background-color: ${\n    // eslint-disable-next-line no-confusing-arrow\n    props => props.primary ? '#246FE5' : '#525252'\n};\n  }\n`;\n\nexport const QuickActionButton = styled(Button)`\n  padding: 0 12px;\n`;\n\nexport const Container = styled.div`\n  box-sizing: border-box;\n  flex: 1;\n  overflow-y: auto;\n  position: relative;\n  padding: 0 ${props => props.theme.panePadding}px;\n\n  & > * + *:not(.${ignoredChildClassName}) {\n    margin-top: 16px;\n  }\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n`;\n\nexport const ContextMenu = styled.div.attrs(props => {\n    return {\n        className: props.className\n    };\n})`\n  background-color: #292929;\n  border-radius: 3px;\n  box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);\n  color: white;\n  font-size: ${props => props.theme.contextFontSize}px;\n  font-weight: ${props => props.theme.contextFontWeight};\n  margin-top: ${props => {\n        const {\n            participantActionButtonHeight,\n            participantItemHeight\n        } = props.theme;\n\n        return ((3 * participantItemHeight) + participantActionButtonHeight) / 4;\n    }}px;\n  position: absolute;\n  right: ${props => props.theme.panePadding}px;\n  top: 0;\n  z-index: 2;\n\n  & > li {\n    list-style: none;\n  }\n\n  ${props => props.isHidden && `\n    pointer-events: none;\n    visibility: hidden;\n  `}\n`;\n\nexport const ContextMenuIcon = styled(Icon).attrs({\n    size: 20\n})`\n  & > svg {\n    fill: #a4b8d1;\n  }\n`;\n\nexport const ContextMenuItem = styled.div`\n  align-items: center;\n  box-sizing: border-box;\n  cursor: pointer;\n  display: flex;\n  min-height: 40px;\n  padding: 8px 16px;\n\n  & > *:not(:last-child) {\n    margin-right: 16px;\n  }\n\n  &:hover {\n    background-color: #525252;\n  }\n`;\n\nexport const ContextMenuItemGroup = styled.div`\n  &:not(:empty) {\n    padding: 8px 0;\n  }\n\n  & + &:not(:empty) {\n    border-top: 1px solid #4C4D50;\n  }\n`;\n\nexport const Close = styled.div`\n  align-items: center;\n  cursor: pointer;\n  display: flex;\n  height: 20px;\n  justify-content: center;\n  width: 20px;\n\n  &:before, &:after {\n    content: '';\n    background-color: #a4b8d1;\n    border-radius: 2px;\n    height: 2px;\n    position: absolute;\n    transform-origin: center center;\n    width: 21px;\n  }\n\n  &:before {\n    transform: rotate(45deg);\n  }\n\n  &:after {\n    transform: rotate(-45deg);\n  }\n`;\n\nexport const Footer = styled.div`\n  background-color: #141414;\n  display: flex;\n  justify-content: flex-end;\n  padding: 24px ${props => props.theme.panePadding}px;\n\n  & > *:not(:last-child) {\n    margin-right: 16px;\n  }\n`;\n\nexport const FooterButton = styled(Button)`\n  height: 40px;\n  font-size: 15px;\n  padding: 0 16px;\n`;\n\nexport const FooterEllipsisButton = styled(FooterButton).attrs({\n    children: <Icon src = { IconHorizontalPoints } />\n})`\n  padding: 8px;\n`;\n\nexport const FooterEllipsisContainer = styled.div`\n  position: relative;\n`;\n\nexport const Header = styled.div`\n  align-items: center;\n  box-sizing: border-box;\n  display: flex;\n  height: ${props => props.theme.headerSize}px;\n  padding: 0 20px;\n`;\n\nexport const Heading = styled.div`\n  color: #d1dbe8;\n  font-style: normal;\n  font-size: 15px;\n  line-height: 24px;\n  margin: 8px 0 ${props => props.theme.panePadding}px;\n`;\n\nexport const ColoredIcon = styled.div`\n  & > div > svg {\n    fill: ${props => props.color || '#fff'};\n  }\n`;\n\nexport const ParticipantActionButton = styled(Button)`\n  height: ${props => props.theme.participantActionButtonHeight}px;\n  padding: 6px 10px;\n`;\n\nexport const ParticipantActionEllipsis = styled(ParticipantActionButton).attrs({\n    children: <Icon src = { IconHorizontalPoints } />,\n    primary: true\n})`\n  padding: 6px;\n`;\n\nexport const ParticipantActions = styled.div`\n  align-items: center;\n  z-index: 1;\n\n  & > *:not(:last-child) {\n    margin-right: 8px;\n  }\n`;\n\nexport const ParticipantActionsHover = styled(ParticipantActions)`\n  background-color: #292929;\n  bottom: 1px;\n  display: none;\n  position: absolute;\n  right: ${props => props.theme.panePadding};\n  top: 0;\n\n  &:after {\n    content: '';\n    background: linear-gradient(90deg, rgba(0, 0, 0, 0) 0%, #292929 100%);\n    bottom: 0;\n    display: block;\n    left: 0;\n    pointer-events: none;\n    position: absolute;\n    top: 0;\n    transform: translateX(-100%);\n    width: 40px;\n  }\n`;\n\nexport const ParticipantActionsPermanent = styled(ParticipantActions)`\n  display: flex;\n`;\n\nexport const ParticipantContent = styled.div`\n  align-items: center;\n  box-shadow: inset 0px -1px 0px rgba(255, 255, 255, 0.15);\n  display: flex;\n  flex: 1;\n  height: 100%;\n  overflow: hidden;\n  padding-right: ${props => props.theme.panePadding}px;\n`;\n\nexport const ParticipantContainer = styled.div`\n  align-items: center;\n  color: white;\n  display: flex;\n  font-size: 13px;\n  height: ${props => props.theme.participantItemHeight}px;\n  margin: 0 -${props => props.theme.panePadding}px;\n  padding-left: ${props => props.theme.panePadding}px;\n  position: relative;\n\n  ${props => !props.isHighlighted && '&:hover {'}\n    background-color: #292929;\n\n    & ${ParticipantActions} {\n      ${props => props.trigger === ACTION_TRIGGER.HOVER && `\n        display: flex;\n      `}\n    }\n\n    & ${ParticipantContent} {\n      box-shadow: none;\n    }\n  ${props => !props.isHighlighted && '}'}\n`;\n\nexport const ParticipantInviteButton = styled(Button).attrs({\n    primary: true\n})`\n  font-size: 15px;\n  height: 40px;\n  width: 100%;\n\n  & > *:not(:last-child) {\n    margin-right: 8px;\n  }\n`;\n\nexport const ParticipantName = styled.div`\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n`;\n\nexport const ParticipantNameContainer = styled.div`\n  display: flex;\n  flex: 1;\n  margin-right: 8px;\n  overflow: hidden;\n`;\n\nexport const ParticipantStates = styled.div`\n  display: flex;\n  justify-content: flex-end;\n\n  & > * {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n  }\n\n  & > *:not(:last-child) {\n    margin-right: 8px;\n  }\n`;\n\nexport const RaisedHandIndicatorBackground = styled.div`\n  background-color: #ed9e1b;\n  border-radius: 3px;\n  height: 24px;\n  width: 24px;\n`;\n\nexport const VolumeInput = styled.input.attrs({\n    type: 'range'\n})`\n  width: 100%;\n`;\n\nexport const VolumeInputContainer = styled.div`\n  position: relative;\n  width: 100%;\n`;\n\nexport const VolumeOverlay = styled.div`\n  background-color: #0376da;\n  border-radius: 1px 0 0 1px;\n  height: 100%;\n  left: 0;\n  pointer-events: none;\n  position: absolute;\n`;\n","// @flow\n\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\n\nimport { createToolbarEvent, sendAnalytics } from '../../../analytics';\nimport { Icon, IconInviteMore } from '../../../base/icons';\nimport { beginAddPeople } from '../../../invite';\n\nimport { ParticipantInviteButton } from './styled';\n\nexport const InviteButton = () => {\n    const dispatch = useDispatch();\n    const { t } = useTranslation();\n\n    const onInvite = useCallback(() => {\n        sendAnalytics(createToolbarEvent('invite'));\n        dispatch(beginAddPeople());\n    }, [ dispatch ]);\n\n    return (\n        <ParticipantInviteButton\n            aria-label = { t('participantsPane.actions.invite') }\n            onClick = { onInvite }>\n            <Icon\n                size = { 20 }\n                src = { IconInviteMore } />\n            <span>{t('participantsPane.actions.invite')}</span>\n        </ParticipantInviteButton>\n    );\n};\n","// @flow\n\nimport React from 'react';\n\nimport { Icon, IconRaisedHandHollow } from '../../../base/icons';\n\nimport { RaisedHandIndicatorBackground } from './styled';\n\nexport const RaisedHandIndicator = () => (\n    <RaisedHandIndicatorBackground>\n        <Icon\n            size = { 15 }\n            src = { IconRaisedHandHollow } />\n    </RaisedHandIndicatorBackground>\n);\n","// @flow\n\nimport React, { type Node } from 'react';\n\nimport { Avatar } from '../../../base/avatar';\nimport {\n    Icon,\n    IconCameraEmpty,\n    IconCameraEmptyDisabled,\n    IconMicrophoneEmpty,\n    IconMicrophoneEmptySlash\n} from '../../../base/icons';\nimport { ACTION_TRIGGER, MEDIA_STATE, type ActionTrigger, type MediaState } from '../../constants';\n\nimport { RaisedHandIndicator } from './RaisedHandIndicator';\nimport {\n    ColoredIcon,\n    ParticipantActionsHover,\n    ParticipantActionsPermanent,\n    ParticipantContainer,\n    ParticipantContent,\n    ParticipantName,\n    ParticipantNameContainer,\n    ParticipantStates\n} from './styled';\n\n/**\n * Participant actions component mapping depending on trigger type.\n */\nconst Actions = {\n    [ACTION_TRIGGER.HOVER]: ParticipantActionsHover,\n    [ACTION_TRIGGER.PERMANENT]: ParticipantActionsPermanent\n};\n\n/**\n * Icon mapping for possible participant audio states.\n */\nconst AudioStateIcons: {[MediaState]: React$Element<any> | null} = {\n    [MEDIA_STATE.FORCE_MUTED]: (\n        <ColoredIcon color = '#E04757'>\n            <Icon\n                size = { 16 }\n                src = { IconMicrophoneEmptySlash } />\n        </ColoredIcon>\n    ),\n    [MEDIA_STATE.MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconMicrophoneEmptySlash } />\n    ),\n    [MEDIA_STATE.UNMUTED]: (\n        <ColoredIcon color = '#1EC26A'>\n            <Icon\n                size = { 16 }\n                src = { IconMicrophoneEmpty } />\n        </ColoredIcon>\n    ),\n    [MEDIA_STATE.NONE]: null\n};\n\n/**\n * Icon mapping for possible participant video states.\n */\nconst VideoStateIcons = {\n    [MEDIA_STATE.FORCE_MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmptyDisabled } />\n    ),\n    [MEDIA_STATE.MUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmptyDisabled } />\n    ),\n    [MEDIA_STATE.UNMUTED]: (\n        <Icon\n            size = { 16 }\n            src = { IconCameraEmpty } />\n    ),\n    [MEDIA_STATE.NONE]: null\n};\n\ntype Props = {\n\n    /**\n     * Type of trigger for the participant actions\n     */\n    actionsTrigger: ActionTrigger,\n\n    /**\n     * Media state for audio\n     */\n    audioMediaState: MediaState,\n\n    /**\n     * React children\n     */\n    children: Node,\n\n    /**\n     * The name of the participant. Used for showing lobby names.\n     */\n    displayName: string,\n\n    /**\n     * Is this item highlighted/raised\n     */\n    isHighlighted?: boolean,\n\n    /**\n     * True if the participant is local.\n     */\n    local: boolean,\n\n    /**\n     * Callback for when the mouse leaves this component\n     */\n    onLeave?: Function,\n\n    /**\n     * The ID of the participant.\n     */\n    participantID: string,\n\n    /**\n     * True if the participant have raised hand.\n     */\n    raisedHand: boolean,\n\n    /**\n     * Media state for video\n     */\n    videoMuteState: MediaState,\n\n    /**\n     * The translated \"you\" text.\n     */\n    youText: string\n}\n\n/**\n * A component representing a participant entry in ParticipantPane and Lobby.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactNode}\n */\nexport default function ParticipantItem({\n    children,\n    isHighlighted,\n    onLeave,\n    actionsTrigger = ACTION_TRIGGER.HOVER,\n    audioMediaState = MEDIA_STATE.NONE,\n    videoMuteState = MEDIA_STATE.NONE,\n    displayName,\n    participantID,\n    local,\n    raisedHand,\n    youText\n}: Props) {\n    const ParticipantActions = Actions[actionsTrigger];\n\n    return (\n        <ParticipantContainer\n            isHighlighted = { isHighlighted }\n            onMouseLeave = { onLeave }\n            trigger = { actionsTrigger }>\n            <Avatar\n                className = 'participant-avatar'\n                participantId = { participantID }\n                size = { 32 } />\n            <ParticipantContent>\n                <ParticipantNameContainer>\n                    <ParticipantName>\n                        { displayName }\n                    </ParticipantName>\n                    { local ? <span>&nbsp;({ youText })</span> : null }\n                </ParticipantNameContainer>\n                { !local && <ParticipantActions children = { children } /> }\n                <ParticipantStates>\n                    { raisedHand && <RaisedHandIndicator /> }\n                    { VideoStateIcons[videoMuteState] }\n                    { AudioStateIcons[audioMediaState] }\n                </ParticipantStates>\n            </ParticipantContent>\n        </ParticipantContainer>\n    );\n}\n","// @flow\n\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\n\nimport { approveKnockingParticipant, rejectKnockingParticipant } from '../../../lobby/actions';\nimport { ACTION_TRIGGER, MEDIA_STATE } from '../../constants';\n\nimport ParticipantItem from './ParticipantItem';\nimport { ParticipantActionButton } from './styled';\n\ntype Props = {\n\n    /**\n     * Participant reference\n     */\n    participant: Object\n};\n\nexport const LobbyParticipantItem = ({ participant: p }: Props) => {\n    const dispatch = useDispatch();\n    const admit = useCallback(() => dispatch(approveKnockingParticipant(p.id), [ dispatch ]));\n    const reject = useCallback(() => dispatch(rejectKnockingParticipant(p.id), [ dispatch ]));\n    const { t } = useTranslation();\n\n    return (\n        <ParticipantItem\n            actionsTrigger = { ACTION_TRIGGER.PERMANENT }\n            audioMediaState = { MEDIA_STATE.NONE }\n            displayName = { p.name }\n            local = { p.local }\n            participantID = { p.id }\n            raisedHand = { p.raisedHand }\n            videoMuteState = { MEDIA_STATE.NONE }\n            youText = { t('chat.you') }>\n            <ParticipantActionButton\n                onClick = { reject }>\n                {t('lobby.reject')}\n            </ParticipantActionButton>\n            <ParticipantActionButton\n                onClick = { admit }\n                primary = { true }>\n                {t('lobby.admit')}\n            </ParticipantActionButton>\n        </ParticipantItem>\n    );\n};\n","// @flow\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { withPixelLineHeight } from '../../../base/styles/functions.web';\nimport { admitMultiple } from '../../../lobby/actions.web';\nimport { getLobbyState } from '../../../lobby/functions';\n\nimport { LobbyParticipantItem } from './LobbyParticipantItem';\n\nconst useStyles = makeStyles(theme => {\n    return {\n        headingContainer: {\n            alignItems: 'center',\n            display: 'flex',\n            justifyContent: 'space-between'\n        },\n        heading: {\n            ...withPixelLineHeight(theme.typography.heading7),\n            color: theme.palette.text02\n        },\n        link: {\n            ...withPixelLineHeight(theme.typography.labelBold),\n            color: theme.palette.link01,\n            cursor: 'pointer'\n        }\n    };\n});\n\n\nexport const LobbyParticipantList = () => {\n    const {\n        lobbyEnabled,\n        knockingParticipants: participants\n    } = useSelector(getLobbyState);\n    const { t } = useTranslation();\n    const classes = useStyles();\n    const dispatch = useDispatch();\n    const admitAll = useCallback(() => {\n        dispatch(admitMultiple(participants));\n    }, [ dispatch, participants ]);\n\n    if (!lobbyEnabled || !participants.length) {\n        return null;\n    }\n\n    return (\n    <>\n        <div className = { classes.headingContainer }>\n            <div className = { classes.heading }>\n                {t('participantsPane.headings.lobby', { count: participants.length })}\n            </div>\n            {\n                participants.length > 1 && (\n                    <div\n                        className = { classes.link }\n                        onClick = { admitAll }>{t('lobby.admitAll')}</div>\n                )\n            }\n        </div>\n        <div>\n            {participants.map(p => (\n                <LobbyParticipantItem\n                    key = { p.id }\n                    participant = { p } />)\n            )}\n        </div>\n    </>\n    );\n};\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { isToolbarButtonEnabled } from '../../../base/config/functions.web';\nimport { openDialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport {\n    IconCloseCircle,\n    IconCrown,\n    IconMessage,\n    IconMicDisabled,\n    IconMuteEveryoneElse,\n    IconVideoOff\n} from '../../../base/icons';\nimport {\n    getParticipantByIdOrUndefined,\n    isLocalParticipantModerator,\n    isParticipantModerator\n} from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { isParticipantAudioMuted, isParticipantVideoMuted } from '../../../base/tracks';\nimport { openChat } from '../../../chat/actions';\nimport { GrantModeratorDialog, KickRemoteParticipantDialog, MuteEveryoneDialog } from '../../../video-menu';\nimport MuteRemoteParticipantsVideoDialog from '../../../video-menu/components/web/MuteRemoteParticipantsVideoDialog';\nimport { getComputedOuterHeight } from '../../functions';\n\nimport {\n    ContextMenu,\n    ContextMenuIcon,\n    ContextMenuItem,\n    ContextMenuItemGroup,\n    ignoredChildClassName\n} from './styled';\n\ntype Props = {\n\n    /**\n     * True if the local participant is moderator and false otherwise.\n     */\n    _isLocalModerator: boolean,\n\n    /**\n     * True if the chat button is enabled and false otherwise.\n     */\n    _isChatButtonEnabled: boolean,\n\n    /**\n     * True if the participant is moderator and false otherwise.\n     */\n    _isParticipantModerator: boolean,\n\n    /**\n     * True if the participant is video muted and false otherwise.\n     */\n    _isParticipantVideoMuted: boolean,\n\n    /**\n     * True if the participant is audio muted and false otherwise.\n     */\n    _isParticipantAudioMuted: boolean,\n\n    /**\n     * Participant reference\n     */\n    _participant: Object,\n\n    /**\n     * The dispatch function from redux.\n     */\n    dispatch: Function,\n\n    /**\n     * Callback used to open a confirmation dialog for audio muting.\n     */\n    muteAudio: Function,\n\n    /**\n     * Target elements against which positioning calculations are made\n     */\n    offsetTarget: HTMLElement,\n\n    /**\n     * Callback for the mouse entering the component\n     */\n    onEnter: Function,\n\n    /**\n     * Callback for the mouse leaving the component\n     */\n    onLeave: Function,\n\n    /**\n     * Callback for making a selection in the menu\n     */\n    onSelect: Function,\n\n    /**\n     * The ID of the participant.\n     */\n    participantID: string,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\ntype State = {\n\n    /**\n     * If true the context menu will be hidden.\n     */\n    isHidden: boolean\n};\n\n/**\n * Implements the MeetingParticipantContextMenu component.\n */\nclass MeetingParticipantContextMenu extends Component<Props, State> {\n\n    /**\n     * Reference to the context menu container div.\n     */\n    _containerRef: Object;\n\n    /**\n     * Creates new instance of MeetingParticipantContextMenu.\n     *\n     * @param {Props} props - The props.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            isHidden: true\n        };\n\n        this._containerRef = React.createRef();\n\n        this._onGrantModerator = this._onGrantModerator.bind(this);\n        this._onKick = this._onKick.bind(this);\n        this._onMuteEveryoneElse = this._onMuteEveryoneElse.bind(this);\n        this._onMuteVideo = this._onMuteVideo.bind(this);\n        this._onSendPrivateMessage = this._onSendPrivateMessage.bind(this);\n        this._position = this._position.bind(this);\n    }\n\n    _onGrantModerator: () => void;\n\n    /**\n     * Grant moderator permissions.\n     *\n     * @returns {void}\n     */\n    _onGrantModerator() {\n        const { _participant, dispatch } = this.props;\n\n        dispatch(openDialog(GrantModeratorDialog, {\n            participantID: _participant?.id\n        }));\n    }\n\n    _onKick: () => void;\n\n    /**\n     * Kicks the participant.\n     *\n     * @returns {void}\n     */\n    _onKick() {\n        const { _participant, dispatch } = this.props;\n\n        dispatch(openDialog(KickRemoteParticipantDialog, {\n            participantID: _participant?.id\n        }));\n    }\n\n    _onMuteEveryoneElse: () => void;\n\n    /**\n     * Mutes everyone else.\n     *\n     * @returns {void}\n     */\n    _onMuteEveryoneElse() {\n        const { _participant, dispatch } = this.props;\n\n        dispatch(openDialog(MuteEveryoneDialog, {\n            exclude: [ _participant?.id ]\n        }));\n    }\n\n    _onMuteVideo: () => void;\n\n    /**\n     * Mutes the video of the selected participant.\n     *\n     * @returns {void}\n     */\n    _onMuteVideo() {\n        const { _participant, dispatch } = this.props;\n\n        dispatch(openDialog(MuteRemoteParticipantsVideoDialog, {\n            participantID: _participant?.id\n        }));\n    }\n\n    _onSendPrivateMessage: () => void;\n\n    /**\n     * Sends private message.\n     *\n     * @returns {void}\n     */\n    _onSendPrivateMessage() {\n        const { _participant, dispatch } = this.props;\n\n        dispatch(openChat(_participant));\n    }\n\n    _position: () => void;\n\n    /**\n     * Positions the context menu.\n     *\n     * @returns {void}\n     */\n    _position() {\n        const { _participant, offsetTarget } = this.props;\n\n        if (_participant\n            && this._containerRef.current\n            && offsetTarget?.offsetParent\n            && offsetTarget.offsetParent instanceof HTMLElement\n        ) {\n            const { current: container } = this._containerRef;\n            const { offsetTop, offsetParent: { offsetHeight, scrollTop } } = offsetTarget;\n            const outerHeight = getComputedOuterHeight(container);\n\n            container.style.top = offsetTop + outerHeight > offsetHeight + scrollTop\n                ? offsetTop - outerHeight\n                : offsetTop;\n\n            this.setState({ isHidden: false });\n        } else {\n            this.setState({ isHidden: true });\n        }\n    }\n\n    /**\n     * Implements React Component's componentDidMount.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        this._position();\n    }\n\n    /**\n     * Implements React Component's componentDidUpdate.\n     *\n     * @inheritdoc\n     */\n    componentDidUpdate(prevProps: Props) {\n        if (prevProps.offsetTarget !== this.props.offsetTarget || prevProps._participant !== this.props._participant) {\n            this._position();\n        }\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _isLocalModerator,\n            _isChatButtonEnabled,\n            _isParticipantModerator,\n            _isParticipantVideoMuted,\n            _isParticipantAudioMuted,\n            _participant,\n            onEnter,\n            onLeave,\n            onSelect,\n            muteAudio,\n            t\n        } = this.props;\n\n        if (!_participant) {\n            return null;\n        }\n\n        return (\n            <ContextMenu\n                className = { ignoredChildClassName }\n                innerRef = { this._containerRef }\n                isHidden = { this.state.isHidden }\n                onClick = { onSelect }\n                onMouseEnter = { onEnter }\n                onMouseLeave = { onLeave }>\n                <ContextMenuItemGroup>\n                    {\n                        _isLocalModerator && (\n                            <>\n                                {\n                                    !_isParticipantAudioMuted\n                                        && <ContextMenuItem onClick = { muteAudio(_participant) }>\n                                            <ContextMenuIcon src = { IconMicDisabled } />\n                                            <span>{t('dialog.muteParticipantButton')}</span>\n                                        </ContextMenuItem>\n                                }\n\n                                <ContextMenuItem onClick = { this._onMuteEveryoneElse }>\n                                    <ContextMenuIcon src = { IconMuteEveryoneElse } />\n                                    <span>{t('toolbar.accessibilityLabel.muteEveryoneElse')}</span>\n                                </ContextMenuItem>\n                            </>\n                        )\n                    }\n\n                    {\n                        _isLocalModerator && (\n                            _isParticipantVideoMuted || (\n                                <ContextMenuItem onClick = { this._onMuteVideo }>\n                                    <ContextMenuIcon src = { IconVideoOff } />\n                                    <span>{t('participantsPane.actions.stopVideo')}</span>\n                                </ContextMenuItem>\n                            )\n                        )\n                    }\n                </ContextMenuItemGroup>\n\n                <ContextMenuItemGroup>\n                    {\n                        _isLocalModerator && (\n                            <>\n                                {\n                                    !_isParticipantModerator && (\n                                        <ContextMenuItem onClick = { this._onGrantModerator }>\n                                            <ContextMenuIcon src = { IconCrown } />\n                                            <span>{t('toolbar.accessibilityLabel.grantModerator')}</span>\n                                        </ContextMenuItem>\n                                    )\n                                }\n                                <ContextMenuItem onClick = { this._onKick }>\n                                    <ContextMenuIcon src = { IconCloseCircle } />\n                                    <span>{ t('videothumbnail.kick') }</span>\n                                </ContextMenuItem>\n                            </>\n                        )\n                    }\n                    {\n                        _isChatButtonEnabled && (\n                            <ContextMenuItem onClick = { this._onSendPrivateMessage }>\n                                <ContextMenuIcon src = { IconMessage } />\n                                <span>{t('toolbar.accessibilityLabel.privateMessage')}</span>\n                            </ContextMenuItem>\n                        )\n                    }\n                </ContextMenuItemGroup>\n            </ContextMenu>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps): Object {\n    const { participantID } = ownProps;\n\n    const participant = getParticipantByIdOrUndefined(state, participantID);\n\n    const _isLocalModerator = isLocalParticipantModerator(state);\n    const _isChatButtonEnabled = isToolbarButtonEnabled('chat', state);\n    const _isParticipantVideoMuted = isParticipantVideoMuted(participant, state);\n    const _isParticipantAudioMuted = isParticipantAudioMuted(participant, state);\n    const _isParticipantModerator = isParticipantModerator(participant);\n\n    return {\n        _isLocalModerator,\n        _isChatButtonEnabled,\n        _isParticipantModerator,\n        _isParticipantVideoMuted,\n        _isParticipantAudioMuted,\n        _participant: participant\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(MeetingParticipantContextMenu));\n","// @flow\n\nimport React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { approveParticipant } from '../../av-moderation/actions';\n\nimport { QuickActionButton } from './web/styled';\n\ntype Props = {\n\n    /**\n     * The translated ask unmute text.\n     */\n    askUnmuteText: string,\n\n    /**\n     * Participant id.\n     */\n    id: string\n}\n\n/**\n * Component used to display the `ask to unmute` button.\n *\n * @param {Object} participant - Participant reference.\n * @returns {React$Element<'button'>}\n */\nexport default function AskToUnmuteButton({ id, askUnmuteText }: Props) {\n    const dispatch = useDispatch();\n    const askToUnmute = useCallback(() => {\n        dispatch(approveParticipant(id));\n    }, [ dispatch, id ]);\n\n    return (\n        <QuickActionButton\n            onClick = { askToUnmute }\n            primary = { true }\n            theme = {{\n                panePadding: 16\n            }}>\n            { askUnmuteText }\n        </QuickActionButton>\n    );\n}\n","// @flow\n\nimport React from 'react';\n\nimport { QUICK_ACTION_BUTTON } from '../constants';\n\nimport AskToUnmuteButton from './AskToUnmuteButton';\nimport { QuickActionButton } from './web/styled';\n\ntype Props = {\n\n    /**\n     * The translated \"ask unmute\" text.\n     */\n    askUnmuteText: string,\n\n    /**\n     * The type of button to be displayed.\n     */\n    buttonType: string,\n\n    /**\n     * Callback used to open a confirmation dialog for audio muting.\n     */\n    muteAudio: Function,\n\n    muteParticipantButtonText: string,\n\n    /**\n     * The ID of the participant.\n     */\n    participantID: string,\n}\n\n/**\n * Component used to display mute/ask to unmute button.\n *\n * @param {Props} props - The props of the component.\n * @returns {React$Element<'button'>}\n */\nexport default function ParticipantQuickAction({\n    askUnmuteText,\n    buttonType,\n    muteAudio,\n    muteParticipantButtonText,\n    participantID\n}: Props) {\n    switch (buttonType) {\n    case QUICK_ACTION_BUTTON.MUTE: {\n        return (\n            <QuickActionButton\n                onClick = { muteAudio(participantID) }\n                primary = { true }>\n                { muteParticipantButtonText }\n            </QuickActionButton>\n        );\n    }\n    case QUICK_ACTION_BUTTON.ASK_TO_UNMUTE: {\n        return (\n            <AskToUnmuteButton\n                askUnmuteText = { askUnmuteText }\n                id = { participantID } />\n        );\n    }\n    default: {\n        return null;\n    }\n    }\n}\n","// @flow\n\nimport React from 'react';\n\nimport { getParticipantByIdOrUndefined, getParticipantDisplayName } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { isParticipantAudioMuted, isParticipantVideoMuted } from '../../../base/tracks';\nimport { ACTION_TRIGGER, MEDIA_STATE, type MediaState } from '../../constants';\nimport { getParticipantAudioMediaState, getQuickActionButtonType } from '../../functions';\nimport ParticipantQuickAction from '../ParticipantQuickAction';\n\nimport ParticipantItem from './ParticipantItem';\nimport { ParticipantActionEllipsis } from './styled';\n\ntype Props = {\n\n    /**\n     * Media state for audio.\n     */\n    _audioMediaState: MediaState,\n\n    /**\n     * The display name of the participant.\n     */\n    _displayName: string,\n\n    /**\n     * True if the participant is video muted.\n     */\n    _isVideoMuted: boolean,\n\n    /**\n     * True if the participant is the local participant.\n     */\n    _local: boolean,\n\n    /**\n     * The participant ID.\n     *\n     * NOTE: This ID may be different from participantID prop in the case when we pass undefined for the local\n     * participant. In this case the local participant ID will be filled trough _participantID prop.\n     */\n    _participantID: string,\n\n    /**\n     * The type of button to be rendered for the quick action.\n     */\n    _quickActionButtonType: string,\n\n    /**\n     * True if the participant have raised hand.\n     */\n    _raisedHand: boolean,\n\n    /**\n     * The translated ask unmute text for the qiuck action buttons.\n     */\n    askUnmuteText: string,\n\n    /**\n     * Is this item highlighted\n     */\n    isHighlighted: boolean,\n\n    /**\n     * Callback used to open a confirmation dialog for audio muting.\n     */\n    muteAudio: Function,\n\n    /**\n     * The translated text for the mute participant button.\n     */\n    muteParticipantButtonText: string,\n\n    /**\n     * Callback for the activation of this item's context menu\n     */\n    onContextMenu: Function,\n\n    /**\n     * Callback for the mouse leaving this item\n     */\n    onLeave: Function,\n\n    /**\n     * The aria-label for the ellipsis action.\n     */\n    participantActionEllipsisLabel: string,\n\n    /**\n     * The ID of the participant.\n     */\n    participantID: ?string,\n\n    /**\n     * The translated \"you\" text.\n     */\n    youText: string\n};\n\n/**\n * Implements the MeetingParticipantItem component.\n *\n * @param {Props} props - The props of the component.\n * @returns {ReactElement}\n */\nfunction MeetingParticipantItem({\n    _audioMediaState,\n    _displayName,\n    _isVideoMuted,\n    _local,\n    _participantID,\n    _quickActionButtonType,\n    _raisedHand,\n    askUnmuteText,\n    isHighlighted,\n    onContextMenu,\n    onLeave,\n    muteAudio,\n    muteParticipantButtonText,\n    participantActionEllipsisLabel,\n    youText\n}: Props) {\n    return (\n        <ParticipantItem\n            actionsTrigger = { ACTION_TRIGGER.HOVER }\n            audioMediaState = { _audioMediaState }\n            displayName = { _displayName }\n            isHighlighted = { isHighlighted }\n            local = { _local }\n            onLeave = { onLeave }\n            participantID = { _participantID }\n            raisedHand = { _raisedHand }\n            videoMuteState = { _isVideoMuted ? MEDIA_STATE.MUTED : MEDIA_STATE.UNMUTED }\n            youText = { youText }>\n            <ParticipantQuickAction\n                askUnmuteText = { askUnmuteText }\n                buttonType = { _quickActionButtonType }\n                muteAudio = { muteAudio }\n                muteParticipantButtonText = { muteParticipantButtonText }\n                participantID = { _participantID } />\n            <ParticipantActionEllipsis\n                aria-label = { participantActionEllipsisLabel }\n                onClick = { onContextMenu } />\n        </ParticipantItem>\n    );\n}\n\n/**\n * Maps (parts of) the redux state to the associated props for this component.\n *\n * @param {Object} state - The Redux state.\n * @param {Object} ownProps - The own props of the component.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state, ownProps): Object {\n    const { participantID } = ownProps;\n\n    const participant = getParticipantByIdOrUndefined(state, participantID);\n\n    const _isAudioMuted = isParticipantAudioMuted(participant, state);\n    const _isVideoMuted = isParticipantVideoMuted(participant, state);\n    const _audioMediaState = getParticipantAudioMediaState(participant, _isAudioMuted, state);\n    const _quickActionButtonType = getQuickActionButtonType(participant, _isAudioMuted, state);\n\n    return {\n        _audioMediaState,\n        _displayName: getParticipantDisplayName(state, participant?.id),\n        _isAudioMuted,\n        _isVideoMuted,\n        _local: Boolean(participant?.local),\n        _participantID: participant?.id,\n        _quickActionButtonType,\n        _raisedHand: Boolean(participant?.raisedHand)\n    };\n}\n\nexport default connect(_mapStateToProps)(MeetingParticipantItem);\n","// @flow\n\nimport React, { useCallback, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { openDialog } from '../../../base/dialog';\nimport {\n    getLocalParticipant,\n    getParticipantCountWithFake,\n    getRemoteParticipants\n} from '../../../base/participants';\nimport MuteRemoteParticipantDialog from '../../../video-menu/components/web/MuteRemoteParticipantDialog';\nimport { findStyledAncestor, shouldRenderInviteButton } from '../../functions';\n\nimport { InviteButton } from './InviteButton';\nimport MeetingParticipantContextMenu from './MeetingParticipantContextMenu';\nimport MeetingParticipantItem from './MeetingParticipantItem';\nimport { Heading, ParticipantContainer } from './styled';\n\ntype NullProto = {\n  [key: string]: any,\n  __proto__: null\n};\n\ntype RaiseContext = NullProto | {|\n\n  /**\n   * Target elements against which positioning calculations are made\n   */\n  offsetTarget?: HTMLElement,\n\n  /**\n   * The ID of the participant.\n   */\n  participantID?: String,\n|};\n\nconst initialState = Object.freeze(Object.create(null));\n\n/**\n * Renders the MeetingParticipantList component.\n *\n * @returns {ReactNode} - The component.\n */\nexport function MeetingParticipantList() {\n    const dispatch = useDispatch();\n    const isMouseOverMenu = useRef(false);\n    const participants = useSelector(getRemoteParticipants);\n    const localParticipant = useSelector(getLocalParticipant);\n\n    // This is very important as getRemoteParticipants is not changing its reference object\n    // and we will not re-render on change, but if count changes we will do\n    const participantsCount = useSelector(getParticipantCountWithFake);\n\n    const showInviteButton = useSelector(shouldRenderInviteButton);\n    const [ raiseContext, setRaiseContext ] = useState<RaiseContext>(initialState);\n    const { t } = useTranslation();\n\n    const lowerMenu = useCallback(() => {\n        /**\n         * We are tracking mouse movement over the active participant item and\n         * the context menu. Due to the order of enter/leave events, we need to\n         * defer checking if the mouse is over the context menu with\n         * queueMicrotask\n         */\n        window.queueMicrotask(() => {\n            if (isMouseOverMenu.current) {\n                return;\n            }\n\n            if (raiseContext !== initialState) {\n                setRaiseContext(initialState);\n            }\n        });\n    }, [ raiseContext ]);\n\n    const raiseMenu = useCallback((participantID, target) => {\n        setRaiseContext({\n            participantID,\n            offsetTarget: findStyledAncestor(target, ParticipantContainer)\n        });\n    }, [ raiseContext ]);\n\n    const toggleMenu = useCallback(participantID => e => {\n        const { participantID: raisedParticipant } = raiseContext;\n\n        if (raisedParticipant && raisedParticipant === participantID) {\n            lowerMenu();\n        } else {\n            raiseMenu(participantID, e.target);\n        }\n    }, [ raiseContext ]);\n\n    const menuEnter = useCallback(() => {\n        isMouseOverMenu.current = true;\n    }, []);\n\n    const menuLeave = useCallback(() => {\n        isMouseOverMenu.current = false;\n        lowerMenu();\n    }, [ lowerMenu ]);\n\n    const muteAudio = useCallback(id => () => {\n        dispatch(openDialog(MuteRemoteParticipantDialog, { participantID: id }));\n    });\n\n    // FIXME:\n    // It seems that useTranslation is not very scallable. Unmount 500 components that have the useTranslation hook is\n    // taking more than 10s. To workaround the issue we need to pass the texts as props. This is temporary and dirty\n    // solution!!!\n    // One potential proper fix would be to use react-window component in order to lower the number of components\n    // mounted.\n    const participantActionEllipsisLabel = t('MeetingParticipantItem.ParticipantActionEllipsis.options');\n    const youText = t('chat.you');\n    const askUnmuteText = t('participantsPane.actions.askUnmute');\n    const muteParticipantButtonText = t('dialog.muteParticipantButton');\n\n    const renderParticipant = id => (\n        <MeetingParticipantItem\n            askUnmuteText = { askUnmuteText }\n            isHighlighted = { raiseContext.participantID === id }\n            key = { id }\n            muteAudio = { muteAudio }\n            muteParticipantButtonText = { muteParticipantButtonText }\n            onContextMenu = { toggleMenu(id) }\n            onLeave = { lowerMenu }\n            participantActionEllipsisLabel = { participantActionEllipsisLabel }\n            participantID = { id }\n            youText = { youText } />\n    );\n\n    const items = [];\n\n    localParticipant && items.push(renderParticipant(localParticipant?.id));\n    participants.forEach(p => {\n        items.push(renderParticipant(p?.id));\n    });\n\n    return (\n    <>\n        <Heading>{t('participantsPane.headings.participantsList', { count: participantsCount })}</Heading>\n        {showInviteButton && <InviteButton />}\n        <div>\n            { items }\n        </div>\n        <MeetingParticipantContextMenu\n            muteAudio = { muteAudio }\n            onEnter = { menuEnter }\n            onLeave = { menuLeave }\n            onSelect = { lowerMenu }\n            { ...raiseContext } />\n    </>\n    );\n}\n","// @flow\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport React, { useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { requestDisableModeration, requestEnableModeration } from '../../av-moderation/actions';\nimport {\n    isEnabled as isAvModerationEnabled,\n    isSupported as isAvModerationSupported\n} from '../../av-moderation/functions';\nimport { openDialog } from '../../base/dialog';\nimport { Icon, IconCheck, IconVideoOff } from '../../base/icons';\nimport { MEDIA_TYPE } from '../../base/media';\nimport {\n    getLocalParticipant,\n    isEveryoneModerator\n} from '../../base/participants';\nimport { MuteEveryonesVideoDialog } from '../../video-menu/components';\n\nimport {\n    ContextMenu,\n    ContextMenuItem\n} from './web/styled';\n\nconst useStyles = makeStyles(() => {\n    return {\n        contextMenu: {\n            bottom: 'auto',\n            margin: '0',\n            padding: '8px 0',\n            right: 0,\n            top: '-8px',\n            transform: 'translateY(-100%)',\n            width: '238px'\n        },\n        text: {\n            marginLeft: '52px',\n            lineHeight: '40px'\n        },\n        paddedAction: {\n            marginLeft: '36px;'\n        }\n    };\n});\n\ntype Props = {\n\n  /**\n   * Callback for the mouse leaving this item\n   */\n  onMouseLeave: Function\n};\n\nexport const FooterContextMenu = ({ onMouseLeave }: Props) => {\n    const dispatch = useDispatch();\n    const isModerationSupported = useSelector(isAvModerationSupported());\n    const allModerators = useSelector(isEveryoneModerator);\n    const isModerationEnabled = useSelector(isAvModerationEnabled(MEDIA_TYPE.AUDIO));\n    const { id } = useSelector(getLocalParticipant);\n    const { t } = useTranslation();\n\n    const disable = useCallback(() => dispatch(requestDisableModeration()), [ dispatch ]);\n\n    const enable = useCallback(() => dispatch(requestEnableModeration()), [ dispatch ]);\n\n    const classes = useStyles();\n\n    const muteAllVideo = useCallback(\n        () => dispatch(openDialog(MuteEveryonesVideoDialog, { exclude: [ id ] })), [ dispatch ]);\n\n    return (\n        <ContextMenu\n            className = { classes.contextMenu }\n            onMouseLeave = { onMouseLeave }>\n            <ContextMenuItem\n                id = 'participants-pane-context-menu-stop-video'\n                onClick = { muteAllVideo }>\n                <Icon\n                    size = { 20 }\n                    src = { IconVideoOff } />\n                <span>{ t('participantsPane.actions.stopEveryonesVideo') }</span>\n            </ContextMenuItem>\n\n            { isModerationSupported && !allModerators ? (\n                <>\n                    <div className = { classes.text }>\n                        {t('participantsPane.actions.allow')}\n                    </div>\n                    { isModerationEnabled ? (\n                        <ContextMenuItem\n                            id = 'participants-pane-context-menu-start-moderation'\n                            onClick = { disable }>\n                            <span className = { classes.paddedAction }>\n                                { t('participantsPane.actions.startModeration') }\n                            </span>\n                        </ContextMenuItem>\n                    ) : (\n                        <ContextMenuItem\n                            id = 'participants-pane-context-menu-stop-moderation'\n                            onClick = { enable }>\n                            <Icon\n                                size = { 20 }\n                                src = { IconCheck } />\n                            <span>{ t('participantsPane.actions.startModeration') }</span>\n                        </ContextMenuItem>\n                    )}\n                </>\n            ) : undefined\n            }\n        </ContextMenu>\n    );\n};\n","// @flow\n\nimport React, { Component } from 'react';\nimport { ThemeProvider } from 'styled-components';\n\nimport { openDialog } from '../../../base/dialog';\nimport { translate } from '../../../base/i18n';\nimport {\n    getParticipantCount,\n    isLocalParticipantModerator\n} from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { MuteEveryoneDialog } from '../../../video-menu/components/';\nimport { close } from '../../actions';\nimport { classList, findStyledAncestor, getParticipantsPaneOpen } from '../../functions';\nimport theme from '../../theme.json';\nimport { FooterContextMenu } from '../FooterContextMenu';\n\nimport { LobbyParticipantList } from './LobbyParticipantList';\nimport { MeetingParticipantList } from './MeetingParticipantList';\nimport {\n    AntiCollapse,\n    Close,\n    Container,\n    Footer,\n    FooterButton,\n    FooterEllipsisButton,\n    FooterEllipsisContainer,\n    Header\n} from './styled';\n\n/**\n * The type of the React {@code Component} props of {@link ParticipantsPane}.\n */\ntype Props = {\n\n    /**\n     * Is the participants pane open.\n     */\n    _paneOpen: boolean,\n\n    /**\n     * Whether to show context menu.\n     */\n    _showContextMenu: boolean,\n\n    /**\n     * Whether to show the footer menu.\n     */\n    _showFooter: boolean,\n\n    /**\n     * The Redux dispatch function.\n     */\n    dispatch: Function,\n\n    /**\n     * The i18n translate function.\n     */\n    t: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ParticipantsPane}.\n */\ntype State = {\n\n    /**\n     * Indicates if the footer context menu is open.\n     */\n    contextOpen: boolean,\n};\n\n/**\n * Implements the participants list.\n */\nclass ParticipantsPane extends Component<Props, State> {\n    /**\n     * Initializes a new {@code ParticipantsPane} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            contextOpen: false\n        };\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onClosePane = this._onClosePane.bind(this);\n        this._onKeyPress = this._onKeyPress.bind(this);\n        this._onMuteAll = this._onMuteAll.bind(this);\n        this._onToggleContext = this._onToggleContext.bind(this);\n        this._onWindowClickListener = this._onWindowClickListener.bind(this);\n    }\n\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        window.addEventListener('click', this._onWindowClickListener);\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        window.removeEventListener('click', this._onWindowClickListener);\n    }\n\n    /**\n     * Implements React's {@link Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const {\n            _paneOpen,\n            _showContextMenu,\n            _showFooter,\n            t\n        } = this.props;\n\n        // when the pane is not open optimize to not\n        // execute the MeetingParticipantList render for large list of participants\n        if (!_paneOpen) {\n            return null;\n        }\n\n        return (\n            <ThemeProvider theme = { theme }>\n                <div className = { classList('participants_pane', !_paneOpen && 'participants_pane--closed') }>\n                    <div className = 'participants_pane-content'>\n                        <Header>\n                            <Close\n                                aria-label = { t('participantsPane.close', 'Close') }\n                                onClick = { this._onClosePane }\n                                onKeyPress = { this._onKeyPress }\n                                role = 'button'\n                                tabIndex = { 0 } />\n                        </Header>\n                        <Container>\n                            <LobbyParticipantList />\n                            <AntiCollapse />\n                            <MeetingParticipantList />\n                        </Container>\n                        {_showFooter && (\n                            <Footer>\n                                <FooterButton onClick = { this._onMuteAll }>\n                                    {t('participantsPane.actions.muteAll')}\n                                </FooterButton>\n                                {_showContextMenu && (\n                                    <FooterEllipsisContainer>\n                                        <FooterEllipsisButton\n                                            id = 'participants-pane-context-menu'\n                                            onClick = { this._onToggleContext } />\n                                        {this.state.contextOpen\n                                            && <FooterContextMenu onMouseLeave = { this._onToggleContext } />}\n                                    </FooterEllipsisContainer>\n                                )}\n                            </Footer>\n                        )}\n                    </div>\n                </div>\n            </ThemeProvider>\n        );\n    }\n\n    _onClosePane: () => void;\n\n    /**\n     * Callback for closing the participant pane.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClosePane() {\n        this.props.dispatch(close());\n    }\n\n    _onKeyPress: (Object) => void;\n\n    /**\n     * KeyPress handler for accessibility for closing the participants pane.\n     *\n     * @param {Object} e - The key event to handle.\n     *\n     * @returns {void}\n     */\n    _onKeyPress(e) {\n        if (e.key === ' ' || e.key === 'Enter') {\n            e.preventDefault();\n            this._onClosePane();\n        }\n    }\n\n    _onMuteAll: () => void;\n\n    /**\n     * The handler for clicking mute all button.\n     *\n     * @returns {void}\n     */\n    _onMuteAll() {\n        this.props.dispatch(openDialog(MuteEveryoneDialog));\n    }\n\n    _onToggleContext: () => void;\n\n    /**\n     * Handler for toggling open/close of the footer context menu.\n     *\n     * @returns {void}\n     */\n    _onToggleContext() {\n        this.setState({\n            contextOpen: !this.state.contextOpen\n        });\n    }\n\n    _onWindowClickListener: (event: Object) => void;\n\n    /**\n     * Window click event listener.\n     *\n     * @param {Event} e - The click event.\n     * @returns {void}\n     */\n    _onWindowClickListener(e) {\n        if (this.state.contextOpen && !findStyledAncestor(e.target, FooterEllipsisContainer)) {\n            this.setState({\n                contextOpen: false\n            });\n        }\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props of\n * {@code ParticipantsPane}.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {{\n *     _paneOpen: boolean,\n *     _showContextMenu: boolean,\n *     _showFooter: boolean\n * }}\n */\nfunction _mapStateToProps(state: Object) {\n    const isPaneOpen = getParticipantsPaneOpen(state);\n\n    return {\n        _paneOpen: isPaneOpen,\n        _showContextMenu: isPaneOpen && getParticipantCount(state) > 2,\n        _showFooter: isPaneOpen && isLocalParticipantModerator(state)\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(ParticipantsPane));\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { NotificationsContainer } from '../../notifications/components';\nimport { shouldDisplayTileView } from '../../video-layout';\nimport { shouldDisplayNotifications } from '../functions';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractLabels}.\n */\nexport type AbstractProps = {\n\n    /**\n     * Set to {@code true} when the notifications are to be displayed.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _notificationsVisible: boolean,\n\n    /**\n     * Conference room name.\n     *\n     * @protected\n     * @type {string}\n     */\n    _room: string,\n\n    /**\n     * Whether or not the layout should change to support tile view mode.\n     *\n     * @protected\n     * @type {boolean}\n     */\n    _shouldDisplayTileView: boolean\n};\n\n/**\n * A container to hold video status labels, including recording status and\n * current large video quality.\n *\n * @extends Component\n */\nexport class AbstractConference<P: AbstractProps, S>\n    extends Component<P, S> {\n\n    /**\n     * Renders the {@code LocalRecordingLabel}.\n     *\n     * @param {Object} props - The properties to be passed to\n     * the {@code NotificationsContainer}.\n     * @protected\n     * @returns {React$Element}\n     */\n    renderNotificationsContainer(props: ?Object) {\n        if (this.props._notificationsVisible) {\n            return (\n                React.createElement(NotificationsContainer, props)\n            );\n        }\n\n        return null;\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the associated props of the {@link Labels}\n * {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {AbstractProps}\n */\nexport function abstractMapStateToProps(state: Object) {\n    return {\n        _notificationsVisible: shouldDisplayNotifications(state),\n        _room: state['features/base/conference'].room,\n        _shouldDisplayTileView: shouldDisplayTileView(state)\n    };\n}\n","// @flow\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../base/i18n';\nimport { Label } from '../../base/label';\nimport { connect } from '../../base/redux';\nimport { Tooltip } from '../../base/tooltip';\n\nimport { _mapStateToProps, type Props } from './AbstractTranscribingLabel';\n\n/**\n * React {@code Component} for displaying a label when a transcriber is in the\n * conference.\n *\n * @extends Component\n */\nclass TranscribingLabel extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._showLabel) {\n            return null;\n        }\n\n        return (\n            <Tooltip\n                content = { this.props.t('transcribing.labelToolTip') }\n                position = { 'left' }>\n                <Label\n                    className = 'recording-label'\n                    text = { this.props.t('transcribing.tr') } />\n            </Tooltip>\n        );\n    }\n\n}\n\nexport default translate(connect(_mapStateToProps)(TranscribingLabel));\n","// @flow\n\n/**\n * The type of the React {@code Component} props of {@link TranscribingLabel}.\n */\nexport type Props = {\n\n    /**\n     * True if the label needs to be rendered, false otherwise.\n     */\n    _showLabel: boolean,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n};\n\n/**\n * Maps (parts of) the redux state to the associated props of the\n * {@link AbstractTranscribingLabel} {@code Component}.\n *\n * @param {Object} state - The redux state.\n * @private\n * @returns {{\n *     _showLabel: boolean\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _showLabel: state['features/transcribing'].isTranscribing\n    };\n}\n","// @flow\n\nimport { Component } from 'react';\n\nimport { renderConferenceTimer } from '../';\nimport { getConferenceTimestamp } from '../../base/conference/functions';\nimport { getLocalizedDurationFormatter } from '../../base/i18n';\nimport { connect } from '../../base/redux';\n\n/**\n * The type of the React {@code Component} props of {@link ConferenceTimer}.\n */\ntype Props = {\n\n    /**\n     * The UTC timestamp representing the time when first participant joined.\n     */\n    _startTimestamp: ?number,\n\n    /**\n     * Style to be applied to the rendered text.\n     */\n    textStyle: ?Object,\n\n    /**\n     * The redux {@code dispatch} function.\n     */\n    dispatch: Function\n};\n\n/**\n * The type of the React {@code Component} state of {@link ConferenceTimer}.\n */\ntype State = {\n\n    /**\n     * Value of current conference time.\n     */\n    timerValue: string\n};\n\n/**\n * ConferenceTimer react component.\n *\n * @class ConferenceTimer\n * @extends Component\n */\nclass ConferenceTimer extends Component<Props, State> {\n\n    /**\n     * Handle for setInterval timer.\n     */\n    _interval;\n\n    /**\n     * Initializes a new {@code ConferenceTimer} instance.\n     *\n     * @param {Props} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            timerValue: getLocalizedDurationFormatter(0)\n        };\n    }\n\n    /**\n     * Starts the conference timer when component will be\n     * mounted.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._startTimer();\n    }\n\n    /**\n     * Stops the conference timer when component will be\n     * unmounted.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._stopTimer();\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const { timerValue } = this.state;\n        const { _startTimestamp, textStyle } = this.props;\n\n        if (!_startTimestamp) {\n            return null;\n        }\n\n        return renderConferenceTimer(timerValue, textStyle);\n    }\n\n    /**\n     * Sets the current state values that will be used to render the timer.\n     *\n     * @param {number} refValueUTC - The initial UTC timestamp value.\n     * @param {number} currentValueUTC - The current UTC timestamp value.\n     *\n     * @returns {void}\n     */\n    _setStateFromUTC(refValueUTC, currentValueUTC) {\n        if (!refValueUTC || !currentValueUTC) {\n            return;\n        }\n\n        if (currentValueUTC < refValueUTC) {\n            return;\n        }\n\n        const timerMsValue = currentValueUTC - refValueUTC;\n\n        const localizedTime = getLocalizedDurationFormatter(timerMsValue);\n\n        this.setState({\n            timerValue: localizedTime\n        });\n    }\n\n    /**\n     * Start conference timer.\n     *\n     * @returns {void}\n     */\n    _startTimer() {\n        if (!this._interval) {\n            this._setStateFromUTC(this.props._startTimestamp, (new Date()).getTime());\n\n            this._interval = setInterval(() => {\n                this._setStateFromUTC(this.props._startTimestamp, (new Date()).getTime());\n            }, 1000);\n        }\n    }\n\n    /**\n     * Stop conference timer.\n     *\n     * @returns {void}\n     */\n    _stopTimer() {\n        if (this._interval) {\n            clearInterval(this._interval);\n        }\n\n        this.setState({\n            timerValue: getLocalizedDurationFormatter(0)\n        });\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code ConferenceTimer}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *      _startTimestamp: number\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n\n    return {\n        _startTimestamp: getConferenceTimestamp(state)\n    };\n}\n\nexport default connect(_mapStateToProps)(ConferenceTimer);\n","// @flow\n\n/* eslint-disable no-unused-vars */\n\nimport React from 'react';\n\n/**\n * Returns web element to be rendered.\n *\n * @param {string} timerValue - String to display as time.\n * @param {Object} textStyle - Unused on web.\n *\n * @returns {ReactElement}\n */\nexport default function renderConferenceTimer(timerValue: string, textStyle: Object) {\n    return (\n        <span className = 'subject-timer'>{ timerValue }</span>\n    );\n}\n","// @flow\n\nimport React, { PureComponent } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { openDialog } from '../../../base/dialog';\nimport { IconUserGroups } from '../../../base/icons';\nimport { Label } from '../../../base/label';\nimport { getParticipantCount } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { SpeakerStats } from '../../../speaker-stats';\n\n\n/**\n * The type of the React {@code Component} props of {@link ParticipantsCount}.\n */\ntype Props = {\n\n    /**\n     * Number of the conference participants.\n     */\n    count: string,\n\n    /**\n     * Conference data.\n     */\n    conference: Object,\n\n    /**\n     * Invoked to open Speaker stats.\n     */\n    dispatch: Dispatch<any>,\n};\n\n/**\n * ParticipantsCount react component.\n * Displays the number of participants and opens Speaker stats on click.\n *\n * @class ParticipantsCount\n */\nclass ParticipantsCount extends PureComponent<Props> {\n    /**\n     * Initializes a new ParticipantsCount instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onClick = this._onClick.bind(this);\n    }\n\n    _onClick: () => void;\n\n    /**\n     * Callback invoked to display {@code SpeakerStats}.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onClick() {\n        const { dispatch, conference } = this.props;\n\n        dispatch(openDialog(SpeakerStats, { conference }));\n    }\n\n    /**\n     * Implements React's {@link PureComponent#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div\n                className = 'participants-count'\n                onClick = { this._onClick }>\n                <Label\n                    className = 'label--white'\n                    icon = { IconUserGroups }\n                    text = { this.props.count } />\n            </div>\n        );\n    }\n}\n\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code ParticipantsCount} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    return {\n        conference: state['features/base/conference'].conference,\n        count: getParticipantCount(state)\n    };\n}\n\nexport default connect(mapStateToProps)(ParticipantsCount);\n","/* @flow */\n\nimport React from 'react';\n\nimport { getConferenceName } from '../../../base/conference/functions';\nimport { JitsiRecordingConstants } from '../../../base/lib-jitsi-meet';\nimport { getParticipantCount } from '../../../base/participants/functions';\nimport { connect } from '../../../base/redux';\nimport { E2EELabel } from '../../../e2ee';\nimport { LocalRecordingLabel } from '../../../local-recording';\nimport { getSessionStatusToShow, RecordingLabel } from '../../../recording';\nimport { isToolboxVisible } from '../../../toolbox/functions.web';\nimport { TranscribingLabel } from '../../../transcribing';\nimport { VideoQualityLabel } from '../../../video-quality';\nimport ConferenceTimer from '../ConferenceTimer';\n\nimport ParticipantsCount from './ParticipantsCount';\n\nimport { InsecureRoomNameLabel } from '.';\n\n/**\n * The type of the React {@code Component} props of {@link Subject}.\n */\ntype Props = {\n\n    /**\n     * Whether the info should span across the full width.\n     */\n    _fullWidth: boolean,\n\n    /**\n     * Whether the conference name and timer should be displayed or not.\n     */\n    _hideConferenceNameAndTimer: boolean,\n\n    /**\n     * Whether the conference timer should be shown or not.\n     */\n    _hideConferenceTimer: boolean,\n\n    /**\n     * Whether the recording label should be shown or not.\n     */\n    _hideRecordingLabel: boolean,\n\n    /**\n     * Whether the participant count should be shown or not.\n     */\n    _showParticipantCount: boolean,\n\n    /**\n     * The subject or the of the conference.\n     * Falls back to conference name.\n     */\n    _subject: string,\n\n    /**\n     * Indicates whether the component should be visible or not.\n     */\n    _visible: boolean,\n\n    /**\n     * Whether or not the recording label is visible.\n     */\n    _recordingLabel: boolean\n};\n\nconst getLeftMargin = () => {\n    const subjectContainerWidth = document.getElementById('subject-container')?.clientWidth ?? 0;\n    const recContainerWidth = document.getElementById('rec-container')?.clientWidth ?? 0;\n    const subjectDetailsContainer = document.getElementById('subject-details-container')?.clientWidth ?? 0;\n\n    return (subjectContainerWidth - recContainerWidth - subjectDetailsContainer) / 2;\n};\n\n/**\n * The upper band of the meeing containing the conference name, timer and labels.\n *\n * @param {Object} props - The props of the component.\n * @returns {React$None}\n */\nfunction ConferenceInfo(props: Props) {\n    const {\n        _hideConferenceNameAndTimer,\n        _hideConferenceTimer,\n        _showParticipantCount,\n        _hideRecordingLabel,\n        _subject,\n        _fullWidth,\n        _visible,\n        _recordingLabel\n    } = props;\n\n    return (\n        <div className = { `subject ${_recordingLabel ? 'recording' : ''} ${_visible ? 'visible' : ''}` }>\n            <div\n                className = { `subject-info-container${_fullWidth ? ' subject-info-container--full-width' : ''}` }\n                id = 'subject-container'>\n                {!_hideRecordingLabel && <div\n                    className = 'show-always'\n                    id = 'rec-container'\n                    // eslint-disable-next-line react-native/no-inline-styles\n                    style = {{\n                        marginLeft: !_recordingLabel || _visible ? 0 : getLeftMargin()\n                    }}>\n                    <RecordingLabel mode = { JitsiRecordingConstants.mode.FILE } />\n                    <RecordingLabel mode = { JitsiRecordingConstants.mode.STREAM } />\n                    <LocalRecordingLabel />\n                </div>\n                }\n                <div\n                    className = 'subject-details-container'\n                    id = 'subject-details-container'>\n                    {\n                        !_hideConferenceNameAndTimer\n                            && <div className = 'subject-info'>\n                                { _subject && <span className = 'subject-text'>{ _subject }</span>}\n                                { !_hideConferenceTimer && <ConferenceTimer /> }\n                            </div>\n                    }\n                    { _showParticipantCount && <ParticipantsCount /> }\n                    <E2EELabel />\n                    <TranscribingLabel />\n                    <VideoQualityLabel />\n                    <InsecureRoomNameLabel />\n                </div>\n            </div>\n        </div>\n    );\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code Subject}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _hideConferenceTimer: boolean,\n *     _showParticipantCount: boolean,\n *     _subject: string,\n *     _visible: boolean\n * }}\n */\nfunction _mapStateToProps(state) {\n    const participantCount = getParticipantCount(state);\n    const {\n        hideConferenceTimer,\n        hideConferenceSubject,\n        hideParticipantsStats,\n        hideRecordingLabel\n    } = state['features/base/config'];\n    const { clientWidth } = state['features/base/responsive-ui'];\n\n    const fileRecordingStatus = getSessionStatusToShow(state, JitsiRecordingConstants.mode.FILE);\n    const streamRecordingStatus = getSessionStatusToShow(state, JitsiRecordingConstants.mode.STREAM);\n    const isFileRecording = fileRecordingStatus ? fileRecordingStatus !== JitsiRecordingConstants.status.OFF : false;\n    const isStreamRecording = streamRecordingStatus\n        ? streamRecordingStatus !== JitsiRecordingConstants.status.OFF : false;\n    const { isEngaged } = state['features/local-recording'];\n\n    return {\n        _hideConferenceNameAndTimer: clientWidth < 300,\n        _hideConferenceTimer: Boolean(hideConferenceTimer),\n        _hideRecordingLabel: hideRecordingLabel,\n        _fullWidth: state['features/video-layout'].tileViewEnabled,\n        _showParticipantCount: participantCount > 2 && !hideParticipantsStats,\n        _subject: hideConferenceSubject ? '' : getConferenceName(state),\n        _visible: isToolboxVisible(state),\n        _recordingLabel: (isFileRecording || isStreamRecording || isEngaged) && !hideRecordingLabel\n    };\n}\n\nexport default connect(_mapStateToProps)(ConferenceInfo);\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { connect } from '../../../base/redux';\n\ndeclare var config: Object;\n\ntype Props = {\n    _message?: string,\n};\n\n/**\n * Notice react component.\n *\n * @class Notice\n */\nclass Notice extends Component<Props> {\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        if (!this.props._message) {\n            return null;\n        }\n\n        return (\n            <div className = 'notice'>\n                <span className = 'notice__message' >\n                    { this.props._message }\n                </span>\n            </div>\n        );\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code Notice}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {{\n *     _message: string,\n * }}\n */\nfunction _mapStateToProps(state) {\n    const {\n        noticeMessage\n    } = state['features/base/config'];\n\n    return {\n        _message: noticeMessage\n    };\n}\nexport default translate(connect(_mapStateToProps)(Notice));\n","// @flow\n\nimport _ from 'lodash';\nimport React from 'react';\n\nimport VideoLayout from '../../../../../modules/UI/videolayout/VideoLayout';\nimport AudioModerationNotifications from '../../../av-moderation/components/AudioModerationNotifications';\nimport { getConferenceNameForTitle } from '../../../base/conference';\nimport { connect, disconnect } from '../../../base/connection';\nimport { translate } from '../../../base/i18n';\nimport { connect as reactReduxConnect } from '../../../base/redux';\nimport { setColorAlpha } from '../../../base/util';\nimport { Chat } from '../../../chat';\nimport { Filmstrip } from '../../../filmstrip';\nimport { CalleeInfoContainer } from '../../../invite';\nimport { LargeVideo } from '../../../large-video';\nimport { KnockingParticipantList, LobbyScreen } from '../../../lobby';\nimport { ParticipantsPane } from '../../../participants-pane/components/web';\nimport { getParticipantsPaneOpen } from '../../../participants-pane/functions';\nimport { Prejoin, isPrejoinPageVisible } from '../../../prejoin';\nimport { fullScreenChanged, showToolbox } from '../../../toolbox/actions.web';\nimport { Toolbox } from '../../../toolbox/components/web';\nimport { LAYOUTS, getCurrentLayout } from '../../../video-layout';\nimport { maybeShowSuboptimalExperienceNotification } from '../../functions';\nimport {\n    AbstractConference,\n    abstractMapStateToProps\n} from '../AbstractConference';\nimport type { AbstractProps } from '../AbstractConference';\n\nimport ConferenceInfo from './ConferenceInfo';\nimport { default as Notice } from './Notice';\n\ndeclare var APP: Object;\ndeclare var interfaceConfig: Object;\n\n/**\n * DOM events for when full screen mode has changed. Different browsers need\n * different vendor prefixes.\n *\n * @private\n * @type {Array<string>}\n */\nconst FULL_SCREEN_EVENTS = [\n    'webkitfullscreenchange',\n    'mozfullscreenchange',\n    'fullscreenchange'\n];\n\n/**\n * The CSS class to apply to the root element of the conference so CSS can\n * modify the app layout.\n *\n * @private\n * @type {Object}\n */\nconst LAYOUT_CLASSNAMES = {\n    [LAYOUTS.HORIZONTAL_FILMSTRIP_VIEW]: 'horizontal-filmstrip',\n    [LAYOUTS.TILE_VIEW]: 'tile-view',\n    [LAYOUTS.VERTICAL_FILMSTRIP_VIEW]: 'vertical-filmstrip'\n};\n\n/**\n * The type of the React {@code Component} props of {@link Conference}.\n */\ntype Props = AbstractProps & {\n\n    /**\n     * The alpha(opacity) of the background\n     */\n    _backgroundAlpha: number,\n\n    /**\n     * Returns true if the 'lobby screen' is visible.\n     */\n    _isLobbyScreenVisible: boolean,\n\n    /**\n     * If participants pane is visible or not.\n     */\n    _isParticipantsPaneVisible: boolean,\n\n    /**\n     * The CSS class to apply to the root of {@link Conference} to modify the\n     * application layout.\n     */\n    _layoutClassName: string,\n\n    /**\n     * The config specified interval for triggering mouseMoved iframe api events\n     */\n    _mouseMoveCallbackInterval: number,\n\n    /**\n     * Name for this conference room.\n     */\n    _roomName: string,\n\n    /**\n     * If prejoin page is visible or not.\n     */\n    _showPrejoin: boolean,\n\n    dispatch: Function,\n    t: Function\n}\n\n/**\n * The conference page of the Web application.\n */\nclass Conference extends AbstractConference<Props, *> {\n    _onFullScreenChange: Function;\n    _onMouseEnter: Function;\n    _onMouseLeave: Function;\n    _onMouseMove: Function;\n    _onShowToolbar: Function;\n    _originalOnMouseMove: Function;\n    _originalOnShowToolbar: Function;\n    _setBackground: Function;\n\n    /**\n     * Initializes a new Conference instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        const { _mouseMoveCallbackInterval } = props;\n\n        // Throttle and bind this component's mousemove handler to prevent it\n        // from firing too often.\n        this._originalOnShowToolbar = this._onShowToolbar;\n        this._originalOnMouseMove = this._onMouseMove;\n\n        this._onShowToolbar = _.throttle(\n            () => this._originalOnShowToolbar(),\n            100,\n            {\n                leading: true,\n                trailing: false\n            });\n\n        this._onMouseMove = _.throttle(\n            event => this._originalOnMouseMove(event),\n            _mouseMoveCallbackInterval,\n            {\n                leading: true,\n                trailing: false\n            });\n\n        // Bind event handler so it is only bound once for every instance.\n        this._onFullScreenChange = this._onFullScreenChange.bind(this);\n        this._setBackground = this._setBackground.bind(this);\n    }\n\n    /**\n     * Start the connection and get the UI ready for the conference.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        document.title = `${this.props._roomName} | ${interfaceConfig.APP_NAME}`;\n        this._start();\n    }\n\n    /**\n     * Calls into legacy UI to update the application layout, if necessary.\n     *\n     * @inheritdoc\n     * returns {void}\n     */\n    componentDidUpdate(prevProps) {\n        if (this.props._shouldDisplayTileView\n            === prevProps._shouldDisplayTileView) {\n            return;\n        }\n\n        // TODO: For now VideoLayout is being called as LargeVideo and Filmstrip\n        // sizing logic is still handled outside of React. Once all components\n        // are in react they should calculate size on their own as much as\n        // possible and pass down sizings.\n        VideoLayout.refreshLayout();\n    }\n\n    /**\n     * Disconnect from the conference when component will be\n     * unmounted.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        APP.UI.unbindEvents();\n\n        FULL_SCREEN_EVENTS.forEach(name =>\n            document.removeEventListener(name, this._onFullScreenChange));\n\n        APP.conference.isJoined() && this.props.dispatch(disconnect());\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement}\n     */\n    render() {\n        const {\n            _isLobbyScreenVisible,\n            _isParticipantsPaneVisible,\n            _layoutClassName,\n            _showPrejoin\n        } = this.props;\n\n        return (\n            <div\n                id = 'layout_wrapper'\n                onMouseEnter = { this._onMouseEnter }\n                onMouseLeave = { this._onMouseLeave }\n                onMouseMove = { this._onMouseMove } >\n                <div\n                    className = { _layoutClassName }\n                    id = 'videoconference_page'\n                    onMouseMove = { this._onShowToolbar }\n                    ref = { this._setBackground }>\n                    <ConferenceInfo />\n\n                    <Notice />\n                    <div id = 'videospace'>\n                        <LargeVideo />\n                        {!_isParticipantsPaneVisible\n                         && <div id = 'notification-participant-list'>\n                             <KnockingParticipantList />\n                             <AudioModerationNotifications />\n                         </div>}\n                        <Filmstrip />\n                    </div>\n\n                    { _showPrejoin || _isLobbyScreenVisible || <Toolbox /> }\n                    <Chat />\n\n                    { this.renderNotificationsContainer() }\n\n                    <CalleeInfoContainer />\n\n                    { _showPrejoin && <Prejoin />}\n\n                </div>\n                <ParticipantsPane />\n            </div>\n        );\n    }\n\n    /**\n     * Sets custom background opacity based on config. It also applies the\n     * opacity on parent element, as the parent element is not accessible directly,\n     * only though it's child.\n     *\n     * @param {Object} element - The DOM element for which to apply opacity.\n     *\n     * @private\n     * @returns {void}\n     */\n    _setBackground(element) {\n        if (!element) {\n            return;\n        }\n\n        if (this.props._backgroundAlpha !== undefined) {\n            const elemColor = element.style.background;\n            const alphaElemColor = setColorAlpha(elemColor, this.props._backgroundAlpha);\n\n            element.style.background = alphaElemColor;\n            if (element.parentElement) {\n                const parentColor = element.parentElement.style.background;\n                const alphaParentColor = setColorAlpha(parentColor, this.props._backgroundAlpha);\n\n                element.parentElement.style.background = alphaParentColor;\n            }\n        }\n    }\n\n    /**\n     * Updates the Redux state when full screen mode has been enabled or\n     * disabled.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onFullScreenChange() {\n        this.props.dispatch(fullScreenChanged(APP.UI.isFullScreen()));\n    }\n\n    /**\n     * Triggers iframe API mouseEnter event.\n     *\n     * @param {MouseEvent} event - The mouse event.\n     * @private\n     * @returns {void}\n     */\n    _onMouseEnter(event) {\n        APP.API.notifyMouseEnter(event);\n    }\n\n    /**\n     * Triggers iframe API mouseLeave event.\n     *\n     * @param {MouseEvent} event - The mouse event.\n     * @private\n     * @returns {void}\n     */\n    _onMouseLeave(event) {\n        APP.API.notifyMouseLeave(event);\n    }\n\n    /**\n     * Triggers iframe API mouseMove event.\n     *\n     * @param {MouseEvent} event - The mouse event.\n     * @private\n     * @returns {void}\n     */\n    _onMouseMove(event) {\n        APP.API.notifyMouseMove(event);\n    }\n\n    /**\n     * Displays the toolbar.\n     *\n     * @private\n     * @returns {void}\n     */\n    _onShowToolbar() {\n        this.props.dispatch(showToolbox());\n    }\n\n    /**\n     * Until we don't rewrite UI using react components\n     * we use UI.start from old app. Also method translates\n     * component right after it has been mounted.\n     *\n     * @inheritdoc\n     */\n    _start() {\n        APP.UI.start();\n\n        APP.UI.registerListeners();\n        APP.UI.bindEvents();\n\n        FULL_SCREEN_EVENTS.forEach(name =>\n            document.addEventListener(name, this._onFullScreenChange));\n\n        const { dispatch, t } = this.props;\n\n        dispatch(connect());\n\n        maybeShowSuboptimalExperienceNotification(dispatch, t);\n    }\n}\n\n/**\n * Maps (parts of) the Redux state to the associated props for the\n * {@code Conference} component.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction _mapStateToProps(state) {\n    const { backgroundAlpha, mouseMoveCallbackInterval } = state['features/base/config'];\n\n    return {\n        ...abstractMapStateToProps(state),\n        _backgroundAlpha: backgroundAlpha,\n        _isLobbyScreenVisible: state['features/base/dialog']?.component === LobbyScreen,\n        _isParticipantsPaneVisible: getParticipantsPaneOpen(state),\n        _layoutClassName: LAYOUT_CLASSNAMES[getCurrentLayout(state)],\n        _mouseMoveCallbackInterval: mouseMoveCallbackInterval,\n        _roomName: getConferenceNameForTitle(state),\n        _showPrejoin: isPrejoinPageVisible(state)\n    };\n}\n\nexport default reactReduxConnect(_mapStateToProps)(translate(Conference));\n","// @flow\n\nimport zxcvbn from 'zxcvbn';\n\n/**\n * Returns true if the room name is considered a weak (insecure) one.\n *\n * @param {string} roomName - The room name.\n * @returns {boolean}\n */\nexport default function isInsecureRoomName(roomName: string = ''): boolean {\n    return zxcvbn(roomName).score < 3;\n}\n","// @flow\n\nimport { PureComponent } from 'react';\n\nimport isInsecureRoomName from '../../base/util/isInsecureRoomName';\n\ntype Props = {\n\n    /**\n     * True of the label should be visible.\n     */\n    _visible: boolean;\n\n    /**\n     * Function to be used to translate i18n labels.\n     */\n    t: Function\n}\n\n/**\n * Abstrsact class for the {@Code InsecureRoomNameLabel} component.\n */\nexport default class AbstractInsecureRoomNameLabel extends PureComponent<Props> {\n    /**\n     * Implements {@code Component#render}.\n     *\n     * @inheritdoc\n     */\n    render() {\n        if (!this.props._visible) {\n            return null;\n        }\n\n        return this._render();\n    }\n\n    /**\n     * Renders the platform dependent content.\n     *\n     * @returns {ReactElement}\n     */\n    _render: () => Object;\n}\n\n/**\n * Maps part of the Redux state to the props of this component.\n *\n * @param {Object} state - The Redux state.\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object): $Shape<Props> {\n    const { locked, room } = state['features/base/conference'];\n    const { lobbyEnabled } = state['features/lobby'];\n    const { enableInsecureRoomNameWarning = false } = state['features/base/config'];\n\n    return {\n        _visible: enableInsecureRoomNameWarning\n            && room && isInsecureRoomName(room)\n            && !(lobbyEnabled || Boolean(locked))\n    };\n}\n","// @flow\n\nimport Tooltip from '@atlaskit/tooltip';\nimport React from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { IconWarning } from '../../../base/icons';\nimport { Label } from '../../../base/label';\nimport { connect } from '../../../base/redux';\nimport AbstractInsecureRoomNameLabel, { _mapStateToProps } from '../AbstractInsecureRoomNameLabel';\n\n/**\n * Renders a label indicating that we are in a room with an insecure name.\n */\nclass InsecureRoomNameLabel extends AbstractInsecureRoomNameLabel {\n    /**\n     * Renders the platform dependent content.\n     *\n     * @inheritdoc\n     */\n    _render() {\n        return (\n            <Tooltip\n                content = { this.props.t('security.insecureRoomNameWarning') }\n                position = 'bottom'>\n                <Label\n                    className = 'label--red'\n                    icon = { IconWarning } />\n            </Tooltip>\n        );\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(InsecureRoomNameLabel));\n","// @flow\n\nimport React, { useCallback } from 'react';\n\nimport { translate } from '../../../base/i18n';\nimport { Icon, IconInviteMore } from '../../../base/icons';\nimport { getParticipantCount } from '../../../base/participants';\nimport { connect } from '../../../base/redux';\nimport { beginAddPeople } from '../../../invite';\nimport { isButtonEnabled, isToolboxVisible } from '../../../toolbox/functions.web';\n\ndeclare var interfaceConfig: Object;\n\ntype Props = {\n\n    /**\n     * Whether to show the option to invite more people.\n     */\n    _shouldShow: boolean,\n\n    /**\n     * Whether the toolbox is visible.\n     */\n    _toolboxVisible: boolean,\n\n    /**\n     * Handler to open the invite dialog.\n     */\n    onClick: Function,\n\n    /**\n     * Invoked to obtain translated strings.\n     */\n    t: Function\n}\n\n/**\n * Represents a replacement for the subject, prompting the\n * sole participant to invite more participants.\n *\n * @param {Object} props - The props of the component.\n * @returns {React$Element<any>}\n */\nfunction InviteMore({\n    _shouldShow,\n    _toolboxVisible,\n    onClick,\n    t\n}: Props) {\n    const onKeyPressHandler = useCallback(e => {\n        if (onClick && (e.key === ' ' || e.key === 'Enter')) {\n            e.preventDefault();\n            onClick();\n        }\n    }, [ onClick ]);\n\n    return (\n        _shouldShow\n            ? <div className = { `invite-more-container${_toolboxVisible ? '' : ' elevated'}` }>\n                <div className = 'invite-more-content'>\n                    <div\n                        className = 'invite-more-header'\n                        role = 'heading'>\n                        {t('addPeople.inviteMoreHeader')}\n                    </div>\n                    <div\n                        className = 'invite-more-button'\n                        onClick = { onClick }\n                        onKeyPress = { onKeyPressHandler }\n                        role = 'button'\n                        tabIndex = { 0 }>\n                        <Icon src = { IconInviteMore } />\n                        <div className = 'invite-more-button-text'>\n                            {t('addPeople.inviteMorePrompt')}\n                        </div>\n                    </div>\n                </div>\n            </div> : null\n    );\n}\n\n/**\n * Maps (parts of) the Redux state to the associated\n * {@code Subject}'s props.\n *\n * @param {Object} state - The Redux state.\n * @private\n * @returns {Props}\n */\nfunction mapStateToProps(state) {\n    const participantCount = getParticipantCount(state);\n    const isAlone = participantCount === 1;\n    const hide = interfaceConfig.HIDE_INVITE_MORE_HEADER;\n\n    return {\n        _shouldShow: isButtonEnabled('invite', state) && isAlone && !hide,\n        _toolboxVisible: isToolboxVisible(state)\n    };\n}\n\n/**\n * Maps dispatching of some action to React component props.\n *\n * @param {Function} dispatch - Redux action dispatcher.\n * @returns {Props}\n */\nconst mapDispatchToProps = {\n    onClick: () => beginAddPeople()\n};\n\nexport default translate(connect(mapStateToProps, mapDispatchToProps)(InviteMore));\n","/* @flow */\n\nimport React, { Component } from 'react';\n\nimport { isBrowsersOptimal } from '../../base/environment';\nimport { translate } from '../../base/i18n';\n\nimport { CHROME, FIREFOX } from './browserLinks';\n\n/**\n * The namespace of the CSS styles of UnsupportedDesktopBrowser.\n *\n * @private\n * @type {string}\n */\nconst _SNS = 'unsupported-desktop-browser';\n\n/**\n * The type of the React {@code Component} props of\n * {@link UnsupportedDesktopBrowser}.\n */\ntype Props = {\n\n    /**\n     * The function to translate human-readable text.\n     */\n    t: Function\n};\n\n/**\n * React component representing unsupported browser page.\n *\n * @class UnsupportedDesktopBrowser\n */\nclass UnsupportedDesktopBrowser extends Component<Props> {\n    /**\n     * Renders the component.\n     *\n     * @returns {ReactElement}\n     */\n    render() {\n        return (\n            <div className = { _SNS }>\n                <h2 className = { `${_SNS}__title` }>\n                    It looks like you're using a browser we don't support.\n                </h2>\n                <p className = { `${_SNS}__description` }>\n                    Please try again with the latest version of&nbsp;\n                    <a\n                        className = { `${_SNS}__link` }\n                        href = { CHROME } >Chrome</a>&nbsp;\n                    {\n                        this._showFirefox() && <>or <a\n                            className = { `${_SNS}__link` }\n                            href = { FIREFOX }>Firefox</a></>\n                    }\n                </p>\n            </div>\n        );\n    }\n\n    /**\n     * Returns whether or not a link to download Firefox is displayed.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _showFirefox() {\n        return isBrowsersOptimal('firefox');\n    }\n}\n\nexport default translate(UnsupportedDesktopBrowser);\n","/* @flow */\n\n/**\n * The URL at which Google Chrome is available for download.\n *\n * @type {string}\n */\nexport const CHROME = 'https://www.google.com/chrome/';\n\n/**\n * The URL at which Chromium is available for download.\n *\n * @type {string}\n */\nexport const CHROMIUM = 'https://www.chromium.org/';\n\n/**\n * The URL at which Microsoft Edge is available for download.\n *\n * @type {string}\n */\nexport const EDGE\n    = 'https://www.microsoft.com/en-us/windows/microsoft-edge';\n\n/**\n * The URL at which Mozilla Firefox is available for download.\n *\n * @type {string}\n */\nexport const FIREFOX = 'https://www.getfirefox.com/';\n\n/**\n * The URL at which Safari is available for download.\n *\n * @type {string}\n */\nexport const SAFARI = 'https://support.apple.com/downloads/safari';\n","export default {};\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport {\n    createRecentClickedEvent,\n    createRecentSelectedEvent,\n    sendAnalytics\n} from '../../analytics';\nimport { appNavigate } from '../../app/actions';\nimport {\n    AbstractPage,\n    Container,\n    Text\n} from '../../base/react';\n\nimport styles from './styles';\n\n/**\n * The type of the React {@code Component} props of {@link AbstractRecentList}\n */\ntype Props = {\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function\n};\n\n/**\n * An abstract component for the recent list.\n *\n */\nexport default class AbstractRecentList<P: Props> extends AbstractPage<P> {\n    /**\n     * Initializes a new {@code RecentList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: P) {\n        super(props);\n\n        this._onPress = this._onPress.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        sendAnalytics(createRecentSelectedEvent());\n    }\n\n    _getRenderListEmptyComponent: () => React$Node;\n\n    /**\n     * Returns a list empty component if a custom one has to be rendered instead\n     * of the default one in the {@link NavigateSectionList}.\n     *\n     * @private\n     * @returns {React$Component}\n     */\n    _getRenderListEmptyComponent() {\n        const { t } = this.props;\n        const descriptionId = 'meetings-list-empty-description';\n\n        return (\n            <Container\n                aria-describedby = { descriptionId }\n                aria-label = { t('welcomepage.recentList') }\n                className = 'meetings-list-empty'\n                role = 'region'\n                style = { styles.emptyListContainer }>\n                <Text\n                    className = 'description'\n                    id = { descriptionId }\n                    style = { styles.emptyListText }>\n                    { t('welcomepage.recentListEmpty') }\n                </Text>\n            </Container>\n        );\n    }\n\n    _onPress: string => void;\n\n    /**\n     * Handles the list's navigate action.\n     *\n     * @private\n     * @param {string} url - The url string to navigate to.\n     * @returns {void}\n     */\n    _onPress(url) {\n        const { dispatch } = this.props;\n\n        sendAnalytics(createRecentClickedEvent('recent.meeting.tile'));\n\n        dispatch(appNavigate(url));\n    }\n}\n","// @flow\n\nimport React from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { translate } from '../../base/i18n';\nimport { MeetingsList } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { deleteRecentListEntry } from '../actions';\nimport { isRecentListEnabled, toDisplayableList } from '../functions';\n\nimport AbstractRecentList from './AbstractRecentList';\n\n/**\n * The type of the React {@code Component} props of {@link RecentList}\n */\ntype Props = {\n\n    /**\n     * Renders the list disabled.\n     */\n    disabled: boolean,\n\n    /**\n     * The redux store's {@code dispatch} function.\n     */\n    dispatch: Dispatch<any>,\n\n    /**\n     * The translate function.\n     */\n    t: Function,\n\n    /**\n     * The recent list from the Redux store.\n     */\n    _recentList: Array<Object>\n};\n\n/**\n * The cross platform container rendering the list of the recently joined rooms.\n *\n */\nclass RecentList extends AbstractRecentList<Props> {\n    _getRenderListEmptyComponent: () => React$Node;\n    _onPress: string => {};\n\n    /**\n     * Initializes a new {@code RecentList} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._getRenderListEmptyComponent\n            = this._getRenderListEmptyComponent.bind(this);\n        this._onPress = this._onPress.bind(this);\n        this._onItemDelete = this._onItemDelete.bind(this);\n    }\n\n    _onItemDelete: Object => void;\n\n    /**\n     * Deletes a recent entry.\n     *\n     * @param {Object} entry - The entry to be deleted.\n     * @inheritdoc\n     */\n    _onItemDelete(entry) {\n        this.props.dispatch(deleteRecentListEntry(entry));\n    }\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        if (!isRecentListEnabled()) {\n            return null;\n        }\n        const {\n            disabled,\n            _recentList\n        } = this.props;\n        const recentList = toDisplayableList(_recentList);\n\n        return (\n            <MeetingsList\n                disabled = { disabled }\n                hideURL = { true }\n                listEmptyComponent = { this._getRenderListEmptyComponent() }\n                meetings = { recentList }\n                onItemDelete = { this._onItemDelete }\n                onPress = { this._onPress } />\n        );\n    }\n}\n\n/**\n * Maps redux state to component props.\n *\n * @param {Object} state - The redux state.\n * @returns {{\n *     _defaultServerURL: string,\n *     _recentList: Array\n * }}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _recentList: state['features/recent-list']\n    };\n}\n\nexport default translate(connect(_mapStateToProps)(RecentList));\n","// @flow\n\nimport { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';\nimport { Component } from 'react';\nimport type { Dispatch } from 'redux';\n\nimport { createWelcomePageEvent, sendAnalytics } from '../../analytics';\nimport { appNavigate } from '../../app/actions';\nimport isInsecureRoomName from '../../base/util/isInsecureRoomName';\nimport { isCalendarEnabled } from '../../calendar-sync';\nimport { isRecentListEnabled } from '../../recent-list/functions';\n\n/**\n * {@code AbstractWelcomePage}'s React {@code Component} prop types.\n */\ntype Props = {\n\n    /**\n     * Whether the calendar functionality is enabled or not.\n     */\n    _calendarEnabled: boolean,\n\n    /**\n     * Whether the insecure room name functionality is enabled or not.\n     */\n    _enableInsecureRoomNameWarning: boolean,\n\n    /**\n     * URL for the moderated rooms microservice, if available.\n     */\n    _moderatedRoomServiceUrl: ?string,\n\n    /**\n     * Whether the recent list is enabled\n     */\n    _recentListEnabled: Boolean,\n\n    /**\n     * Room name to join to.\n     */\n    _room: string,\n\n    /**\n     * The current settings.\n     */\n    _settings: Object,\n\n    /**\n     * The Redux dispatch Function.\n     */\n    dispatch: Dispatch<any>\n};\n\n/**\n * Base (abstract) class for container component rendering the welcome page.\n *\n * @abstract\n */\nexport class AbstractWelcomePage extends Component<Props, *> {\n    _mounted: ?boolean;\n\n    /**\n     * Implements React's {@link Component#getDerivedStateFromProps()}.\n     *\n     * @inheritdoc\n     */\n    static getDerivedStateFromProps(props: Props, state: Object) {\n        return {\n            room: props._room || state.room\n        };\n    }\n\n    /**\n     * Save room name into component's local state.\n     *\n     * @type {Object}\n     * @property {number|null} animateTimeoutId - Identifier of the letter\n     * animation timeout.\n     * @property {string} generatedRoomname - Automatically generated room name.\n     * @property {string} room - Room name.\n     * @property {string} roomPlaceholder - Room placeholder that's used as a\n     * placeholder for input.\n     * @property {number|null} updateTimeoutId - Identifier of the timeout\n     * updating the generated room name.\n     */\n    state = {\n        animateTimeoutId: undefined,\n        generatedRoomname: '',\n        insecureRoomName: false,\n        joining: false,\n        room: '',\n        roomPlaceholder: '',\n        updateTimeoutId: undefined\n    };\n\n    /**\n     * Initializes a new {@code AbstractWelcomePage} instance.\n     *\n     * @param {Props} props - The React {@code Component} props to initialize\n     * the new {@code AbstractWelcomePage} instance with.\n     */\n    constructor(props: Props) {\n        super(props);\n\n        // Bind event handlers so they are only bound once per instance.\n        this._animateRoomnameChanging\n            = this._animateRoomnameChanging.bind(this);\n        this._onJoin = this._onJoin.bind(this);\n        this._onRoomChange = this._onRoomChange.bind(this);\n        this._renderInsecureRoomNameWarning = this._renderInsecureRoomNameWarning.bind(this);\n        this._updateRoomname = this._updateRoomname.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after mounting occurs.\n     *\n     * @inheritdoc\n     */\n    componentDidMount() {\n        this._mounted = true;\n        sendAnalytics(createWelcomePageEvent('viewed', undefined, { value: 1 }));\n    }\n\n    /**\n     * Implements React's {@link Component#componentWillUnmount()}. Invoked\n     * immediately before this component is unmounted and destroyed.\n     *\n     * @inheritdoc\n     */\n    componentWillUnmount() {\n        this._clearTimeouts();\n        this._mounted = false;\n    }\n\n    _animateRoomnameChanging: (string) => void;\n\n    /**\n     * Animates the changing of the room name.\n     *\n     * @param {string} word - The part of room name that should be added to\n     * placeholder.\n     * @private\n     * @returns {void}\n     */\n    _animateRoomnameChanging(word: string) {\n        let animateTimeoutId;\n        const roomPlaceholder = this.state.roomPlaceholder + word.substr(0, 1);\n\n        if (word.length > 1) {\n            animateTimeoutId\n                = setTimeout(\n                    () => {\n                        this._animateRoomnameChanging(\n                            word.substring(1, word.length));\n                    },\n                    70);\n        }\n        this.setState({\n            animateTimeoutId,\n            roomPlaceholder\n        });\n    }\n\n    /**\n     * Method that clears timeouts for animations and updates of room name.\n     *\n     * @private\n     * @returns {void}\n     */\n    _clearTimeouts() {\n        clearTimeout(this.state.animateTimeoutId);\n        clearTimeout(this.state.updateTimeoutId);\n    }\n\n    /**\n     * Renders the insecure room name warning.\n     *\n     * @returns {ReactElement}\n     */\n    _doRenderInsecureRoomNameWarning: () => React$Component<any>;\n\n    _onJoin: () => void;\n\n    /**\n     * Handles joining. Either by clicking on 'Join' button\n     * or by pressing 'Enter' in room name input field.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _onJoin() {\n        const room = this.state.room || this.state.generatedRoomname;\n\n        sendAnalytics(\n            createWelcomePageEvent('clicked', 'joinButton', {\n                isGenerated: !this.state.room,\n                room\n            }));\n\n        if (room) {\n            this.setState({ joining: true });\n\n            // By the time the Promise of appNavigate settles, this component\n            // may have already been unmounted.\n            const onAppNavigateSettled\n                = () => this._mounted && this.setState({ joining: false });\n\n            this.props.dispatch(appNavigate(room))\n                .then(onAppNavigateSettled, onAppNavigateSettled);\n        }\n    }\n\n    _onRoomChange: (string) => void;\n\n    /**\n     * Handles 'change' event for the room name text input field.\n     *\n     * @param {string} value - The text typed into the respective text input\n     * field.\n     * @protected\n     * @returns {void}\n     */\n    _onRoomChange(value: string) {\n        this.setState({\n            room: value,\n            insecureRoomName: this.props._enableInsecureRoomNameWarning && value && isInsecureRoomName(value)\n        });\n    }\n\n    _renderInsecureRoomNameWarning: () => React$Component<any>;;\n\n    /**\n     * Renders the insecure room name warning if needed.\n     *\n     * @returns {ReactElement}\n     */\n    _renderInsecureRoomNameWarning() {\n        if (this.props._enableInsecureRoomNameWarning && this.state.insecureRoomName) {\n            return this._doRenderInsecureRoomNameWarning();\n        }\n\n        return null;\n    }\n\n    _updateRoomname: () => void;\n\n    /**\n     * Triggers the generation of a new room name and initiates an animation of\n     * its changing.\n     *\n     * @protected\n     * @returns {void}\n     */\n    _updateRoomname() {\n        const generatedRoomname = generateRoomWithoutSeparator();\n        const roomPlaceholder = '';\n        const updateTimeoutId = setTimeout(this._updateRoomname, 10000);\n\n        this._clearTimeouts();\n        this.setState(\n            {\n                generatedRoomname,\n                roomPlaceholder,\n                updateTimeoutId\n            },\n            () => this._animateRoomnameChanging(generatedRoomname));\n    }\n}\n\n/**\n * Maps (parts of) the redux state to the React {@code Component} props of\n * {@code AbstractWelcomePage}.\n *\n * @param {Object} state - The redux state.\n * @protected\n * @returns {Props}\n */\nexport function _mapStateToProps(state: Object) {\n    return {\n        _calendarEnabled: isCalendarEnabled(state),\n        _enableInsecureRoomNameWarning: state['features/base/config'].enableInsecureRoomNameWarning || false,\n        _moderatedRoomServiceUrl: state['features/base/config'].moderatedRoomServiceUrl,\n        _recentListEnabled: isRecentListEnabled(),\n        _room: state['features/base/conference'].room,\n        _settings: state['features/base/settings']\n    };\n}\n","// @flow\nimport React, { Component } from 'react';\n\n/**\n * The type of the React {@code Component} props of {@link Tab}\n */\ntype Props = {\n\n    /**\n     * The index of the tab.\n     */\n    index: number,\n\n    /**\n     * Indicates if the tab is selected or not.\n     */\n    isSelected: boolean,\n\n    /**\n     * The label of the tab.\n     */\n    label: string,\n\n    /**\n     * Handler for selecting the tab.\n     */\n    onSelect: Function\n}\n\n/**\n * A React component that implements tabs.\n *\n */\nexport default class Tab extends Component<Props> {\n    /**\n     * Initializes a new {@code Tab} instance.\n     *\n     * @inheritdoc\n     */\n    constructor(props: Props) {\n        super(props);\n\n        this._onSelect = this._onSelect.bind(this);\n    }\n\n    _onSelect: () => void;\n\n    /**\n     * Selects a tab.\n     *\n     * @returns {void}\n     */\n    _onSelect() {\n        const { index, onSelect } = this.props;\n\n        onSelect(index);\n    }\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { index, isSelected, label } = this.props;\n        const className = `tab${isSelected ? ' selected' : ''}`;\n\n        return (\n            <div\n                className = { className }\n                key = { index }\n                onClick = { this._onSelect }>\n                { label }\n            </div>);\n    }\n}\n","// @flow\nimport React, { Component } from 'react';\n\nimport Tab from './Tab';\n\n/**\n * The type of the React {@code Component} props of {@link Tabs}\n */\ntype Props = {\n\n    /**\n     * Handler for selecting the tab.\n     */\n    onSelect: Function,\n\n    /**\n     * The index of the selected tab.\n     */\n    selected: number,\n\n    /**\n     * Tabs information.\n     */\n    tabs: Object\n};\n\n/**\n * A React component that implements tabs.\n *\n */\nexport default class Tabs extends Component<Props> {\n    static defaultProps = {\n        tabs: [],\n        selected: 0\n    };\n\n    /**\n     * Implements the React Components's render method.\n     *\n     * @inheritdoc\n     */\n    render() {\n        const { onSelect, selected, tabs } = this.props;\n        const { content = null } = tabs.length\n            ? tabs[Math.min(selected, tabs.length - 1)]\n            : {};\n\n        return (\n            <div className = 'tab-container'>\n                { tabs.length > 1 ? (\n                    <div className = 'tab-buttons'>\n                        {\n                            tabs.map((tab, index) => (\n                                <Tab\n                                    index = { index }\n                                    isSelected = { index === selected }\n                                    key = { index }\n                                    label = { tab.label }\n                                    onSelect = { onSelect } />\n                            ))\n                        }\n                    </div>) : null\n                }\n                <div className = 'tab-content'>\n                    { content }\n                </div>\n            </div>\n        );\n    }\n}\n","/* global interfaceConfig */\n\nimport React from 'react';\n\nimport { isMobileBrowser } from '../../base/environment/utils';\nimport { translate, translateToHTML } from '../../base/i18n';\nimport { Icon, IconWarning } from '../../base/icons';\nimport { Watermarks } from '../../base/react';\nimport { connect } from '../../base/redux';\nimport { CalendarList } from '../../calendar-sync';\nimport { RecentList } from '../../recent-list';\nimport { SettingsButton, SETTINGS_TABS } from '../../settings';\n\nimport { AbstractWelcomePage, _mapStateToProps } from './AbstractWelcomePage';\nimport Tabs from './Tabs';\n\n/**\n * The pattern used to validate room name.\n * @type {string}\n */\nexport const ROOM_NAME_VALIDATE_PATTERN_STR = '^[^?&:\\u0022\\u0027%#]+$';\n\n/**\n * The Web container rendering the welcome page.\n *\n * @extends AbstractWelcomePage\n */\nclass WelcomePage extends AbstractWelcomePage {\n    /**\n     * Default values for {@code WelcomePage} component's properties.\n     *\n     * @static\n     */\n    static defaultProps = {\n        _room: ''\n    };\n\n    /**\n     * Initializes a new WelcomePage instance.\n     *\n     * @param {Object} props - The read-only properties with which the new\n     * instance is to be initialized.\n     */\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            ...this.state,\n\n            generateRoomnames:\n                interfaceConfig.GENERATE_ROOMNAMES_ON_WELCOME_PAGE,\n            selectedTab: 0\n        };\n\n        /**\n         * The HTML Element used as the container for additional content. Used\n         * for directly appending the additional content template to the dom.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalContentRef = null;\n\n        this._roomInputRef = null;\n\n        /**\n         * The HTML Element used as the container for additional toolbar content. Used\n         * for directly appending the additional content template to the dom.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalToolbarContentRef = null;\n\n        this._additionalCardRef = null;\n\n        /**\n         * The template to use as the additional card displayed near the main one.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalCardTemplate = document.getElementById(\n            'welcome-page-additional-card-template');\n\n        /**\n         * The template to use as the main content for the welcome page. If\n         * not found then only the welcome page head will display.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalContentTemplate = document.getElementById(\n            'welcome-page-additional-content-template');\n\n        /**\n         * The template to use as the additional content for the welcome page header toolbar.\n         * If not found then only the settings icon will be displayed.\n         *\n         * @private\n         * @type {HTMLTemplateElement|null}\n         */\n        this._additionalToolbarContentTemplate = document.getElementById(\n            'settings-toolbar-additional-content-template'\n        );\n\n        // Bind event handlers so they are only bound once per instance.\n        this._onFormSubmit = this._onFormSubmit.bind(this);\n        this._onRoomChange = this._onRoomChange.bind(this);\n        this._setAdditionalCardRef = this._setAdditionalCardRef.bind(this);\n        this._setAdditionalContentRef\n            = this._setAdditionalContentRef.bind(this);\n        this._setRoomInputRef = this._setRoomInputRef.bind(this);\n        this._setAdditionalToolbarContentRef\n            = this._setAdditionalToolbarContentRef.bind(this);\n        this._onTabSelected = this._onTabSelected.bind(this);\n        this._renderFooter = this._renderFooter.bind(this);\n    }\n\n    /**\n     * Implements React's {@link Component#componentDidMount()}. Invoked\n     * immediately after this component is mounted.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        document.body.classList.add('welcome-page');\n        document.title = interfaceConfig.APP_NAME;\n\n        if (this.state.generateRoomnames) {\n            this._updateRoomname();\n        }\n\n        if (this._shouldShowAdditionalContent()) {\n            this._additionalContentRef.appendChild(\n                this._additionalContentTemplate.content.cloneNode(true));\n        }\n\n        if (this._shouldShowAdditionalToolbarContent()) {\n            this._additionalToolbarContentRef.appendChild(\n                this._additionalToolbarContentTemplate.content.cloneNode(true)\n            );\n        }\n\n        if (this._shouldShowAdditionalCard()) {\n            this._additionalCardRef.appendChild(\n                this._additionalCardTemplate.content.cloneNode(true)\n            );\n        }\n    }\n\n    /**\n     * Removes the classname used for custom styling of the welcome page.\n     *\n     * @inheritdoc\n     * @returns {void}\n     */\n    componentWillUnmount() {\n        super.componentWillUnmount();\n\n        document.body.classList.remove('welcome-page');\n    }\n\n    /**\n     * Implements React's {@link Component#render()}.\n     *\n     * @inheritdoc\n     * @returns {ReactElement|null}\n     */\n    render() {\n        const { _moderatedRoomServiceUrl, t } = this.props;\n        const { DEFAULT_WELCOME_PAGE_LOGO_URL, DISPLAY_WELCOME_FOOTER } = interfaceConfig;\n        const showAdditionalCard = this._shouldShowAdditionalCard();\n        const showAdditionalContent = this._shouldShowAdditionalContent();\n        const showAdditionalToolbarContent = this._shouldShowAdditionalToolbarContent();\n        const contentClassName = showAdditionalContent ? 'with-content' : 'without-content';\n        const footerClassName = DISPLAY_WELCOME_FOOTER ? 'with-footer' : 'without-footer';\n\n        return (\n            <div\n                className = { `welcome ${contentClassName} ${footerClassName}` }\n                id = 'welcome_page'>\n                <div className = 'welcome-watermark'>\n                    <Watermarks defaultJitsiLogoURL = { DEFAULT_WELCOME_PAGE_LOGO_URL } />\n                </div>\n\n                <div className = 'header'>\n                    <div className = 'welcome-page-settings'>\n                        <SettingsButton\n                            defaultTab = { SETTINGS_TABS.CALENDAR } />\n                        { showAdditionalToolbarContent\n                            ? <div\n                                className = 'settings-toolbar-content'\n                                ref = { this._setAdditionalToolbarContentRef } />\n                            : null\n                        }\n                    </div>\n                    <div className = 'header-image' />\n                    <div className = 'header-container'>\n                        <h1 className = 'header-text-title'>\n                            { t('welcomepage.headerTitle') }\n                        </h1>\n                        <span className = 'header-text-subtitle'>\n                            { t('welcomepage.headerSubtitle')}\n                        </span>\n                        <div id = 'enter_room'>\n                            <div className = 'enter-room-input-container'>\n                                <form onSubmit = { this._onFormSubmit }>\n                                    <input\n                                        aria-disabled = 'false'\n                                        aria-label = 'Meeting name input'\n                                        autoFocus = { true }\n                                        className = 'enter-room-input'\n                                        id = 'enter_room_field'\n                                        onChange = { this._onRoomChange }\n                                        pattern = { ROOM_NAME_VALIDATE_PATTERN_STR }\n                                        placeholder = { this.state.roomPlaceholder }\n                                        ref = { this._setRoomInputRef }\n                                        title = { t('welcomepage.roomNameAllowedChars') }\n                                        type = 'text'\n                                        value = { this.state.room } />\n                                    <div\n                                        className = { _moderatedRoomServiceUrl\n                                            ? 'warning-with-link'\n                                            : 'warning-without-link' }>\n                                        { this._renderInsecureRoomNameWarning() }\n                                    </div>\n                                </form>\n                            </div>\n                            <button\n                                aria-disabled = 'false'\n                                aria-label = 'Start meeting'\n                                className = 'welcome-page-button'\n                                id = 'enter_room_button'\n                                onClick = { this._onFormSubmit }\n                                tabIndex = '0'\n                                type = 'button'>\n                                { t('welcomepage.startMeeting') }\n                            </button>\n                        </div>\n\n                        { _moderatedRoomServiceUrl && (\n                            <div id = 'moderated-meetings'>\n                                <p>\n                                    {\n                                        translateToHTML(\n                                        t, 'welcomepage.moderatedMessage', { url: _moderatedRoomServiceUrl })\n                                    }\n                                </p>\n                            </div>)}\n                    </div>\n                </div>\n\n                <div className = 'welcome-cards-container'>\n                    <div className = 'welcome-card-row'>\n                        <div className = 'welcome-tabs welcome-card welcome-card--blue'>\n                            { this._renderTabs() }\n                        </div>\n                        { showAdditionalCard\n                            ? <div\n                                className = 'welcome-card welcome-card--dark'\n                                ref = { this._setAdditionalCardRef } />\n                            : null }\n                    </div>\n\n                    { showAdditionalContent\n                        ? <div\n                            className = 'welcome-page-content'\n                            ref = { this._setAdditionalContentRef } />\n                        : null }\n                </div>\n                { DISPLAY_WELCOME_FOOTER && this._renderFooter()}\n            </div>\n\n        );\n    }\n\n    /**\n     * Renders the insecure room name warning.\n     *\n     * @inheritdoc\n     */\n    _doRenderInsecureRoomNameWarning() {\n        return (\n            <div className = 'insecure-room-name-warning'>\n                <Icon src = { IconWarning } />\n                <span>\n                    { this.props.t('security.insecureRoomNameWarning') }\n                </span>\n            </div>\n        );\n    }\n\n    /**\n     * Prevents submission of the form and delegates join logic.\n     *\n     * @param {Event} event - The HTML Event which details the form submission.\n     * @private\n     * @returns {void}\n     */\n    _onFormSubmit(event) {\n        event.preventDefault();\n\n        if (!this._roomInputRef || this._roomInputRef.reportValidity()) {\n            this._onJoin();\n        }\n    }\n\n    /**\n     * Overrides the super to account for the differences in the argument types\n     * provided by HTML and React Native text inputs.\n     *\n     * @inheritdoc\n     * @override\n     * @param {Event} event - The (HTML) Event which details the change such as\n     * the EventTarget.\n     * @protected\n     */\n    _onRoomChange(event) {\n        super._onRoomChange(event.target.value);\n    }\n\n    /**\n     * Callback invoked when the desired tab to display should be changed.\n     *\n     * @param {number} tabIndex - The index of the tab within the array of\n     * displayed tabs.\n     * @private\n     * @returns {void}\n     */\n    _onTabSelected(tabIndex) {\n        this.setState({ selectedTab: tabIndex });\n    }\n\n    /**\n     * Renders the footer.\n     *\n     * @returns {ReactElement}\n     */\n    _renderFooter() {\n        const { t } = this.props;\n        const {\n            MOBILE_DOWNLOAD_LINK_ANDROID,\n            MOBILE_DOWNLOAD_LINK_F_DROID,\n            MOBILE_DOWNLOAD_LINK_IOS\n        } = interfaceConfig;\n\n        return (<footer className = 'welcome-footer'>\n            <div className = 'welcome-footer-centered'>\n                <div className = 'welcome-footer-padded'>\n                    <div className = 'welcome-footer-row-block welcome-footer--row-1'>\n                        <div className = 'welcome-footer-row-1-text'>{t('welcomepage.jitsiOnMobile')}</div>\n                        <a\n                            className = 'welcome-badge'\n                            href = { MOBILE_DOWNLOAD_LINK_IOS }>\n                            <img\n                                alt = { t('welcomepage.mobileDownLoadLinkIos') }\n                                src = './images/app-store-badge.png' />\n                        </a>\n                        <a\n                            className = 'welcome-badge'\n                            href = { MOBILE_DOWNLOAD_LINK_ANDROID }>\n                            <img\n                                alt = { t('welcomepage.mobileDownLoadLinkAndroid') }\n                                src = './images/google-play-badge.png' />\n                        </a>\n                        <a\n                            className = 'welcome-badge'\n                            href = { MOBILE_DOWNLOAD_LINK_F_DROID }>\n                            <img\n                                alt = { t('welcomepage.mobileDownLoadLinkFDroid') }\n                                src = './images/f-droid-badge.png' />\n                        </a>\n                    </div>\n                </div>\n            </div>\n        </footer>);\n    }\n\n    /**\n     * Renders tabs to show previous meetings and upcoming calendar events. The\n     * tabs are purposefully hidden on mobile browsers.\n     *\n     * @returns {ReactElement|null}\n     */\n    _renderTabs() {\n        if (isMobileBrowser()) {\n            return null;\n        }\n\n        const { _calendarEnabled, _recentListEnabled, t } = this.props;\n\n        const tabs = [];\n\n        if (_calendarEnabled) {\n            tabs.push({\n                label: t('welcomepage.calendar'),\n                content: <CalendarList />\n            });\n        }\n\n        if (_recentListEnabled) {\n            tabs.push({\n                label: t('welcomepage.recentList'),\n                content: <RecentList />\n            });\n        }\n\n        if (tabs.length === 0) {\n            return null;\n        }\n\n        return (\n            <Tabs\n                onSelect = { this._onTabSelected }\n                selected = { this.state.selectedTab }\n                tabs = { tabs } />);\n    }\n\n    /**\n     * Sets the internal reference to the HTMLDivElement used to hold the\n     * additional card shown near the tabs card.\n     *\n     * @param {HTMLDivElement} el - The HTMLElement for the div that is the root\n     * of the welcome page content.\n     * @private\n     * @returns {void}\n     */\n    _setAdditionalCardRef(el) {\n        this._additionalCardRef = el;\n    }\n\n    /**\n     * Sets the internal reference to the HTMLDivElement used to hold the\n     * welcome page content.\n     *\n     * @param {HTMLDivElement} el - The HTMLElement for the div that is the root\n     * of the welcome page content.\n     * @private\n     * @returns {void}\n     */\n    _setAdditionalContentRef(el) {\n        this._additionalContentRef = el;\n    }\n\n    /**\n     * Sets the internal reference to the HTMLDivElement used to hold the\n     * toolbar additional content.\n     *\n     * @param {HTMLDivElement} el - The HTMLElement for the div that is the root\n     * of the additional toolbar content.\n     * @private\n     * @returns {void}\n     */\n    _setAdditionalToolbarContentRef(el) {\n        this._additionalToolbarContentRef = el;\n    }\n\n    /**\n     * Sets the internal reference to the HTMLInputElement used to hold the\n     * welcome page input room element.\n     *\n     * @param {HTMLInputElement} el - The HTMLElement for the input of the room name on the welcome page.\n     * @private\n     * @returns {void}\n     */\n    _setRoomInputRef(el) {\n        this._roomInputRef = el;\n    }\n\n    /**\n     * Returns whether or not an additional card should be displayed near the tabs.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowAdditionalCard() {\n        return interfaceConfig.DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD\n            && this._additionalCardTemplate\n            && this._additionalCardTemplate.content\n            && this._additionalCardTemplate.innerHTML.trim();\n    }\n\n    /**\n     * Returns whether or not additional content should be displayed below\n     * the welcome page's header for entering a room name.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowAdditionalContent() {\n        return interfaceConfig.DISPLAY_WELCOME_PAGE_CONTENT\n            && this._additionalContentTemplate\n            && this._additionalContentTemplate.content\n            && this._additionalContentTemplate.innerHTML.trim();\n    }\n\n    /**\n     * Returns whether or not additional content should be displayed inside\n     * the header toolbar.\n     *\n     * @private\n     * @returns {boolean}\n     */\n    _shouldShowAdditionalToolbarContent() {\n        return interfaceConfig.DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT\n            && this._additionalToolbarContentTemplate\n            && this._additionalToolbarContentTemplate.content\n            && this._additionalToolbarContentTemplate.innerHTML.trim();\n    }\n}\n\nexport default translate(connect(_mapStateToProps)(WelcomePage));\n","// @flow\n\nimport { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';\nimport type { Component } from 'react';\n\nimport { isRoomValid } from '../base/conference';\nimport { isSupportedBrowser } from '../base/environment';\nimport { toState } from '../base/redux';\nimport { Conference } from '../conference';\nimport { getDeepLinkingPage } from '../deep-linking';\nimport { UnsupportedDesktopBrowser } from '../unsupported-browser';\nimport {\n    BlankPage,\n    WelcomePage,\n    isWelcomePageAppEnabled,\n    isWelcomePageUserEnabled\n} from '../welcome';\n\n/**\n * Object describing application route.\n *\n * @typedef {Object} Route\n * @property {Component} component - React Component constructor.\n * @property {string|undefined} href - New location, in case navigation involves\n * a location change.\n */\nexport type Route = {\n    component: Class<Component<*>>,\n    href: ?string\n};\n\n/**\n * Determines which route is to be rendered in order to depict a specific Redux\n * store.\n *\n * @param {(Function|Object)} stateful - THe redux store, state, or\n * {@code getState} function.\n * @returns {Promise<Route>}\n */\nexport function _getRouteToRender(stateful: Function | Object): Promise<Route> {\n    const state = toState(stateful);\n\n    if (navigator.product === 'ReactNative') {\n        return _getMobileRoute(state);\n    }\n\n    return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);\n}\n\n/**\n * Returns the {@code Route} to display on the React Native app.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>}\n */\nfunction _getMobileRoute(state): Promise<Route> {\n    const route = _getEmptyRoute();\n\n    if (isRoomValid(state['features/base/conference'].room)) {\n        route.component = Conference;\n    } else if (isWelcomePageAppEnabled(state)) {\n        route.component = WelcomePage;\n    } else {\n        route.component = BlankPage;\n    }\n\n    return Promise.resolve(route);\n}\n\n/**\n * Returns the {@code Route} to display when trying to access a conference if\n * a valid conference is being joined.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>|undefined}\n */\nfunction _getWebConferenceRoute(state): ?Promise<Route> {\n    if (!isRoomValid(state['features/base/conference'].room)) {\n        return;\n    }\n\n    const route = _getEmptyRoute();\n\n    // Update the location if it doesn't match. This happens when a room is\n    // joined from the welcome page. The reason for doing this instead of using\n    // the history API is that we want to load the config.js which takes the\n    // room into account.\n    const { locationURL } = state['features/base/connection'];\n\n    if (window.location.href !== locationURL.href) {\n        route.href = locationURL.href;\n\n        return Promise.resolve(route);\n    }\n\n    return getDeepLinkingPage(state)\n        .then(deepLinkComponent => {\n            if (deepLinkComponent) {\n                route.component = deepLinkComponent;\n            } else if (isSupportedBrowser()) {\n                route.component = Conference;\n            } else {\n                route.component = UnsupportedDesktopBrowser;\n            }\n\n            return route;\n        });\n}\n\n/**\n * Returns the {@code Route} to display when trying to access the welcome page.\n *\n * @param {Object} state - The redux state.\n * @returns {Promise<Route>}\n */\nfunction _getWebWelcomePageRoute(state): Promise<Route> {\n    const route = _getEmptyRoute();\n\n    if (isWelcomePageUserEnabled(state)) {\n        if (isSupportedBrowser()) {\n            route.component = WelcomePage;\n        } else {\n            route.component = UnsupportedDesktopBrowser;\n        }\n    } else {\n        // Web: if the welcome page is disabled, go directly to a random room.\n\n        let href = window.location.href;\n\n        href.endsWith('/') || (href += '/');\n        route.href = href + generateRoomWithoutSeparator();\n    }\n\n    return Promise.resolve(route);\n}\n\n/**\n * Returns the default {@code Route}.\n *\n * @returns {Route}\n */\nfunction _getEmptyRoute(): Route {\n    return {\n        component: BlankPage,\n        href: undefined\n    };\n}\n","// @flow\n\nimport { WELCOME_PAGE_ENABLED, getFeatureFlag } from '../base/flags';\nimport { toState } from '../base/redux';\n\ndeclare var APP: Object;\n\n/**\n * Determines whether the {@code WelcomePage} is enabled by the app itself\n * (e.g. Programmatically via the Jitsi Meet SDK for Android and iOS). Not to be\n * confused with {@link isWelcomePageUserEnabled}.\n *\n * @param {Function|Object} stateful - The redux state or {@link getState}\n * function.\n * @returns {boolean} If the {@code WelcomePage} is enabled by the app, then\n * {@code true}; otherwise, {@code false}.\n */\nexport function isWelcomePageAppEnabled(stateful: Function | Object) {\n    if (navigator.product === 'ReactNative') {\n        // We introduced the welcomePageEnabled prop on App in Jitsi Meet SDK\n        // for Android and iOS. There isn't a strong reason not to introduce it\n        // on Web but there're a few considerations to be taken before I go\n        // there among which:\n        // - Enabling/disabling the Welcome page on Web historically\n        // automatically redirects to a random room and that does not make sense\n        // on mobile (right now).\n        return Boolean(getFeatureFlag(stateful, WELCOME_PAGE_ENABLED));\n    }\n\n    return true;\n}\n\n/**\n * Determines whether the {@code WelcomePage} is enabled by the user either\n * herself or through her deployment config(uration). Not to be confused with\n * {@link isWelcomePageAppEnabled}.\n *\n * @param {Function|Object} stateful - The redux state or {@link getState}\n * function.\n * @returns {boolean} If the {@code WelcomePage} is enabled by the user, then\n * {@code true}; otherwise, {@code false}.\n */\nexport function isWelcomePageUserEnabled(stateful: Function | Object) {\n    return (\n        typeof APP === 'undefined'\n            ? true\n            : toState(stateful)['features/base/config'].enableWelcomePage);\n}\n","export default undefined;\n","// @flow\n\nimport {\n    createConnectionEvent,\n    sendAnalytics\n} from '../analytics';\nimport { SET_ROOM } from '../base/conference';\nimport {\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    getURLWithoutParams\n} from '../base/connection';\nimport { MiddlewareRegistry } from '../base/redux';\n\nimport { reloadNow } from './actions';\nimport { _getRouteToRender } from './getRouteToRender';\n\nMiddlewareRegistry.register(store => next => action => {\n    switch (action.type) {\n    case CONNECTION_ESTABLISHED:\n        return _connectionEstablished(store, next, action);\n    case CONNECTION_FAILED:\n        return _connectionFailed(store, next, action);\n\n    case SET_ROOM:\n        return _setRoom(store, next, action);\n    }\n\n    return next(action);\n});\n\n/**\n * Notifies the feature app that the action {@link CONNECTION_ESTABLISHED} is\n * being dispatched within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_ESTABLISHED}\n * which is being dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _connectionEstablished(store, next, action) {\n    const result = next(action);\n\n    // In the Web app we explicitly do not want to display the hash and\n    // query/search URL params. Unfortunately, window.location and, more\n    // importantly, its params are used not only in jitsi-meet but also in\n    // lib-jitsi-meet. Consequenlty, the time to remove the params is\n    // determined by when no one needs them anymore.\n    const { history, location } = window;\n\n    if (history\n            && location\n            && history.length\n            && typeof history.replaceState === 'function') {\n        const replacement = getURLWithoutParams(location);\n\n        if (location !== replacement) {\n            history.replaceState(\n                history.state,\n                (document && document.title) || '',\n                replacement);\n        }\n    }\n\n    return result;\n}\n\n/**\n * CONNECTION_FAILED action side effects.\n *\n * @param {Object} store - The Redux store.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the specified {@code action} to\n * the specified {@code store}.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is being dispatched in the specified\n * {@code store}.\n * @returns {Object}\n * @private\n */\nfunction _connectionFailed({ dispatch, getState }, next, action) {\n    // In the case of a split-brain error, reload early and prevent further\n    // handling of the action.\n    if (_isMaybeSplitBrainError(getState, action)) {\n        dispatch(reloadNow());\n\n        return;\n    }\n\n    return next(action);\n}\n\n/**\n * Returns whether or not a CONNECTION_FAILED action is for a possible split brain error. A split brain error occurs\n * when at least two users join a conference on different bridges. It is assumed the split brain scenario occurs very\n * early on in the call.\n *\n * @param {Function} getState - The redux function for fetching the current state.\n * @param {Action} action - The redux action {@code CONNECTION_FAILED} which is being dispatched in the specified\n * {@code store}.\n * @private\n * @returns {boolean}\n */\nfunction _isMaybeSplitBrainError(getState, action) {\n    const { error } = action;\n    const isShardChangedError = error\n        && error.message === 'item-not-found'\n        && error.details\n        && error.details.shard_changed;\n\n    if (isShardChangedError) {\n        const state = getState();\n        const { timeEstablished } = state['features/base/connection'];\n        const { _immediateReloadThreshold } = state['features/base/config'];\n\n        const timeSinceConnectionEstablished = timeEstablished && Date.now() - timeEstablished;\n        const reloadThreshold = typeof _immediateReloadThreshold === 'number' ? _immediateReloadThreshold : 1500;\n\n        const isWithinSplitBrainThreshold = !timeEstablished || timeSinceConnectionEstablished <= reloadThreshold;\n\n        sendAnalytics(createConnectionEvent('failed', {\n            ...error,\n            connectionEstablished: timeEstablished,\n            splitBrain: isWithinSplitBrainThreshold,\n            timeSinceConnectionEstablished\n        }));\n\n        return isWithinSplitBrainThreshold;\n    }\n\n    return false;\n}\n\n/**\n * Navigates to a route in accord with a specific redux state.\n *\n * @param {Store} store - The redux store which determines/identifies the route\n * to navigate to.\n * @private\n * @returns {void}\n */\nfunction _navigate({ getState }) {\n    const state = getState();\n    const { app } = state['features/base/app'];\n\n    _getRouteToRender(state).then(route => app._navigate(route));\n}\n\n/**\n * Notifies the feature app that the action {@link SET_ROOM} is being dispatched\n * within a specific redux {@code store}.\n *\n * @param {Store} store - The redux store in which the specified {@code action}\n * is being dispatched.\n * @param {Dispatch} next - The redux {@code dispatch} function to dispatch the\n * specified {@code action} to the specified {@code store}.\n * @param {Action} action - The redux action, {@code SET_ROOM}, which is being\n * dispatched in the specified {@code store}.\n * @private\n * @returns {Object} The new state that is the result of the reduction of the\n * specified {@code action}.\n */\nfunction _setRoom(store, next, action) {\n    const result = next(action);\n\n    _navigate(store);\n\n    return result;\n}\n","/* @flow */\n\nimport { MEDIA_TYPE } from '../base/media/constants';\nimport type { MediaType } from '../base/media/constants';\nimport {\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED\n} from '../base/participants';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    DISABLE_MODERATION,\n    DISMISS_PENDING_PARTICIPANT,\n    ENABLE_MODERATION,\n    LOCAL_PARTICIPANT_APPROVED,\n    PARTICIPANT_APPROVED,\n    PARTICIPANT_PENDING_AUDIO\n} from './actionTypes';\nimport { MEDIA_TYPE_TO_PENDING_STORE_KEY } from './constants';\n\nconst initialState = {\n    audioModerationEnabled: false,\n    videoModerationEnabled: false,\n    audioWhitelist: {},\n    videoWhitelist: {},\n    pendingAudio: [],\n    pendingVideo: []\n};\n\n/**\n Updates a participant in the state for the specified media type.\n *\n * @param {MediaType} mediaType - The media type.\n * @param {Object} participant - Information about participant to be modified.\n * @param {Object} state - The current state.\n * @private\n * @returns {boolean} - Whether state instance was modified.\n */\nfunction _updatePendingParticipant(mediaType: MediaType, participant, state: Object = {}) {\n    let arrayItemChanged = false;\n    const storeKey = MEDIA_TYPE_TO_PENDING_STORE_KEY[mediaType];\n    const arr = state[storeKey];\n    const newArr = arr.map(pending => {\n        if (pending.id === participant.id) {\n            arrayItemChanged = true;\n\n            return {\n                ...pending,\n                ...participant\n            };\n        }\n\n        return pending;\n    });\n\n    if (arrayItemChanged) {\n        state[storeKey] = newArr;\n\n        return true;\n    }\n\n    return false;\n}\n\nReducerRegistry.register('features/av-moderation', (state = initialState, action) => {\n\n    switch (action.type) {\n    case DISABLE_MODERATION: {\n        const newState = action.mediaType === MEDIA_TYPE.AUDIO\n            ? {\n                audioModerationEnabled: false,\n                audioUnmuteApproved: undefined\n            } : {\n                videoModerationEnabled: false,\n                videoUnmuteApproved: undefined\n            };\n\n        return {\n            ...state,\n            ...newState,\n            audioWhitelist: {},\n            videoWhitelist: {},\n            pendingAudio: [],\n            pendingVideo: []\n        };\n    }\n\n    case ENABLE_MODERATION: {\n        const newState = action.mediaType === MEDIA_TYPE.AUDIO\n            ? { audioModerationEnabled: true } : { videoModerationEnabled: true };\n\n        return {\n            ...state,\n            ...newState\n        };\n    }\n\n    case LOCAL_PARTICIPANT_APPROVED: {\n        const newState = action.mediaType === MEDIA_TYPE.AUDIO\n            ? { audioUnmuteApproved: true } : { videoUnmuteApproved: true };\n\n        return {\n            ...state,\n            ...newState\n        };\n    }\n\n    case PARTICIPANT_PENDING_AUDIO: {\n        const { participant } = action;\n\n        // Add participant to pendingAudio array only if it's not already added\n        if (!state.pendingAudio.find(pending => pending.id === participant.id)) {\n            const updated = [ ...state.pendingAudio ];\n\n            updated.push(participant);\n\n            return {\n                ...state,\n                pendingAudio: updated\n            };\n        }\n\n        return state;\n    }\n\n    case PARTICIPANT_UPDATED: {\n        const participant = action.participant;\n        const { audioModerationEnabled, videoModerationEnabled } = state;\n        let hasStateChanged = false;\n\n        // skips changing the reference of pendingAudio or pendingVideo,\n        // if there is no change in the elements\n        if (audioModerationEnabled) {\n            hasStateChanged = _updatePendingParticipant(MEDIA_TYPE.AUDIO, participant, state);\n        }\n\n        if (videoModerationEnabled) {\n            hasStateChanged = _updatePendingParticipant(MEDIA_TYPE.VIDEO, participant, state);\n        }\n\n        // If the state has changed we need to return a new object reference in order to trigger subscriber updates.\n        if (hasStateChanged) {\n            return {\n                ...state\n            };\n        }\n\n        return state;\n    }\n    case PARTICIPANT_LEFT: {\n        const participant = action.participant;\n        const { audioModerationEnabled, videoModerationEnabled } = state;\n        let hasStateChanged = false;\n\n        // skips changing the reference of pendingAudio or pendingVideo,\n        // if there is no change in the elements\n        if (audioModerationEnabled) {\n            const newPendingAudio = state.pendingAudio.filter(pending => pending.id !== participant.id);\n\n            if (state.pendingAudio.length !== newPendingAudio.length) {\n                state.pendingAudio = newPendingAudio;\n                hasStateChanged = true;\n            }\n        }\n\n        if (videoModerationEnabled) {\n            const newPendingVideo = state.pendingVideo.filter(pending => pending.id !== participant.id);\n\n            if (state.pendingVideo.length !== newPendingVideo.length) {\n                state.pendingVideo = newPendingVideo;\n                hasStateChanged = true;\n            }\n        }\n\n        // If the state has changed we need to return a new object reference in order to trigger subscriber updates.\n        if (hasStateChanged) {\n            return {\n                ...state\n            };\n        }\n\n        return state;\n    }\n\n    case DISMISS_PENDING_PARTICIPANT: {\n        const { participant, mediaType } = action;\n\n        if (mediaType === MEDIA_TYPE.AUDIO) {\n            return {\n                ...state,\n                pendingAudio: state.pendingAudio.filter(pending => pending.id !== participant.id)\n            };\n        }\n\n        if (mediaType === MEDIA_TYPE.VIDEO) {\n            return {\n                ...state,\n                pendingVideo: state.pendingVideo.filter(pending => pending.id !== participant.id)\n            };\n        }\n\n        return state;\n    }\n\n    case PARTICIPANT_APPROVED: {\n        const { mediaType, id } = action;\n\n        if (mediaType === MEDIA_TYPE.AUDIO) {\n            return {\n                ...state,\n                audioWhitelist: {\n                    ...state.audioWhitelist,\n                    [id]: true\n                }\n            };\n        }\n\n        if (mediaType === MEDIA_TYPE.VIDEO) {\n            return {\n                ...state,\n                videoWhitelist: {\n                    ...state.videoWhitelist,\n                    [id]: true\n                }\n            };\n        }\n\n        return state;\n    }\n\n    }\n\n    return state;\n});\n","import { ReducerRegistry } from '../redux';\n\nimport {\n    ADD_PENDING_DEVICE_REQUEST,\n    DEVICE_PERMISSIONS_CHANGED,\n    REMOVE_PENDING_DEVICE_REQUESTS,\n    SET_AUDIO_INPUT_DEVICE,\n    SET_VIDEO_INPUT_DEVICE,\n    UPDATE_DEVICE_LIST\n} from './actionTypes';\nimport { groupDevicesByKind } from './functions';\nimport logger from './logger';\n\nconst DEFAULT_STATE = {\n    availableDevices: {\n        audioInput: [],\n        audioOutput: [],\n        videoInput: []\n    },\n    pendingRequests: [],\n    permissions: {\n        audio: false,\n        video: false\n    }\n};\n\n/**\n * Listen for actions which changes the state of known and used devices.\n *\n * @param {Object} state - The Redux state of the feature features/base/devices.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Array<MediaDeviceInfo>} action.devices - All available audio and\n * video devices.\n * @returns {Object}\n */\nReducerRegistry.register(\n    'features/base/devices',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case UPDATE_DEVICE_LIST: {\n            const deviceList = groupDevicesByKind(action.devices);\n\n            return {\n                ...state,\n                availableDevices: deviceList\n            };\n        }\n\n        case ADD_PENDING_DEVICE_REQUEST:\n            return {\n                ...state,\n                pendingRequests: [\n                    ...state.pendingRequests,\n                    action.request\n                ]\n            };\n\n        case REMOVE_PENDING_DEVICE_REQUESTS:\n            return {\n                ...state,\n                pendingRequests: [ ]\n            };\n\n        // TODO: Changing of current audio and video device id is currently handled outside of react/redux.\n        case SET_AUDIO_INPUT_DEVICE: {\n            logger.debug(`set audio input device: ${action.deviceId}`);\n\n            return state;\n        }\n        case SET_VIDEO_INPUT_DEVICE: {\n            logger.debug(`set video input device: ${action.deviceId}`);\n\n            return state;\n        }\n        case DEVICE_PERMISSIONS_CHANGED: {\n            return {\n                ...state,\n                permissions: action.permissions\n            };\n        }\n        default:\n            return state;\n        }\n    });\n\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_EVERYONE_ENABLED_E2EE,\n    SET_EVERYONE_SUPPORT_E2EE,\n    TOGGLE_E2EE\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    enabled: false\n};\n\n/**\n * Reduces the Redux actions of the feature features/e2ee.\n */\nReducerRegistry.register('features/e2ee', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case TOGGLE_E2EE:\n        return {\n            ...state,\n            enabled: action.enabled\n        };\n    case SET_EVERYONE_ENABLED_E2EE:\n        return {\n            ...state,\n            everyoneEnabledE2EE: action.everyoneEnabledE2EE\n        };\n    case SET_EVERYONE_SUPPORT_E2EE:\n        return {\n            ...state,\n            everyoneSupportE2EE: action.everyoneSupportE2EE\n        };\n\n    default:\n        return state;\n    }\n});\n","import {\n    ReducerRegistry\n} from '../base/redux';\n\nimport {\n    CANCEL_FEEDBACK,\n    SUBMIT_FEEDBACK_ERROR,\n    SUBMIT_FEEDBACK_SUCCESS\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    message: '',\n\n    // The sentinel value -1 is used to denote no rating has been set and to\n    // preserve pre-redux behavior.\n    score: -1,\n    submitted: false\n};\n\n/**\n * Reduces the Redux actions of the feature features/feedback.\n */\nReducerRegistry.register(\n    'features/feedback',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case CANCEL_FEEDBACK: {\n            return {\n                ...state,\n                message: action.message,\n                score: action.score\n            };\n        }\n\n        case SUBMIT_FEEDBACK_ERROR:\n        case SUBMIT_FEEDBACK_SUCCESS: {\n            return {\n                ...state,\n                message: '',\n                score: -1,\n                submitted: true\n            };\n        }\n        }\n\n        return state;\n    });\n","/* @flow */\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    LOCAL_RECORDING_ENGAGED,\n    LOCAL_RECORDING_STATS_UPDATE,\n    LOCAL_RECORDING_UNENGAGED\n} from './actionTypes';\nimport { recordingController } from './controller';\n\nReducerRegistry.register('features/local-recording', (state = {}, action) => {\n    switch (action.type) {\n    case LOCAL_RECORDING_ENGAGED: {\n        return {\n            ...state,\n            isEngaged: true,\n            recordingEngagedAt: action.recordingEngagedAt,\n            encodingFormat: recordingController._format\n        };\n    }\n    case LOCAL_RECORDING_UNENGAGED:\n        return {\n            ...state,\n            isEngaged: false,\n            recordingEngagedAt: null\n        };\n    case LOCAL_RECORDING_STATS_UPDATE:\n        return {\n            ...state,\n            stats: action.stats\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature no audio signal\n */\nReducerRegistry.register('features/no-audio-signal', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NO_AUDIO_SIGNAL_NOTIFICATION_UID:\n        return set(state, 'noAudioSignalNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of noise detection feature\n */\nReducerRegistry.register('features/noise-detection', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NOISY_AUDIO_INPUT_NOTIFICATION_UID:\n        return set(state, 'noisyAudioInputNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    PARTICIPANTS_PANE_CLOSE,\n    PARTICIPANTS_PANE_OPEN,\n    SET_VOLUME\n} from './actionTypes';\nimport { REDUCER_KEY } from './constants';\n\nconst DEFAULT_STATE = {\n    isOpen: false,\n    participantsVolume: {}\n};\n\n/**\n * Listen for actions that mutate the participants pane state\n */\nReducerRegistry.register(\n    REDUCER_KEY, (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case PARTICIPANTS_PANE_CLOSE:\n            return {\n                ...state,\n                isOpen: false\n            };\n\n        case PARTICIPANTS_PANE_OPEN:\n            return {\n                ...state,\n                isOpen: true\n            };\n\n        case SET_VOLUME:\n            return {\n                ...state,\n                participantsVolume: {\n                    ...state.participantsVolume,\n\n                    [action.participantId]: action.volume\n                }\n            };\n\n        default:\n            return state;\n        }\n    },\n);\n","// @flow\n\nimport { Transport } from '../../../modules/transport';\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport {\n    SET_TRANSPORT,\n    SUSPEND_DETECTED\n} from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature power monitor.\n */\nReducerRegistry.register('features/power-monitor', (state = { }, action) => {\n    switch (action.type) {\n    case SET_TRANSPORT:\n        return _setTransport(state, action.transport);\n\n    case SUSPEND_DETECTED:\n        return _suspendDetected(state);\n\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific redux action SET_TRANSPORT of the feature power monitor.\n *\n * @param {Object} state - The redux state of the feature power monitor.\n * @param {?Transport} transport - The transport to store in state.\n * @private\n * @returns {Object} The new state of the feature power monitor after the reduction of\n * the specified action.\n */\nfunction _setTransport(state, transport: ?Transport) {\n    return set(state, 'transport', transport);\n}\n\n/**\n * Reduces a specific redux action SUSPEND_DETECTED of the feature overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @private\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _suspendDetected(state) {\n    return set(state, 'suspendDetected', true);\n}\n\n","import { PersistenceRegistry, ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_DEVICE_STATUS,\n    SET_DIALOUT_COUNTRY,\n    SET_DIALOUT_NUMBER,\n    SET_DIALOUT_STATUS,\n    SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,\n    SET_PRECALL_TEST_RESULTS,\n    SET_PREJOIN_DEVICE_ERRORS,\n    SET_PREJOIN_DISPLAY_NAME_REQUIRED,\n    SET_PREJOIN_PAGE_VISIBILITY,\n    SET_SKIP_PREJOIN,\n    SET_SKIP_PREJOIN_RELOAD\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    country: '',\n    deviceStatusText: 'prejoin.configuringDevices',\n    deviceStatusType: 'ok',\n    dialOutCountry: {\n        name: 'United States',\n        dialCode: '1',\n        code: 'us'\n    },\n    dialOutNumber: '',\n    dialOutStatus: 'prejoin.dialing',\n    isDisplayNameRequired: false,\n    name: '',\n    rawError: '',\n    showPrejoin: true,\n    skipPrejoinOnReload: false,\n    showJoinByPhoneDialog: false,\n    userSelectedSkipPrejoin: false\n};\n\n/**\n * The name of the redux store/state property which is the root of the redux\n * state of the feature {@code prejoin}.\n */\nconst STORE_NAME = 'features/prejoin';\n\n/**\n * Sets up the persistence of the feature {@code prejoin}.\n */\nPersistenceRegistry.register(STORE_NAME, {\n    skipPrejoinOnReload: true\n}, DEFAULT_STATE);\n\n/**\n * Listen for actions that mutate the prejoin state\n */\nReducerRegistry.register(\n    'features/prejoin', (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n\n        case SET_SKIP_PREJOIN: {\n            return {\n                ...state,\n                userSelectedSkipPrejoin: action.value\n            };\n        }\n\n        case SET_SKIP_PREJOIN_RELOAD: {\n            return {\n                ...state,\n                skipPrejoinOnReload: action.value\n            };\n        }\n\n        case SET_PRECALL_TEST_RESULTS:\n            return {\n                ...state,\n                precallTestResults: action.value\n            };\n\n        case SET_PREJOIN_PAGE_VISIBILITY:\n            return {\n                ...state,\n                showPrejoin: action.value\n            };\n\n        case SET_PREJOIN_DEVICE_ERRORS: {\n            const status = getStatusFromErrors(action.value);\n\n            return {\n                ...state,\n                ...status\n            };\n        }\n\n        case SET_DEVICE_STATUS: {\n            const { deviceStatusType, deviceStatusText } = action.value;\n\n            return {\n                ...state,\n                deviceStatusText,\n                deviceStatusType\n            };\n        }\n\n        case SET_DIALOUT_NUMBER: {\n            return {\n                ...state,\n                dialOutNumber: action.value\n            };\n        }\n\n        case SET_DIALOUT_COUNTRY: {\n            return {\n                ...state,\n                dialOutCountry: action.value\n            };\n        }\n\n        case SET_DIALOUT_STATUS: {\n            return {\n                ...state,\n                dialOutStatus: action.value\n            };\n        }\n\n        case SET_JOIN_BY_PHONE_DIALOG_VISIBLITY: {\n            return {\n                ...state,\n                showJoinByPhoneDialog: action.value\n            };\n        }\n\n        case SET_PREJOIN_DISPLAY_NAME_REQUIRED: {\n            return {\n                ...state,\n                isDisplayNameRequired: true\n            };\n        }\n\n        default:\n            return state;\n        }\n    },\n);\n\n/**\n * Returns a suitable error object based on the track errors.\n *\n * @param {Object} errors - The errors got while creating local tracks.\n * @returns {Object}\n */\nfunction getStatusFromErrors(errors) {\n    const { audioOnlyError, videoOnlyError, audioAndVideoError } = errors;\n\n    if (audioAndVideoError) {\n        if (audioOnlyError) {\n            if (videoOnlyError) {\n                return {\n                    deviceStatusType: 'warning',\n                    deviceStatusText: 'prejoin.audioAndVideoError',\n                    rawError: audioAndVideoError.message\n                };\n            }\n\n            return {\n                deviceStatusType: 'warning',\n                deviceStatusText: 'prejoin.audioOnlyError',\n                rawError: audioOnlyError.message\n            };\n        }\n\n        return {\n            deviceStatusType: 'warning',\n            deviceStatusText: 'prejoin.videoOnlyError',\n            rawError: audioAndVideoError.message\n        };\n    }\n\n    return {\n        deviceStatusType: 'ok',\n        deviceStatusText: 'prejoin.lookGood',\n        rawError: ''\n    };\n}\n","import { ReducerRegistry, set } from '../base/redux';\n\nimport {\n    CAPTURE_EVENTS,\n    REMOTE_CONTROL_ACTIVE,\n    SET_CONTROLLED_PARTICIPANT,\n    SET_CONTROLLER,\n    SET_RECEIVER_ENABLED,\n    SET_RECEIVER_TRANSPORT,\n    SET_REQUESTED_PARTICIPANT\n} from './actionTypes';\n\n/**\n * The default state.\n */\nconst DEFAULT_STATE = {\n    active: false,\n    controller: {\n        isCapturingEvents: false\n    },\n    receiver: {\n        enabled: false\n    }\n};\n\n/**\n * Listen for actions that mutate the remote control state.\n */\nReducerRegistry.register(\n    'features/remote-control', (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case CAPTURE_EVENTS:\n            return {\n                ...state,\n                controller: set(state.controller, 'isCapturingEvents', action.isCapturingEvents)\n            };\n        case REMOTE_CONTROL_ACTIVE:\n            return set(state, 'active', action.active);\n        case SET_RECEIVER_TRANSPORT:\n            return {\n                ...state,\n                receiver: set(state.receiver, 'transport', action.transport)\n            };\n        case SET_RECEIVER_ENABLED:\n            return {\n                ...state,\n                receiver: set(state.receiver, 'enabled', action.enabled)\n            };\n        case SET_REQUESTED_PARTICIPANT:\n            return {\n                ...state,\n                controller: set(state.controller, 'requestedParticipant', action.requestedParticipant)\n            };\n        case SET_CONTROLLED_PARTICIPANT:\n            return {\n                ...state,\n                controller: set(state.controller, 'controlled', action.controlled)\n            };\n        case SET_CONTROLLER:\n            return {\n                ...state,\n                receiver: set(state.receiver, 'controller', action.controller)\n            };\n        }\n\n        return state;\n    },\n);\n","\nimport { ReducerRegistry } from '../base/redux';\n\nimport { SET_SCREEN_AUDIO_SHARE_STATE, SET_SCREENSHARE_CAPTURE_FRAME_RATE } from './actionTypes';\n\n/**\n * Reduces the Redux actions of the feature features/screen-share.\n */\nReducerRegistry.register('features/screen-share', (state = {}, action) => {\n    const { captureFrameRate, isSharingAudio } = action;\n\n    switch (action.type) {\n    case SET_SCREEN_AUDIO_SHARE_STATE:\n        return {\n            ...state,\n            isSharingAudio\n        };\n\n    case SET_SCREENSHARE_CAPTURE_FRAME_RATE:\n        return {\n            ...state,\n            captureFrameRate\n        };\n\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { PersistenceRegistry, ReducerRegistry } from '../base/redux';\n\nimport { SET_SCREENSHOT_CAPTURE } from './actionTypes';\n\nPersistenceRegistry.register('features/screnshot-capture', true, {\n    capturesEnabled: false\n});\n\nReducerRegistry.register('features/screenshot-capture', (state = {}, action) => {\n    switch (action.type) {\n    case SET_SCREENSHOT_CAPTURE: {\n        return {\n            ...state,\n            capturesEnabled: action.payload\n        };\n    }\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { RESET_SHARED_VIDEO_STATUS, SET_SHARED_VIDEO_STATUS, SET_DISABLE_BUTTON } from './actionTypes';\n\nconst initialState = {};\n\n/**\n * Reduces the Redux actions of the feature features/shared-video.\n */\nReducerRegistry.register('features/shared-video', (state = initialState, action) => {\n    const { videoUrl, status, time, ownerId, disabled, muted } = action;\n\n    switch (action.type) {\n    case RESET_SHARED_VIDEO_STATUS:\n        return initialState;\n    case SET_SHARED_VIDEO_STATUS:\n        return {\n            ...state,\n            muted,\n            ownerId,\n            status,\n            time,\n            videoUrl\n        };\n\n    case SET_DISABLE_BUTTON:\n        return {\n            ...state,\n            disabled\n        };\n\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport { SET_CURRENT_NOTIFICATION_UID } from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature talk while muted.\n */\nReducerRegistry.register('features/talk-while-muted', (state = { }, action) => {\n    switch (action.type) {\n    case SET_CURRENT_NOTIFICATION_UID:\n        return set(state, 'currentNotificationUid', action.uid);\n    }\n\n    return state;\n});\n","// @flow\n\nimport { PersistenceRegistry, ReducerRegistry } from '../base/redux';\n\nimport { BACKGROUND_ENABLED, SET_VIRTUAL_BACKGROUND } from './actionTypes';\nimport { VIRTUAL_BACKGROUND_TYPE } from './constants';\n\nconst STORE_NAME = 'features/virtual-background';\n\n/**\n * Reduces redux actions which activate/deactivate virtual background image, or\n * indicate if the virtual image background is activated/deactivated. The\n * backgroundEffectEnabled flag indicate if virtual background effect is activated.\n *\n * @param {State} state - The current redux state.\n * @param {Action} action - The redux action to reduce.\n * @param {string} action.type - The type of the redux action to reduce..\n * @returns {State} The next redux state that is the result of reducing the\n * specified action.\n */\nReducerRegistry.register(STORE_NAME, (state = {}, action) => {\n    const { virtualSource, backgroundEffectEnabled, blurValue, backgroundType, selectedThumbnail } = action;\n\n    /**\n     * Sets up the persistence of the feature {@code virtual-background}.\n     */\n    PersistenceRegistry.register(STORE_NAME, state.backgroundType !== VIRTUAL_BACKGROUND_TYPE.DESKTOP_SHARE);\n\n    switch (action.type) {\n    case SET_VIRTUAL_BACKGROUND: {\n        return {\n            ...state,\n            virtualSource,\n            blurValue,\n            backgroundType,\n            selectedThumbnail\n        };\n    }\n    case BACKGROUND_ENABLED: {\n        return {\n            ...state,\n            backgroundEffectEnabled\n        };\n    }\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { UPDATE_LOCAL_TRACKS_DURATION } from './actionTypes';\n\n/**\n * Initial state.\n */\nconst DEFAULT_STATE = {\n    localTracksDuration: {\n        audio: {\n            startedTime: -1,\n            value: 0\n        },\n        video: {\n            camera: {\n                startedTime: -1,\n                value: 0\n            },\n            desktop: {\n                startedTime: -1,\n                value: 0\n            }\n        },\n        conference: {\n            startedTime: -1,\n            value: 0\n        }\n    }\n};\n\n/**\n * Listen for actions which changes the state of the analytics feature.\n *\n * @param {Object} state - The Redux state of the feature features/analytics.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @returns {Object}\n */\nReducerRegistry.register('features/analytics', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case UPDATE_LOCAL_TRACKS_DURATION:\n        return {\n            ...state,\n            localTracksDuration: action.localTracksDuration\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { assign, ReducerRegistry } from '../base/redux';\n\nimport {\n    CANCEL_LOGIN,\n    STOP_WAIT_FOR_OWNER,\n    UPGRADE_ROLE_FINISHED,\n    UPGRADE_ROLE_STARTED,\n    WAIT_FOR_OWNER\n} from './actionTypes';\n\n/**\n * Listens for actions which change the state of the authentication feature.\n *\n * @param {Object} state - The Redux state of the authentication feature.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @returns {Object}\n */\nReducerRegistry.register('features/authentication', (state = {}, action) => {\n    switch (action.type) {\n    case CANCEL_LOGIN:\n        return assign(state, {\n            error: undefined,\n            progress: undefined,\n            thenableWithCancel: undefined\n        });\n\n    case STOP_WAIT_FOR_OWNER:\n        return assign(state, {\n            error: undefined,\n            waitForOwnerTimeoutID: undefined\n        });\n\n    case UPGRADE_ROLE_FINISHED: {\n        let { thenableWithCancel } = action;\n\n        if (state.thenableWithCancel === thenableWithCancel) {\n            const { error, progress } = action;\n\n            // An error interrupts the process of authenticating and upgrading\n            // the role of the local participant/user i.e. the process is no\n            // more. Obviously, the process seizes to exist also when it does\n            // its whole job.\n            if (error || progress === 1) {\n                thenableWithCancel = undefined;\n            }\n\n            return assign(state, {\n                error,\n                progress: progress || undefined,\n                thenableWithCancel\n            });\n        }\n        break;\n    }\n\n    case UPGRADE_ROLE_STARTED:\n        return assign(state, {\n            error: undefined,\n            progress: undefined,\n            thenableWithCancel: action.thenableWithCancel\n        });\n\n    case WAIT_FOR_OWNER:\n        return assign(state, {\n            waitForOwnerTimeoutID: action.waitForOwnerTimeoutID\n        });\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';\n\nReducerRegistry.register('features/base/app', (state = {}, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT: {\n        const { app } = action;\n\n        if (state.app !== app) {\n            return {\n                ...state,\n\n                /**\n                 * The one and only (i.e. singleton) {@link BaseApp} instance\n                 * which is currently mounted.\n                 *\n                 * @type {BaseApp}\n                 */\n                app\n            };\n        }\n        break;\n    }\n\n    case APP_WILL_UNMOUNT:\n        if (state.app === action.app) {\n            return {\n                ...state,\n                app: undefined\n            };\n        }\n        break;\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_AUDIO_ONLY } from './actionTypes';\n\n\nconst DEFAULT_STATE = {\n    enabled: false\n};\n\n\nReducerRegistry.register('features/base/audio-only', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_AUDIO_ONLY:\n        return {\n            ...state,\n            enabled: action.audioOnly\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport _ from 'lodash';\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_COLOR_SCHEME } from './actionTypes';\n\n/**\n * The reducer of the feature {@code base/color-scheme}.\n *\n * @returns {Function}\n */\nReducerRegistry.register('features/base/color-scheme', (state = {}, action) => {\n    switch (action.type) {\n    case SET_COLOR_SCHEME:\n        return _.cloneDeep(action.colorScheme) || state;\n    }\n\n    return state;\n});\n","// @flow\n\nimport { LOCKED_LOCALLY, LOCKED_REMOTELY } from '../../room-lock';\nimport { CONNECTION_WILL_CONNECT, SET_LOCATION_URL } from '../connection';\nimport { JitsiConferenceErrors } from '../lib-jitsi-meet';\nimport { assign, ReducerRegistry, set } from '../redux';\n\nimport {\n    AUTH_STATUS_CHANGED,\n    CONFERENCE_FAILED,\n    CONFERENCE_JOINED,\n    CONFERENCE_LEFT,\n    CONFERENCE_SUBJECT_CHANGED,\n    CONFERENCE_TIMESTAMP_CHANGED,\n    CONFERENCE_WILL_JOIN,\n    CONFERENCE_WILL_LEAVE,\n    LOCK_STATE_CHANGED,\n    P2P_STATUS_CHANGED,\n    SET_FOLLOW_ME,\n    SET_PASSWORD,\n    SET_PENDING_SUBJECT_CHANGE,\n    SET_ROOM,\n    SET_START_MUTED_POLICY\n} from './actionTypes';\nimport { isRoomValid } from './functions';\n\nconst DEFAULT_STATE = {\n    conference: undefined,\n    e2eeSupported: undefined,\n    joining: undefined,\n    leaving: undefined,\n    locked: undefined,\n    membersOnly: undefined,\n    password: undefined,\n    passwordRequired: undefined\n};\n\n/**\n * Listen for actions that contain the conference object, so that it can be\n * stored for use by other action creators.\n */\nReducerRegistry.register(\n    'features/base/conference',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case AUTH_STATUS_CHANGED:\n            return _authStatusChanged(state, action);\n\n        case CONFERENCE_FAILED:\n            return _conferenceFailed(state, action);\n\n        case CONFERENCE_JOINED:\n            return _conferenceJoined(state, action);\n\n        case CONFERENCE_SUBJECT_CHANGED:\n            return set(state, 'subject', action.subject);\n\n        case CONFERENCE_TIMESTAMP_CHANGED:\n            return set(state, 'conferenceTimestamp', action.conferenceTimestamp);\n\n        case CONFERENCE_LEFT:\n        case CONFERENCE_WILL_LEAVE:\n            return _conferenceLeftOrWillLeave(state, action);\n\n        case CONFERENCE_WILL_JOIN:\n            return _conferenceWillJoin(state, action);\n\n        case CONNECTION_WILL_CONNECT:\n            return set(state, 'authRequired', undefined);\n\n        case LOCK_STATE_CHANGED:\n            return _lockStateChanged(state, action);\n\n        case P2P_STATUS_CHANGED:\n            return _p2pStatusChanged(state, action);\n\n        case SET_FOLLOW_ME:\n            return set(state, 'followMeEnabled', action.enabled);\n\n        case SET_LOCATION_URL:\n            return set(state, 'room', undefined);\n\n        case SET_PASSWORD:\n            return _setPassword(state, action);\n\n        case SET_PENDING_SUBJECT_CHANGE:\n            return set(state, 'pendingSubjectChange', action.subject);\n\n        case SET_ROOM:\n            return _setRoom(state, action);\n\n        case SET_START_MUTED_POLICY:\n            return {\n                ...state,\n                startAudioMutedPolicy: action.startAudioMutedPolicy,\n                startVideoMutedPolicy: action.startVideoMutedPolicy\n            };\n        }\n\n        return state;\n    });\n\n/**\n * Reduces a specific Redux action AUTH_STATUS_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action AUTH_STATUS_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _authStatusChanged(state, { authEnabled, authLogin }) {\n    return assign(state, {\n        authEnabled,\n        authLogin\n    });\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_FAILED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_FAILED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceFailed(state, { conference, error }) {\n    // The current (similar to getCurrentConference in\n    // base/conference/functions.js) conference which is joining or joined:\n    const conference_ = state.conference || state.joining;\n\n    if (conference_ && conference_ !== conference) {\n        return state;\n    }\n\n    let authRequired;\n    let membersOnly;\n    let passwordRequired;\n\n    switch (error.name) {\n    case JitsiConferenceErrors.AUTHENTICATION_REQUIRED:\n        authRequired = conference;\n        break;\n\n    case JitsiConferenceErrors.CONFERENCE_ACCESS_DENIED:\n    case JitsiConferenceErrors.MEMBERS_ONLY_ERROR:\n        membersOnly = conference;\n        break;\n\n    case JitsiConferenceErrors.PASSWORD_REQUIRED:\n        passwordRequired = conference;\n        break;\n    }\n\n    return assign(state, {\n        authRequired,\n        conference: undefined,\n        e2eeSupported: undefined,\n        error,\n        joining: undefined,\n        leaving: undefined,\n\n        /**\n         * The indicator of how the conference/room is locked. If falsy, the\n         * conference/room is unlocked; otherwise, it's either\n         * {@code LOCKED_LOCALLY} or {@code LOCKED_REMOTELY}.\n         *\n         * @type {string}\n         */\n        locked: passwordRequired ? LOCKED_REMOTELY : undefined,\n        membersOnly,\n        password: undefined,\n\n        /**\n         * The JitsiConference instance which requires a password to join.\n         *\n         * @type {JitsiConference}\n         */\n        passwordRequired\n    });\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_JOINED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_JOINED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceJoined(state, { conference }) {\n    // FIXME The indicator which determines whether a JitsiConference is locked\n    // i.e. password-protected is private to lib-jitsi-meet. However, the\n    // library does not fire LOCK_STATE_CHANGED upon joining a JitsiConference\n    // with a password.\n    // FIXME Technically JitsiConference.room is a private field.\n    const locked = conference.room && conference.room.locked ? LOCKED_REMOTELY : undefined;\n\n    return assign(state, {\n        authRequired: undefined,\n\n        /**\n         * The JitsiConference instance represented by the Redux state of the\n         * feature base/conference.\n         *\n         * @type {JitsiConference}\n         */\n        conference,\n\n        e2eeSupported: conference.isE2EESupported(),\n\n        joining: undefined,\n        membersOnly: undefined,\n        leaving: undefined,\n\n        /**\n         * The indicator which determines whether the conference is locked.\n         *\n         * @type {boolean}\n         */\n        locked,\n        passwordRequired: undefined\n    });\n}\n\n/**\n * Reduces a specific redux action {@link CONFERENCE_LEFT} or\n * {@link CONFERENCE_WILL_LEAVE} for the feature base/conference.\n *\n * @param {Object} state - The redux state of the feature base/conference.\n * @param {Action} action - The redux action {@code CONFERENCE_LEFT} or\n * {@code CONFERENCE_WILL_LEAVE} to reduce.\n * @private\n * @returns {Object} The next/new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceLeftOrWillLeave(state, { conference, type }) {\n    const nextState = { ...state };\n\n    // The redux action CONFERENCE_LEFT is the last time that we should be\n    // hearing from a JitsiConference instance.\n    //\n    // The redux action CONFERENCE_WILL_LEAVE represents the order of the user\n    // to leave a JitsiConference instance. From the user's perspective, there's\n    // no going back (with respect to the instance itself). The app will perform\n    // due clean-up like leaving the associated room, but the instance is no\n    // longer the focus of the attention of the user and, consequently, the app.\n    for (const p in state) {\n        if (state[p] === conference) {\n            nextState[p] = undefined;\n\n            switch (p) {\n            case 'conference':\n            case 'passwordRequired':\n                // XXX Clear/unset locked & password for a conference which has\n                // been LOCKED_LOCALLY or LOCKED_REMOTELY.\n                delete nextState.locked;\n                delete nextState.password;\n                break;\n            }\n        }\n    }\n\n    if (type === CONFERENCE_WILL_LEAVE) {\n        // A CONFERENCE_WILL_LEAVE is of further consequence only if it is\n        // expected i.e. if the specified conference is joining or joined.\n        if (conference === state.joining || conference === state.conference) {\n            /**\n             * The JitsiConference instance which is currently in the process of\n             * being left.\n             *\n             * @type {JitsiConference}\n             */\n            nextState.leaving = conference;\n        }\n    }\n\n    return nextState;\n}\n\n/**\n * Reduces a specific Redux action CONFERENCE_WILL_JOIN of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action CONFERENCE_WILL_JOIN to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _conferenceWillJoin(state, { conference }) {\n    return assign(state, {\n        error: undefined,\n        joining: conference\n    });\n}\n\n/**\n * Reduces a specific Redux action LOCK_STATE_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action LOCK_STATE_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _lockStateChanged(state, { conference, locked }) {\n    if (state.conference !== conference) {\n        return state;\n    }\n\n    return assign(state, {\n        locked: locked ? state.locked || LOCKED_REMOTELY : undefined,\n        password: locked ? state.password : undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action P2P_STATUS_CHANGED of the feature\n * base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action P2P_STATUS_CHANGED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _p2pStatusChanged(state, action) {\n    return set(state, 'p2p', action.p2p);\n}\n\n/**\n * Reduces a specific Redux action SET_PASSWORD of the feature base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_PASSWORD to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setPassword(state, { conference, method, password }) {\n    switch (method) {\n    case conference.join:\n        return assign(state, {\n            // 1. The JitsiConference which transitions away from\n            // passwordRequired MUST remain in the redux state\n            // features/base/conference until it transitions into\n            // conference; otherwise, there is a span of time during which\n            // the redux state does not even know that there is a\n            // JitsiConference whatsoever.\n            //\n            // 2. The redux action setPassword will attempt to join the\n            // JitsiConference so joining is an appropriate transitional\n            // redux state.\n            //\n            // 3. The redux action setPassword will perform the same check\n            // before it proceeds with the re-join.\n            joining: state.conference ? state.joining : conference,\n            locked: LOCKED_REMOTELY,\n\n            /**\n             * The password with which the conference is to be joined.\n             *\n             * @type {string}\n             */\n            password\n        });\n\n    case conference.lock:\n        return assign(state, {\n            locked: password ? LOCKED_LOCALLY : undefined,\n            password\n        });\n    }\n\n    return state;\n}\n\n/**\n * Reduces a specific Redux action SET_ROOM of the feature base/conference.\n *\n * @param {Object} state - The Redux state of the feature base/conference.\n * @param {Action} action - The Redux action SET_ROOM to reduce.\n * @private\n * @returns {Object} The new state of the feature base/conference after the\n * reduction of the specified action.\n */\nfunction _setRoom(state, action) {\n    let { room } = action;\n\n    if (!isRoomValid(room)) {\n        // Technically, there are multiple values which don't represent valid\n        // room names. Practically, each of them is as bad as the rest of them\n        // because we can't use any of them to join a conference.\n        room = undefined;\n    }\n\n    /**\n     * The name of the room of the conference (to be) joined.\n     *\n     * @type {string}\n     */\n    return assign(state, {\n        error: undefined,\n        room\n    });\n}\n\n","// @flow\n\nimport _ from 'lodash';\n\nimport { equals, ReducerRegistry } from '../redux';\n\nimport {\n    UPDATE_CONFIG,\n    CONFIG_WILL_LOAD,\n    LOAD_CONFIG_ERROR,\n    SET_CONFIG,\n    OVERWRITE_CONFIG\n} from './actionTypes';\nimport { _cleanupConfig } from './functions';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * The initial state of the feature base/config when executing in a\n * non-React Native environment. The mandatory configuration to be passed to\n * JitsiMeetJS#init(). The app will download config.js from the Jitsi Meet\n * deployment and take its values into account but the values below will be\n * enforced (because they are essential to the correct execution of the\n * application).\n *\n * @type {Object}\n */\nconst INITIAL_NON_RN_STATE = {\n};\n\n/**\n * The initial state of the feature base/config when executing in a React Native\n * environment. The mandatory configuration to be passed to JitsiMeetJS#init().\n * The app will download config.js from the Jitsi Meet deployment and take its\n * values into account but the values below will be enforced (because they are\n * essential to the correct execution of the application).\n *\n * @type {Object}\n */\nconst INITIAL_RN_STATE = {\n    analytics: {},\n\n    // FIXME The support for audio levels in lib-jitsi-meet polls the statistics\n    // of WebRTC at a short interval multiple times a second. Unfortunately,\n    // React Native is slow to fetch these statistics from the native WebRTC\n    // API, through the React Native bridge and eventually to JavaScript.\n    // Because the audio levels are of no interest to the mobile app, it is\n    // fastest to merely disable them.\n    disableAudioLevels: true,\n\n    p2p: {\n        disabledCodec: '',\n        disableH264: false, // deprecated\n        preferredCodec: 'H264',\n        preferH264: true // deprecated\n    }\n};\n\nReducerRegistry.register('features/base/config', (state = _getInitialState(), action) => {\n    switch (action.type) {\n    case UPDATE_CONFIG:\n        return _updateConfig(state, action);\n\n    case CONFIG_WILL_LOAD:\n        return {\n            error: undefined,\n\n            /**\n                * The URL of the location associated with/configured by this\n                * configuration.\n                *\n                * @type URL\n                */\n            locationURL: action.locationURL\n        };\n\n    case LOAD_CONFIG_ERROR:\n        // XXX LOAD_CONFIG_ERROR is one of the settlement execution paths of\n        // the asynchronous \"loadConfig procedure/process\" started with\n        // CONFIG_WILL_LOAD. Due to the asynchronous nature of it, whoever\n        // is settling the process needs to provide proof that they have\n        // started it and that the iteration of the process being completed\n        // now is still of interest to the app.\n        if (state.locationURL === action.locationURL) {\n            return {\n                /**\n                    * The {@link Error} which prevented the loading of the\n                    * configuration of the associated {@code locationURL}.\n                    *\n                    * @type Error\n                    */\n                error: action.error\n            };\n        }\n        break;\n\n    case SET_CONFIG:\n        return _setConfig(state, action);\n\n    case OVERWRITE_CONFIG:\n        return {\n            ...state,\n            ...action.config\n        };\n    }\n\n    return state;\n});\n\n/**\n * Gets the initial state of the feature base/config. The mandatory\n * configuration to be passed to JitsiMeetJS#init(). The app will download\n * config.js from the Jitsi Meet deployment and take its values into account but\n * the values below will be enforced (because they are essential to the correct\n * execution of the application).\n *\n * @returns {Object}\n */\nfunction _getInitialState() {\n    return (\n        navigator.product === 'ReactNative'\n            ? INITIAL_RN_STATE\n            : INITIAL_NON_RN_STATE);\n}\n\n/**\n * Reduces a specific Redux action SET_CONFIG of the feature\n * base/lib-jitsi-meet.\n *\n * @param {Object} state - The Redux state of the feature base/config.\n * @param {Action} action - The Redux action SET_CONFIG to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _setConfig(state, { config }) {\n    // The mobile app bundles jitsi-meet and lib-jitsi-meet at build time and\n    // does not download them at runtime from the deployment on which it will\n    // join a conference. The downloading is planned for implementation in the\n    // future (later rather than sooner) but is not implemented yet at the time\n    // of this writing and, consequently, we must provide legacy support in the\n    // meantime.\n\n    // eslint-disable-next-line no-param-reassign\n    config = _translateLegacyConfig(config);\n\n    const { audioQuality } = config;\n    const hdAudioOptions = {};\n\n    if (audioQuality?.stereo) {\n        Object.assign(hdAudioOptions, {\n            disableAP: true,\n            enableNoAudioDetection: false,\n            enableNoisyMicDetection: false,\n            enableTalkWhileMuted: false\n        });\n    }\n\n    const newState = _.merge(\n        {},\n        config,\n        hdAudioOptions,\n        { error: undefined },\n\n        // The config of _getInitialState() is meant to override the config\n        // downloaded from the Jitsi Meet deployment because the former contains\n        // values that are mandatory.\n        _getInitialState()\n    );\n\n    _cleanupConfig(newState);\n\n    return equals(state, newState) ? state : newState;\n}\n\n/**\n * Constructs a new config {@code Object}, if necessary, out of a specific\n * config {@code Object} which is in the latest format supported by jitsi-meet.\n * Such a translation from an old config format to a new/the latest config\n * format is necessary because the mobile app bundles jitsi-meet and\n * lib-jitsi-meet at build time and does not download them at runtime from the\n * deployment on which it will join a conference.\n *\n * @param {Object} oldValue - The config {@code Object} which may or may not be\n * in the latest form supported by jitsi-meet and from which a new config\n * {@code Object} is to be constructed if necessary.\n * @returns {Object} A config {@code Object} which is in the latest format\n * supported by jitsi-meet.\n */\nfunction _translateLegacyConfig(oldValue: Object) {\n    const newValue = oldValue;\n\n    if (!Array.isArray(oldValue.toolbarButtons)\n            && typeof interfaceConfig === 'object' && Array.isArray(interfaceConfig.TOOLBAR_BUTTONS)) {\n        newValue.toolbarButtons = interfaceConfig.TOOLBAR_BUTTONS;\n    }\n\n    if (oldValue.stereo || oldValue.opusMaxAverageBitrate) {\n        newValue.audioQuality = {\n            opusMaxAverageBitrate: oldValue.audioQuality?.opusMaxAverageBitrate ?? oldValue.opusMaxAverageBitrate,\n            stereo: oldValue.audioQuality?.stereo ?? oldValue.stereo\n        };\n    }\n\n    return newValue;\n}\n\n/**\n * Updates the stored configuration with the given extra options.\n *\n * @param {Object} state - The Redux state of the feature base/config.\n * @param {Action} action - The Redux action to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _updateConfig(state, { config }) {\n    const newState = _.merge({}, state, config);\n\n    _cleanupConfig(newState);\n\n    return equals(state, newState) ? state : newState;\n}\n","/* @flow */\n\nimport { SET_ROOM } from '../conference';\nimport { JitsiConnectionErrors } from '../lib-jitsi-meet';\nimport { assign, set, ReducerRegistry } from '../redux';\n\nimport {\n    CONNECTION_DISCONNECTED,\n    CONNECTION_ESTABLISHED,\n    CONNECTION_FAILED,\n    CONNECTION_WILL_CONNECT,\n    SET_LOCATION_URL,\n    SHOW_CONNECTION_INFO\n} from './actionTypes';\nimport type { ConnectionFailedError } from './actions.native';\n\n/**\n * Reduces the Redux actions of the feature base/connection.\n */\nReducerRegistry.register(\n    'features/base/connection',\n    (state: Object = {}, action: Object) => {\n        switch (action.type) {\n        case CONNECTION_DISCONNECTED:\n            return _connectionDisconnected(state, action);\n\n        case CONNECTION_ESTABLISHED:\n            return _connectionEstablished(state, action);\n\n        case CONNECTION_FAILED:\n            return _connectionFailed(state, action);\n\n        case CONNECTION_WILL_CONNECT:\n            return _connectionWillConnect(state, action);\n\n        case SET_LOCATION_URL:\n            return _setLocationURL(state, action);\n\n        case SET_ROOM:\n            return _setRoom(state);\n\n        case SHOW_CONNECTION_INFO:\n            return _setShowConnectionInfo(state, action);\n        }\n\n        return state;\n    });\n\n/**\n * Reduces a specific Redux action CONNECTION_DISCONNECTED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_DISCONNECTED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionDisconnected(\n        state: Object,\n        { connection }: { connection: Object }) {\n    const connection_ = _getCurrentConnection(state);\n\n    if (connection_ !== connection) {\n        return state;\n    }\n\n    return assign(state, {\n        connecting: undefined,\n        connection: undefined,\n        timeEstablished: undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_ESTABLISHED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_ESTABLISHED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionEstablished(\n        state: Object,\n        { connection, timeEstablished }: {\n            connection: Object,\n            timeEstablished: number\n        }) {\n    return assign(state, {\n        connecting: undefined,\n        connection,\n        error: undefined,\n        passwordRequired: undefined,\n        timeEstablished\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_FAILED of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_FAILED to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionFailed(\n        state: Object,\n        { connection, error }: {\n            connection: Object,\n            error: ConnectionFailedError\n        }) {\n    const connection_ = _getCurrentConnection(state);\n\n    if (connection_ && connection_ !== connection) {\n        return state;\n    }\n\n    return assign(state, {\n        connecting: undefined,\n        connection: undefined,\n        error,\n        passwordRequired:\n            error.name === JitsiConnectionErrors.PASSWORD_REQUIRED\n                ? connection : undefined\n    });\n}\n\n/**\n * Reduces a specific Redux action CONNECTION_WILL_CONNECT of the feature\n * base/connection.\n *\n * @param {Object} state - The Redux state of the feature base/connection.\n * @param {Action} action - The Redux action CONNECTION_WILL_CONNECT to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _connectionWillConnect(\n        state: Object,\n        { connection }: { connection: Object }) {\n    return assign(state, {\n        connecting: connection,\n\n        // We don't care if the previous connection has been closed already,\n        // because it's an async process and there's no guarantee if it'll be\n        // done before the new one is established.\n        connection: undefined,\n        error: undefined,\n        passwordRequired: undefined,\n        timeEstablished: undefined\n    });\n}\n\n/**\n * The current (similar to getCurrentConference in base/conference/functions.js)\n * connection which is {@code connection} or {@code connecting}.\n *\n * @param {Object} baseConnectionState - The current state of the\n * {@code 'base/connection'} feature.\n * @returns {JitsiConnection} - The current {@code JitsiConnection} if any.\n * @private\n */\nfunction _getCurrentConnection(baseConnectionState: Object): ?Object {\n    return baseConnectionState.connection || baseConnectionState.connecting;\n}\n\n/**\n * Reduces a specific redux action {@link SET_LOCATION_URL} of the feature\n * base/connection.\n *\n * @param {Object} state - The redux state of the feature base/connection.\n * @param {Action} action - The redux action {@code SET_LOCATION_URL} to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _setLocationURL(\n        state: Object,\n        { locationURL }: { locationURL: ?URL }) {\n    return set(state, 'locationURL', locationURL);\n}\n\n/**\n * Reduces a specific redux action {@link SET_ROOM} of the feature\n * base/connection.\n *\n * @param {Object} state - The redux state of the feature base/connection.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _setRoom(state: Object) {\n    return assign(state, {\n        error: undefined,\n        passwordRequired: undefined\n    });\n}\n\n/**\n * Reduces a specific redux action {@link SHOW_CONNECTION_INFO} of the feature\n * base/connection.\n *\n * @param {Object} state - The redux state of the feature base/connection.\n * @param {Action} action - The redux action {@code SHOW_CONNECTION_INFO} to reduce.\n * @private\n * @returns {Object} The new state of the feature base/connection after the\n * reduction of the specified action.\n */\nfunction _setShowConnectionInfo(\n        state: Object,\n        { showConnectionInfo }: { showConnectionInfo: boolean }) {\n    return set(state, 'showConnectionInfo', showConnectionInfo);\n}\n","/* @flow */\n\nimport { assign, ReducerRegistry } from '../redux';\n\nimport { HIDE_DIALOG, OPEN_DIALOG } from './actionTypes';\n\n/**\n * Reduces redux actions which show or hide dialogs.\n *\n * @param {State} state - The current redux state.\n * @param {Action} action - The redux action to reduce.\n * @param {string} action.type - The type of the redux action to reduce..\n * @returns {State} The next redux state that is the result of reducing the\n * specified action.\n */\nReducerRegistry.register('features/base/dialog', (state = {}, action) => {\n    switch (action.type) {\n    case HIDE_DIALOG: {\n        const { component } = action;\n\n        if (typeof component === 'undefined' || state.component === component) {\n            return assign(state, {\n                component: undefined,\n                componentProps: undefined,\n                rawDialog: false\n            });\n        }\n        break;\n    }\n\n    case OPEN_DIALOG:\n        return assign(state, {\n            component: action.component,\n            componentProps: action.componentProps,\n            rawDialog: action.rawDialog\n        });\n    }\n\n    return state;\n});\n","// @flow\n\nimport _ from 'lodash';\n\nimport { ReducerRegistry } from '../redux';\n\nimport { UPDATE_FLAGS } from './actionTypes';\n\n/**\n * Default state value for the feature flags.\n */\nconst DEFAULT_STATE = {};\n\n/**\n * Reduces redux actions which handle feature flags.\n *\n * @param {State} state - The current redux state.\n * @param {Action} action - The redux action to reduce.\n * @param {string} action.type - The type of the redux action to reduce.\n * @returns {State} The next redux state that is the result of reducing the\n * specified action.\n */\nReducerRegistry.register('features/base/flags', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case UPDATE_FLAGS: {\n        const newState = _.merge({}, state, action.flags);\n\n        return _.isEqual(state, newState) ? state : newState;\n    }\n    }\n\n    return state;\n});\n","// @flow\n\nimport { equals, ReducerRegistry } from '../redux';\n\nimport { SET_JWT } from './actionTypes';\n\n/**\n * Reduces redux actions which affect the JSON Web Token (JWT) stored in the\n * redux store.\n *\n * @param {Object} state - The current redux state.\n * @param {Object} action - The redux action to reduce.\n * @returns {Object} The next redux state which is the result of reducing the\n * specified {@code action}.\n */\nReducerRegistry.register(\n    'features/base/jwt',\n    (state = {}, action) => {\n        switch (action.type) {\n        case SET_JWT: {\n            // eslint-disable-next-line no-unused-vars\n            const { type, ...payload } = action;\n            const nextState = {\n                ...payload\n            };\n\n            return equals(state, nextState) ? state : nextState;\n        }\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { APP_WILL_MOUNT } from '../app/actionTypes';\nimport { PersistenceRegistry, ReducerRegistry } from '../redux';\n\nimport { ADD_KNOWN_DOMAINS } from './actionTypes';\n\n/**\n * The default list of domains known to the feature base/known-domains.\n * Generally, it should be in sync with the domains associated with the app\n * through its manifest (in other words, Universal Links, deep linking). Anyway,\n * we need a hardcoded list because it has proven impossible to programmatically\n * read the information out of the app's manifests: App Store strips the\n * associated domains manifest out of the app so it's never downloaded on the\n * client and we did not spend a lot of effort to read the associated domains\n * out of the Andorid manifest.\n */\nexport const DEFAULT_STATE = [\n    'alpha.jitsi.net',\n    'beta.meet.jit.si',\n    'meet.jit.si',\n    '8x8.vc'\n];\n\nconst STORE_NAME = 'features/base/known-domains';\n\nPersistenceRegistry.register(STORE_NAME);\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_KNOWN_DOMAINS:\n        return _addKnownDomains(state, action.knownDomains);\n\n    case APP_WILL_MOUNT:\n        // In case persistence has deserialized a weird redux state:\n        return _addKnownDomains(state, DEFAULT_STATE);\n\n    default:\n        return state;\n    }\n});\n\n/**\n * Adds an array of known domains to the list of domains known to the feature\n * base/known-domains.\n *\n * @param {Object} state - The redux state.\n * @param {Array<string>} knownDomains - The array of known domains to add to\n * the list of domains known to the feature base/known-domains.\n * @private\n * @returns {Object} The next redux state.\n */\nfunction _addKnownDomains(state, knownDomains) {\n    // In case persistence has deserialized a weird redux state:\n    let nextState = Array.isArray(state) ? state : [];\n\n    if (Array.isArray(knownDomains)) {\n        nextState = Array.from(state);\n        for (let knownDomain of knownDomains) {\n            knownDomain = knownDomain.toLowerCase();\n            !nextState.includes(knownDomain) && nextState.push(knownDomain);\n        }\n    }\n\n    return nextState;\n}\n","import {\n    SET_CONFIG\n} from '../config';\nimport { ReducerRegistry, set } from '../redux';\n\nimport { SET_LAST_N } from './actionTypes';\nimport { validateLastNLimits } from './functions';\n\nReducerRegistry.register('features/base/lastn', (state = { }, action) => {\n    switch (action.type) {\n    case SET_CONFIG:\n        return _setConfig(state, action);\n    case SET_LAST_N: {\n        const { lastN } = action;\n\n        return {\n            ...state,\n            lastN\n        };\n    }\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific Redux action SET_CONFIG.\n *\n * @param {Object} state - The Redux state of feature base/lastn.\n * @param {Action} action - The Redux action SET_CONFIG to reduce.\n * @private\n * @returns {Object} The new state after the reduction of the specified action.\n */\nfunction _setConfig(state, { config }) {\n    return set(state, 'lastNLimits', validateLastNLimits(config.lastNLimits));\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport {\n    LIB_DID_DISPOSE,\n    LIB_DID_INIT,\n    LIB_INIT_ERROR\n} from './actionTypes';\n\n/**\n * The default/initial redux state of the feature base/lib-jitsi-meet.\n *\n * @type {Object}\n */\nconst DEFAULT_STATE = {};\n\nReducerRegistry.register(\n    'features/base/lib-jitsi-meet',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case LIB_DID_DISPOSE:\n            return DEFAULT_STATE;\n\n        case LIB_DID_INIT:\n            return {\n                ...state,\n                initError: undefined,\n                initialized: true\n            };\n\n        case LIB_INIT_ERROR:\n            return {\n                ...state,\n                initError: action.error,\n                initialized: false\n            };\n\n        default:\n            return state;\n        }\n    });\n","// @flow\n\nimport { equals, ReducerRegistry, set } from '../redux';\n\nimport { SET_LOG_COLLECTOR, SET_LOGGING_CONFIG } from './actionTypes';\n\n/**\n * The default/initial redux state of the feature base/logging.\n *\n * @type {{\n *     config: Object\n * }}\n */\nconst DEFAULT_STATE = {\n    // eslint-disable-next-line\n    config: require('../../../../logging_config.js'),\n\n    /**\n     * The log collector.\n     */\n    logCollector: undefined\n};\n\nReducerRegistry.register(\n    'features/base/logging',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_LOGGING_CONFIG:\n            return _setLoggingConfig(state, action);\n        case SET_LOG_COLLECTOR: {\n            return _setLogCollector(state, action);\n        }\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Reduces a specific Redux action SET_LOGGING_CONFIG of the feature\n * base/logging.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_LOGGING_CONFIG to reduce.\n * @private\n * @returns {Object} The new state of the feature base/logging after the\n * reduction of the specified action.\n */\nfunction _setLoggingConfig(state, action) {\n    const config = {\n        // The config of DEFAULT_STATE is the default configuration of the\n        // feature base/logging.\n        ...DEFAULT_STATE.config,\n        ...action.config\n    };\n\n    if (equals(state.config, config)) {\n        return state;\n    }\n\n    return {\n        ...state,\n        config\n    };\n}\n\n/**\n * Reduces a specific Redux action SET_LOG_COLLECTOR of the feature\n * base/logging.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_LOG_COLLECTOR to reduce.\n * @private\n * @returns {Object} The new state of the feature base/logging after the\n * reduction of the specified action.\n */\nfunction _setLogCollector(state, action) {\n    return set(state, 'logCollector', action.logCollector);\n}\n","// @flow\n\nimport { ReducerRegistry } from '../redux';\n\nimport { SET_ACTIVE_MODAL_ID } from './actionTypes';\n\nReducerRegistry.register('features/base/modal', (state = {}, action) => {\n    switch (action.type) {\n    case SET_ACTIVE_MODAL_ID:\n        return {\n            ...state,\n            activeModalId: action.activeModalId,\n            modalProps: action.modalProps\n        };\n    }\n\n    return state;\n});\n","// @flow\nimport { assign, ReducerRegistry } from '../redux';\n\nimport { SET_NETWORK_INFO, _STORE_NETWORK_INFO_CLEANUP } from './actionTypes';\nimport { STORE_NAME } from './constants';\n\nconst DEFAULT_STATE = {\n    isOnline: true\n};\n\n/**\n * The base/net-info feature's reducer.\n */\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_NETWORK_INFO:\n        return assign(state, {\n            isOnline: action.isOnline,\n            networkType: action.networkType,\n            cellularGeneration: action.cellularGeneration,\n            details: action.details\n        });\n    case _STORE_NETWORK_INFO_CLEANUP:\n        return assign(state, {\n            _cleanup: action.cleanup\n        });\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { ReducerRegistry, set } from '../redux';\n\nimport {\n    DOMINANT_SPEAKER_CHANGED,\n    PARTICIPANT_ID_CHANGED,\n    PARTICIPANT_JOINED,\n    PARTICIPANT_LEFT,\n    PARTICIPANT_UPDATED,\n    PIN_PARTICIPANT,\n    SET_LOADABLE_AVATAR_URL\n} from './actionTypes';\nimport { LOCAL_PARTICIPANT_DEFAULT_ID, PARTICIPANT_ROLE } from './constants';\nimport { isParticipantModerator } from './functions';\n\n/**\n * Participant object.\n * @typedef {Object} Participant\n * @property {string} id - Participant ID.\n * @property {string} name - Participant name.\n * @property {string} avatar - Path to participant avatar if any.\n * @property {string} role - Participant role.\n * @property {boolean} local - If true, participant is local.\n * @property {boolean} pinned - If true, participant is currently a\n * \"PINNED_ENDPOINT\".\n * @property {boolean} dominantSpeaker - If this participant is the dominant\n * speaker in the (associated) conference, {@code true}; otherwise,\n * {@code false}.\n * @property {string} email - Participant email.\n */\n\ndeclare var APP: Object;\n\n/**\n * The participant properties which cannot be updated through\n * {@link PARTICIPANT_UPDATED}. They either identify the participant or can only\n * be modified through property-dedicated actions.\n *\n * @type {string[]}\n */\nconst PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE = [\n\n    // The following properties identify the participant:\n    'conference',\n    'id',\n    'local',\n\n    // The following properties can only be modified through property-dedicated\n    // actions:\n    'dominantSpeaker',\n    'pinned'\n];\n\nconst DEFAULT_STATE = {\n    haveParticipantWithScreenSharingFeature: false,\n    dominantSpeaker: undefined,\n    everyoneIsModerator: false,\n    pinnedParticipant: undefined,\n    local: undefined,\n    remote: new Map(),\n    fakeParticipants: new Map()\n};\n\n/**\n * Listen for actions which add, remove, or update the set of participants in\n * the conference.\n *\n * @param {Participant[]} state - List of participants to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Participant} action.participant - Information about participant to be\n * added/removed/modified.\n * @returns {Participant[]}\n */\nReducerRegistry.register('features/base/participants', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case PARTICIPANT_ID_CHANGED: {\n        const { local } = state;\n\n        if (local) {\n            state.local = {\n                ...local,\n                id: action.newValue\n            };\n\n            return {\n                ...state\n            };\n        }\n\n        return state;\n    }\n    case DOMINANT_SPEAKER_CHANGED: {\n        const { participant } = action;\n        const { id } = participant;\n        const { dominantSpeaker } = state;\n\n        // Only one dominant speaker is allowed.\n        if (dominantSpeaker) {\n            _updateParticipantProperty(state, dominantSpeaker, 'dominantSpeaker', false);\n        }\n\n        if (_updateParticipantProperty(state, id, 'dominantSpeaker', true)) {\n            return {\n                ...state,\n                dominantSpeaker: id\n            };\n        }\n\n        delete state.dominantSpeaker;\n\n        return {\n            ...state\n        };\n    }\n    case PIN_PARTICIPANT: {\n        const { participant } = action;\n        const { id } = participant;\n        const { pinnedParticipant } = state;\n\n        // Only one pinned participant is allowed.\n        if (pinnedParticipant) {\n            _updateParticipantProperty(state, pinnedParticipant, 'pinned', false);\n        }\n\n        if (_updateParticipantProperty(state, id, 'pinned', true)) {\n            return {\n                ...state,\n                pinnedParticipant: id\n            };\n        }\n\n        delete state.pinnedParticipant;\n\n        return {\n            ...state\n        };\n    }\n    case SET_LOADABLE_AVATAR_URL:\n    case PARTICIPANT_UPDATED: {\n        const { participant } = action;\n        let { id } = participant;\n        const { local } = participant;\n\n        if (!id && local) {\n            id = LOCAL_PARTICIPANT_DEFAULT_ID;\n        }\n\n        let newParticipant;\n\n        if (state.remote.has(id)) {\n            newParticipant = _participant(state.remote.get(id), action);\n            state.remote.set(id, newParticipant);\n        } else if (id === state.local?.id) {\n            newParticipant = state.local = _participant(state.local, action);\n        }\n\n        if (newParticipant) {\n\n            // everyoneIsModerator calculation:\n            const isModerator = isParticipantModerator(newParticipant);\n\n            if (state.everyoneIsModerator && !isModerator) {\n                state.everyoneIsModerator = false;\n            } else if (!state.everyoneIsModerator && isModerator) {\n                state.everyoneIsModerator = _isEveryoneModerator(state);\n            }\n\n            // haveParticipantWithScreenSharingFeature calculation:\n            const { features = {} } = participant;\n\n            // Currently we use only PARTICIPANT_UPDATED to set a feature to enabled and we never disable it.\n            if (String(features['screen-sharing']) === 'true') {\n                state.haveParticipantWithScreenSharingFeature = true;\n            }\n        }\n\n        return {\n            ...state\n        };\n    }\n    case PARTICIPANT_JOINED: {\n        const participant = _participantJoined(action);\n        const { pinnedParticipant, dominantSpeaker } = state;\n\n        if (participant.pinned) {\n            if (pinnedParticipant) {\n                _updateParticipantProperty(state, pinnedParticipant, 'pinned', false);\n            }\n\n            state.pinnedParticipant = participant.id;\n        }\n\n        if (participant.dominantSpeaker) {\n            if (dominantSpeaker) {\n                _updateParticipantProperty(state, dominantSpeaker, 'dominantSpeaker', false);\n            }\n            state.dominantSpeaker = participant.id;\n        }\n\n        const isModerator = isParticipantModerator(participant);\n        const { local, remote } = state;\n\n        if (state.everyoneIsModerator && !isModerator) {\n            state.everyoneIsModerator = false;\n        } else if (!local && remote.size === 0 && isModerator) {\n            state.everyoneIsModerator = true;\n        }\n\n        if (participant.local) {\n            return {\n                ...state,\n                local: participant\n            };\n        }\n\n        state.remote.set(participant.id, participant);\n\n        if (participant.isFakeParticipant) {\n            state.fakeParticipants.set(participant.id, participant);\n        }\n\n        return { ...state };\n\n    }\n    case PARTICIPANT_LEFT: {\n        // XXX A remote participant is uniquely identified by their id in a\n        // specific JitsiConference instance. The local participant is uniquely\n        // identified by the very fact that there is only one local participant\n        // (and the fact that the local participant \"joins\" at the beginning of\n        // the app and \"leaves\" at the end of the app).\n        const { conference, id } = action.participant;\n        const { fakeParticipants, remote, local, dominantSpeaker, pinnedParticipant } = state;\n        let oldParticipant = remote.get(id);\n\n        if (oldParticipant && oldParticipant.conference === conference) {\n            remote.delete(id);\n        } else if (local?.id === id) {\n            oldParticipant = state.local;\n            delete state.local;\n        } else {\n            // no participant found\n            return state;\n        }\n\n        if (!state.everyoneIsModerator && !isParticipantModerator(oldParticipant)) {\n            state.everyoneIsModerator = _isEveryoneModerator(state);\n        }\n\n        const { features = {} } = oldParticipant || {};\n\n        if (state.haveParticipantWithScreenSharingFeature && String(features['screen-sharing']) === 'true') {\n            const { features: localFeatures = {} } = state.local || {};\n\n            if (String(localFeatures['screen-sharing']) !== 'true') {\n                state.haveParticipantWithScreenSharingFeature = false;\n\n                // eslint-disable-next-line no-unused-vars\n                for (const [ key, participant ] of state.remote) {\n                    const { features: f = {} } = participant;\n\n                    if (String(f['screen-sharing']) === 'true') {\n                        state.haveParticipantWithScreenSharingFeature = true;\n                        break;\n                    }\n                }\n            }\n\n\n        }\n\n        if (dominantSpeaker === id) {\n            state.dominantSpeaker = undefined;\n        }\n\n        if (pinnedParticipant === id) {\n            state.pinnedParticipant = undefined;\n        }\n\n        if (fakeParticipants.has(id)) {\n            fakeParticipants.delete(id);\n        }\n\n        return { ...state };\n    }\n    }\n\n    return state;\n});\n\n/**\n * Loops trough the participants in the state in order to check if all participants are moderators.\n *\n * @param {Object} state - The local participant redux state.\n * @returns {boolean}\n */\nfunction _isEveryoneModerator(state) {\n    if (isParticipantModerator(state.local)) {\n        // eslint-disable-next-line no-unused-vars\n        for (const [ k, p ] of state.remote) {\n            if (!isParticipantModerator(p)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    return false;\n}\n\n\n/**\n * Updates a specific property for a participant.\n *\n * @param {State} state - The redux state.\n * @param {string} id - The ID of the participant.\n * @param {string} property - The property to update.\n * @param {*} value - The new value.\n * @returns {boolean} - True if a participant was updated and false otherwise.\n */\nfunction _updateParticipantProperty(state, id, property, value) {\n    const { remote, local } = state;\n\n    if (remote.has(id)) {\n        remote.set(id, set(remote.get(id), property, value));\n\n        return true;\n    } else if (local?.id === id) {\n        state.local = set(local, property, value);\n\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * Reducer function for a single participant.\n *\n * @param {Participant|undefined} state - Participant to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {Participant} action.participant - Information about participant to be\n * added/modified.\n * @param {JitsiConference} action.conference - Conference instance.\n * @private\n * @returns {Participant}\n */\nfunction _participant(state: Object = {}, action) {\n    switch (action.type) {\n    case SET_LOADABLE_AVATAR_URL:\n    case PARTICIPANT_UPDATED: {\n        const { participant } = action; // eslint-disable-line no-shadow\n\n        const newState = { ...state };\n\n        for (const key in participant) {\n            if (participant.hasOwnProperty(key)\n                    && PARTICIPANT_PROPS_TO_OMIT_WHEN_UPDATE.indexOf(key)\n                        === -1) {\n                newState[key] = participant[key];\n            }\n        }\n\n        return newState;\n    }\n    }\n\n    return state;\n}\n\n/**\n * Reduces a specific redux action of type {@link PARTICIPANT_JOINED} in the\n * feature base/participants.\n *\n * @param {Action} action - The redux action of type {@code PARTICIPANT_JOINED}\n * to reduce.\n * @private\n * @returns {Object} The new participant derived from the payload of the\n * specified {@code action} to be added into the redux state of the feature\n * base/participants after the reduction of the specified\n * {@code action}.\n */\nfunction _participantJoined({ participant }) {\n    const {\n        avatarURL,\n        botType,\n        connectionStatus,\n        dominantSpeaker,\n        email,\n        isFakeParticipant,\n        isReplacing,\n        isJigasi,\n        loadableAvatarUrl,\n        local,\n        name,\n        pinned,\n        presence,\n        role\n    } = participant;\n    let { conference, id } = participant;\n\n    if (local) {\n        // conference\n        //\n        // XXX The local participant is not identified in association with a\n        // JitsiConference because it is identified by the very fact that it is\n        // the local participant.\n        conference = undefined;\n\n        // id\n        id || (id = LOCAL_PARTICIPANT_DEFAULT_ID);\n    }\n\n    return {\n        avatarURL,\n        botType,\n        conference,\n        connectionStatus,\n        dominantSpeaker: dominantSpeaker || false,\n        email,\n        id,\n        isFakeParticipant,\n        isReplacing,\n        isJigasi,\n        loadableAvatarUrl,\n        local: local || false,\n        name,\n        pinned: pinned || false,\n        presence,\n        role: role || PARTICIPANT_ROLE.NONE\n    };\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../redux';\n\nimport { CLIENT_RESIZED, SET_ASPECT_RATIO, SET_REDUCED_UI } from './actionTypes';\nimport { ASPECT_RATIO_NARROW } from './constants';\n\nconst {\n    innerHeight = 0,\n    innerWidth = 0\n} = window;\n\n/**\n * The default/initial redux state of the feature base/responsive-ui.\n */\nconst DEFAULT_STATE = {\n    aspectRatio: ASPECT_RATIO_NARROW,\n    clientHeight: innerHeight,\n    clientWidth: innerWidth,\n    reducedUI: false\n};\n\nReducerRegistry.register('features/base/responsive-ui', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case CLIENT_RESIZED: {\n        return {\n            ...state,\n            clientWidth: action.clientWidth,\n            clientHeight: action.clientHeight\n        };\n    }\n    case SET_ASPECT_RATIO:\n        return set(state, 'aspectRatio', action.aspectRatio);\n\n    case SET_REDUCED_UI:\n        return set(state, 'reducedUI', action.reducedUI);\n    }\n\n    return state;\n});\n","// @flow\n\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\nimport _ from 'lodash';\n\nimport { APP_WILL_MOUNT } from '../app/actionTypes';\nimport { PersistenceRegistry, ReducerRegistry } from '../redux';\nimport { assignIfDefined } from '../util';\n\nimport { SETTINGS_UPDATED } from './actionTypes';\n\n/**\n * The default/initial redux state of the feature {@code base/settings}.\n *\n * @type Object\n */\nconst DEFAULT_STATE = {\n    audioOutputDeviceId: undefined,\n    avatarURL: undefined,\n    cameraDeviceId: undefined,\n    disableCallIntegration: undefined,\n    disableCrashReporting: undefined,\n    disableP2P: undefined,\n    displayName: undefined,\n    email: undefined,\n    localFlipX: true,\n    micDeviceId: undefined,\n    serverURL: undefined,\n    hideShareAudioHelper: false,\n    soundsIncomingMessage: true,\n    soundsParticipantJoined: true,\n    soundsParticipantLeft: true,\n    soundsTalkWhileMuted: true,\n    startAudioOnly: false,\n    startWithAudioMuted: false,\n    startWithVideoMuted: false,\n    userSelectedAudioOutputDeviceId: undefined,\n    userSelectedCameraDeviceId: undefined,\n    userSelectedMicDeviceId: undefined,\n    userSelectedAudioOutputDeviceLabel: undefined,\n    userSelectedCameraDeviceLabel: undefined,\n    userSelectedMicDeviceLabel: undefined,\n    userSelectedSkipPrejoin: undefined\n};\n\nconst STORE_NAME = 'features/base/settings';\n\n/**\n * Sets up the persistence of the feature {@code base/settings}.\n */\nconst filterSubtree = {};\n\n// start with the default state\nObject.keys(DEFAULT_STATE).forEach(key => {\n    filterSubtree[key] = true;\n});\n\n// we want to filter these props, to not be stored as they represent\n// what is currently opened/used as devices\nfilterSubtree.audioOutputDeviceId = false;\nfilterSubtree.cameraDeviceId = false;\nfilterSubtree.micDeviceId = false;\n\nPersistenceRegistry.register(STORE_NAME, filterSubtree);\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n        return _initSettings(state);\n\n    case SETTINGS_UPDATED:\n        return {\n            ...state,\n            ...action.settings\n        };\n    }\n\n    return state;\n});\n\n/**\n * Inits the settings object based on what information we have available.\n * Info taken into consideration:\n *   - Old Settings.js style data.\n *\n * @private\n * @param {Object} featureState - The current state of the feature.\n * @returns {Object}\n */\nfunction _initSettings(featureState) {\n    let settings = featureState;\n\n    // Old Settings.js values\n    // FIXME: jibri uses old settings.js local storage values to set its display\n    // name and email. Provide another way for jibri to set these values, update\n    // jibri, and remove the old settings.js values.\n    const savedDisplayName = jitsiLocalStorage.getItem('displayname');\n    const savedEmail = jitsiLocalStorage.getItem('email');\n\n    // The helper _.escape will convert null to an empty strings. The empty\n    // string will be saved in settings. On app re-load, because an empty string\n    // is a defined value, it will override any value found in local storage.\n    // The workaround is sidestepping _.escape when the value is not set in\n    // local storage.\n    const displayName = savedDisplayName === null ? undefined : _.escape(savedDisplayName);\n    const email = savedEmail === null ? undefined : _.escape(savedEmail);\n\n    settings = assignIfDefined({\n        displayName,\n        email\n    }, settings);\n\n    return settings;\n}\n","// @flow\n\nimport type { AudioElement } from '../media';\nimport { assign, ReducerRegistry } from '../redux';\n\nimport {\n    _ADD_AUDIO_ELEMENT,\n    _REMOVE_AUDIO_ELEMENT,\n    REGISTER_SOUND,\n    UNREGISTER_SOUND\n} from './actionTypes';\nimport logger from './logger';\n\n/**\n * The structure use by this reducer to describe a sound.\n */\nexport type Sound = {\n\n    /**\n     * The HTMLAudioElement which implements the audio playback functionality.\n     * Becomes available once the sound resource gets loaded and the sound can\n     * not be played until that happens.\n     */\n    audioElement?: AudioElement,\n\n    /**\n     * This field describes the source of the audio resource to be played. It\n     * can be either a path to the file or an object depending on the platform\n     * (native vs web).\n     */\n    src: Object | string,\n\n    /**\n     * This field is container for all optional parameters related to the sound.\n     */\n    options: Object\n}\n\n/**\n * Initial/default state of the feature {@code base/sounds}. It is a {@code Map}\n * of globally stored sounds.\n *\n * @type {Map<string, Sound>}\n */\nconst DEFAULT_STATE = new Map();\n\n/**\n * The base/sounds feature's reducer.\n */\nReducerRegistry.register(\n    'features/base/sounds',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case _ADD_AUDIO_ELEMENT:\n        case _REMOVE_AUDIO_ELEMENT:\n            return _addOrRemoveAudioElement(state, action);\n\n        case REGISTER_SOUND:\n            return _registerSound(state, action);\n\n        case UNREGISTER_SOUND:\n            return _unregisterSound(state, action);\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Adds or removes {@link AudioElement} associated with a {@link Sound}.\n *\n * @param {Map<string, Sound>} state - The current Redux state of this feature.\n * @param {_ADD_AUDIO_ELEMENT | _REMOVE_AUDIO_ELEMENT} action - The action to be\n * handled.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _addOrRemoveAudioElement(state, action) {\n    const isAddAction = action.type === _ADD_AUDIO_ELEMENT;\n    const nextState = new Map(state);\n    const { soundId } = action;\n\n    const sound = nextState.get(soundId);\n\n    if (sound) {\n        if (isAddAction) {\n            nextState.set(soundId,\n                assign(sound, {\n                    audioElement: action.audioElement\n                }));\n        } else {\n            nextState.set(soundId,\n                assign(sound, {\n                    audioElement: undefined\n                }));\n        }\n    } else {\n        logger.warn(`${action.type}: no sound for id: ${soundId}`);\n    }\n\n    return nextState;\n}\n\n/**\n * Registers a new {@link Sound} for given id and source. It will make\n * the {@link SoundCollection} component render HTMLAudioElement for given\n * source making it available for playback through the redux actions.\n *\n * @param {Map<string, Sound>} state - The current Redux state of the sounds\n * features.\n * @param {REGISTER_SOUND} action - The register sound action.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _registerSound(state, action) {\n    const nextState = new Map(state);\n\n    nextState.set(action.soundId, {\n        src: action.src,\n        options: action.options\n    });\n\n    return nextState;\n}\n\n/**\n * Unregisters a {@link Sound} which will make the {@link SoundCollection}\n * component stop rendering the corresponding HTMLAudioElement. This will\n * result further in the audio resource disposal.\n *\n * @param {Map<string, Sound>} state - The current Redux state of this feature.\n * @param {UNREGISTER_SOUND} action - The unregister sound action.\n * @private\n * @returns {Map<string, Sound>}\n */\nfunction _unregisterSound(state, action) {\n    const nextState = new Map(state);\n\n    nextState.delete(action.soundId);\n\n    return nextState;\n}\n","import { assign, ReducerRegistry } from '../redux';\n\nimport { SET_CONNECTION_STATE } from './actionTypes';\n\n/**\n * The initial state of the feature testing.\n *\n * @type {{\n *     connectionState: string\n * }}\n */\nconst INITIAL_STATE = {\n    connectionState: ''\n};\n\nReducerRegistry.register(\n    'features/testing',\n    (state = INITIAL_STATE, action) => {\n        switch (action.type) {\n        case SET_CONNECTION_STATE:\n            return _setConnectionState(state, action);\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Reduces a specific Redux action SET_CONNECTION_STATE of the feature\n * testing.\n *\n * @param {Object} state - The Redux state of the feature base/logging.\n * @param {Action} action - The Redux action SET_CONNECTION_STATE to reduce.\n * @private\n * @returns {Object} The new state of the feature testing after the\n * reduction of the specified action.\n */\nfunction _setConnectionState(state, action) {\n    return assign(state, { connectionState: action.connectionState });\n}\n","import { PARTICIPANT_ID_CHANGED } from '../participants';\nimport { ReducerRegistry, set } from '../redux';\n\nimport {\n    SET_NO_SRC_DATA_NOTIFICATION_UID,\n    TRACK_ADDED,\n    TRACK_CREATE_CANCELED,\n    TRACK_CREATE_ERROR,\n    TRACK_NO_DATA_FROM_SOURCE,\n    TRACK_REMOVED,\n    TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT,\n    TRACK_UPDATED,\n    TRACK_WILL_CREATE\n} from './actionTypes';\n\n/**\n * @typedef {Object} Track\n * @property {(JitsiLocalTrack|JitsiRemoteTrack)} [jitsiTrack] - The associated\n * {@code JitsiTrack} instance. Optional for local tracks if those are still\n * being created (i.e. {@code getUserMedia} is still in progress).\n * @property {Promise} [gumProcess] - If a local track is still being created,\n * it will have no {@code JitsiTrack}, but a {@code gumProcess} set to a\n * {@code Promise} with and extra {@code cancel()}.\n * @property {boolean} local=false - If the track is local.\n * @property {MEDIA_TYPE} mediaType=false - The media type of the track.\n * @property {boolean} mirror=false - The indicator which determines whether the\n * display/rendering of the track should be mirrored. It only makes sense in the\n * context of video (at least at the time of this writing).\n * @property {boolean} muted=false - If the track is muted.\n * @property {(string|undefined)} participantId - The ID of the participant whom\n * the track belongs to.\n * @property {boolean} videoStarted=false - If the video track has already\n * started to play.\n * @property {(VIDEO_TYPE|undefined)} videoType - The type of video track if\n * any.\n */\n\n/**\n * Reducer function for a single track.\n *\n * @param {Track|undefined} state - Track to be modified.\n * @param {Object} action - Action object.\n * @param {string} action.type - Type of action.\n * @param {string} action.name - Name of last media event.\n * @param {string} action.newValue - New participant ID value (in this\n * particular case).\n * @param {string} action.oldValue - Old participant ID value (in this\n * particular case).\n * @param {Track} action.track - Information about track to be changed.\n * @param {Participant} action.participant - Information about participant.\n * @returns {Track|undefined}\n */\nfunction track(state, action) {\n    switch (action.type) {\n    case PARTICIPANT_ID_CHANGED:\n        if (state.participantId === action.oldValue) {\n            return {\n                ...state,\n                participantId: action.newValue\n            };\n        }\n        break;\n\n    case TRACK_UPDATED: {\n        const t = action.track;\n\n        if (state.jitsiTrack === t.jitsiTrack) {\n            // Make sure that there's an actual update in order to reduce the\n            // risk of unnecessary React Component renders.\n            for (const p in t) {\n                if (state[p] !== t[p]) {\n                    // There's an actual update.\n                    return {\n                        ...state,\n                        ...t\n                    };\n                }\n            }\n        }\n        break;\n    }\n    case TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT: {\n        const t = action.track;\n\n        if (state.jitsiTrack === t) {\n            if (state.lastMediaEvent !== action.name) {\n\n                return {\n                    ...state,\n                    lastMediaEvent: action.name\n                };\n            }\n        }\n        break;\n    }\n    case TRACK_NO_DATA_FROM_SOURCE: {\n        const t = action.track;\n\n        if (state.jitsiTrack === t.jitsiTrack) {\n            const isReceivingData = t.jitsiTrack.isReceivingData();\n\n            if (state.isReceivingData !== isReceivingData) {\n                return {\n                    ...state,\n                    isReceivingData\n                };\n            }\n        }\n        break;\n    }\n    }\n\n    return state;\n}\n\n/**\n * Listen for actions that mutate (e.g. add, remove) local and remote tracks.\n */\nReducerRegistry.register('features/base/tracks', (state = [], action) => {\n    switch (action.type) {\n    case PARTICIPANT_ID_CHANGED:\n    case TRACK_NO_DATA_FROM_SOURCE:\n    case TRACK_UPDATE_LAST_VIDEO_MEDIA_EVENT:\n    case TRACK_UPDATED:\n        return state.map(t => track(t, action));\n\n    case TRACK_ADDED: {\n        let withoutTrackStub = state;\n\n        if (action.track.local) {\n            withoutTrackStub\n                = state.filter(\n                    t => !t.local || t.mediaType !== action.track.mediaType);\n        }\n\n        return [ ...withoutTrackStub, action.track ];\n    }\n\n    case TRACK_CREATE_CANCELED:\n    case TRACK_CREATE_ERROR: {\n        return state.filter(t => !t.local || t.mediaType !== action.trackType);\n    }\n\n    case TRACK_REMOVED:\n        return state.filter(t => t.jitsiTrack !== action.track.jitsiTrack);\n\n    case TRACK_WILL_CREATE:\n        return [ ...state, action.track ];\n\n    default:\n        return state;\n    }\n});\n\n/**\n * Listen for actions that mutate the no-src-data state, like the current notification id\n */\nReducerRegistry.register('features/base/no-src-data', (state = {}, action) => {\n    switch (action.type) {\n    case SET_NO_SRC_DATA_NOTIFICATION_UID:\n        return set(state, 'noSrcDataNotificationUid', action.uid);\n\n    default:\n        return state;\n    }\n});\n\n","// @flow\n\nimport { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';\nimport { ReducerRegistry } from '../redux';\n\nimport { USER_INTERACTION_RECEIVED } from './actionTypes';\n\nReducerRegistry.register('features/base/user-interaction', (state = {}, action) => {\n    switch (action.type) {\n    case APP_WILL_MOUNT:\n    case APP_WILL_UNMOUNT:\n        return {\n            ...state,\n            interacted: false\n        };\n\n    case USER_INTERACTION_RECEIVED:\n        return {\n            ...state,\n            interacted: true\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport { PersistenceRegistry, ReducerRegistry, set } from '../base/redux';\n\nimport {\n    CLEAR_CALENDAR_INTEGRATION,\n    SET_CALENDAR_AUTH_STATE,\n    SET_CALENDAR_AUTHORIZATION,\n    SET_CALENDAR_ERROR,\n    SET_CALENDAR_EVENTS,\n    SET_CALENDAR_INTEGRATION,\n    SET_CALENDAR_PROFILE_EMAIL,\n    SET_LOADING_CALENDAR_EVENTS\n} from './actionTypes';\n\n/**\n * The default state of the calendar feature.\n *\n * @type {Object}\n */\nconst DEFAULT_STATE = {\n    authorization: undefined,\n    events: [],\n    integrationReady: false,\n    integrationType: undefined,\n    msAuthState: undefined\n};\n\n/**\n * Constant for the Redux subtree of the calendar feature.\n *\n * NOTE: This feature can be disabled and in that case, accessing this subtree\n * directly will return undefined and will need a bunch of repetitive type\n * checks in other features. Make sure you take care of those checks, or\n * consider using the {@code isCalendarEnabled} value to gate features if\n * needed.\n */\nconst STORE_NAME = 'features/calendar-sync';\n\n/**\n * NOTE: Never persist the authorization value as it's needed to remain a\n * runtime value to see if we need to re-request the calendar permission from\n * the user.\n */\nPersistenceRegistry.register(STORE_NAME, {\n    integrationType: true,\n    msAuthState: true\n});\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case CLEAR_CALENDAR_INTEGRATION:\n        return DEFAULT_STATE;\n\n    case SET_CALENDAR_AUTH_STATE: {\n        if (!action.msAuthState) {\n            // received request to delete the state\n            return set(state, 'msAuthState', undefined);\n        }\n\n        return set(state, 'msAuthState', {\n            ...state.msAuthState,\n            ...action.msAuthState\n        });\n    }\n\n    case SET_CALENDAR_AUTHORIZATION:\n        return set(state, 'authorization', action.authorization);\n\n    case SET_CALENDAR_ERROR:\n        return set(state, 'error', action.error);\n\n    case SET_CALENDAR_EVENTS:\n        return set(state, 'events', action.events);\n\n    case SET_CALENDAR_INTEGRATION:\n        return {\n            ...state,\n            integrationReady: action.integrationReady,\n            integrationType: action.integrationType\n        };\n\n    case SET_CALENDAR_PROFILE_EMAIL:\n        return set(state, 'profileEmail', action.email);\n\n    case SET_LOADING_CALENDAR_EVENTS:\n        return set(state, 'isLoadingEvents', action.isLoadingEvents);\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    ADD_MESSAGE,\n    CLEAR_MESSAGES,\n    CLOSE_CHAT,\n    OPEN_CHAT,\n    SET_PRIVATE_MESSAGE_RECIPIENT\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    isOpen: false,\n    lastReadMessage: undefined,\n    messages: [],\n    privateMessageRecipient: undefined\n};\n\nReducerRegistry.register('features/chat', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_MESSAGE: {\n        const newMessage = {\n            displayName: action.displayName,\n            error: action.error,\n            id: action.id,\n            messageType: action.messageType,\n            message: action.message,\n            privateMessage: action.privateMessage,\n            recipient: action.recipient,\n            timestamp: action.timestamp\n        };\n\n        // React native, unlike web, needs a reverse sorted message list.\n        const messages = navigator.product === 'ReactNative'\n            ? [\n                newMessage,\n                ...state.messages\n            ]\n            : [\n                ...state.messages,\n                newMessage\n            ];\n\n        return {\n            ...state,\n            lastReadMessage:\n                action.hasRead ? newMessage : state.lastReadMessage,\n            messages\n        };\n    }\n\n    case CLEAR_MESSAGES:\n        return {\n            ...state,\n            lastReadMessage: undefined,\n            messages: []\n        };\n\n    case SET_PRIVATE_MESSAGE_RECIPIENT:\n        return {\n            ...state,\n            privateMessageRecipient: action.participant\n        };\n\n    case OPEN_CHAT:\n        return {\n            ...state,\n            isOpen: true,\n            privateMessageRecipient: action.participant\n        };\n\n    case CLOSE_CHAT:\n        return {\n            ...state,\n            isOpen: false,\n            lastReadMessage: state.messages[\n                navigator.product === 'ReactNative' ? 0 : state.messages.length - 1],\n            privateMessageRecipient: action.participant\n        };\n    }\n\n    return state;\n});\n","/* @flow */\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { OPEN_WEB_APP } from './actionTypes';\n\nReducerRegistry.register('features/deep-linking', (state = {}, action) => {\n    switch (action.type) {\n    case OPEN_WEB_APP: {\n        return {\n            ...state,\n            launchInWeb: true\n        };\n    }\n    }\n\n    return state;\n});\n","// @flow\n\nimport { PersistenceRegistry, ReducerRegistry } from '../base/redux';\n\nimport { UPDATE_DROPBOX_TOKEN } from './actionTypes';\n\n/**\n * The redux subtree of this feature.\n */\nconst STORE_NAME = 'features/dropbox';\n\n/**\n * Sets up the persistence of the feature {@code dropbox}.\n */\nPersistenceRegistry.register(STORE_NAME);\n\nReducerRegistry.register(STORE_NAME, (state = {}, action) => {\n    switch (action.type) {\n    case UPDATE_DROPBOX_TOKEN:\n        return {\n            ...state,\n            token: action.token\n        };\n    default:\n        return state;\n    }\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_DYNAMIC_BRANDING_DATA,\n    SET_DYNAMIC_BRANDING_FAILED,\n    SET_DYNAMIC_BRANDING_READY\n} from './actionTypes';\n\n/**\n * The name of the redux store/state property which is the root of the redux\n * state of the feature {@code dynamic-branding}.\n */\nconst STORE_NAME = 'features/dynamic-branding';\n\nconst DEFAULT_STATE = {\n\n    /**\n     * The pool of avatar backgrounds.\n     *\n     * @public\n     * @type {Array<string>}\n     */\n    avatarBackgrounds: [],\n\n    /**\n     * The custom background color for the LargeVideo.\n     *\n     * @public\n     * @type {string}\n     */\n    backgroundColor: '',\n\n    /**\n     * The custom background image used on the LargeVideo.\n     *\n     * @public\n     * @type {string}\n     */\n    backgroundImageUrl: '',\n\n    /**\n     * Flag indicating that the branding data can be displayed.\n     * This is used in order to avoid image flickering / text changing(blipping).\n     *\n     * @public\n     * @type {boolean}\n     */\n    customizationReady: false,\n\n    /**\n     * Flag indicating that the dynamic branding data request has failed.\n     * When the request fails there is no logo (JitsiWatermark) displayed.\n     *\n     * @public\n     * @type {boolean}\n     */\n    customizationFailed: false,\n\n    /**\n     * Flag indicating that the dynamic branding has not been modified and should use\n     * the default options.\n     *\n     * @public\n     * @type {boolean}\n     */\n    defaultBranding: true,\n\n    /**\n     * Url for a custom page for DID numbers list.\n     *\n     * @public\n     * @type {string}\n     */\n    didPageUrl: '',\n\n    /**\n     * The custom invite domain.\n     *\n     * @public\n     * @type {string}\n     */\n    inviteDomain: '',\n\n    /**\n     * The custom url used when the user clicks the logo.\n     *\n     * @public\n     * @type {string}\n     */\n    logoClickUrl: '',\n\n    /**\n     * The custom logo (JitisWatermark).\n     *\n     * @public\n     * @type {string}\n     */\n    logoImageUrl: '',\n\n    /**\n     * Flag used to signal if the app should use a custom logo or not\n     *\n     * @public\n     * @type {boolean}\n     */\n    useDynamicBrandingData: false\n};\n\n/**\n * Reduces redux actions for the purposes of the feature {@code dynamic-branding}.\n */\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SET_DYNAMIC_BRANDING_DATA: {\n        const {\n            backgroundColor,\n            backgroundImageUrl,\n            defaultBranding,\n            didPageUrl,\n            inviteDomain,\n            logoClickUrl,\n            logoImageUrl,\n            avatarBackgrounds\n        } = action.value;\n\n        return {\n            avatarBackgrounds,\n            backgroundColor,\n            backgroundImageUrl,\n            defaultBranding,\n            didPageUrl,\n            inviteDomain,\n            logoClickUrl,\n            logoImageUrl,\n            customizationFailed: false,\n            customizationReady: true,\n            useDynamicBrandingData: true\n        };\n    }\n    case SET_DYNAMIC_BRANDING_FAILED: {\n        return {\n            ...state,\n            customizationReady: true,\n            customizationFailed: true,\n            useDynamicBrandingData: true\n        };\n    }\n    case SET_DYNAMIC_BRANDING_READY:\n        return {\n            ...state,\n            customizationReady: true\n        };\n    }\n\n    return state;\n});\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport { SET_DOCUMENT_EDITING_STATUS, SET_DOCUMENT_URL } from './actionTypes';\n\nconst DEFAULT_STATE = {\n\n    /**\n     * URL for the shared document.\n     */\n    documentUrl: undefined,\n\n    /**\n     * Whether or not Etherpad is currently open.\n     *\n     * @public\n     * @type {boolean}\n     */\n    editing: false\n};\n\n/**\n * Reduces the Redux actions of the feature features/etherpad.\n */\nReducerRegistry.register(\n    'features/etherpad',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_DOCUMENT_EDITING_STATUS:\n            return {\n                ...state,\n                editing: action.editing\n            };\n\n        case SET_DOCUMENT_URL:\n            return {\n                ...state,\n                documentUrl: action.documentUrl\n            };\n\n        default:\n            return state;\n        }\n    });\n","// @flow\n\nimport { PARTICIPANT_JOINED, PARTICIPANT_LEFT } from '../base/participants';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_FILMSTRIP_ENABLED,\n    SET_FILMSTRIP_VISIBLE,\n    SET_HORIZONTAL_VIEW_DIMENSIONS,\n    SET_TILE_VIEW_DIMENSIONS,\n    SET_VERTICAL_VIEW_DIMENSIONS,\n    SET_VISIBLE_REMOTE_PARTICIPANTS,\n    SET_VOLUME\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    /**\n     * The indicator which determines whether the {@link Filmstrip} is enabled.\n     *\n     * @public\n     * @type {boolean}\n     */\n    enabled: true,\n\n    /**\n     * The horizontal view dimensions.\n     *\n     * @public\n     * @type {Object}\n     */\n    horizontalViewDimensions: {},\n\n    /**\n     * The custom audio volume levels per participant.\n     *\n     * @type {Object}\n     */\n    participantsVolume: {},\n\n    /**\n     * The ordered IDs of the remote participants displayed in the filmstrip.\n     *\n     * NOTE: Currently the order will match the one from the base/participants array. But this is good initial step for\n     * reordering the remote participants.\n     */\n    remoteParticipants: [],\n\n    /**\n     * The tile view dimensions.\n     *\n     * @public\n     * @type {Object}\n     */\n    tileViewDimensions: {},\n\n    /**\n     * The vertical view dimensions.\n     *\n     * @public\n     * @type {Object}\n     */\n    verticalViewDimensions: {},\n\n    /**\n     * The indicator which determines whether the {@link Filmstrip} is visible.\n     *\n     * @public\n     * @type {boolean}\n     */\n    visible: true,\n\n    /**\n     * The end index in the remote participants array that is visible in the filmstrip.\n     *\n     * @public\n     * @type {number}\n     */\n    visibleParticipantsEndIndex: 0,\n\n    /**\n     * The visible participants in the filmstrip.\n     *\n     * @public\n     * @type {Array<string>}\n     */\n    visibleParticipants: [],\n\n\n    /**\n     * The start index in the remote participants array that is visible in the filmstrip.\n     *\n     * @public\n     * @type {number}\n     */\n    visibleParticipantsStartIndex: 0\n};\n\nReducerRegistry.register(\n    'features/filmstrip',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_FILMSTRIP_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SET_FILMSTRIP_VISIBLE:\n            return {\n                ...state,\n                visible: action.visible\n            };\n\n        case SET_HORIZONTAL_VIEW_DIMENSIONS:\n            return {\n                ...state,\n                horizontalViewDimensions: action.dimensions\n            };\n        case SET_TILE_VIEW_DIMENSIONS:\n            return {\n                ...state,\n                tileViewDimensions: action.dimensions\n            };\n        case SET_VERTICAL_VIEW_DIMENSIONS:\n            return {\n                ...state,\n                verticalViewDimensions: action.dimensions\n            };\n        case SET_VOLUME:\n            return {\n                ...state,\n                participantsVolume: {\n                    ...state.participantsVolume,\n\n                    // NOTE: This would fit better in the features/base/participants. But currently we store\n                    // the participants as an array which will make it expensive to search for the volume for\n                    // every participant separately.\n                    [action.participantId]: action.volume\n                }\n            };\n        case SET_VISIBLE_REMOTE_PARTICIPANTS:\n            return {\n                ...state,\n                visibleParticipantsStartIndex: action.startIndex,\n                visibleParticipantsEndIndex: action.endIndex,\n                visibleParticipants: state.remoteParticipants.slice(action.startIndex, action.endIndex + 1)\n            };\n        case PARTICIPANT_JOINED: {\n            const { id, local } = action.participant;\n\n            if (!local) {\n                state.remoteParticipants = [ ...state.remoteParticipants, id ];\n\n                const { visibleParticipantsStartIndex: startIndex, visibleParticipantsEndIndex: endIndex } = state;\n\n                if (state.remoteParticipants.length - 1 <= endIndex) {\n                    state.visibleParticipants = state.remoteParticipants.slice(startIndex, endIndex + 1);\n                }\n            }\n\n            return state;\n        }\n        case PARTICIPANT_LEFT: {\n            const { id, local } = action.participant;\n\n            if (local) {\n                return state;\n            }\n\n            let removedParticipantIndex = 0;\n\n            state.remoteParticipants = state.remoteParticipants.filter((participantId, index) => {\n                if (participantId === id) {\n                    removedParticipantIndex = index;\n\n                    return false;\n                }\n\n                return true;\n            });\n\n            const { visibleParticipantsStartIndex: startIndex, visibleParticipantsEndIndex: endIndex } = state;\n\n            if (removedParticipantIndex >= startIndex && removedParticipantIndex <= endIndex) {\n                state.visibleParticipants = state.remoteParticipants.slice(startIndex, endIndex + 1);\n            }\n\n            delete state.participantsVolume[id];\n\n            return state;\n        }\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport {\n    SET_FOLLOW_ME_MODERATOR,\n    SET_FOLLOW_ME_STATE\n} from './actionTypes';\n\n/**\n * Listen for actions that contain the Follow Me feature active state, so that it can be stored.\n */\nReducerRegistry.register(\n    'features/follow-me',\n    (state = {}, action) => {\n        switch (action.type) {\n\n        case SET_FOLLOW_ME_MODERATOR: {\n            let newState = set(state, 'moderator', action.id);\n\n            if (!action.id) {\n                // clear the state if feature becomes disabled\n                newState = set(newState, 'state', undefined);\n            }\n\n            return newState;\n        }\n        case SET_FOLLOW_ME_STATE: {\n            return set(state, 'state', action.state);\n        }\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_GOOGLE_API_PROFILE,\n    SET_GOOGLE_API_STATE\n} from './actionTypes';\nimport { GOOGLE_API_STATES } from './constants';\n\n/**\n * The default state is the Google API needs loading.\n *\n * @type {{googleAPIState: number}}\n */\nconst DEFAULT_STATE = {\n    googleAPIState: GOOGLE_API_STATES.NEEDS_LOADING,\n    profileEmail: ''\n};\n\n/**\n * Reduces the Redux actions of the feature features/google-api.\n */\nReducerRegistry.register('features/google-api',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case SET_GOOGLE_API_STATE:\n            return {\n                ...state,\n                googleAPIState: action.googleAPIState,\n                googleResponse: action.googleResponse\n            };\n        case SET_GOOGLE_API_PROFILE:\n            return {\n                ...state,\n                profileEmail: action.profileEmail\n            };\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    ADD_PENDING_INVITE_REQUEST,\n    REMOVE_PENDING_INVITE_REQUESTS,\n    SET_CALLEE_INFO_VISIBLE,\n    UPDATE_DIAL_IN_NUMBERS_FAILED,\n    UPDATE_DIAL_IN_NUMBERS_SUCCESS\n} from './actionTypes';\nimport logger from './logger';\n\nconst DEFAULT_STATE = {\n    /**\n     * The indicator which determines whether (the) {@code CalleeInfo} is\n     * visible.\n     *\n     * @type {boolean|undefined}\n     */\n    calleeInfoVisible: false,\n    numbersEnabled: true,\n    numbersFetched: false,\n    pendingInviteRequests: []\n};\n\nReducerRegistry.register('features/invite', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case ADD_PENDING_INVITE_REQUEST:\n        return {\n            ...state,\n            pendingInviteRequests: [\n                ...state.pendingInviteRequests,\n                action.request\n            ]\n        };\n\n    case REMOVE_PENDING_INVITE_REQUESTS:\n        return {\n            ...state,\n            pendingInviteRequests: []\n        };\n\n    case SET_CALLEE_INFO_VISIBLE:\n        return {\n            ...state,\n            calleeInfoVisible: action.calleeInfoVisible,\n            initialCalleeInfo: action.initialCalleeInfo\n        };\n\n    case UPDATE_DIAL_IN_NUMBERS_FAILED:\n        return {\n            ...state,\n            error: action.error\n        };\n\n    case UPDATE_DIAL_IN_NUMBERS_SUCCESS: {\n        if (Array.isArray(action.dialInNumbers)) {\n            return {\n                ...state,\n                conferenceID: action.conferenceID,\n                numbers: action.dialInNumbers,\n                sipUri: action.sipUri,\n                numbersEnabled: true,\n                numbersFetched: true\n            };\n        }\n\n        // this is the old format which is deprecated\n        logger.warn('Using deprecated API for retrieving phone numbers');\n\n        const { numbersEnabled } = action.dialInNumbers;\n\n        return {\n            ...state,\n            conferenceID: action.conferenceID,\n            numbers: action.dialInNumbers,\n            numbersEnabled,\n            numbersFetched: true\n        };\n    }\n    }\n\n    return state;\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_DETAILS\n} from './actionTypes';\nimport { STATUSES } from './constants';\n\nconst DEFAULT_STATE = {\n    disabledFeatures: [],\n    status: STATUSES.ACTIVE\n};\n\n/**\n * Listen for actions that mutate the billing-counter state\n */\nReducerRegistry.register(\n    'features/jaas', (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n\n        case SET_DETAILS: {\n            return action.payload;\n        }\n\n        default:\n            return state;\n        }\n    },\n);\n","// @flow\n\nimport { PARTICIPANT_ID_CHANGED } from '../base/participants';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SELECT_LARGE_VIDEO_PARTICIPANT,\n    UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION, UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT\n} from './actionTypes';\n\nReducerRegistry.register('features/large-video', (state = {}, action) => {\n    switch (action.type) {\n\n    // When conference is joined, we update ID of local participant from default\n    // 'local' to real ID. However, in large video we might have already\n    // selected 'local' as participant on stage. So in this case we must update\n    // ID of participant on stage to match ID in 'participants' state to avoid\n    // additional changes in state and (re)renders.\n    case PARTICIPANT_ID_CHANGED:\n        if (state.participantId === action.oldValue) {\n            return {\n                ...state,\n                participantId: action.newValue\n            };\n        }\n        break;\n\n    case SELECT_LARGE_VIDEO_PARTICIPANT:\n        return {\n            ...state,\n            participantId: action.participantId\n        };\n\n    case UPDATE_KNOWN_LARGE_VIDEO_RESOLUTION:\n        return {\n            ...state,\n            resolution: action.resolution\n        };\n\n    case UPDATE_LAST_LARGE_VIDEO_MEDIA_EVENT:\n        return {\n            ...state,\n            lastMediaEvent: action.name\n        };\n\n    }\n\n    return state;\n});\n","// @flow\n\nimport { CONFERENCE_JOINED, CONFERENCE_LEFT, SET_PASSWORD } from '../base/conference';\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED,\n    KNOCKING_PARTICIPANT_LEFT,\n    SET_KNOCKING_STATE,\n    SET_LOBBY_MODE_ENABLED,\n    SET_PASSWORD_JOIN_FAILED\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    knocking: false,\n    knockingParticipants: [],\n    lobbyEnabled: false,\n    passwordJoinFailed: false\n};\n\n/**\n * Reduces redux actions which affect the display of notifications.\n *\n * @param {Object} state - The current redux state.\n * @param {Object} action - The redux action to reduce.\n * @returns {Object} The next redux state which is the result of reducing the\n * specified {@code action}.\n */\nReducerRegistry.register('features/lobby', (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case CONFERENCE_JOINED:\n    case CONFERENCE_LEFT:\n        return {\n            ...state,\n            knocking: false,\n            passwordJoinFailed: false\n        };\n    case KNOCKING_PARTICIPANT_ARRIVED_OR_UPDATED:\n        return _knockingParticipantArrivedOrUpdated(action.participant, state);\n    case KNOCKING_PARTICIPANT_LEFT:\n        return {\n            ...state,\n            knockingParticipants: state.knockingParticipants.filter(p => p.id !== action.id)\n        };\n    case SET_KNOCKING_STATE:\n        return {\n            ...state,\n            knocking: action.knocking,\n            passwordJoinFailed: false\n        };\n    case SET_LOBBY_MODE_ENABLED:\n        return {\n            ...state,\n            lobbyEnabled: action.enabled\n        };\n    case SET_PASSWORD:\n        return {\n            ...state,\n            passwordJoinFailed: false\n        };\n    case SET_PASSWORD_JOIN_FAILED:\n        return {\n            ...state,\n            passwordJoinFailed: action.failed\n        };\n    }\n\n    return state;\n});\n\n/**\n * Stores or updates a knocking participant.\n *\n * @param {Object} participant - The arrived or updated knocking participant.\n * @param {Object} state - The current Redux state of the feature.\n * @returns {Object}\n */\nfunction _knockingParticipantArrivedOrUpdated(participant, state) {\n    let existingParticipant = state.knockingParticipants.find(p => p.id === participant.id);\n\n    existingParticipant = {\n        ...existingParticipant,\n        ...participant\n    };\n\n    return {\n        ...state,\n        knockingParticipants: [\n            ...state.knockingParticipants.filter(p => p.id !== participant.id),\n            existingParticipant\n        ]\n    };\n}\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    CLEAR_NOTIFICATIONS,\n    HIDE_NOTIFICATION,\n    SET_NOTIFICATIONS_ENABLED,\n    SHOW_NOTIFICATION\n} from './actionTypes';\nimport { NOTIFICATION_TYPE_PRIORITIES } from './constants';\n\n/**\n * The initial state of the feature notifications.\n *\n * @type {array}\n */\nconst DEFAULT_STATE = {\n    enabled: true,\n    notifications: []\n};\n\n/**\n * Reduces redux actions which affect the display of notifications.\n *\n * @param {Object} state - The current redux state.\n * @param {Object} action - The redux action to reduce.\n * @returns {Object} The next redux state which is the result of reducing the\n * specified {@code action}.\n */\nReducerRegistry.register('features/notifications',\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n        case CLEAR_NOTIFICATIONS:\n            return {\n                ...state,\n                notifications: []\n            };\n        case HIDE_NOTIFICATION:\n            return {\n                ...state,\n                notifications: state.notifications.filter(\n                    notification => notification.uid !== action.uid)\n            };\n\n        case SET_NOTIFICATIONS_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SHOW_NOTIFICATION:\n            return {\n                ...state,\n                notifications:\n                    _insertNotificationByPriority(state.notifications, {\n                        component: action.component,\n                        props: action.props,\n                        timeout: action.timeout,\n                        uid: action.uid\n                    })\n            };\n        }\n\n        return state;\n    });\n\n/**\n * Creates a new notification queue with the passed in notification placed at\n * the end of other notifications with higher or the same priority.\n *\n * @param {Object[]} notifications - The queue of notifications to be displayed.\n * @param {Object} notification - The new notification to add to the queue.\n * @private\n * @returns {Object[]} A new array with an updated order of the notification\n * queue.\n */\nfunction _insertNotificationByPriority(notifications, notification) {\n    const newNotificationPriority\n        = NOTIFICATION_TYPE_PRIORITIES[notification.props.appearance] || 0;\n\n    // Default to putting the new notification at the end of the queue.\n    let insertAtLocation = notifications.length;\n\n    // Find where to insert the new notification based on priority. Do not\n    // insert at the front of the queue so that the user can finish acting on\n    // any notification currently being read.\n    for (let i = 1; i < notifications.length; i++) {\n        const queuedNotification = notifications[i];\n        const queuedNotificationPriority\n            = NOTIFICATION_TYPE_PRIORITIES[queuedNotification.props.appearance]\n                || 0;\n\n        if (queuedNotificationPriority < newNotificationPriority) {\n            insertAtLocation = i;\n            break;\n        }\n    }\n\n    // Create a copy to avoid mutation and insert the notification.\n    const copyOfNotifications = notifications.slice();\n\n    copyOfNotifications.splice(insertAtLocation, 0, notification);\n\n    return copyOfNotifications;\n}\n","// @flow\n\nimport { CONFIG_WILL_LOAD, LOAD_CONFIG_ERROR, SET_CONFIG } from '../base/config';\nimport { assign, ReducerRegistry, set } from '../base/redux';\n\nimport {\n    MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,\n    SET_FATAL_ERROR,\n    TOGGLE_SLOW_GUM_OVERLAY\n} from './actionTypes';\n\n/**\n * Reduces the redux actions of the feature overlay.\n *\n * FIXME: these pieces of state should probably be in a different place.\n */\nReducerRegistry.register('features/overlay', (state = { }, action) => {\n    switch (action.type) {\n    case CONFIG_WILL_LOAD:\n        return _setShowLoadConfigOverlay(state, Boolean(action.room));\n\n    case LOAD_CONFIG_ERROR:\n    case SET_CONFIG:\n        return _setShowLoadConfigOverlay(false);\n\n    case MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED:\n        return _mediaPermissionPromptVisibilityChanged(state, action);\n\n    case SET_FATAL_ERROR:\n        return _setFatalError(state, action);\n\n    case TOGGLE_SLOW_GUM_OVERLAY:\n        return _toggleSlowGUMOverlay(state, action);\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific redux action MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED of\n * the feature overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {Action} action - The redux action to reduce.\n * @private\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _mediaPermissionPromptVisibilityChanged(\n        state,\n        { browser, isVisible }) {\n    return assign(state, {\n        browser,\n        isMediaPermissionPromptVisible: isVisible\n    });\n}\n\n/**\n * Reduces a specific redux action TOGGLE_SLOW_GUM_OVERLAY of\n * the feature overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {Action} action - The redux action to reduce.\n * @private\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _toggleSlowGUMOverlay(\n        state,\n        { isVisible }) {\n    return assign(state, {\n        isSlowGUMOverlayVisible: isVisible\n    });\n}\n\n/**\n * Sets the {@code LoadConfigOverlay} overlay visible or not.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {boolean} show - Whether to show or not the overlay.\n * @returns {Object} The new state of the feature overlay after the reduction of\n * the specified action.\n */\nfunction _setShowLoadConfigOverlay(state, show) {\n    return set(state, 'loadConfigOverlayVisible', show);\n}\n\n/**\n * Reduces a specific redux action {@code SET_FATAL_ERROR} of the feature\n * overlay.\n *\n * @param {Object} state - The redux state of the feature overlay.\n * @param {Error} fatalError - If the value is set it indicates that a fatal\n * error has occurred and that the reload screen is to be displayed.\n * @returns {Object}\n * @private\n */\nfunction _setFatalError(state, { fatalError }) {\n    return set(state, 'fatalError', fatalError);\n}\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    TOGGLE_REACTIONS_VISIBLE,\n    SET_REACTION_QUEUE,\n    ADD_REACTION_BUFFER,\n    FLUSH_REACTION_BUFFER\n} from './actionTypes';\n\n/**\n * Returns initial state for reactions' part of Redux store.\n *\n * @private\n * @returns {{\n *     visible: boolean,\n *     message: string,\n *     timeoutID: number,\n *     queue: Array\n * }}\n */\nfunction _getInitialState() {\n    return {\n        /**\n         * The indicator that determines whether the reactions menu is visible.\n         *\n         * @type {boolean}\n         */\n        visible: false,\n\n        /**\n         * An array that contains the reactions buffer to be sent.\n         *\n         * @type {Array}\n         */\n        buffer: [],\n\n        /**\n         * A number, non-zero value which identifies the timer created by a call\n         * to setTimeout().\n         *\n         * @type {number|null}\n         */\n        timeoutID: null,\n\n        /**\n         * The array of reactions to animate\n         *\n         * @type {Array}\n         */\n        queue: []\n    };\n}\n\nReducerRegistry.register(\n    'features/reactions',\n    (state: Object = _getInitialState(), action: Object) => {\n        switch (action.type) {\n\n        case TOGGLE_REACTIONS_VISIBLE:\n            return {\n                ...state,\n                visible: !state.visible\n            };\n\n        case ADD_REACTION_BUFFER:\n            return {\n                ...state,\n                buffer: action.buffer,\n                timeoutID: action.timeoutID\n            };\n\n        case FLUSH_REACTION_BUFFER:\n            return {\n                ...state,\n                buffer: [],\n                timeoutID: null\n            };\n\n        case SET_REACTION_QUEUE: {\n            return {\n                ...state,\n                queue: action.value\n            };\n        }\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { getLogger } from '../base/logging/functions';\n\nexport default getLogger('features/recent-list');\n","// @flow\n\nimport Bourne from '@hapi/bourne';\nimport { jitsiLocalStorage } from '@jitsi/js-utils';\n\nimport { APP_WILL_MOUNT } from '../base/app';\nimport { getURLWithoutParamsNormalized } from '../base/connection';\nimport { PersistenceRegistry, ReducerRegistry } from '../base/redux';\n\nimport {\n    _STORE_CURRENT_CONFERENCE,\n    _UPDATE_CONFERENCE_DURATION,\n    DELETE_RECENT_LIST_ENTRY\n} from './actionTypes';\nimport { isRecentListEnabled } from './functions';\nimport logger from './logger';\n\n/**\n * The default/initial redux state of the feature {@code recent-list}.\n *\n * @type {Array<Object>}\n */\nconst DEFAULT_STATE = [];\n\n/**\n * The name of the {@code window.localStorage} item where recent rooms are\n * stored.\n *\n * @type {string}\n */\nconst LEGACY_STORAGE_KEY = 'recentURLs';\n\n/**\n * The max size of the list.\n *\n * @type {number}\n */\nexport const MAX_LIST_SIZE = 30;\n\n/**\n * The redux subtree of this feature.\n */\nconst STORE_NAME = 'features/recent-list';\n\n/**\n * Sets up the persistence of the feature {@code recent-list}.\n */\nPersistenceRegistry.register(STORE_NAME);\n\n/**\n * Reduces redux actions for the purposes of the feature {@code recent-list}.\n */\nReducerRegistry.register(\n    STORE_NAME,\n    (state = _getLegacyRecentRoomList(), action) => {\n        if (isRecentListEnabled()) {\n            switch (action.type) {\n            case APP_WILL_MOUNT:\n                return _appWillMount(state);\n            case DELETE_RECENT_LIST_ENTRY:\n                return _deleteRecentListEntry(state, action.entryId);\n            case _STORE_CURRENT_CONFERENCE:\n                return _storeCurrentConference(state, action);\n\n            case _UPDATE_CONFERENCE_DURATION:\n                return _updateConferenceDuration(state, action);\n            default:\n                return state;\n            }\n        }\n\n        return state;\n    });\n\n/**\n * Deletes a recent list entry based on the url and date of the item.\n *\n * @param {Array<Object>} state - The Redux state.\n * @param {Object} entryId - The ID object of the entry.\n * @returns {Array<Object>}\n */\nfunction _deleteRecentListEntry(\n        state: Array<Object>, entryId: Object): Array<Object> {\n    return state.filter(entry =>\n        entry.conference !== entryId.url || entry.date !== entryId.date);\n}\n\n/**\n * Reduces the redux action {@link APP_WILL_MOUNT}.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Action} action - The redux action {@code APP_WILL_MOUNT}.\n * @returns {Array<Object>} The next redux state of the feature\n * {@code recent-list}.\n */\nfunction _appWillMount(state) {\n    // XXX APP_WILL_MOUNT is the earliest redux action of ours dispatched in the\n    // store. For the purposes of legacy support, make sure that the\n    // deserialized recent-list's state is in the format deemed current by the\n    // current app revision.\n    if (state && typeof state === 'object') {\n        if (Array.isArray(state)) {\n            return state;\n        }\n\n        // In an enterprise/internal build of Jitsi Meet for Android and iOS we\n        // had recent-list's state as an object with property list.\n        const { list } = state;\n\n        if (Array.isArray(list) && list.length) {\n            return list.slice();\n        }\n    }\n\n    // In the weird case that we have previously persisted/serialized null.\n    return DEFAULT_STATE;\n}\n\n/**\n * Retrieves the recent room list that was stored using the legacy way.\n *\n * @returns {Array<Object>}\n */\nfunction _getLegacyRecentRoomList(): Array<Object> {\n    const str = jitsiLocalStorage.getItem(LEGACY_STORAGE_KEY);\n\n    if (str) {\n        try {\n            return Bourne.parse(str);\n        } catch (error) {\n            logger.warn('Failed to parse legacy recent-room list!');\n        }\n    }\n\n\n    return [];\n}\n\n/**\n * Adds a new list entry to the redux store.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Object} action - The redux action.\n * @returns {Object}\n */\nfunction _storeCurrentConference(state, { locationURL }) {\n    const conference = locationURL.href;\n\n    // If the current conference is already in the list, we remove it to re-add\n    // it to the top.\n    const nextState\n        = state.filter(e => !_urlStringEquals(e.conference, conference));\n\n    // The list is a reverse-sorted (i.e. the newer elements are at the end).\n    nextState.push({\n        conference,\n        date: Date.now(),\n        duration: 0 // We don't have the duration yet!\n    });\n\n    // Ensure the list doesn't exceed a/the maximum size.\n    nextState.splice(0, nextState.length - MAX_LIST_SIZE);\n\n    return nextState;\n}\n\n/**\n * Updates the conference length when left.\n *\n * @param {Object} state - The redux state of the feature {@code recent-list}.\n * @param {Object} action - The redux action.\n * @returns {Object} The next redux state of the feature {@code recent-list}.\n */\nfunction _updateConferenceDuration(state, { locationURL }) {\n    if (locationURL && locationURL.href && state.length) {\n        const mostRecentIndex = state.length - 1;\n        const mostRecent = state[mostRecentIndex];\n\n        if (_urlStringEquals(mostRecent.conference, locationURL.href)) {\n            // The last conference start was stored so we need to update the\n            // length.\n            const nextMostRecent = {\n                ...mostRecent,\n                duration: Date.now() - mostRecent.date\n            };\n\n            delete nextMostRecent.conferenceDuration; // legacy\n\n            // Shallow copy to avoid in-place modification.\n            const nextState = state.slice();\n\n            nextState[mostRecentIndex] = nextMostRecent;\n\n            return nextState;\n        }\n    }\n\n    return state;\n}\n\n/**\n * Determines whether two specific URL {@code strings} are equal in the sense\n * that they identify one and the same conference resource (irrespective of\n * time) for the purposes of the feature {@code recent-list}.\n *\n * @param {string} a - The URL {@code string} to test for equality to {@code b}.\n * @param {string} b - The URL {@code string} to test for equality to {@code a}.\n * @returns {boolean}\n */\nfunction _urlStringEquals(a: string, b: string) {\n    const aHref = getURLWithoutParamsNormalized(new URL(a));\n    const bHref = getURLWithoutParamsNormalized(new URL(b));\n\n    return aHref === bHref;\n}\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    CLEAR_RECORDING_SESSIONS,\n    RECORDING_SESSION_UPDATED,\n    SET_PENDING_RECORDING_NOTIFICATION_UID,\n    SET_SELECTED_RECORDING_SERVICE,\n    SET_STREAM_KEY\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    pendingNotificationUids: {},\n    selectedRecordingService: '',\n    sessionDatas: []\n};\n\n/**\n * The name of the Redux store this feature stores its state in.\n */\nconst STORE_NAME = 'features/recording';\n\n/**\n * Reduces the Redux actions of the feature features/recording.\n */\nReducerRegistry.register(STORE_NAME,\n    (state = DEFAULT_STATE, action) => {\n        switch (action.type) {\n\n        case CLEAR_RECORDING_SESSIONS:\n            return {\n                ...state,\n                sessionDatas: []\n            };\n\n        case RECORDING_SESSION_UPDATED:\n            return {\n                ...state,\n                sessionDatas:\n                    _updateSessionDatas(state.sessionDatas, action.sessionData)\n            };\n\n        case SET_PENDING_RECORDING_NOTIFICATION_UID: {\n            const pendingNotificationUids = {\n                ...state.pendingNotificationUids\n            };\n\n            pendingNotificationUids[action.streamType] = action.uid;\n\n            return {\n                ...state,\n                pendingNotificationUids\n            };\n        }\n\n        case SET_SELECTED_RECORDING_SERVICE: {\n            return {\n                ...state,\n                selectedRecordingService: action.selectedRecordingService\n            };\n        }\n\n        case SET_STREAM_KEY:\n            return {\n                ...state,\n                streamKey: action.streamKey\n            };\n\n        default:\n            return state;\n        }\n    });\n\n/**\n * Updates the known information on recording sessions.\n *\n * @param {Array} sessionDatas - The current sessions in the redux store.\n * @param {Object} newSessionData - The updated session data.\n * @private\n * @returns {Array} The session datas with the updated session data added.\n */\nfunction _updateSessionDatas(sessionDatas, newSessionData) {\n    const hasExistingSessionData = sessionDatas.find(\n        sessionData => sessionData.id === newSessionData.id);\n    let newSessionDatas;\n\n    if (hasExistingSessionData) {\n        newSessionDatas = sessionDatas.map(sessionData => {\n            if (sessionData.id === newSessionData.id) {\n                return {\n                    ...newSessionData\n                };\n            }\n\n            // Nothing to update for this session data so pass it back in.\n            return sessionData;\n        });\n    } else {\n        // If the session data is not present, then there is nothing to update\n        // and instead it needs to be added to the known session datas.\n        newSessionDatas = [\n            ...sessionDatas,\n            { ...newSessionData }\n        ];\n    }\n\n    return newSessionDatas;\n}\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SET_AUDIO_SETTINGS_VISIBILITY,\n    SET_VIDEO_SETTINGS_VISIBILITY\n} from './actionTypes';\n\nReducerRegistry.register('features/settings', (state = {}, action) => {\n    switch (action.type) {\n    case SET_AUDIO_SETTINGS_VISIBILITY:\n        return {\n            ...state,\n            audioSettingsVisible: action.value\n        };\n    case SET_VIDEO_SETTINGS_VISIBILITY:\n        return {\n            ...state,\n            videoSettingsVisible: action.value\n        };\n    }\n\n    return state;\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport {\n    REMOVE_TRANSCRIPT_MESSAGE, TOGGLE_REQUESTING_SUBTITLES,\n    UPDATE_TRANSCRIPT_MESSAGE\n} from './actionTypes';\n\n/**\n * Default State for 'features/transcription' feature\n */\nconst defaultState = {\n    _transcriptMessages: new Map(),\n    _requestingSubtitles: false\n};\n\n/**\n * Listen for actions for the transcription feature to be used by the actions\n * to update the rendered transcription subtitles.\n */\nReducerRegistry.register('features/subtitles', (\n        state = defaultState, action) => {\n    switch (action.type) {\n    case REMOVE_TRANSCRIPT_MESSAGE:\n        return _removeTranscriptMessage(state, action);\n    case UPDATE_TRANSCRIPT_MESSAGE:\n        return _updateTranscriptMessage(state, action);\n\n    case TOGGLE_REQUESTING_SUBTITLES:\n        return {\n            ...state,\n            _requestingSubtitles: !state._requestingSubtitles\n        };\n    }\n\n    return state;\n});\n\n/**\n * Reduces a specific Redux action REMOVE_TRANSCRIPT_MESSAGE of the feature\n * transcription.\n *\n * @param {Object} state - The Redux state of the feature transcription.\n * @param {Action} action -The Redux action REMOVE_TRANSCRIPT_MESSAGE to reduce.\n * @returns {Object} The new state of the feature transcription after the\n * reduction of the specified action.\n */\nfunction _removeTranscriptMessage(state, { transcriptMessageID }) {\n    const newTranscriptMessages = new Map(state._transcriptMessages);\n\n    // Deletes the key from Map once a final message arrives.\n    newTranscriptMessages.delete(transcriptMessageID);\n\n    return {\n        ...state,\n        _transcriptMessages: newTranscriptMessages\n    };\n}\n\n/**\n * Reduces a specific Redux action UPDATE_TRANSCRIPT_MESSAGE of the feature\n * transcription.\n *\n * @param {Object} state - The Redux state of the feature transcription.\n * @param {Action} action -The Redux action UPDATE_TRANSCRIPT_MESSAGE to reduce.\n * @returns {Object} The new state of the feature transcription after the\n * reduction of the specified action.\n */\nfunction _updateTranscriptMessage(state,\n        { transcriptMessageID, newTranscriptMessage }) {\n    const newTranscriptMessages = new Map(state._transcriptMessages);\n\n    // Updates the new message for the given key in the Map.\n    newTranscriptMessages.set(transcriptMessageID, newTranscriptMessage);\n\n    return {\n        ...state,\n        _transcriptMessages: newTranscriptMessages\n    };\n}\n","// @flow\n\nimport { ReducerRegistry, set } from '../base/redux';\n\nimport {\n    CLEAR_TOOLBOX_TIMEOUT,\n    FULL_SCREEN_CHANGED,\n    SET_OVERFLOW_DRAWER,\n    SET_OVERFLOW_MENU_VISIBLE,\n    SET_TOOLBAR_HOVERED,\n    SET_TOOLBOX_ALWAYS_VISIBLE,\n    SET_TOOLBOX_ENABLED,\n    SET_TOOLBOX_TIMEOUT,\n    SET_TOOLBOX_TIMEOUT_MS,\n    SET_TOOLBOX_VISIBLE,\n    TOGGLE_TOOLBOX_VISIBLE\n} from './actionTypes';\n\ndeclare var interfaceConfig: Object;\n\n/**\n * Returns initial state for toolbox's part of Redux store.\n *\n * @private\n * @returns {{\n *     alwaysVisible: boolean,\n *     enabled: boolean,\n *     hovered: boolean,\n *     overflowDrawer: boolean,\n *     overflowMenuVisible: boolean,\n *     timeoutID: number,\n *     timeoutMS: number,\n *     visible: boolean\n * }}\n */\nfunction _getInitialState() {\n    // Does the toolbar eventually fade out, or is it always visible?\n    let alwaysVisible = false;\n\n    // Toolbar (initial) visibility.\n    let visible = false;\n\n    // Default toolbox timeout for mobile app.\n    let timeoutMS = 5000;\n\n    if (typeof interfaceConfig !== 'undefined') {\n        if (interfaceConfig.INITIAL_TOOLBAR_TIMEOUT) {\n            timeoutMS = interfaceConfig.INITIAL_TOOLBAR_TIMEOUT;\n        }\n        if (typeof interfaceConfig.TOOLBAR_ALWAYS_VISIBLE !== 'undefined') {\n            alwaysVisible = interfaceConfig.TOOLBAR_ALWAYS_VISIBLE;\n        }\n    }\n\n    // When the toolbar is always visible, it must initially be visible too.\n    if (alwaysVisible === true) {\n        visible = true;\n    }\n\n    return {\n        /**\n         * The indicator which determines whether the Toolbox should always be\n         * visible. When false, the toolbar will fade out after timeoutMS.\n         *\n         * @type {boolean}\n         */\n        alwaysVisible,\n\n        /**\n         * The indicator which determines whether the Toolbox is enabled.\n         *\n         * @type {boolean}\n         */\n        enabled: true,\n\n        /**\n         * The indicator which determines whether a Toolbar in the Toolbox is\n         * hovered.\n         *\n         * @type {boolean}\n         */\n        hovered: false,\n\n        /**\n         * The indicator which determines whether the overflow menu(s) are to be displayed as drawers.\n         *\n         * @type {boolean}\n         */\n        overflowDrawer: false,\n\n        /**\n         * The indicator which determines whether the OverflowMenu is visible.\n         *\n         * @type {boolean}\n         */\n        overflowMenuVisible: false,\n\n        /**\n         * A number, non-zero value which identifies the timer created by a call\n         * to setTimeout() with timeoutMS.\n         *\n         * @type {number|null}\n         */\n        timeoutID: null,\n\n        /**\n         * The delay in milliseconds before timeoutID executes (after its\n         * initialization).\n         *\n         * @type {number}\n         */\n        timeoutMS,\n\n        /**\n         * The indicator that determines whether the Toolbox is visible.\n         *\n         * @type {boolean}\n         */\n        visible\n    };\n}\n\nReducerRegistry.register(\n    'features/toolbox',\n    (state: Object = _getInitialState(), action: Object) => {\n        switch (action.type) {\n        case CLEAR_TOOLBOX_TIMEOUT:\n            return {\n                ...state,\n                timeoutID: undefined\n            };\n\n        case FULL_SCREEN_CHANGED:\n            return {\n                ...state,\n                fullScreen: action.fullScreen\n            };\n\n        case SET_OVERFLOW_DRAWER:\n            return {\n                ...state,\n                overflowDrawer: action.displayAsDrawer\n            };\n\n        case SET_OVERFLOW_MENU_VISIBLE:\n            return {\n                ...state,\n                overflowMenuVisible: action.visible\n            };\n\n        case SET_TOOLBAR_HOVERED:\n            return {\n                ...state,\n                hovered: action.hovered\n            };\n\n        case SET_TOOLBOX_ALWAYS_VISIBLE:\n            return {\n                ...state,\n                alwaysVisible: action.alwaysVisible,\n                visible: action.alwaysVisible === true ? true : state.visible\n            };\n\n        case SET_TOOLBOX_ENABLED:\n            return {\n                ...state,\n                enabled: action.enabled\n            };\n\n        case SET_TOOLBOX_TIMEOUT:\n            return {\n                ...state,\n                timeoutID: action.timeoutID,\n                timeoutMS: action.timeoutMS\n            };\n\n        case SET_TOOLBOX_TIMEOUT_MS:\n            return {\n                ...state,\n                timeoutMS: action.timeoutMS\n            };\n\n        case SET_TOOLBOX_VISIBLE:\n            return set(state, 'visible', state.alwaysVisible || action.visible);\n\n        case TOGGLE_TOOLBOX_VISIBLE:\n            return set(state, 'visible', state.alwaysVisible || !state.visible);\n        }\n\n        return state;\n    });\n","import { ReducerRegistry } from '../base/redux';\nimport {\n    _TRANSCRIBER_JOINED,\n    _TRANSCRIBER_LEFT,\n    _POTENTIAL_TRANSCRIBER_JOINED,\n    SET_PENDING_TRANSCRIBING_NOTIFICATION_UID\n} from '../transcribing/actionTypes';\n\n/**\n * Returns initial state for transcribing feature part of Redux store.\n *\n * @returns {{\n * isTranscribing: boolean,\n * isDialing: boolean,\n * transcriberJID: null,\n * potentialTranscriberJIDs: Array\n * }}\n * @private\n */\nfunction _getInitialState() {\n    return {\n        /**\n         * Indicates whether there is currently an active transcriber in the\n         * room\n         *\n         * @type {boolean}\n         */\n        isTranscribing: false,\n\n        /**\n         * Indicates whether the transcriber has been dialed into the room and\n         * we're currently awaiting successful joining or failure of joining\n         *\n         * @type {boolean}\n         */\n        isDialing: false,\n\n        /**\n         * Indicates whether the transcribing feature is in the process of\n         * terminating; the transcriber has been told to leave.\n         */\n        isTerminating: false,\n\n        /**\n         * The JID of the active transcriber\n         *\n         * @type { string }\n         */\n        transcriberJID: null,\n\n        /**\n         * A list containing potential JID's of transcriber participants\n         *\n         * @type { Array }\n         */\n        potentialTranscriberJIDs: []\n    };\n}\n\n/**\n * Reduces the Redux actions of the feature features/transcribing.\n */\nReducerRegistry.register('features/transcribing',\n    (state = _getInitialState(), action) => {\n        switch (action.type) {\n        case _TRANSCRIBER_JOINED:\n            return {\n                ...state,\n                isTranscribing: true,\n                isDialing: false,\n                transcriberJID: action.transcriberJID\n            };\n        case _TRANSCRIBER_LEFT:\n            return {\n                ...state,\n                isTerminating: false,\n                isTranscribing: false,\n                transcriberJID: undefined,\n                potentialTranscriberJIDs: []\n            };\n        case _POTENTIAL_TRANSCRIBER_JOINED:\n            return {\n                ...state,\n                potentialTranscriberJIDs:\n                    [ action.transcriberJID ]\n                        .concat(state.potentialTranscriberJIDs)\n            };\n        case SET_PENDING_TRANSCRIBING_NOTIFICATION_UID:\n            return {\n                ...state,\n                pendingNotificationUid: action.uid\n            };\n        default:\n            return state;\n        }\n    });\n","// @flow\n\nimport { ReducerRegistry } from '../base/redux';\n\nimport {\n    SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED,\n    SET_TILE_VIEW\n} from './actionTypes';\n\nconst DEFAULT_STATE = {\n    remoteScreenShares: [],\n\n    /**\n     * The indicator which determines whether the video layout should display\n     * video thumbnails in a tiled layout.\n     *\n     * Note: undefined means that the user hasn't requested anything in particular yet, so\n     * we use our auto switching rules.\n     *\n     * @public\n     * @type {boolean}\n     */\n    tileViewEnabled: undefined\n};\n\nconst STORE_NAME = 'features/video-layout';\n\nReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {\n    switch (action.type) {\n    case SCREEN_SHARE_REMOTE_PARTICIPANTS_UPDATED: {\n        return {\n            ...state,\n            remoteScreenShares: action.participantIds\n        };\n    }\n\n    case SET_TILE_VIEW:\n        return {\n            ...state,\n            tileViewEnabled: action.enabled\n        };\n    }\n\n    return state;\n});\n","import { ReducerRegistry } from '../base/redux';\n\nimport { SIP_GW_AVAILABILITY_CHANGED } from './actionTypes';\n\nReducerRegistry.register(\n    'features/videosipgw', (state = [], action) => {\n        switch (action.type) {\n        case SIP_GW_AVAILABILITY_CHANGED: {\n            return {\n                ...state,\n                status: action.status\n            };\n        }\n        }\n\n        return state;\n    });\n","// @flow\n\nimport { PersistenceRegistry, ReducerRegistry, set } from '../base/redux';\n\nimport {\n    SET_SIDEBAR_VISIBLE,\n    SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE\n} from './actionTypes';\n\n/**\n * The name of the redux store/state property which is the root of the redux\n * state of the feature {@code welcome}.\n */\nconst STORE_NAME = 'features/welcome';\n\n/**\n * Sets up the persistence of the feature {@code welcome}.\n */\nPersistenceRegistry.register(STORE_NAME, {\n    defaultPage: true\n});\n\n/**\n * Reduces redux actions for the purposes of the feature {@code welcome}.\n */\nReducerRegistry.register(STORE_NAME, (state = {}, action) => {\n    switch (action.type) {\n    case SET_SIDEBAR_VISIBLE:\n        return set(state, 'sideBarVisible', action.visible);\n\n    case SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE:\n        return set(state, 'defaultPage', action.pageIndex);\n    }\n\n    return state;\n});\n","// @flow\n\n/**\n * The type of the (redux) action which sets the visibility of\n * {@link WelcomePageSideBar}.\n *\n * {\n *     type: SET_SIDEBAR_VISIBLE,\n *     visible: boolean\n * }\n */\nexport const SET_SIDEBAR_VISIBLE = 'SET_SIDEBAR_VISIBLE';\n\n/**\n * The type of (redux) action to set the default page index of\n * {@link WelcomePageLists}.\n *\n * {\n *     type: SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE,\n *     pageIndex: number\n * }\n */\nexport const SET_WELCOME_PAGE_LISTS_DEFAULT_PAGE\n    = 'SET_WELCOME_PAGE_LIST_DEFAULT_PAGE';\n","// @flow\n\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport React from 'react';\nimport { batch } from 'react-redux';\n\nimport { BaseApp } from '../../../features/base/app';\nimport { setConfig } from '../../base/config';\nimport { DialogContainer } from '../../base/dialog';\nimport { createPrejoinTracks } from '../../base/tracks';\nimport { getConferenceOptions } from '../../conference/functions';\nimport { initPrejoin, makePrecallTest } from '../actions';\n\nimport Prejoin from './Prejoin';\n\ntype Props = {\n\n    /**\n     * Indicates whether the avatar should be shown when video is off\n     */\n    showAvatar: boolean,\n\n    /**\n     * Flag signaling the visibility of join label, input and buttons\n     */\n    showJoinActions: boolean,\n\n    /**\n     * Flag signaling the visibility of the skip prejoin toggle\n     */\n    showSkipPrejoin: boolean,\n};\n\n/**\n * Wrapper application for prejoin.\n *\n * @extends BaseApp\n */\nexport default class PrejoinApp extends BaseApp<Props> {\n    _init: Promise<*>;\n\n    /**\n     * Navigates to {@link Prejoin} upon mount.\n     *\n     * @returns {void}\n     */\n    componentDidMount() {\n        super.componentDidMount();\n\n        this._init.then(async () => {\n            const { store } = this.state;\n            const { dispatch } = store;\n            const { showAvatar, showJoinActions, showSkipPrejoin } = this.props;\n\n            super._navigate({\n                component: Prejoin,\n                props: {\n                    showAvatar,\n                    showJoinActions,\n                    showSkipPrejoin\n                }\n            });\n\n            const { startWithAudioMuted, startWithVideoMuted } = store.getState()['features/base/settings'];\n\n            dispatch(setConfig({\n                prejoinPageEnabled: true,\n                startWithAudioMuted,\n                startWithVideoMuted\n            }));\n\n            const { tryCreateLocalTracks, errors } = createPrejoinTracks();\n\n            const tracks = await tryCreateLocalTracks;\n\n            batch(() => {\n                dispatch(initPrejoin(tracks, errors));\n                dispatch(makePrecallTest(getConferenceOptions(store.getState())));\n            });\n        });\n    }\n\n    /**\n     * Overrides the parent method to inject {@link AtlasKitThemeProvider} as\n     * the top most component.\n     *\n     * @override\n     */\n    _createMainElement(component, props) {\n        return (\n            <AtlasKitThemeProvider mode = 'dark'>\n                { super._createMainElement(component, props) }\n            </AtlasKitThemeProvider>\n        );\n    }\n\n    /**\n     * Renders the platform specific dialog container.\n     *\n     * @returns {React$Element}\n     */\n    _renderDialogContainer() {\n        return (\n            <AtlasKitThemeProvider mode = 'dark'>\n                <DialogContainer />\n            </AtlasKitThemeProvider>\n        );\n    }\n}\n","/* global APP */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { getJitsiMeetTransport } from '../modules/transport';\n\nimport { App } from './features/app/components';\nimport { getLogger } from './features/base/logging/functions';\nimport { Platform } from './features/base/react';\nimport { getJitsiMeetGlobalNS } from './features/base/util';\nimport PrejoinApp from './features/prejoin/components/PrejoinApp';\n\nconst logger = getLogger('index.web');\nconst OS = Platform.OS;\n\n/**\n * Renders the app when the DOM tree has been loaded.\n */\ndocument.addEventListener('DOMContentLoaded', () => {\n    const now = window.performance.now();\n\n    APP.connectionTimes['document.ready'] = now;\n    logger.log('(TIME) document ready:\\t', now);\n});\n\n// Workaround for the issue when returning to a page with the back button and\n// the page is loaded from the 'back-forward' cache on iOS which causes nothing\n// to be rendered.\nif (OS === 'ios') {\n    window.addEventListener('pageshow', event => {\n        // Detect pages loaded from the 'back-forward' cache\n        // (https://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/)\n        if (event.persisted) {\n            // Maybe there is a more graceful approach but in the moment of\n            // writing nothing else resolves the issue. I tried to execute our\n            // DOMContentLoaded handler but it seems that the 'onpageshow' event\n            // is triggered only when 'window.location.reload()' code exists.\n            window.location.reload();\n        }\n    });\n}\n\n/**\n * Stops collecting the logs and disposing the API when the user closes the\n * page.\n */\nwindow.addEventListener('beforeunload', () => {\n    // Stop the LogCollector\n    if (APP.logCollectorStarted) {\n        APP.logCollector.stop();\n        APP.logCollectorStarted = false;\n    }\n    APP.API.notifyConferenceLeft(APP.conference.roomName);\n    APP.API.dispose();\n    getJitsiMeetTransport().dispose();\n});\n\nconst globalNS = getJitsiMeetGlobalNS();\n\nglobalNS.entryPoints = {\n    APP: App,\n    PREJOIN: PrejoinApp\n};\n\nglobalNS.renderEntryPoint = ({\n    Component,\n    props = {},\n    elementId = 'react'\n}) => {\n    ReactDOM.render(\n        <Component { ...props } />,\n        document.getElementById(elementId)\n    );\n};\n","// @flow\n\nimport { AtlasKitThemeProvider } from '@atlaskit/theme';\nimport React from 'react';\n\nimport { DialogContainer } from '../../base/dialog';\nimport JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider';\nimport { ChromeExtensionBanner } from '../../chrome-extension-banner';\n\nimport { AbstractApp } from './AbstractApp';\n\n// Register middlewares and reducers.\nimport '../middlewares';\nimport '../reducers';\n\n/**\n * Root app {@code Component} on Web/React.\n *\n * @extends AbstractApp\n */\nexport class App extends AbstractApp {\n    /**\n     * Overrides the parent method to inject {@link AtlasKitThemeProvider} as\n     * the top most component.\n     *\n     * @override\n     */\n    _createMainElement(component, props) {\n        return (\n            <JitsiThemeProvider>\n                <AtlasKitThemeProvider mode = 'dark'>\n                    <ChromeExtensionBanner />\n                    { super._createMainElement(component, props) }\n                </AtlasKitThemeProvider>\n            </JitsiThemeProvider>\n        );\n    }\n\n    /**\n     * Renders the platform specific dialog container.\n     *\n     * @returns {React$Element}\n     */\n    _renderDialogContainer() {\n        return (\n            <AtlasKitThemeProvider mode = 'dark'>\n                <DialogContainer />\n            </AtlasKitThemeProvider>\n        );\n    }\n}\n","/* application specific logic */\n\nimport 'jquery';\n\nimport 'olm';\n\nimport 'focus-visible';\n\n// We need to setup the jitsi-local-storage as early as possible so that we can start using it.\n// NOTE: If jitsi-local-storage is used before the initial setup is performed this will break the use case when we use\n// the  local storage from the parent page when the localStorage is disabled. Also the setup is relying that\n// window.location is not changed and still has all URL parameters.\nimport './react/features/base/jitsi-local-storage/setup';\nimport conference from './conference';\nimport API from './modules/API';\nimport UI from './modules/UI/UI';\nimport keyboardshortcut from './modules/keyboardshortcut/keyboardshortcut';\nimport translation from './modules/translation/translation';\n\n// Initialize Olm as early as possible.\nif (window.Olm) {\n    window.Olm.init().catch(e => {\n        console.error('Failed to initialize Olm, E2EE will be disabled', e);\n        delete window.Olm;\n    });\n}\n\nwindow.APP = {\n    API,\n    conference,\n\n    // Used by do_external_connect.js if we receive the attach data after\n    // connect was already executed. status property can be 'initialized',\n    // 'ready', or 'connecting'. We are interested in 'ready' status only which\n    // means that connect was executed but we have to wait for the attach data.\n    // In status 'ready' handler property will be set to a function that will\n    // finish the connect process when the attach data or error is received.\n    connect: {\n        handler: null,\n        status: 'initialized'\n    },\n\n    // Used for automated performance tests.\n    connectionTimes: {\n        'index.loaded': window.indexLoadedTime\n    },\n\n    keyboardshortcut,\n    translation,\n    UI\n};\n\n// TODO The execution of the mobile app starts from react/index.native.js.\n// Similarly, the execution of the Web app should start from react/index.web.js\n// for the sake of consistency and ease of understanding. Temporarily though\n// because we are at the beginning of introducing React into the Web app, allow\n// the execution of the Web app to start from app.js in order to reduce the\n// complexity of the beginning step.\nimport './react';\n","// These are duplicates of colors imports -\n// Not bringing in colors to reduce dependency on theme\n// These values are enforced via unit tests\nvar DN30 = '#1B2638';\nvar N0 = '#FFFFFF';\nvar themedBackground = {\n  light: N0,\n  dark: DN30\n};\n/**\n * Returns the background color depending on the passed through mode.\n * @param mode\n */\n\nexport var getBackground = function getBackground() {\n  var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'light';\n  return themedBackground[mode];\n};","export var sizes = {\n  small: '16px',\n  medium: '24px',\n  large: '32px',\n  xlarge: '48px'\n};\nexport var sizeMap = {\n  small: 'small',\n  medium: 'medium',\n  large: 'large',\n  xlarge: 'xlarge'\n};\nexport var dimensions = {\n  small: {\n    width: sizes.small,\n    height: sizes.small\n  },\n  medium: {\n    width: sizes.medium,\n    height: sizes.medium\n  },\n  large: {\n    width: sizes.large,\n    height: sizes.large\n  },\n  xlarge: {\n    width: sizes.xlarge,\n    height: sizes.xlarge\n  }\n};","import { dimensions } from '../constants';\nimport { css } from '@emotion/core';\nexport var commonSVGStyles = {\n  overflow: 'hidden',\n  pointerEvents: 'none',\n\n  /**\n   * Stop-color doesn't properly apply in chrome when the inherited/current color changes.\n   * We have to initially set stop-color to inherit (either via DOM attribute or an initial CSS\n   * rule) and then override it with currentColor for the color changes to be picked up.\n   */\n  stop: {\n    stopColor: 'currentColor'\n  }\n};\nvar smallStyles = css(dimensions.small);\nvar mediumStyles = css(dimensions.medium);\nvar largeStyles = css(dimensions.large);\nvar xlargeStyles = css(dimensions.xlarge); // pre-built css style-size map\n\nexport var sizeStyleMap = {\n  small: smallStyles,\n  medium: mediumStyles,\n  large: largeStyles,\n  xlarge: xlargeStyles\n};\n/**\n * Returns the width of the icon's parent span. This function has\n * special behaviour to deal with icon-file-type specifically.\n *\n * The reality is the SVG still has its own dimensions, so this is\n * a secondary fallback which in 95% of cases is not required.\n * It's only really being kept to maintain backward compatability.\n */\n\nexport var getIconSize = function getIconSize(_ref) {\n  var width = _ref.width,\n      height = _ref.height,\n      size = _ref.size;\n\n  if (width && height) {\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  if (size) {\n    return dimensions[size];\n  }\n\n  return undefined;\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport { memo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useGlobalTheme } from '@atlaskit/theme/components';\nimport { getBackground } from './utils';\nimport { commonSVGStyles, getIconSize } from './styles';\n/**\n * We are hiding these props from consumers as they're used to\n * hack around icon sizing specifically for icon-file-type.\n */\n\nvar iconStyles = css({\n  display: 'inline-block',\n  flexShrink: 0,\n  lineHeight: 1,\n  '> svg': _objectSpread(_objectSpread({}, commonSVGStyles), {}, {\n    maxWidth: '100%',\n    maxHeight: '100%',\n    color: 'var(--icon-primary-color)',\n    fill: 'var(--icon-secondary-color)',\n    verticalAlign: 'bottom'\n  })\n});\n/**\n * For windows high contrast mode\n */\n\nvar baseHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      filter: 'grayscale(1)',\n      '--icon-primary-color': 'CanvasText',\n      // foreground\n      '--icon-secondary-color': 'Canvas' // background\n\n    }\n  }\n});\nvar primaryEqualsSecondaryHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      // if the primaryColor is the same as the secondaryColor we\n      // set the --icon-primary-color to Canvas\n      // this is usually to convey state i.e. Checkbox checked -> not checked\n      '--icon-primary-color': 'Canvas' // foreground\n\n    }\n  }\n});\nvar secondaryTransparentHcmStyles = css({\n  '@media screen and (forced-colors: active)': {\n    '> svg': {\n      '--icon-secondary-color': 'transparent' // background\n\n    }\n  }\n});\n/**\n * __Icon__\n *\n * An icon is used as a visual representation of common actions and commands to provide context.\n *\n * - [Examples](https://atlaskit.atlassian.com/packages/design-system/icon)\n * - [Code](https://atlaskit.atlassian.com/packages/design-system/icon/docs/custom-icons)\n */\n\nexport var Icon = /*#__PURE__*/memo(function Icon(props) {\n  var _ref = props,\n      Glyph = _ref.glyph,\n      dangerouslySetGlyph = _ref.dangerouslySetGlyph,\n      _ref$primaryColor = _ref.primaryColor,\n      primaryColor = _ref$primaryColor === void 0 ? 'currentColor' : _ref$primaryColor,\n      secondaryColor = _ref.secondaryColor,\n      size = _ref.size,\n      testId = _ref.testId,\n      label = _ref.label,\n      width = _ref.width,\n      height = _ref.height;\n  var glyphProps = dangerouslySetGlyph ? {\n    dangerouslySetInnerHTML: {\n      __html: dangerouslySetGlyph\n    }\n  } : {\n    children: Glyph ? jsx(Glyph, {\n      role: \"presentation\"\n    }) : null\n  };\n  var dimensions = getIconSize({\n    width: width,\n    height: height,\n    size: size\n  });\n\n  var _useGlobalTheme = useGlobalTheme(),\n      mode = _useGlobalTheme.mode;\n\n  return jsx(\"span\", _extends({\n    \"data-testid\": testId,\n    role: label ? 'img' : 'presentation',\n    \"aria-label\": label ? label : undefined,\n    \"aria-hidden\": label ? undefined : true,\n    style: {\n      '--icon-primary-color': primaryColor,\n      '--icon-secondary-color': secondaryColor || getBackground(mode)\n    }\n  }, glyphProps, {\n    css: [iconStyles, baseHcmStyles, primaryColor === secondaryColor && primaryEqualsSecondaryHcmStyles, secondaryColor === 'transparent' && secondaryTransparentHcmStyles, // NB: This can be resolved if this component, composes base SVG / and/or skeleton\n    // We could then simplify how common styles are dealt with simply by encapsualting them\n    // at their appropriate level and/or having a singular approach to css variables in the package\n    dimensions && // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage\n    css({\n      width: dimensions.width,\n      height: dimensions.height,\n      '> svg': dimensions\n    })]\n  }));\n});\nexport default Icon;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexport var isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\nexport default isBrowser;\n","var isProduction = process.env.NODE_ENV === 'production';\nfunction warning(condition, message) {\n  if (!isProduction) {\n    if (condition) {\n      return;\n    }\n\n    var text = \"Warning: \" + message;\n\n    if (typeof console !== 'undefined') {\n      console.warn(text);\n    }\n\n    try {\n      throw Error(text);\n    } catch (x) {}\n  }\n}\n\nexport default warning;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport isInBrowser from 'is-in-browser';\nimport warning from 'tiny-warning';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\nvar plainObjectConstrurctor = {}.constructor;\nfunction cloneStyle(style) {\n  if (style == null || typeof style !== 'object') return style;\n  if (Array.isArray(style)) return style.map(cloneStyle);\n  if (style.constructor !== plainObjectConstrurctor) return style;\n  var newStyle = {};\n\n  for (var name in style) {\n    newStyle[name] = cloneStyle(style[name]);\n  }\n\n  return newStyle;\n}\n\n/**\n * Create a rule instance.\n */\n\nfunction createRule(name, decl, options) {\n  if (name === void 0) {\n    name = 'unnamed';\n  }\n\n  var jss = options.jss;\n  var declCopy = cloneStyle(decl);\n  var rule = jss.plugins.onCreateRule(name, declCopy, options);\n  if (rule) return rule; // It is an at-rule and it has no instance.\n\n  if (name[0] === '@') {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Unknown rule \" + name) : void 0;\n  }\n\n  return null;\n}\n\nvar join = function join(value, by) {\n  var result = '';\n\n  for (var i = 0; i < value.length; i++) {\n    // Remove !important from the value, it will be readded later.\n    if (value[i] === '!important') break;\n    if (result) result += by;\n    result += value[i];\n  }\n\n  return result;\n};\n\n/**\n * Converts array values to string.\n *\n * `margin: [['5px', '10px']]` > `margin: 5px 10px;`\n * `border: ['1px', '2px']` > `border: 1px, 2px;`\n * `margin: [['5px', '10px'], '!important']` > `margin: 5px 10px !important;`\n * `color: ['red', !important]` > `color: red !important;`\n */\nvar toCssValue = function toCssValue(value, ignoreImportant) {\n  if (ignoreImportant === void 0) {\n    ignoreImportant = false;\n  }\n\n  if (!Array.isArray(value)) return value;\n  var cssValue = ''; // Support space separated values via `[['5px', '10px']]`.\n\n  if (Array.isArray(value[0])) {\n    for (var i = 0; i < value.length; i++) {\n      if (value[i] === '!important') break;\n      if (cssValue) cssValue += ', ';\n      cssValue += join(value[i], ' ');\n    }\n  } else cssValue = join(value, ', '); // Add !important, because it was ignored.\n\n\n  if (!ignoreImportant && value[value.length - 1] === '!important') {\n    cssValue += ' !important';\n  }\n\n  return cssValue;\n};\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\nfunction indentStr(str, indent) {\n  var result = '';\n\n  for (var index = 0; index < indent; index++) {\n    result += '  ';\n  }\n\n  return result + str;\n}\n/**\n * Converts a Rule to CSS string.\n */\n\n\nfunction toCss(selector, style, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var result = '';\n  if (!style) return result;\n  var _options = options,\n      _options$indent = _options.indent,\n      indent = _options$indent === void 0 ? 0 : _options$indent;\n  var fallbacks = style.fallbacks;\n  if (selector) indent++; // Apply fallbacks first.\n\n  if (fallbacks) {\n    // Array syntax {fallbacks: [{prop: value}]}\n    if (Array.isArray(fallbacks)) {\n      for (var index = 0; index < fallbacks.length; index++) {\n        var fallback = fallbacks[index];\n\n        for (var prop in fallback) {\n          var value = fallback[prop];\n\n          if (value != null) {\n            if (result) result += '\\n';\n            result += indentStr(prop + \": \" + toCssValue(value) + \";\", indent);\n          }\n        }\n      }\n    } else {\n      // Object syntax {fallbacks: {prop: value}}\n      for (var _prop in fallbacks) {\n        var _value = fallbacks[_prop];\n\n        if (_value != null) {\n          if (result) result += '\\n';\n          result += indentStr(_prop + \": \" + toCssValue(_value) + \";\", indent);\n        }\n      }\n    }\n  }\n\n  for (var _prop2 in style) {\n    var _value2 = style[_prop2];\n\n    if (_value2 != null && _prop2 !== 'fallbacks') {\n      if (result) result += '\\n';\n      result += indentStr(_prop2 + \": \" + toCssValue(_value2) + \";\", indent);\n    }\n  } // Allow empty style in this case, because properties will be added dynamically.\n\n\n  if (!result && !options.allowEmpty) return result; // When rule is being stringified before selector was defined.\n\n  if (!selector) return result;\n  indent--;\n  if (result) result = \"\\n\" + result + \"\\n\";\n  return indentStr(selector + \" {\" + result, indent) + indentStr('}', indent);\n}\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`\\s])/g;\nvar nativeEscape = typeof CSS !== 'undefined' && CSS.escape;\nvar escape = (function (str) {\n  return nativeEscape ? nativeEscape(str) : str.replace(escapeRegex, '\\\\$1');\n});\n\nvar BaseStyleRule =\n/*#__PURE__*/\nfunction () {\n  function BaseStyleRule(key, style, options) {\n    this.type = 'style';\n    this.key = void 0;\n    this.isProcessed = false;\n    this.style = void 0;\n    this.renderer = void 0;\n    this.renderable = void 0;\n    this.options = void 0;\n    var sheet = options.sheet,\n        Renderer = options.Renderer;\n    this.key = key;\n    this.options = options;\n    this.style = style;\n    if (sheet) this.renderer = sheet.renderer;else if (Renderer) this.renderer = new Renderer();\n  }\n  /**\n   * Get or set a style property.\n   */\n\n\n  var _proto = BaseStyleRule.prototype;\n\n  _proto.prop = function prop(name, value, options) {\n    // It's a getter.\n    if (value === undefined) return this.style[name]; // Don't do anything if the value has not changed.\n\n    var force = options ? options.force : false;\n    if (!force && this.style[name] === value) return this;\n    var newValue = value;\n\n    if (!options || options.process !== false) {\n      newValue = this.options.jss.plugins.onChangeValue(value, name, this);\n    }\n\n    var isEmpty = newValue == null || newValue === false;\n    var isDefined = name in this.style; // Value is empty and wasn't defined before.\n\n    if (isEmpty && !isDefined && !force) return this; // We are going to remove this value.\n\n    var remove = isEmpty && isDefined;\n    if (remove) delete this.style[name];else this.style[name] = newValue; // Renderable is defined if StyleSheet option `link` is true.\n\n    if (this.renderable && this.renderer) {\n      if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, newValue);\n      return this;\n    }\n\n    var sheet = this.options.sheet;\n\n    if (sheet && sheet.attached) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Rule is not linked. Missing sheet option \"link: true\".') : void 0;\n    }\n\n    return this;\n  };\n\n  return BaseStyleRule;\n}();\nvar StyleRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  _inheritsLoose(StyleRule, _BaseStyleRule);\n\n  function StyleRule(key, style, options) {\n    var _this;\n\n    _this = _BaseStyleRule.call(this, key, style, options) || this;\n    _this.selectorText = void 0;\n    _this.id = void 0;\n    _this.renderable = void 0;\n    var selector = options.selector,\n        scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n\n    if (selector) {\n      _this.selectorText = selector;\n    } else if (scoped !== false) {\n      _this.id = generateId(_assertThisInitialized(_assertThisInitialized(_this)), sheet);\n      _this.selectorText = \".\" + escape(_this.id);\n    }\n\n    return _this;\n  }\n  /**\n   * Set selector string.\n   * Attention: use this with caution. Most browsers didn't implement\n   * selectorText setter, so this may result in rerendering of entire Style Sheet.\n   */\n\n\n  var _proto2 = StyleRule.prototype;\n\n  /**\n   * Apply rule to an element inline.\n   */\n  _proto2.applyTo = function applyTo(renderable) {\n    var renderer = this.renderer;\n\n    if (renderer) {\n      var json = this.toJSON();\n\n      for (var prop in json) {\n        renderer.setProperty(renderable, prop, json[prop]);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Returns JSON representation of the rule.\n   * Fallbacks are not supported.\n   * Useful for inline styles.\n   */\n  ;\n\n  _proto2.toJSON = function toJSON() {\n    var json = {};\n\n    for (var prop in this.style) {\n      var value = this.style[prop];\n      if (typeof value !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = toCssValue(value);\n    }\n\n    return json;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto2.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? _extends({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.selectorText, this.style, opts);\n  };\n\n  _createClass(StyleRule, [{\n    key: \"selector\",\n    set: function set(selector) {\n      if (selector === this.selectorText) return;\n      this.selectorText = selector;\n      var renderer = this.renderer,\n          renderable = this.renderable;\n      if (!renderable || !renderer) return;\n      var hasChanged = renderer.setSelector(renderable, selector); // If selector setter is not implemented, rerender the rule.\n\n      if (!hasChanged) {\n        renderer.replaceRule(renderable, this);\n      }\n    }\n    /**\n     * Get selector string.\n     */\n    ,\n    get: function get() {\n      return this.selectorText;\n    }\n  }]);\n\n  return StyleRule;\n}(BaseStyleRule);\nvar pluginStyleRule = {\n  onCreateRule: function onCreateRule(name, style, options) {\n    if (name[0] === '@' || options.parent && options.parent.type === 'keyframes') {\n      return null;\n    }\n\n    return new StyleRule(name, style, options);\n  }\n};\n\nvar defaultToStringOptions = {\n  indent: 1,\n  children: true\n};\nvar atRegExp = /@([\\w-]+)/;\n/**\n * Conditional rule for @media, @supports\n */\n\nvar ConditionalRule =\n/*#__PURE__*/\nfunction () {\n  function ConditionalRule(key, styles, options) {\n    this.type = 'conditional';\n    this.at = void 0;\n    this.key = void 0;\n    this.query = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    var atMatch = key.match(atRegExp);\n    this.at = atMatch ? atMatch[1] : 'unknown'; // Key might contain a unique suffix in case the `name` passed by user was duplicate.\n\n    this.query = options.name || \"@\" + this.at;\n    this.options = options;\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = ConditionalRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions.indent;\n    if (options.children == null) options.children = defaultToStringOptions.children;\n\n    if (options.children === false) {\n      return this.query + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    return children ? this.query + \" {\\n\" + children + \"\\n}\" : '';\n  };\n\n  return ConditionalRule;\n}();\nvar keyRegExp = /@media|@supports\\s+/;\nvar pluginConditionalRule = {\n  onCreateRule: function onCreateRule(key, styles, options) {\n    return keyRegExp.test(key) ? new ConditionalRule(key, styles, options) : null;\n  }\n};\n\nvar defaultToStringOptions$1 = {\n  indent: 1,\n  children: true\n};\nvar nameRegExp = /@keyframes\\s+([\\w-]+)/;\n/**\n * Rule for @keyframes\n */\n\nvar KeyframesRule =\n/*#__PURE__*/\nfunction () {\n  function KeyframesRule(key, frames, options) {\n    this.type = 'keyframes';\n    this.at = '@keyframes';\n    this.key = void 0;\n    this.name = void 0;\n    this.id = void 0;\n    this.rules = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    var nameMatch = key.match(nameRegExp);\n\n    if (nameMatch && nameMatch[1]) {\n      this.name = nameMatch[1];\n    } else {\n      this.name = 'noname';\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Bad keyframes name \" + key) : void 0;\n    }\n\n    this.key = this.type + \"-\" + this.name;\n    this.options = options;\n    var scoped = options.scoped,\n        sheet = options.sheet,\n        generateId = options.generateId;\n    this.id = scoped === false ? this.name : escape(generateId(this, sheet));\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var name in frames) {\n      this.rules.add(name, frames[name], _extends({}, options, {\n        parent: this\n      }));\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = KeyframesRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (options === void 0) {\n      options = defaultToStringOptions$1;\n    }\n\n    if (options.indent == null) options.indent = defaultToStringOptions$1.indent;\n    if (options.children == null) options.children = defaultToStringOptions$1.children;\n\n    if (options.children === false) {\n      return this.at + \" \" + this.id + \" {}\";\n    }\n\n    var children = this.rules.toString(options);\n    if (children) children = \"\\n\" + children + \"\\n\";\n    return this.at + \" \" + this.id + \" {\" + children + \"}\";\n  };\n\n  return KeyframesRule;\n}();\nvar keyRegExp$1 = /@keyframes\\s+/;\nvar refRegExp = /\\$([\\w-]+)/g;\n\nvar findReferencedKeyframe = function findReferencedKeyframe(val, keyframes) {\n  if (typeof val === 'string') {\n    return val.replace(refRegExp, function (match, name) {\n      if (name in keyframes) {\n        return keyframes[name];\n      }\n\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Referenced keyframes rule \\\"\" + name + \"\\\" is not defined.\") : void 0;\n      return match;\n    });\n  }\n\n  return val;\n};\n/**\n * Replace the reference for a animation name.\n */\n\n\nvar replaceRef = function replaceRef(style, prop, keyframes) {\n  var value = style[prop];\n  var refKeyframe = findReferencedKeyframe(value, keyframes);\n\n  if (refKeyframe !== value) {\n    style[prop] = refKeyframe;\n  }\n};\n\nvar plugin = {\n  onCreateRule: function onCreateRule(key, frames, options) {\n    return typeof key === 'string' && keyRegExp$1.test(key) ? new KeyframesRule(key, frames, options) : null;\n  },\n  // Animation name ref replacer.\n  onProcessStyle: function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return style;\n    if ('animation-name' in style) replaceRef(style, 'animation-name', sheet.keyframes);\n    if ('animation' in style) replaceRef(style, 'animation', sheet.keyframes);\n    return style;\n  },\n  onChangeValue: function onChangeValue(val, prop, rule) {\n    var sheet = rule.options.sheet;\n\n    if (!sheet) {\n      return val;\n    }\n\n    switch (prop) {\n      case 'animation':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      case 'animation-name':\n        return findReferencedKeyframe(val, sheet.keyframes);\n\n      default:\n        return val;\n    }\n  }\n};\n\nvar KeyframeRule =\n/*#__PURE__*/\nfunction (_BaseStyleRule) {\n  _inheritsLoose(KeyframeRule, _BaseStyleRule);\n\n  function KeyframeRule() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _BaseStyleRule.call.apply(_BaseStyleRule, [this].concat(args)) || this;\n    _this.renderable = void 0;\n    return _this;\n  }\n\n  var _proto = KeyframeRule.prototype;\n\n  /**\n   * Generates a CSS string.\n   */\n  _proto.toString = function toString(options) {\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n    var opts = link ? _extends({}, options, {\n      allowEmpty: true\n    }) : options;\n    return toCss(this.key, this.style, opts);\n  };\n\n  return KeyframeRule;\n}(BaseStyleRule);\nvar pluginKeyframeRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    if (options.parent && options.parent.type === 'keyframes') {\n      return new KeyframeRule(key, style, options);\n    }\n\n    return null;\n  }\n};\n\nvar FontFaceRule =\n/*#__PURE__*/\nfunction () {\n  function FontFaceRule(key, style, options) {\n    this.type = 'font-face';\n    this.at = '@font-face';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = FontFaceRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.style)) {\n      var str = '';\n\n      for (var index = 0; index < this.style.length; index++) {\n        str += toCss(this.at, this.style[index]);\n        if (this.style[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return toCss(this.at, this.style, options);\n  };\n\n  return FontFaceRule;\n}();\nvar keyRegExp$2 = /@font-face/;\nvar pluginFontFaceRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return keyRegExp$2.test(key) ? new FontFaceRule(key, style, options) : null;\n  }\n};\n\nvar ViewportRule =\n/*#__PURE__*/\nfunction () {\n  function ViewportRule(key, style, options) {\n    this.type = 'viewport';\n    this.at = '@viewport';\n    this.key = void 0;\n    this.style = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.style = style;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n\n\n  var _proto = ViewportRule.prototype;\n\n  _proto.toString = function toString(options) {\n    return toCss(this.key, this.style, options);\n  };\n\n  return ViewportRule;\n}();\nvar pluginViewportRule = {\n  onCreateRule: function onCreateRule(key, style, options) {\n    return key === '@viewport' || key === '@-ms-viewport' ? new ViewportRule(key, style, options) : null;\n  }\n};\n\nvar SimpleRule =\n/*#__PURE__*/\nfunction () {\n  function SimpleRule(key, value, options) {\n    this.type = 'simple';\n    this.key = void 0;\n    this.value = void 0;\n    this.options = void 0;\n    this.isProcessed = false;\n    this.renderable = void 0;\n    this.key = key;\n    this.value = value;\n    this.options = options;\n  }\n  /**\n   * Generates a CSS string.\n   */\n  // eslint-disable-next-line no-unused-vars\n\n\n  var _proto = SimpleRule.prototype;\n\n  _proto.toString = function toString(options) {\n    if (Array.isArray(this.value)) {\n      var str = '';\n\n      for (var index = 0; index < this.value.length; index++) {\n        str += this.key + \" \" + this.value[index] + \";\";\n        if (this.value[index + 1]) str += '\\n';\n      }\n\n      return str;\n    }\n\n    return this.key + \" \" + this.value + \";\";\n  };\n\n  return SimpleRule;\n}();\nvar keysMap = {\n  '@charset': true,\n  '@import': true,\n  '@namespace': true\n};\nvar pluginSimpleRule = {\n  onCreateRule: function onCreateRule(key, value, options) {\n    return key in keysMap ? new SimpleRule(key, value, options) : null;\n  }\n};\n\nvar plugins = [pluginStyleRule, pluginConditionalRule, plugin, pluginKeyframeRule, pluginFontFaceRule, pluginViewportRule, pluginSimpleRule];\n\nvar defaultUpdateOptions = {\n  process: true\n};\nvar forceUpdateOptions = {\n  force: true,\n  process: true\n  /**\n   * Contains rules objects and allows adding/removing etc.\n   * Is used for e.g. by `StyleSheet` or `ConditionalRule`.\n   */\n\n};\n\nvar RuleList =\n/*#__PURE__*/\nfunction () {\n  // Rules registry for access by .get() method.\n  // It contains the same rule registered by name and by selector.\n  // Original styles object.\n  // Used to ensure correct rules order.\n  function RuleList(options) {\n    this.map = {};\n    this.raw = {};\n    this.index = [];\n    this.counter = 0;\n    this.options = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.options = options;\n    this.classes = options.classes;\n    this.keyframes = options.keyframes;\n  }\n  /**\n   * Create and register rule.\n   *\n   * Will not render after Style Sheet was rendered the first time.\n   */\n\n\n  var _proto = RuleList.prototype;\n\n  _proto.add = function add(name, decl, ruleOptions) {\n    var _this$options = this.options,\n        parent = _this$options.parent,\n        sheet = _this$options.sheet,\n        jss = _this$options.jss,\n        Renderer = _this$options.Renderer,\n        generateId = _this$options.generateId,\n        scoped = _this$options.scoped;\n\n    var options = _extends({\n      classes: this.classes,\n      parent: parent,\n      sheet: sheet,\n      jss: jss,\n      Renderer: Renderer,\n      generateId: generateId,\n      scoped: scoped,\n      name: name,\n      keyframes: this.keyframes,\n      selector: undefined\n    }, ruleOptions); // When user uses .createStyleSheet(), duplicate names are not possible, but\n    // `sheet.addRule()` opens the door for any duplicate rule name. When this happens\n    // we need to make the key unique within this RuleList instance scope.\n\n\n    var key = name;\n\n    if (name in this.raw) {\n      key = name + \"-d\" + this.counter++;\n    } // We need to save the original decl before creating the rule\n    // because cache plugin needs to use it as a key to return a cached rule.\n\n\n    this.raw[key] = decl;\n\n    if (key in this.classes) {\n      // E.g. rules inside of @media container\n      options.selector = \".\" + escape(this.classes[key]);\n    }\n\n    var rule = createRule(key, decl, options);\n    if (!rule) return null;\n    this.register(rule);\n    var index = options.index === undefined ? this.index.length : options.index;\n    this.index.splice(index, 0, rule);\n    return rule;\n  }\n  /**\n   * Get a rule.\n   */\n  ;\n\n  _proto.get = function get(name) {\n    return this.map[name];\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.remove = function remove(rule) {\n    this.unregister(rule);\n    delete this.raw[rule.key];\n    this.index.splice(this.index.indexOf(rule), 1);\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.index.indexOf(rule);\n  }\n  /**\n   * Run `onProcessRule()` plugins on every rule.\n   */\n  ;\n\n  _proto.process = function process() {\n    var plugins = this.options.jss.plugins; // We need to clone array because if we modify the index somewhere else during a loop\n    // we end up with very hard-to-track-down side effects.\n\n    this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n  }\n  /**\n   * Register a rule in `.map`, `.classes` and `.keyframes` maps.\n   */\n  ;\n\n  _proto.register = function register(rule) {\n    this.map[rule.key] = rule;\n\n    if (rule instanceof StyleRule) {\n      this.map[rule.selector] = rule;\n      if (rule.id) this.classes[rule.key] = rule.id;\n    } else if (rule instanceof KeyframesRule && this.keyframes) {\n      this.keyframes[rule.name] = rule.id;\n    }\n  }\n  /**\n   * Unregister a rule.\n   */\n  ;\n\n  _proto.unregister = function unregister(rule) {\n    delete this.map[rule.key];\n\n    if (rule instanceof StyleRule) {\n      delete this.map[rule.selector];\n      delete this.classes[rule.key];\n    } else if (rule instanceof KeyframesRule) {\n      delete this.keyframes[rule.name];\n    }\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var name;\n    var data;\n    var options;\n\n    if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'string') {\n      name = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index]\n\n      data = arguments.length <= 1 ? undefined : arguments[1]; // $FlowFixMe[invalid-tuple-index]\n\n      options = arguments.length <= 2 ? undefined : arguments[2];\n    } else {\n      data = arguments.length <= 0 ? undefined : arguments[0]; // $FlowFixMe[invalid-tuple-index]\n\n      options = arguments.length <= 1 ? undefined : arguments[1];\n      name = null;\n    }\n\n    if (name) {\n      this.updateOne(this.map[name], data, options);\n    } else {\n      for (var index = 0; index < this.index.length; index++) {\n        this.updateOne(this.index[index], data, options);\n      }\n    }\n  }\n  /**\n   * Execute plugins, update rule props.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    if (options === void 0) {\n      options = defaultUpdateOptions;\n    }\n\n    var _this$options2 = this.options,\n        plugins = _this$options2.jss.plugins,\n        sheet = _this$options2.sheet; // It is a rules container like for e.g. ConditionalRule.\n\n    if (rule.rules instanceof RuleList) {\n      rule.rules.update(data, options);\n      return;\n    }\n\n    var styleRule = rule;\n    var style = styleRule.style;\n    plugins.onUpdate(data, rule, sheet, options); // We rely on a new `style` ref in case it was mutated during onUpdate hook.\n\n    if (options.process && style && style !== styleRule.style) {\n      // We need to run the plugins in case new `style` relies on syntax plugins.\n      plugins.onProcessStyle(styleRule.style, styleRule, sheet); // Update and add props.\n\n      for (var prop in styleRule.style) {\n        var nextValue = styleRule.style[prop];\n        var prevValue = style[prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (nextValue !== prevValue) {\n          styleRule.prop(prop, nextValue, forceUpdateOptions);\n        }\n      } // Remove props.\n\n\n      for (var _prop in style) {\n        var _nextValue = styleRule.style[_prop];\n        var _prevValue = style[_prop]; // We need to use `force: true` because `rule.style` has been updated during onUpdate hook, so `rule.prop()` will not update the CSSOM rule.\n        // We do this comparison to avoid unneeded `rule.prop()` calls, since we have the old `style` object here.\n\n        if (_nextValue == null && _nextValue !== _prevValue) {\n          styleRule.prop(_prop, null, forceUpdateOptions);\n        }\n      }\n    }\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    var str = '';\n    var sheet = this.options.sheet;\n    var link = sheet ? sheet.options.link : false;\n\n    for (var index = 0; index < this.index.length; index++) {\n      var rule = this.index[index];\n      var css = rule.toString(options); // No need to render an empty rule.\n\n      if (!css && !link) continue;\n      if (str) str += '\\n';\n      str += css;\n    }\n\n    return str;\n  };\n\n  return RuleList;\n}();\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  function StyleSheet(styles, options) {\n    this.options = void 0;\n    this.deployed = void 0;\n    this.attached = void 0;\n    this.rules = void 0;\n    this.renderer = void 0;\n    this.classes = void 0;\n    this.keyframes = void 0;\n    this.queue = void 0;\n    this.attached = false;\n    this.deployed = false;\n    this.classes = {};\n    this.keyframes = {};\n    this.options = _extends({}, options, {\n      sheet: this,\n      parent: this,\n      classes: this.classes,\n      keyframes: this.keyframes\n    });\n\n    if (options.Renderer) {\n      this.renderer = new options.Renderer(this);\n    }\n\n    this.rules = new RuleList(this.options);\n\n    for (var name in styles) {\n      this.rules.add(name, styles[name]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Attach renderable to the render tree.\n   */\n\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.attach = function attach() {\n    if (this.attached) return this;\n    if (this.renderer) this.renderer.attach();\n    this.attached = true; // Order is important, because we can't use insertRule API if style element is not attached.\n\n    if (!this.deployed) this.deploy();\n    return this;\n  }\n  /**\n   * Remove renderable from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.attached) return this;\n    if (this.renderer) this.renderer.detach();\n    this.attached = false;\n    return this;\n  }\n  /**\n   * Add a rule to the current stylesheet.\n   * Will insert a rule also after the stylesheet has been rendered first time.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, decl, options) {\n    var queue = this.queue; // Plugins can create rules.\n    // In order to preserve the right order, we need to queue all `.addRule` calls,\n    // which happen after the first `rules.add()` call.\n\n    if (this.attached && !queue) this.queue = [];\n    var rule = this.rules.add(name, decl, options);\n    if (!rule) return null;\n    this.options.jss.plugins.onProcessRule(rule);\n\n    if (this.attached) {\n      if (!this.deployed) return rule; // Don't insert rule directly if there is no stringified version yet.\n      // It will be inserted all together when .attach is called.\n\n      if (queue) queue.push(rule);else {\n        this.insertRule(rule);\n\n        if (this.queue) {\n          this.queue.forEach(this.insertRule, this);\n          this.queue = undefined;\n        }\n      }\n      return rule;\n    } // We can't add rules to a detached style node.\n    // We will redeploy the sheet once user will attach it.\n\n\n    this.deployed = false;\n    return rule;\n  }\n  /**\n   * Insert rule into the StyleSheet\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule) {\n    if (this.renderer) {\n      this.renderer.insertRule(rule);\n    }\n  }\n  /**\n   * Create and add rules.\n   * Will render also after Style Sheet was rendered the first time.\n   */\n  ;\n\n  _proto.addRules = function addRules(styles, options) {\n    var added = [];\n\n    for (var name in styles) {\n      var rule = this.addRule(name, styles[name], options);\n      if (rule) added.push(rule);\n    }\n\n    return added;\n  }\n  /**\n   * Get a rule by name.\n   */\n  ;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Delete a rule by name.\n   * Returns `true`: if rule has been deleted from the DOM.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(name) {\n    var rule = typeof name === 'object' ? name : this.rules.get(name);\n\n    if (!rule || // Style sheet was created without link: true and attached, in this case we\n    // won't be able to remove the CSS rule from the DOM.\n    this.attached && !rule.renderable) {\n      return false;\n    }\n\n    this.rules.remove(rule);\n\n    if (this.attached && rule.renderable && this.renderer) {\n      return this.renderer.deleteRule(rule.renderable);\n    }\n\n    return true;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Deploy pure CSS string to a renderable.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    if (this.renderer) this.renderer.deploy();\n    this.deployed = true;\n    return this;\n  }\n  /**\n   * Update the function values with a new data.\n   */\n  ;\n\n  _proto.update = function update() {\n    var _this$rules;\n\n    (_this$rules = this.rules).update.apply(_this$rules, arguments);\n\n    return this;\n  }\n  /**\n   * Updates a single rule.\n   */\n  ;\n\n  _proto.updateOne = function updateOne(rule, data, options) {\n    this.rules.updateOne(rule, data, options);\n    return this;\n  }\n  /**\n   * Convert rules to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(options) {\n    return this.rules.toString(options);\n  };\n\n  return StyleSheet;\n}();\n\nvar PluginsRegistry =\n/*#__PURE__*/\nfunction () {\n  function PluginsRegistry() {\n    this.plugins = {\n      internal: [],\n      external: []\n    };\n    this.registry = void 0;\n  }\n\n  var _proto = PluginsRegistry.prototype;\n\n  /**\n   * Call `onCreateRule` hooks and return an object if returned by a hook.\n   */\n  _proto.onCreateRule = function onCreateRule(name, decl, options) {\n    for (var i = 0; i < this.registry.onCreateRule.length; i++) {\n      var rule = this.registry.onCreateRule[i](name, decl, options);\n      if (rule) return rule;\n    }\n\n    return null;\n  }\n  /**\n   * Call `onProcessRule` hooks.\n   */\n  ;\n\n  _proto.onProcessRule = function onProcessRule(rule) {\n    if (rule.isProcessed) return;\n    var sheet = rule.options.sheet;\n\n    for (var i = 0; i < this.registry.onProcessRule.length; i++) {\n      this.registry.onProcessRule[i](rule, sheet);\n    }\n\n    if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n    rule.isProcessed = true;\n  }\n  /**\n   * Call `onProcessStyle` hooks.\n   */\n  ;\n\n  _proto.onProcessStyle = function onProcessStyle(style, rule, sheet) {\n    for (var i = 0; i < this.registry.onProcessStyle.length; i++) {\n      // $FlowFixMe[prop-missing]\n      rule.style = this.registry.onProcessStyle[i](rule.style, rule, sheet);\n    }\n  }\n  /**\n   * Call `onProcessSheet` hooks.\n   */\n  ;\n\n  _proto.onProcessSheet = function onProcessSheet(sheet) {\n    for (var i = 0; i < this.registry.onProcessSheet.length; i++) {\n      this.registry.onProcessSheet[i](sheet);\n    }\n  }\n  /**\n   * Call `onUpdate` hooks.\n   */\n  ;\n\n  _proto.onUpdate = function onUpdate(data, rule, sheet, options) {\n    for (var i = 0; i < this.registry.onUpdate.length; i++) {\n      this.registry.onUpdate[i](data, rule, sheet, options);\n    }\n  }\n  /**\n   * Call `onChangeValue` hooks.\n   */\n  ;\n\n  _proto.onChangeValue = function onChangeValue(value, prop, rule) {\n    var processedValue = value;\n\n    for (var i = 0; i < this.registry.onChangeValue.length; i++) {\n      processedValue = this.registry.onChangeValue[i](processedValue, prop, rule);\n    }\n\n    return processedValue;\n  }\n  /**\n   * Register a plugin.\n   */\n  ;\n\n  _proto.use = function use(newPlugin, options) {\n    if (options === void 0) {\n      options = {\n        queue: 'external'\n      };\n    }\n\n    var plugins = this.plugins[options.queue]; // Avoids applying same plugin twice, at least based on ref.\n\n    if (plugins.indexOf(newPlugin) !== -1) {\n      return;\n    }\n\n    plugins.push(newPlugin);\n    this.registry = [].concat(this.plugins.external, this.plugins.internal).reduce(function (registry, plugin) {\n      for (var name in plugin) {\n        if (name in registry) {\n          registry[name].push(plugin[name]);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Unknown hook \\\"\" + name + \"\\\".\") : void 0;\n        }\n      }\n\n      return registry;\n    }, {\n      onCreateRule: [],\n      onProcessRule: [],\n      onProcessStyle: [],\n      onProcessSheet: [],\n      onChangeValue: [],\n      onUpdate: []\n    });\n  };\n\n  return PluginsRegistry;\n}();\n\n/**\n * Sheets registry to access them all at one place.\n */\nvar SheetsRegistry =\n/*#__PURE__*/\nfunction () {\n  function SheetsRegistry() {\n    this.registry = [];\n  }\n\n  var _proto = SheetsRegistry.prototype;\n\n  /**\n   * Register a Style Sheet.\n   */\n  _proto.add = function add(sheet) {\n    var registry = this.registry;\n    var index = sheet.options.index;\n    if (registry.indexOf(sheet) !== -1) return;\n\n    if (registry.length === 0 || index >= this.index) {\n      registry.push(sheet);\n      return;\n    } // Find a position.\n\n\n    for (var i = 0; i < registry.length; i++) {\n      if (registry[i].options.index > index) {\n        registry.splice(i, 0, sheet);\n        return;\n      }\n    }\n  }\n  /**\n   * Reset the registry.\n   */\n  ;\n\n  _proto.reset = function reset() {\n    this.registry = [];\n  }\n  /**\n   * Remove a Style Sheet.\n   */\n  ;\n\n  _proto.remove = function remove(sheet) {\n    var index = this.registry.indexOf(sheet);\n    this.registry.splice(index, 1);\n  }\n  /**\n   * Convert all attached sheets to a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString(_temp) {\n    var _ref = _temp === void 0 ? {} : _temp,\n        attached = _ref.attached,\n        options = _objectWithoutPropertiesLoose(_ref, [\"attached\"]);\n\n    var css = '';\n\n    for (var i = 0; i < this.registry.length; i++) {\n      var sheet = this.registry[i];\n\n      if (attached != null && sheet.attached !== attached) {\n        continue;\n      }\n\n      if (css) css += '\\n';\n      css += sheet.toString(options);\n    }\n\n    return css;\n  };\n\n  _createClass(SheetsRegistry, [{\n    key: \"index\",\n\n    /**\n     * Current highest index number.\n     */\n    get: function get() {\n      return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n    }\n  }]);\n\n  return SheetsRegistry;\n}();\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\n\nvar registry = new SheetsRegistry();\n\n/* eslint-disable */\n\n/**\n * Now that `globalThis` is available on most platforms\n * (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis#browser_compatibility)\n * we check for `globalThis` first. `globalThis` is necessary for jss\n * to run in Agoric's secure version of JavaScript (SES). Under SES,\n * `globalThis` exists, but `window`, `self`, and `Function('return\n * this')()` are all undefined for security reasons.\n *\n * https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n */\nvar globalThis$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' && window.Math === Math ? window : typeof self !== 'undefined' && self.Math === Math ? self : Function('return this')();\n\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (globalThis$1[ns] == null) globalThis$1[ns] = 0; // Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\n\nvar moduleId = globalThis$1[ns]++;\n\nvar maxRules = 1e10;\n\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\nvar createGenerateId = function createGenerateId(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var ruleCounter = 0;\n\n  var generateId = function generateId(rule, sheet) {\n    ruleCounter += 1;\n\n    if (ruleCounter > maxRules) {\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] You might have a memory leak. Rule counter is at \" + ruleCounter + \".\") : void 0;\n    }\n\n    var jssId = '';\n    var prefix = '';\n\n    if (sheet) {\n      if (sheet.options.classNamePrefix) {\n        prefix = sheet.options.classNamePrefix;\n      }\n\n      if (sheet.options.jss.id != null) {\n        jssId = String(sheet.options.jss.id);\n      }\n    }\n\n    if (options.minify) {\n      // Using \"c\" because a number can't be the first char in a class name.\n      return \"\" + (prefix || 'c') + moduleId + jssId + ruleCounter;\n    }\n\n    return prefix + rule.key + \"-\" + moduleId + (jssId ? \"-\" + jssId : '') + \"-\" + ruleCounter;\n  };\n\n  return generateId;\n};\n\n/**\n * Cache the value from the first time a function is called.\n */\nvar memoize = function memoize(fn) {\n  var value;\n  return function () {\n    if (!value) value = fn();\n    return value;\n  };\n};\n\n/**\n * Get a style property value.\n */\nvar getPropertyValue = function getPropertyValue(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      return cssRule.attributeStyleMap.get(prop);\n    }\n\n    return cssRule.style.getPropertyValue(prop);\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return '';\n  }\n};\n\n/**\n * Set a style property.\n */\nvar setProperty = function setProperty(cssRule, prop, value) {\n  try {\n    var cssValue = value;\n\n    if (Array.isArray(value)) {\n      cssValue = toCssValue(value, true);\n\n      if (value[value.length - 1] === '!important') {\n        cssRule.style.setProperty(prop, cssValue, 'important');\n        return true;\n      }\n    } // Support CSSTOM.\n\n\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.set(prop, cssValue);\n    } else {\n      cssRule.style.setProperty(prop, cssValue);\n    }\n  } catch (err) {\n    // IE may throw if property is unknown.\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Remove a style property.\n */\nvar removeProperty = function removeProperty(cssRule, prop) {\n  try {\n    // Support CSSTOM.\n    if (cssRule.attributeStyleMap) {\n      cssRule.attributeStyleMap.delete(prop);\n    } else {\n      cssRule.style.removeProperty(prop);\n    }\n  } catch (err) {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] DOMException \\\"\" + err.message + \"\\\" was thrown. Tried to remove property \\\"\" + prop + \"\\\".\") : void 0;\n  }\n};\n\n/**\n * Set the selector.\n */\nvar setSelector = function setSelector(cssRule, selectorText) {\n  cssRule.selectorText = selectorText; // Return false if setter was not successful.\n  // Currently works in chrome only.\n\n  return cssRule.selectorText === selectorText;\n};\n/**\n * Gets the `head` element upon the first call and caches it.\n * We assume it can't be null.\n */\n\n\nvar getHead = memoize(function () {\n  return document.querySelector('head');\n});\n/**\n * Find attached sheet with an index higher than the passed one.\n */\n\nfunction findHigherSheet(registry, options) {\n  for (var i = 0; i < registry.length; i++) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find attached sheet with the highest index.\n */\n\n\nfunction findHighestSheet(registry, options) {\n  for (var i = registry.length - 1; i >= 0; i--) {\n    var sheet = registry[i];\n\n    if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n      return sheet;\n    }\n  }\n\n  return null;\n}\n/**\n * Find a comment with \"jss\" inside.\n */\n\n\nfunction findCommentNode(text) {\n  var head = getHead();\n\n  for (var i = 0; i < head.childNodes.length; i++) {\n    var node = head.childNodes[i];\n\n    if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n      return node;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Find a node before which we can insert the sheet.\n */\nfunction findPrevNode(options) {\n  var registry$1 = registry.registry;\n\n  if (registry$1.length > 0) {\n    // Try to insert before the next higher sheet.\n    var sheet = findHigherSheet(registry$1, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element\n      };\n    } // Otherwise insert after the last attached.\n\n\n    sheet = findHighestSheet(registry$1, options);\n\n    if (sheet && sheet.renderer) {\n      return {\n        parent: sheet.renderer.element.parentNode,\n        node: sheet.renderer.element.nextSibling\n      };\n    }\n  } // Try to find a comment placeholder if registry is empty.\n\n\n  var insertionPoint = options.insertionPoint;\n\n  if (insertionPoint && typeof insertionPoint === 'string') {\n    var comment = findCommentNode(insertionPoint);\n\n    if (comment) {\n      return {\n        parent: comment.parentNode,\n        node: comment.nextSibling\n      };\n    } // If user specifies an insertion point and it can't be found in the document -\n    // bad specificity issues may appear.\n\n\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Insertion point \\\"\" + insertionPoint + \"\\\" not found.\") : void 0;\n  }\n\n  return false;\n}\n/**\n * Insert style element into the DOM.\n */\n\n\nfunction insertStyle(style, options) {\n  var insertionPoint = options.insertionPoint;\n  var nextNode = findPrevNode(options);\n\n  if (nextNode !== false && nextNode.parent) {\n    nextNode.parent.insertBefore(style, nextNode.node);\n    return;\n  } // Works with iframes and any node types.\n\n\n  if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n    // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n    var insertionPointElement = insertionPoint;\n    var parentNode = insertionPointElement.parentNode;\n    if (parentNode) parentNode.insertBefore(style, insertionPointElement.nextSibling);else process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Insertion point is not in the DOM.') : void 0;\n    return;\n  }\n\n  getHead().appendChild(style);\n}\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\n\n\nvar getNonce = memoize(function () {\n  var node = document.querySelector('meta[property=\"csp-nonce\"]');\n  return node ? node.getAttribute('content') : null;\n});\n\nvar _insertRule = function insertRule(container, rule, index) {\n  try {\n    if ('insertRule' in container) {\n      var c = container;\n      c.insertRule(rule, index);\n    } // Keyframes rule.\n    else if ('appendRule' in container) {\n        var _c = container;\n\n        _c.appendRule(rule);\n      }\n  } catch (err) {\n    process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] \" + err.message) : void 0;\n    return false;\n  }\n\n  return container.cssRules[index];\n};\n\nvar getValidRuleInsertionIndex = function getValidRuleInsertionIndex(container, index) {\n  var maxIndex = container.cssRules.length; // In case previous insertion fails, passed index might be wrong\n\n  if (index === undefined || index > maxIndex) {\n    // eslint-disable-next-line no-param-reassign\n    return maxIndex;\n  }\n\n  return index;\n};\n\nvar createStyle = function createStyle() {\n  var el = document.createElement('style'); // Without it, IE will have a broken source order specificity if we\n  // insert rules after we insert the style tag.\n  // It seems to kick-off the source order specificity algorithm.\n\n  el.textContent = '\\n';\n  return el;\n};\n\nvar DomRenderer =\n/*#__PURE__*/\nfunction () {\n  // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696\n  // Will be empty if link: true option is not set, because\n  // it is only for use together with insertRule API.\n  function DomRenderer(sheet) {\n    this.getPropertyValue = getPropertyValue;\n    this.setProperty = setProperty;\n    this.removeProperty = removeProperty;\n    this.setSelector = setSelector;\n    this.element = void 0;\n    this.sheet = void 0;\n    this.hasInsertedRules = false;\n    this.cssRules = [];\n    // There is no sheet when the renderer is used from a standalone StyleRule.\n    if (sheet) registry.add(sheet);\n    this.sheet = sheet;\n\n    var _ref = this.sheet ? this.sheet.options : {},\n        media = _ref.media,\n        meta = _ref.meta,\n        element = _ref.element;\n\n    this.element = element || createStyle();\n    this.element.setAttribute('data-jss', '');\n    if (media) this.element.setAttribute('media', media);\n    if (meta) this.element.setAttribute('data-meta', meta);\n    var nonce = getNonce();\n    if (nonce) this.element.setAttribute('nonce', nonce);\n  }\n  /**\n   * Insert style element into render tree.\n   */\n\n\n  var _proto = DomRenderer.prototype;\n\n  _proto.attach = function attach() {\n    // In the case the element node is external and it is already in the DOM.\n    if (this.element.parentNode || !this.sheet) return;\n    insertStyle(this.element, this.sheet.options); // When rules are inserted using `insertRule` API, after `sheet.detach().attach()`\n    // most browsers create a new CSSStyleSheet, except of all IEs.\n\n    var deployed = Boolean(this.sheet && this.sheet.deployed);\n\n    if (this.hasInsertedRules && deployed) {\n      this.hasInsertedRules = false;\n      this.deploy();\n    }\n  }\n  /**\n   * Remove style element from render tree.\n   */\n  ;\n\n  _proto.detach = function detach() {\n    if (!this.sheet) return;\n    var parentNode = this.element.parentNode;\n    if (parentNode) parentNode.removeChild(this.element); // In the most browsers, rules inserted using insertRule() API will be lost when style element is removed.\n    // Though IE will keep them and we need a consistent behavior.\n\n    if (this.sheet.options.link) {\n      this.cssRules = [];\n      this.element.textContent = '\\n';\n    }\n  }\n  /**\n   * Inject CSS string into element.\n   */\n  ;\n\n  _proto.deploy = function deploy() {\n    var sheet = this.sheet;\n    if (!sheet) return;\n\n    if (sheet.options.link) {\n      this.insertRules(sheet.rules);\n      return;\n    }\n\n    this.element.textContent = \"\\n\" + sheet.toString() + \"\\n\";\n  }\n  /**\n   * Insert RuleList into an element.\n   */\n  ;\n\n  _proto.insertRules = function insertRules(rules, nativeParent) {\n    for (var i = 0; i < rules.index.length; i++) {\n      this.insertRule(rules.index[i], i, nativeParent);\n    }\n  }\n  /**\n   * Insert a rule into element.\n   */\n  ;\n\n  _proto.insertRule = function insertRule(rule, index, nativeParent) {\n    if (nativeParent === void 0) {\n      nativeParent = this.element.sheet;\n    }\n\n    if (rule.rules) {\n      var parent = rule;\n      var latestNativeParent = nativeParent;\n\n      if (rule.type === 'conditional' || rule.type === 'keyframes') {\n        var _insertionIndex = getValidRuleInsertionIndex(nativeParent, index); // We need to render the container without children first.\n\n\n        latestNativeParent = _insertRule(nativeParent, parent.toString({\n          children: false\n        }), _insertionIndex);\n\n        if (latestNativeParent === false) {\n          return false;\n        }\n\n        this.refCssRule(rule, _insertionIndex, latestNativeParent);\n      }\n\n      this.insertRules(parent.rules, latestNativeParent);\n      return latestNativeParent;\n    }\n\n    var ruleStr = rule.toString();\n    if (!ruleStr) return false;\n    var insertionIndex = getValidRuleInsertionIndex(nativeParent, index);\n\n    var nativeRule = _insertRule(nativeParent, ruleStr, insertionIndex);\n\n    if (nativeRule === false) {\n      return false;\n    }\n\n    this.hasInsertedRules = true;\n    this.refCssRule(rule, insertionIndex, nativeRule);\n    return nativeRule;\n  };\n\n  _proto.refCssRule = function refCssRule(rule, index, cssRule) {\n    rule.renderable = cssRule; // We only want to reference the top level rules, deleteRule API doesn't support removing nested rules\n    // like rules inside media queries or keyframes\n\n    if (rule.options.parent instanceof StyleSheet) {\n      this.cssRules[index] = cssRule;\n    }\n  }\n  /**\n   * Delete a rule.\n   */\n  ;\n\n  _proto.deleteRule = function deleteRule(cssRule) {\n    var sheet = this.element.sheet;\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    sheet.deleteRule(index);\n    this.cssRules.splice(index, 1);\n    return true;\n  }\n  /**\n   * Get index of a CSS Rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(cssRule) {\n    return this.cssRules.indexOf(cssRule);\n  }\n  /**\n   * Generate a new CSS rule and replace the existing one.\n   *\n   * Only used for some old browsers because they can't set a selector.\n   */\n  ;\n\n  _proto.replaceRule = function replaceRule(cssRule, rule) {\n    var index = this.indexOf(cssRule);\n    if (index === -1) return false;\n    this.element.sheet.deleteRule(index);\n    this.cssRules.splice(index, 1);\n    return this.insertRule(rule, index);\n  }\n  /**\n   * Get all rules elements.\n   */\n  ;\n\n  _proto.getRules = function getRules() {\n    return this.element.sheet.cssRules;\n  };\n\n  return DomRenderer;\n}();\n\nvar instanceCounter = 0;\n\nvar Jss =\n/*#__PURE__*/\nfunction () {\n  function Jss(options) {\n    this.id = instanceCounter++;\n    this.version = \"10.7.1\";\n    this.plugins = new PluginsRegistry();\n    this.options = {\n      id: {\n        minify: false\n      },\n      createGenerateId: createGenerateId,\n      Renderer: isInBrowser ? DomRenderer : null,\n      plugins: []\n    };\n    this.generateId = createGenerateId({\n      minify: false\n    });\n\n    for (var i = 0; i < plugins.length; i++) {\n      this.plugins.use(plugins[i], {\n        queue: 'internal'\n      });\n    }\n\n    this.setup(options);\n  }\n  /**\n   * Prepares various options, applies plugins.\n   * Should not be used twice on the same instance, because there is no plugins\n   * deduplication logic.\n   */\n\n\n  var _proto = Jss.prototype;\n\n  _proto.setup = function setup(options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    if (options.createGenerateId) {\n      this.options.createGenerateId = options.createGenerateId;\n    }\n\n    if (options.id) {\n      this.options.id = _extends({}, this.options.id, options.id);\n    }\n\n    if (options.createGenerateId || options.id) {\n      this.generateId = this.options.createGenerateId(this.options.id);\n    }\n\n    if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n\n    if ('Renderer' in options) {\n      this.options.Renderer = options.Renderer;\n    } // eslint-disable-next-line prefer-spread\n\n\n    if (options.plugins) this.use.apply(this, options.plugins);\n    return this;\n  }\n  /**\n   * Create a Style Sheet.\n   */\n  ;\n\n  _proto.createStyleSheet = function createStyleSheet(styles, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        index = _options.index;\n\n    if (typeof index !== 'number') {\n      index = registry.index === 0 ? 0 : registry.index + 1;\n    }\n\n    var sheet = new StyleSheet(styles, _extends({}, options, {\n      jss: this,\n      generateId: options.generateId || this.generateId,\n      insertionPoint: this.options.insertionPoint,\n      Renderer: this.options.Renderer,\n      index: index\n    }));\n    this.plugins.onProcessSheet(sheet);\n    return sheet;\n  }\n  /**\n   * Detach the Style Sheet and remove it from the registry.\n   */\n  ;\n\n  _proto.removeStyleSheet = function removeStyleSheet(sheet) {\n    sheet.detach();\n    registry.remove(sheet);\n    return this;\n  }\n  /**\n   * Create a rule without a Style Sheet.\n   * [Deprecated] will be removed in the next major version.\n   */\n  ;\n\n  _proto.createRule = function createRule$1(name, style, options) {\n    if (style === void 0) {\n      style = {};\n    }\n\n    if (options === void 0) {\n      options = {};\n    }\n\n    // Enable rule without name for inline styles.\n    if (typeof name === 'object') {\n      // $FlowFixMe[incompatible-call]\n      return this.createRule(undefined, name, style);\n    } // $FlowFixMe[incompatible-type]\n\n\n    var ruleOptions = _extends({}, options, {\n      name: name,\n      jss: this,\n      Renderer: this.options.Renderer\n    });\n\n    if (!ruleOptions.generateId) ruleOptions.generateId = this.generateId;\n    if (!ruleOptions.classes) ruleOptions.classes = {};\n    if (!ruleOptions.keyframes) ruleOptions.keyframes = {};\n\n    var rule = createRule(name, style, ruleOptions);\n\n    if (rule) this.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Register plugin. Passed function will be invoked with a rule instance.\n   */\n  ;\n\n  _proto.use = function use() {\n    var _this = this;\n\n    for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n      plugins[_key] = arguments[_key];\n    }\n\n    plugins.forEach(function (plugin) {\n      _this.plugins.use(plugin);\n    });\n    return this;\n  };\n\n  return Jss;\n}();\n\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n  var to = null;\n\n  for (var key in styles) {\n    var value = styles[key];\n    var type = typeof value;\n\n    if (type === 'function') {\n      if (!to) to = {};\n      to[key] = value;\n    } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n      var extracted = getDynamicStyles(value);\n\n      if (extracted) {\n        if (!to) to = {};\n        to[key] = extracted;\n      }\n    }\n  }\n\n  return to;\n}\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n */\nvar SheetsManager =\n/*#__PURE__*/\nfunction () {\n  function SheetsManager() {\n    this.length = 0;\n    this.sheets = new WeakMap();\n  }\n\n  var _proto = SheetsManager.prototype;\n\n  _proto.get = function get(key) {\n    var entry = this.sheets.get(key);\n    return entry && entry.sheet;\n  };\n\n  _proto.add = function add(key, sheet) {\n    if (this.sheets.has(key)) return;\n    this.length++;\n    this.sheets.set(key, {\n      sheet: sheet,\n      refs: 0\n    });\n  };\n\n  _proto.manage = function manage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs === 0) {\n        entry.sheet.attach();\n      }\n\n      entry.refs++;\n      return entry.sheet;\n    }\n\n    warning(false, \"[JSS] SheetsManager: can't find sheet to manage\");\n    return undefined;\n  };\n\n  _proto.unmanage = function unmanage(key) {\n    var entry = this.sheets.get(key);\n\n    if (entry) {\n      if (entry.refs > 0) {\n        entry.refs--;\n        if (entry.refs === 0) entry.sheet.detach();\n      }\n    } else {\n      warning(false, \"SheetsManager: can't find sheet to unmanage\");\n    }\n  };\n\n  _createClass(SheetsManager, [{\n    key: \"size\",\n    get: function get() {\n      return this.length;\n    }\n  }]);\n\n  return SheetsManager;\n}();\n\n/**\n * A better abstraction over CSS.\n *\n * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present\n * @website https://github.com/cssinjs/jss\n * @license MIT\n */\n\n/**\n * Export a constant indicating if this browser has CSSTOM support.\n * https://developers.google.com/web/updates/2018/03/cssom\n */\nvar hasCSSTOMSupport = typeof CSS === 'object' && CSS != null && 'number' in CSS;\n/**\n * Creates a new instance of Jss.\n */\n\nvar create = function create(options) {\n  return new Jss(options);\n};\n/**\n * A global Jss instance.\n */\n\nvar jss = create();\n\nexport default jss;\nexport { RuleList, SheetsManager, SheetsRegistry, create, createGenerateId, createRule, getDynamicStyles, hasCSSTOMSupport, registry as sheets, toCssValue };\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { getDisplayName } from '@material-ui/utils';\nexport default function mergeClasses() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var baseClasses = options.baseClasses,\n      newClasses = options.newClasses,\n      Component = options.Component;\n\n  if (!newClasses) {\n    return baseClasses;\n  }\n\n  var nextClasses = _extends({}, baseClasses);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof newClasses === 'string') {\n      console.error([\"Material-UI: The value `\".concat(newClasses, \"` \") + \"provided to the classes prop of \".concat(getDisplayName(Component), \" is incorrect.\"), 'You might want to use the className prop instead.'].join('\\n'));\n      return baseClasses;\n    }\n  }\n\n  Object.keys(newClasses).forEach(function (key) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!baseClasses[key] && newClasses[key]) {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not implemented in \".concat(getDisplayName(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n'));\n      }\n\n      if (newClasses[key] && typeof newClasses[key] !== 'string') {\n        console.error([\"Material-UI: The key `\".concat(key, \"` \") + \"provided to the classes prop is not valid for \".concat(getDisplayName(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n'));\n      }\n    }\n\n    if (newClasses[key]) {\n      nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n    }\n  });\n  return nextClasses;\n}","// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n  set: function set(cache, key1, key2, value) {\n    var subCache = cache.get(key1);\n\n    if (!subCache) {\n      subCache = new Map();\n      cache.set(key1, subCache);\n    }\n\n    subCache.set(key2, value);\n  },\n  get: function get(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    return subCache ? subCache.get(key2) : undefined;\n  },\n  delete: function _delete(cache, key1, key2) {\n    var subCache = cache.get(key1);\n    subCache.delete(key2);\n  }\n};\nexport default multiKeyStore;","import nested from '../ThemeProvider/nested';\n/**\n * This is the list of the style rule name we use as drop in replacement for the built-in\n * pseudo classes (:checked, :disabled, :focused, etc.).\n *\n * Why do they exist in the first place?\n * These classes are used at a specificity of 2.\n * It allows them to override previously definied styles as well as\n * being untouched by simple user overrides.\n */\n\nvar pseudoClasses = ['checked', 'disabled', 'error', 'focused', 'focusVisible', 'required', 'expanded', 'selected']; // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\nexport default function createGenerateClassName() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _options$disableGloba = options.disableGlobal,\n      disableGlobal = _options$disableGloba === void 0 ? false : _options$disableGloba,\n      _options$productionPr = options.productionPrefix,\n      productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n      _options$seed = options.seed,\n      seed = _options$seed === void 0 ? '' : _options$seed;\n  var seedPrefix = seed === '' ? '' : \"\".concat(seed, \"-\");\n  var ruleCounter = 0;\n\n  var getNextCounterId = function getNextCounterId() {\n    ruleCounter += 1;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (ruleCounter >= 1e10) {\n        console.warn(['Material-UI: You might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join(''));\n      }\n    }\n\n    return ruleCounter;\n  };\n\n  return function (rule, styleSheet) {\n    var name = styleSheet.options.name; // Is a global static MUI style?\n\n    if (name && name.indexOf('Mui') === 0 && !styleSheet.options.link && !disableGlobal) {\n      // We can use a shorthand class name, we never use the keys to style the components.\n      if (pseudoClasses.indexOf(rule.key) !== -1) {\n        return \"Mui-\".concat(rule.key);\n      }\n\n      var prefix = \"\".concat(seedPrefix).concat(name, \"-\").concat(rule.key);\n\n      if (!styleSheet.options.theme[nested] || seed !== '') {\n        return prefix;\n      }\n\n      return \"\".concat(prefix, \"-\").concat(getNextCounterId());\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      return \"\".concat(seedPrefix).concat(productionPrefix).concat(getNextCounterId());\n    }\n\n    var suffix = \"\".concat(rule.key, \"-\").concat(getNextCounterId()); // Help with debuggability.\n\n    if (styleSheet.options.classNamePrefix) {\n      return \"\".concat(seedPrefix).concat(styleSheet.options.classNamePrefix, \"-\").concat(suffix);\n    }\n\n    return \"\".concat(seedPrefix).concat(suffix);\n  };\n}","import warning from 'tiny-warning';\nimport { createRule } from 'jss';\n\nvar now = Date.now();\nvar fnValuesNs = \"fnValues\" + now;\nvar fnRuleNs = \"fnStyle\" + ++now;\n\nvar functionPlugin = function functionPlugin() {\n  return {\n    onCreateRule: function onCreateRule(name, decl, options) {\n      if (typeof decl !== 'function') return null;\n      var rule = createRule(name, {}, options);\n      rule[fnRuleNs] = decl;\n      return rule;\n    },\n    onProcessStyle: function onProcessStyle(style, rule) {\n      // We need to extract function values from the declaration, so that we can keep core unaware of them.\n      // We need to do that only once.\n      // We don't need to extract functions on each style update, since this can happen only once.\n      // We don't support function values inside of function rules.\n      if (fnValuesNs in rule || fnRuleNs in rule) return style;\n      var fnValues = {};\n\n      for (var prop in style) {\n        var value = style[prop];\n        if (typeof value !== 'function') continue;\n        delete style[prop];\n        fnValues[prop] = value;\n      } // $FlowFixMe[prop-missing]\n\n\n      rule[fnValuesNs] = fnValues;\n      return style;\n    },\n    onUpdate: function onUpdate(data, rule, sheet, options) {\n      var styleRule = rule; // $FlowFixMe[prop-missing]\n\n      var fnRule = styleRule[fnRuleNs]; // If we have a style function, the entire rule is dynamic and style object\n      // will be returned from that function.\n\n      if (fnRule) {\n        // Empty object will remove all currently defined props\n        // in case function rule returns a falsy value.\n        styleRule.style = fnRule(data) || {};\n\n        if (process.env.NODE_ENV === 'development') {\n          for (var prop in styleRule.style) {\n            if (typeof styleRule.style[prop] === 'function') {\n              process.env.NODE_ENV !== \"production\" ? warning(false, '[JSS] Function values inside function rules are not supported.') : void 0;\n              break;\n            }\n          }\n        }\n      } // $FlowFixMe[prop-missing]\n\n\n      var fnValues = styleRule[fnValuesNs]; // If we have a fn values map, it is a rule with function values.\n\n      if (fnValues) {\n        for (var _prop in fnValues) {\n          styleRule.prop(_prop, fnValues[_prop](data), options);\n        }\n      }\n    }\n  };\n};\n\nexport default functionPlugin;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { RuleList } from 'jss';\n\nvar at = '@global';\nvar atPrefix = '@global ';\n\nvar GlobalContainerRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalContainerRule(key, styles, options) {\n    this.type = 'global';\n    this.at = at;\n    this.rules = void 0;\n    this.options = void 0;\n    this.key = void 0;\n    this.isProcessed = false;\n    this.key = key;\n    this.options = options;\n    this.rules = new RuleList(_extends({}, options, {\n      parent: this\n    }));\n\n    for (var selector in styles) {\n      this.rules.add(selector, styles[selector]);\n    }\n\n    this.rules.process();\n  }\n  /**\n   * Get a rule.\n   */\n\n\n  var _proto = GlobalContainerRule.prototype;\n\n  _proto.getRule = function getRule(name) {\n    return this.rules.get(name);\n  }\n  /**\n   * Create and register rule, run plugins.\n   */\n  ;\n\n  _proto.addRule = function addRule(name, style, options) {\n    var rule = this.rules.add(name, style, options);\n    if (rule) this.options.jss.plugins.onProcessRule(rule);\n    return rule;\n  }\n  /**\n   * Get index of a rule.\n   */\n  ;\n\n  _proto.indexOf = function indexOf(rule) {\n    return this.rules.indexOf(rule);\n  }\n  /**\n   * Generates a CSS string.\n   */\n  ;\n\n  _proto.toString = function toString() {\n    return this.rules.toString();\n  };\n\n  return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule =\n/*#__PURE__*/\nfunction () {\n  function GlobalPrefixedRule(key, style, options) {\n    this.type = 'global';\n    this.at = at;\n    this.options = void 0;\n    this.rule = void 0;\n    this.isProcessed = false;\n    this.key = void 0;\n    this.key = key;\n    this.options = options;\n    var selector = key.substr(atPrefix.length);\n    this.rule = options.jss.createRule(selector, style, _extends({}, options, {\n      parent: this\n    }));\n  }\n\n  var _proto2 = GlobalPrefixedRule.prototype;\n\n  _proto2.toString = function toString(options) {\n    return this.rule ? this.rule.toString(options) : '';\n  };\n\n  return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n  var parts = selector.split(separatorRegExp);\n  var scoped = '';\n\n  for (var i = 0; i < parts.length; i++) {\n    scoped += scope + \" \" + parts[i].trim();\n    if (parts[i + 1]) scoped += ', ';\n  }\n\n  return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule, sheet) {\n  var options = rule.options,\n      style = rule.style;\n  var rules = style ? style[at] : null;\n  if (!rules) return;\n\n  for (var name in rules) {\n    sheet.addRule(name, rules[name], _extends({}, options, {\n      selector: addScope(name, rule.selector)\n    }));\n  }\n\n  delete style[at];\n}\n\nfunction handlePrefixedGlobalRule(rule, sheet) {\n  var options = rule.options,\n      style = rule.style;\n\n  for (var prop in style) {\n    if (prop[0] !== '@' || prop.substr(0, at.length) !== at) continue;\n    var selector = addScope(prop.substr(at.length), rule.selector);\n    sheet.addRule(selector, style[prop], _extends({}, options, {\n      selector: selector\n    }));\n    delete style[prop];\n  }\n}\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\n\nfunction jssGlobal() {\n  function onCreateRule(name, styles, options) {\n    if (!name) return null;\n\n    if (name === at) {\n      return new GlobalContainerRule(name, styles, options);\n    }\n\n    if (name[0] === '@' && name.substr(0, atPrefix.length) === atPrefix) {\n      return new GlobalPrefixedRule(name, styles, options);\n    }\n\n    var parent = options.parent;\n\n    if (parent) {\n      if (parent.type === 'global' || parent.options.parent && parent.options.parent.type === 'global') {\n        options.scoped = false;\n      }\n    }\n\n    if (options.scoped === false) {\n      options.selector = name;\n    }\n\n    return null;\n  }\n\n  function onProcessRule(rule, sheet) {\n    if (rule.type !== 'style' || !sheet) return;\n    handleNestedGlobalContainerRule(rule, sheet);\n    handlePrefixedGlobalRule(rule, sheet);\n  }\n\n  return {\n    onCreateRule: onCreateRule,\n    onProcessRule: onProcessRule\n  };\n}\n\nexport default jssGlobal;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport warning from 'tiny-warning';\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\n\nfunction jssNested() {\n  // Get a function to be used for $ref replacement.\n  function getReplaceRef(container, sheet) {\n    return function (match, key) {\n      var rule = container.getRule(key) || sheet && sheet.getRule(key);\n\n      if (rule) {\n        rule = rule;\n        return rule.selector;\n      }\n\n      process.env.NODE_ENV !== \"production\" ? warning(false, \"[JSS] Could not find the referenced rule \\\"\" + key + \"\\\" in \\\"\" + (container.options.meta || container.toString()) + \"\\\".\") : void 0;\n      return key;\n    };\n  }\n\n  function replaceParentRefs(nestedProp, parentProp) {\n    var parentSelectors = parentProp.split(separatorRegExp);\n    var nestedSelectors = nestedProp.split(separatorRegExp);\n    var result = '';\n\n    for (var i = 0; i < parentSelectors.length; i++) {\n      var parent = parentSelectors[i];\n\n      for (var j = 0; j < nestedSelectors.length; j++) {\n        var nested = nestedSelectors[j];\n        if (result) result += ', '; // Replace all & by the parent or prefix & with the parent.\n\n        result += nested.indexOf('&') !== -1 ? nested.replace(parentRegExp, parent) : parent + \" \" + nested;\n      }\n    }\n\n    return result;\n  }\n\n  function getOptions(rule, container, prevOptions) {\n    // Options has been already created, now we only increase index.\n    if (prevOptions) return _extends({}, prevOptions, {\n      index: prevOptions.index + 1 // $FlowFixMe[prop-missing]\n\n    });\n    var nestingLevel = rule.options.nestingLevel;\n    nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n    var options = _extends({}, rule.options, {\n      nestingLevel: nestingLevel,\n      index: container.indexOf(rule) + 1 // We don't need the parent name to be set options for chlid.\n\n    });\n\n    delete options.name;\n    return options;\n  }\n\n  function onProcessStyle(style, rule, sheet) {\n    if (rule.type !== 'style') return style;\n    var styleRule = rule;\n    var container = styleRule.options.parent;\n    var options;\n    var replaceRef;\n\n    for (var prop in style) {\n      var isNested = prop.indexOf('&') !== -1;\n      var isNestedConditional = prop[0] === '@';\n      if (!isNested && !isNestedConditional) continue;\n      options = getOptions(styleRule, container, options);\n\n      if (isNested) {\n        var selector = replaceParentRefs(prop, styleRule.selector); // Lazily create the ref replacer function just once for\n        // all nested rules within the sheet.\n\n        if (!replaceRef) replaceRef = getReplaceRef(container, sheet); // Replace all $refs.\n\n        selector = selector.replace(refRegExp, replaceRef);\n        container.addRule(selector, style[prop], _extends({}, options, {\n          selector: selector\n        }));\n      } else if (isNestedConditional) {\n        // Place conditional right after the parent rule to ensure right ordering.\n        container.addRule(prop, {}, options) // Flow expects more options but they aren't required\n        // And flow doesn't know this will always be a StyleRule which has the addRule method\n        // $FlowFixMe[incompatible-use]\n        // $FlowFixMe[prop-missing]\n        .addRule(styleRule.key, style[prop], {\n          selector: styleRule.selector\n        });\n      }\n\n      delete style[prop];\n    }\n\n    return style;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle\n  };\n}\n\nexport default jssNested;\n","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","import hyphenate from 'hyphenate-style-name';\n\n/**\n * Convert camel cased property names to dash separated.\n *\n * @param {Object} style\n * @return {Object}\n */\n\nfunction convertCase(style) {\n  var converted = {};\n\n  for (var prop in style) {\n    var key = prop.indexOf('--') === 0 ? prop : hyphenate(prop);\n    converted[key] = style[prop];\n  }\n\n  if (style.fallbacks) {\n    if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n  }\n\n  return converted;\n}\n/**\n * Allow camel cased property names by converting them back to dasherized.\n *\n * @param {Rule} rule\n */\n\n\nfunction camelCase() {\n  function onProcessStyle(style) {\n    if (Array.isArray(style)) {\n      // Handle rules like @font-face, which can have multiple styles in an array\n      for (var index = 0; index < style.length; index++) {\n        style[index] = convertCase(style[index]);\n      }\n\n      return style;\n    }\n\n    return convertCase(style);\n  }\n\n  function onChangeValue(value, prop, rule) {\n    if (prop.indexOf('--') === 0) {\n      return value;\n    }\n\n    var hyphenatedProp = hyphenate(prop); // There was no camel case in place\n\n    if (prop === hyphenatedProp) return value;\n    rule.prop(hyphenatedProp, value); // Core will ignore that property value we set the proper one above.\n\n    return null;\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default camelCase;\n","import { hasCSSTOMSupport } from 'jss';\n\nvar px = hasCSSTOMSupport && CSS ? CSS.px : 'px';\nvar ms = hasCSSTOMSupport && CSS ? CSS.ms : 'ms';\nvar percent = hasCSSTOMSupport && CSS ? CSS.percent : '%';\n/**\n * Generated jss-plugin-default-unit CSS property units\n *\n * @type object\n */\n\nvar defaultUnits = {\n  // Animation properties\n  'animation-delay': ms,\n  'animation-duration': ms,\n  // Background properties\n  'background-position': px,\n  'background-position-x': px,\n  'background-position-y': px,\n  'background-size': px,\n  // Border Properties\n  border: px,\n  'border-bottom': px,\n  'border-bottom-left-radius': px,\n  'border-bottom-right-radius': px,\n  'border-bottom-width': px,\n  'border-left': px,\n  'border-left-width': px,\n  'border-radius': px,\n  'border-right': px,\n  'border-right-width': px,\n  'border-top': px,\n  'border-top-left-radius': px,\n  'border-top-right-radius': px,\n  'border-top-width': px,\n  'border-width': px,\n  'border-block': px,\n  'border-block-end': px,\n  'border-block-end-width': px,\n  'border-block-start': px,\n  'border-block-start-width': px,\n  'border-block-width': px,\n  'border-inline': px,\n  'border-inline-end': px,\n  'border-inline-end-width': px,\n  'border-inline-start': px,\n  'border-inline-start-width': px,\n  'border-inline-width': px,\n  'border-start-start-radius': px,\n  'border-start-end-radius': px,\n  'border-end-start-radius': px,\n  'border-end-end-radius': px,\n  // Margin properties\n  margin: px,\n  'margin-bottom': px,\n  'margin-left': px,\n  'margin-right': px,\n  'margin-top': px,\n  'margin-block': px,\n  'margin-block-end': px,\n  'margin-block-start': px,\n  'margin-inline': px,\n  'margin-inline-end': px,\n  'margin-inline-start': px,\n  // Padding properties\n  padding: px,\n  'padding-bottom': px,\n  'padding-left': px,\n  'padding-right': px,\n  'padding-top': px,\n  'padding-block': px,\n  'padding-block-end': px,\n  'padding-block-start': px,\n  'padding-inline': px,\n  'padding-inline-end': px,\n  'padding-inline-start': px,\n  // Mask properties\n  'mask-position-x': px,\n  'mask-position-y': px,\n  'mask-size': px,\n  // Width and height properties\n  height: px,\n  width: px,\n  'min-height': px,\n  'max-height': px,\n  'min-width': px,\n  'max-width': px,\n  // Position properties\n  bottom: px,\n  left: px,\n  top: px,\n  right: px,\n  inset: px,\n  'inset-block': px,\n  'inset-block-end': px,\n  'inset-block-start': px,\n  'inset-inline': px,\n  'inset-inline-end': px,\n  'inset-inline-start': px,\n  // Shadow properties\n  'box-shadow': px,\n  'text-shadow': px,\n  // Column properties\n  'column-gap': px,\n  'column-rule': px,\n  'column-rule-width': px,\n  'column-width': px,\n  // Font and text properties\n  'font-size': px,\n  'font-size-delta': px,\n  'letter-spacing': px,\n  'text-decoration-thickness': px,\n  'text-indent': px,\n  'text-stroke': px,\n  'text-stroke-width': px,\n  'word-spacing': px,\n  // Motion properties\n  motion: px,\n  'motion-offset': px,\n  // Outline properties\n  outline: px,\n  'outline-offset': px,\n  'outline-width': px,\n  // Perspective properties\n  perspective: px,\n  'perspective-origin-x': percent,\n  'perspective-origin-y': percent,\n  // Transform properties\n  'transform-origin': percent,\n  'transform-origin-x': percent,\n  'transform-origin-y': percent,\n  'transform-origin-z': percent,\n  // Transition properties\n  'transition-delay': ms,\n  'transition-duration': ms,\n  // Alignment properties\n  'vertical-align': px,\n  'flex-basis': px,\n  // Some random properties\n  'shape-margin': px,\n  size: px,\n  gap: px,\n  // Grid properties\n  grid: px,\n  'grid-gap': px,\n  'row-gap': px,\n  'grid-row-gap': px,\n  'grid-column-gap': px,\n  'grid-template-rows': px,\n  'grid-template-columns': px,\n  'grid-auto-rows': px,\n  'grid-auto-columns': px,\n  // Not existing properties.\n  // Used to avoid issues with jss-plugin-expand integration.\n  'box-shadow-x': px,\n  'box-shadow-y': px,\n  'box-shadow-blur': px,\n  'box-shadow-spread': px,\n  'font-line-height': px,\n  'text-shadow-x': px,\n  'text-shadow-y': px,\n  'text-shadow-blur': px\n};\n\n/**\n * Clones the object and adds a camel cased property version.\n */\nfunction addCamelCasedVersion(obj) {\n  var regExp = /(-[a-z])/g;\n\n  var replace = function replace(str) {\n    return str[1].toUpperCase();\n  };\n\n  var newObj = {};\n\n  for (var _key in obj) {\n    newObj[_key] = obj[_key];\n    newObj[_key.replace(regExp, replace)] = obj[_key];\n  }\n\n  return newObj;\n}\n\nvar units = addCamelCasedVersion(defaultUnits);\n/**\n * Recursive deep style passing function\n */\n\nfunction iterate(prop, value, options) {\n  if (value == null) return value;\n\n  if (Array.isArray(value)) {\n    for (var i = 0; i < value.length; i++) {\n      value[i] = iterate(prop, value[i], options);\n    }\n  } else if (typeof value === 'object') {\n    if (prop === 'fallbacks') {\n      for (var innerProp in value) {\n        value[innerProp] = iterate(innerProp, value[innerProp], options);\n      }\n    } else {\n      for (var _innerProp in value) {\n        value[_innerProp] = iterate(prop + \"-\" + _innerProp, value[_innerProp], options);\n      }\n    } // eslint-disable-next-line no-restricted-globals\n\n  } else if (typeof value === 'number' && isNaN(value) === false) {\n    var unit = options[prop] || units[prop]; // Add the unit if available, except for the special case of 0px.\n\n    if (unit && !(value === 0 && unit === px)) {\n      return typeof unit === 'function' ? unit(value).toString() : \"\" + value + unit;\n    }\n\n    return value.toString();\n  }\n\n  return value;\n}\n/**\n * Add unit to numeric values.\n */\n\n\nfunction defaultUnit(options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var camelCasedOptions = addCamelCasedVersion(options);\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n\n    for (var prop in style) {\n      style[prop] = iterate(prop, style[prop], camelCasedOptions);\n    }\n\n    return style;\n  }\n\n  function onChangeValue(value, prop) {\n    return iterate(prop, value, camelCasedOptions);\n  }\n\n  return {\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default defaultUnit;\n","import isInBrowser from 'is-in-browser';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\n\n// Export javascript style and css style vendor prefixes.\nvar js = '';\nvar css = '';\nvar vendor = '';\nvar browser = '';\nvar isTouch = isInBrowser && 'ontouchstart' in document.documentElement; // We should not do anything if required serverside.\n\nif (isInBrowser) {\n  // Order matters. We need to check Webkit the last one because\n  // other vendors use to add Webkit prefixes to some properties\n  var jsCssMap = {\n    Moz: '-moz-',\n    ms: '-ms-',\n    O: '-o-',\n    Webkit: '-webkit-'\n  };\n\n  var _document$createEleme = document.createElement('p'),\n      style = _document$createEleme.style;\n\n  var testProp = 'Transform';\n\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      js = key;\n      css = jsCssMap[key];\n      break;\n    }\n  } // Correctly detect the Edge browser.\n\n\n  if (js === 'Webkit' && 'msHyphens' in style) {\n    js = 'ms';\n    css = jsCssMap.ms;\n    browser = 'edge';\n  } // Correctly detect the Safari browser.\n\n\n  if (js === 'Webkit' && '-apple-trailing-word' in style) {\n    vendor = 'apple';\n  }\n}\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String, vendor: String, browser: String}}\n * @api public\n */\n\n\nvar prefix = {\n  js: js,\n  css: css,\n  vendor: vendor,\n  browser: browser,\n  isTouch: isTouch\n};\n\n/**\n * Test if a keyframe at-rule should be prefixed or not\n *\n * @param {String} vendor prefix string for the current browser.\n * @return {String}\n * @api public\n */\n\nfunction supportedKeyframes(key) {\n  // Keyframes is already prefixed. e.g. key = '@-webkit-keyframes a'\n  if (key[1] === '-') return key; // No need to prefix IE/Edge. Older browsers will ignore unsupported rules.\n  // https://caniuse.com/#search=keyframes\n\n  if (prefix.js === 'ms') return key;\n  return \"@\" + prefix.css + \"keyframes\" + key.substr(10);\n}\n\n// https://caniuse.com/#search=appearance\n\nvar appearence = {\n  noPrefill: ['appearance'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'appearance') return false;\n    if (prefix.js === 'ms') return \"-webkit-\" + prop;\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=color-adjust\n\nvar colorAdjust = {\n  noPrefill: ['color-adjust'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'color-adjust') return false;\n    if (prefix.js === 'Webkit') return prefix.css + \"print-\" + prop;\n    return prop;\n  }\n};\n\nvar regExp = /[-\\s]+(.)?/g;\n/**\n * Replaces the letter with the capital letter\n *\n * @param {String} match\n * @param {String} c\n * @return {String}\n * @api private\n */\n\nfunction toUpper(match, c) {\n  return c ? c.toUpperCase() : '';\n}\n/**\n * Convert dash separated strings to camel-cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\n\nfunction camelize(str) {\n  return str.replace(regExp, toUpper);\n}\n\n/**\n * Convert dash separated strings to pascal cased.\n *\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nfunction pascalize(str) {\n  return camelize(\"-\" + str);\n}\n\n// but we can use a longhand property instead.\n// https://caniuse.com/#search=mask\n\nvar mask = {\n  noPrefill: ['mask'],\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^mask/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var longhand = 'mask-image';\n\n      if (camelize(longhand) in style) {\n        return prop;\n      }\n\n      if (prefix.js + pascalize(longhand) in style) {\n        return prefix.css + prop;\n      }\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=text-orientation\n\nvar textOrientation = {\n  noPrefill: ['text-orientation'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'text-orientation') return false;\n\n    if (prefix.vendor === 'apple' && !prefix.isTouch) {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=transform\n\nvar transform = {\n  noPrefill: ['transform'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transform') return false;\n\n    if (options.transform) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=transition\n\nvar transition = {\n  noPrefill: ['transition'],\n  supportedProperty: function supportedProperty(prop, style, options) {\n    if (prop !== 'transition') return false;\n\n    if (options.transition) {\n      return prop;\n    }\n\n    return prefix.css + prop;\n  }\n};\n\n// https://caniuse.com/#search=writing-mode\n\nvar writingMode = {\n  noPrefill: ['writing-mode'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'writing-mode') return false;\n\n    if (prefix.js === 'Webkit' || prefix.js === 'ms' && prefix.browser !== 'edge') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=user-select\n\nvar userSelect = {\n  noPrefill: ['user-select'],\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'user-select') return false;\n\n    if (prefix.js === 'Moz' || prefix.js === 'ms' || prefix.vendor === 'apple') {\n      return prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=multicolumn\n// https://github.com/postcss/autoprefixer/issues/491\n// https://github.com/postcss/autoprefixer/issues/177\n\nvar breakPropsOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^break-/.test(prop)) return false;\n\n    if (prefix.js === 'Webkit') {\n      var jsProp = \"WebkitColumn\" + pascalize(prop);\n      return jsProp in style ? prefix.css + \"column-\" + prop : false;\n    }\n\n    if (prefix.js === 'Moz') {\n      var _jsProp = \"page\" + pascalize(prop);\n\n      return _jsProp in style ? \"page-\" + prop : false;\n    }\n\n    return false;\n  }\n};\n\n// See https://github.com/postcss/autoprefixer/issues/324.\n\nvar inlineLogicalOld = {\n  supportedProperty: function supportedProperty(prop, style) {\n    if (!/^(border|margin|padding)-inline/.test(prop)) return false;\n    if (prefix.js === 'Moz') return prop;\n    var newProp = prop.replace('-inline', '');\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\n// Camelization is required because we can't test using.\n// CSS syntax for e.g. in FF.\n\nvar unprefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    return camelize(prop) in style ? prop : false;\n  }\n};\n\nvar prefixed = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var pascalized = pascalize(prop); // Return custom CSS variable without prefixing.\n\n    if (prop[0] === '-') return prop; // Return already prefixed value without prefixing.\n\n    if (prop[0] === '-' && prop[1] === '-') return prop;\n    if (prefix.js + pascalized in style) return prefix.css + prop; // Try webkit fallback.\n\n    if (prefix.js !== 'Webkit' && \"Webkit\" + pascalized in style) return \"-webkit-\" + prop;\n    return false;\n  }\n};\n\n// https://caniuse.com/#search=scroll-snap\n\nvar scrollSnap = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop.substring(0, 11) !== 'scroll-snap') return false;\n\n    if (prefix.js === 'ms') {\n      return \"\" + prefix.css + prop;\n    }\n\n    return prop;\n  }\n};\n\n// https://caniuse.com/#search=overscroll-behavior\n\nvar overscrollBehavior = {\n  supportedProperty: function supportedProperty(prop) {\n    if (prop !== 'overscroll-behavior') return false;\n\n    if (prefix.js === 'ms') {\n      return prefix.css + \"scroll-chaining\";\n    }\n\n    return prop;\n  }\n};\n\nvar propMap = {\n  'flex-grow': 'flex-positive',\n  'flex-shrink': 'flex-negative',\n  'flex-basis': 'flex-preferred-size',\n  'justify-content': 'flex-pack',\n  order: 'flex-order',\n  'align-items': 'flex-align',\n  'align-content': 'flex-line-pack' // 'align-self' is handled by 'align-self' plugin.\n\n}; // Support old flex spec from 2012.\n\nvar flex2012 = {\n  supportedProperty: function supportedProperty(prop, style) {\n    var newProp = propMap[prop];\n    if (!newProp) return false;\n    return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n  }\n};\n\nvar propMap$1 = {\n  flex: 'box-flex',\n  'flex-grow': 'box-flex',\n  'flex-direction': ['box-orient', 'box-direction'],\n  order: 'box-ordinal-group',\n  'align-items': 'box-align',\n  'flex-flow': ['box-orient', 'box-direction'],\n  'justify-content': 'box-pack'\n};\nvar propKeys = Object.keys(propMap$1);\n\nvar prefixCss = function prefixCss(p) {\n  return prefix.css + p;\n}; // Support old flex spec from 2009.\n\n\nvar flex2009 = {\n  supportedProperty: function supportedProperty(prop, style, _ref) {\n    var multiple = _ref.multiple;\n\n    if (propKeys.indexOf(prop) > -1) {\n      var newProp = propMap$1[prop];\n\n      if (!Array.isArray(newProp)) {\n        return prefix.js + pascalize(newProp) in style ? prefix.css + newProp : false;\n      }\n\n      if (!multiple) return false;\n\n      for (var i = 0; i < newProp.length; i++) {\n        if (!(prefix.js + pascalize(newProp[0]) in style)) {\n          return false;\n        }\n      }\n\n      return newProp.map(prefixCss);\n    }\n\n    return false;\n  }\n};\n\n// plugins = [\n//   ...plugins,\n//    breakPropsOld,\n//    inlineLogicalOld,\n//    unprefixed,\n//    prefixed,\n//    scrollSnap,\n//    flex2012,\n//    flex2009\n// ]\n// Plugins without 'noPrefill' value, going last.\n// 'flex-*' plugins should be at the bottom.\n// 'flex2009' going after 'flex2012'.\n// 'prefixed' going after 'unprefixed'\n\nvar plugins = [appearence, colorAdjust, mask, textOrientation, transform, transition, writingMode, userSelect, breakPropsOld, inlineLogicalOld, unprefixed, prefixed, scrollSnap, overscrollBehavior, flex2012, flex2009];\nvar propertyDetectors = plugins.filter(function (p) {\n  return p.supportedProperty;\n}).map(function (p) {\n  return p.supportedProperty;\n});\nvar noPrefill = plugins.filter(function (p) {\n  return p.noPrefill;\n}).reduce(function (a, p) {\n  a.push.apply(a, _toConsumableArray(p.noPrefill));\n  return a;\n}, []);\n\nvar el;\nvar cache = {};\n\nif (isInBrowser) {\n  el = document.createElement('p'); // We test every property on vendor prefix requirement.\n  // Once tested, result is cached. It gives us up to 70% perf boost.\n  // http://jsperf.com/element-style-object-access-vs-plain-object\n  //\n  // Prefill cache with known css properties to reduce amount of\n  // properties we need to feature test at runtime.\n  // http://davidwalsh.name/vendor-prefix\n\n  var computed = window.getComputedStyle(document.documentElement, '');\n\n  for (var key$1 in computed) {\n    // eslint-disable-next-line no-restricted-globals\n    if (!isNaN(key$1)) cache[computed[key$1]] = computed[key$1];\n  } // Properties that cannot be correctly detected using the\n  // cache prefill method.\n\n\n  noPrefill.forEach(function (x) {\n    return delete cache[x];\n  });\n}\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `false` if not supported.\n *\n * @param {String} prop dash separated\n * @param {Object} [options]\n * @return {String|Boolean}\n * @api public\n */\n\n\nfunction supportedProperty(prop, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  // For server-side rendering.\n  if (!el) return prop; // Remove cache for benchmark tests or return property from the cache.\n\n  if (process.env.NODE_ENV !== 'benchmark' && cache[prop] != null) {\n    return cache[prop];\n  } // Check if 'transition' or 'transform' natively supported in browser.\n\n\n  if (prop === 'transition' || prop === 'transform') {\n    options[prop] = prop in el.style;\n  } // Find a plugin for current prefix property.\n\n\n  for (var i = 0; i < propertyDetectors.length; i++) {\n    cache[prop] = propertyDetectors[i](prop, el.style, options); // Break loop, if value found.\n\n    if (cache[prop]) break;\n  } // Reset styles for current property.\n  // Firefox can even throw an error for invalid properties, e.g., \"0\".\n\n\n  try {\n    el.style[prop] = '';\n  } catch (err) {\n    return false;\n  }\n\n  return cache[prop];\n}\n\nvar cache$1 = {};\nvar transitionProperties = {\n  transition: 1,\n  'transition-property': 1,\n  '-webkit-transition': 1,\n  '-webkit-transition-property': 1\n};\nvar transPropsRegExp = /(^\\s*[\\w-]+)|, (\\s*[\\w-]+)(?![^()]*\\))/g;\nvar el$1;\n/**\n * Returns prefixed value transition/transform if needed.\n *\n * @param {String} match\n * @param {String} p1\n * @param {String} p2\n * @return {String}\n * @api private\n */\n\nfunction prefixTransitionCallback(match, p1, p2) {\n  if (p1 === 'var') return 'var';\n  if (p1 === 'all') return 'all';\n  if (p2 === 'all') return ', all';\n  var prefixedValue = p1 ? supportedProperty(p1) : \", \" + supportedProperty(p2);\n  if (!prefixedValue) return p1 || p2;\n  return prefixedValue;\n}\n\nif (isInBrowser) el$1 = document.createElement('p');\n/**\n * Returns prefixed value if needed. Returns `false` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\n\nfunction supportedValue(property, value) {\n  // For server-side rendering.\n  var prefixedValue = value;\n  if (!el$1 || property === 'content') return value; // It is a string or a number as a string like '1'.\n  // We want only prefixable values here.\n  // eslint-disable-next-line no-restricted-globals\n\n  if (typeof prefixedValue !== 'string' || !isNaN(parseInt(prefixedValue, 10))) {\n    return prefixedValue;\n  } // Create cache key for current value.\n\n\n  var cacheKey = property + prefixedValue; // Remove cache for benchmark tests or return value from cache.\n\n  if (process.env.NODE_ENV !== 'benchmark' && cache$1[cacheKey] != null) {\n    return cache$1[cacheKey];\n  } // IE can even throw an error in some cases, for e.g. style.content = 'bar'.\n\n\n  try {\n    // Test value as it is.\n    el$1.style[property] = prefixedValue;\n  } catch (err) {\n    // Return false if value not supported.\n    cache$1[cacheKey] = false;\n    return false;\n  } // If 'transition' or 'transition-property' property.\n\n\n  if (transitionProperties[property]) {\n    prefixedValue = prefixedValue.replace(transPropsRegExp, prefixTransitionCallback);\n  } else if (el$1.style[property] === '') {\n    // Value with a vendor prefix.\n    prefixedValue = prefix.css + prefixedValue; // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n\n    if (prefixedValue === '-ms-flex') el$1.style[property] = '-ms-flexbox'; // Test prefixed value.\n\n    el$1.style[property] = prefixedValue; // Return false if value not supported.\n\n    if (el$1.style[property] === '') {\n      cache$1[cacheKey] = false;\n      return false;\n    }\n  } // Reset styles for current property.\n\n\n  el$1.style[property] = ''; // Write current value to cache.\n\n  cache$1[cacheKey] = prefixedValue;\n  return cache$1[cacheKey];\n}\n\nexport { prefix, supportedKeyframes, supportedProperty, supportedValue };\n","import { supportedKeyframes, supportedValue, supportedProperty } from 'css-vendor';\nimport { toCssValue } from 'jss';\n\n/**\n * Add vendor prefix to a property name when needed.\n *\n * @api public\n */\n\nfunction jssVendorPrefixer() {\n  function onProcessRule(rule) {\n    if (rule.type === 'keyframes') {\n      var atRule = rule;\n      atRule.at = supportedKeyframes(atRule.at);\n    }\n  }\n\n  function prefixStyle(style) {\n    for (var prop in style) {\n      var value = style[prop];\n\n      if (prop === 'fallbacks' && Array.isArray(value)) {\n        style[prop] = value.map(prefixStyle);\n        continue;\n      }\n\n      var changeProp = false;\n      var supportedProp = supportedProperty(prop);\n      if (supportedProp && supportedProp !== prop) changeProp = true;\n      var changeValue = false;\n      var supportedValue$1 = supportedValue(supportedProp, toCssValue(value));\n      if (supportedValue$1 && supportedValue$1 !== value) changeValue = true;\n\n      if (changeProp || changeValue) {\n        if (changeProp) delete style[prop];\n        style[supportedProp || prop] = supportedValue$1 || value;\n      }\n    }\n\n    return style;\n  }\n\n  function onProcessStyle(style, rule) {\n    if (rule.type !== 'style') return style;\n    return prefixStyle(style);\n  }\n\n  function onChangeValue(value, prop) {\n    return supportedValue(prop, toCssValue(value)) || value;\n  }\n\n  return {\n    onProcessRule: onProcessRule,\n    onProcessStyle: onProcessStyle,\n    onChangeValue: onChangeValue\n  };\n}\n\nexport default jssVendorPrefixer;\n","/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n  var sort = function sort(prop0, prop1) {\n    if (prop0.length === prop1.length) {\n      return prop0 > prop1 ? 1 : -1;\n    }\n\n    return prop0.length - prop1.length;\n  };\n\n  return {\n    onProcessStyle: function onProcessStyle(style, rule) {\n      if (rule.type !== 'style') return style;\n      var newStyle = {};\n      var props = Object.keys(style).sort(sort);\n\n      for (var i = 0; i < props.length; i++) {\n        newStyle[props[i]] = style[props[i]];\n      }\n\n      return newStyle;\n    }\n  };\n}\n\nexport default jssPropsSort;\n","import functions from 'jss-plugin-rule-value-function';\nimport global from 'jss-plugin-global';\nimport nested from 'jss-plugin-nested';\nimport camelCase from 'jss-plugin-camel-case';\nimport defaultUnit from 'jss-plugin-default-unit';\nimport vendorPrefixer from 'jss-plugin-vendor-prefixer';\nimport propsSort from 'jss-plugin-props-sort'; // Subset of jss-preset-default with only the plugins the Material-UI components are using.\n\nexport default function jssPreset() {\n  return {\n    plugins: [functions(), global(), nested(), camelCase(), defaultUnit(), // Disable the vendor prefixer server-side, it does nothing.\n    // This way, we can get a performance boost.\n    // In the documentation, we are using `autoprefixer` to solve this problem.\n    typeof window === 'undefined' ? null : vendorPrefixer(), propsSort()]\n  };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { exactProp } from '@material-ui/utils';\nimport createGenerateClassName from '../createGenerateClassName';\nimport { create } from 'jss';\nimport jssPreset from '../jssPreset'; // Default JSS instance.\n\nvar jss = create(jssPreset()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = createGenerateClassName(); // Exported for test purposes\n\nexport var sheetsManager = new Map();\nvar defaultOptions = {\n  disableGeneration: false,\n  generateClassName: generateClassName,\n  jss: jss,\n  sheetsCache: null,\n  sheetsManager: sheetsManager,\n  sheetsRegistry: null\n};\nexport var StylesContext = React.createContext(defaultOptions);\n\nif (process.env.NODE_ENV !== 'production') {\n  StylesContext.displayName = 'StylesContext';\n}\n\nvar injectFirstNode;\nexport default function StylesProvider(props) {\n  var children = props.children,\n      _props$injectFirst = props.injectFirst,\n      injectFirst = _props$injectFirst === void 0 ? false : _props$injectFirst,\n      _props$disableGenerat = props.disableGeneration,\n      disableGeneration = _props$disableGenerat === void 0 ? false : _props$disableGenerat,\n      localOptions = _objectWithoutProperties(props, [\"children\", \"injectFirst\", \"disableGeneration\"]);\n\n  var outerOptions = React.useContext(StylesContext);\n\n  var context = _extends({}, outerOptions, {\n    disableGeneration: disableGeneration\n  }, localOptions);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof window === 'undefined' && !context.sheetsManager) {\n      console.error('Material-UI: You need to use the ServerStyleSheets API when rendering on the server.');\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (context.jss.options.insertionPoint && injectFirst) {\n      console.error('Material-UI: You cannot use a custom insertionPoint and <StylesContext injectFirst> at the same time.');\n    }\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (injectFirst && localOptions.jss) {\n      console.error('Material-UI: You cannot use the jss and injectFirst props at the same time.');\n    }\n  }\n\n  if (!context.jss.options.insertionPoint && injectFirst && typeof window !== 'undefined') {\n    if (!injectFirstNode) {\n      var head = document.head;\n      injectFirstNode = document.createComment('mui-inject-first');\n      head.insertBefore(injectFirstNode, head.firstChild);\n    }\n\n    context.jss = create({\n      plugins: jssPreset().plugins,\n      insertionPoint: injectFirstNode\n    });\n  }\n\n  return /*#__PURE__*/React.createElement(StylesContext.Provider, {\n    value: context\n  }, children);\n}\nprocess.env.NODE_ENV !== \"production\" ? StylesProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\n   * You can disable the generation of the styles with this option.\n   * It can be useful when traversing the React tree outside of the HTML\n   * rendering step on the server.\n   * Let's say you are using react-apollo to extract all\n   * the queries made by the interface server-side - you can significantly speed up the traversal with this prop.\n   */\n  disableGeneration: PropTypes.bool,\n\n  /**\n   * JSS's class name generator.\n   */\n  generateClassName: PropTypes.func,\n\n  /**\n   * By default, the styles are injected last in the <head> element of the page.\n   * As a result, they gain more specificity than any other style sheet.\n   * If you want to override Material-UI's styles, set this prop.\n   */\n  injectFirst: PropTypes.bool,\n\n  /**\n   * JSS's instance.\n   */\n  jss: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  serverGenerateClassName: PropTypes.func,\n\n  /**\n   * @ignore\n   *\n   * Beta feature.\n   *\n   * Cache for the sheets.\n   */\n  sheetsCache: PropTypes.object,\n\n  /**\n   * @ignore\n   *\n   * The sheetsManager is used to deduplicate style sheet injection in the page.\n   * It's deduplicating using the (theme, styles) couple.\n   * On the server, you should provide a new instance for each request.\n   */\n  sheetsManager: PropTypes.object,\n\n  /**\n   * @ignore\n   *\n   * Collect the sheets.\n   */\n  sheetsRegistry: PropTypes.object\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? StylesProvider.propTypes = exactProp(StylesProvider.propTypes) : void 0;\n}","/* eslint-disable import/prefer-default-export */\n// Global index counter to preserve source order.\n// We create the style sheet during the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\nvar indexCounter = -1e9;\nexport function increment() {\n  indexCounter += 1;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (indexCounter >= 0) {\n      console.warn(['Material-UI: You might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n'));\n    }\n  }\n\n  return indexCounter;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { deepmerge } from '@material-ui/utils';\nimport noopTheme from './noopTheme';\nexport default function getStylesCreator(stylesOrCreator) {\n  var themingEnabled = typeof stylesOrCreator === 'function';\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (_typeof(stylesOrCreator) !== 'object' && !themingEnabled) {\n      console.error(['Material-UI: The `styles` argument provided is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n'));\n    }\n  }\n\n  return {\n    create: function create(theme, name) {\n      var styles;\n\n      try {\n        styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n      } catch (err) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (themingEnabled === true && theme === noopTheme) {\n            // TODO: prepend error message/name instead\n            console.error(['Material-UI: The `styles` argument provided is invalid.', 'You are providing a function without a theme in the context.', 'One of the parent elements needs to use a ThemeProvider.'].join('\\n'));\n          }\n        }\n\n        throw err;\n      }\n\n      if (!name || !theme.overrides || !theme.overrides[name]) {\n        return styles;\n      }\n\n      var overrides = theme.overrides[name];\n\n      var stylesWithOverrides = _extends({}, styles);\n\n      Object.keys(overrides).forEach(function (key) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (!stylesWithOverrides[key]) {\n            console.warn(['Material-UI: You are trying to override a style that does not exist.', \"Fix the `\".concat(key, \"` key of `theme.overrides.\").concat(name, \"`.\")].join('\\n'));\n          }\n        }\n\n        stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]);\n      });\n      return stylesWithOverrides;\n    },\n    options: {}\n  };\n}","// We use the same empty object to ref count the styles that don't need a theme object.\nvar noopTheme = {};\nexport default noopTheme;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React from 'react';\nimport { getDynamicStyles } from 'jss';\nimport mergeClasses from '../mergeClasses';\nimport multiKeyStore from './multiKeyStore';\nimport useTheme from '../useTheme';\nimport { StylesContext } from '../StylesProvider';\nimport { increment } from './indexCounter';\nimport getStylesCreator from '../getStylesCreator';\nimport noopTheme from '../getStylesCreator/noopTheme';\n\nfunction getClasses(_ref, classes, Component) {\n  var state = _ref.state,\n      stylesOptions = _ref.stylesOptions;\n\n  if (stylesOptions.disableGeneration) {\n    return classes || {};\n  }\n\n  if (!state.cacheClasses) {\n    state.cacheClasses = {\n      // Cache for the finalized classes value.\n      value: null,\n      // Cache for the last used classes prop pointer.\n      lastProp: null,\n      // Cache for the last used rendered classes pointer.\n      lastJSS: {}\n    };\n  } // Tracks if either the rendered classes or classes prop has changed,\n  // requiring the generation of a new finalized classes object.\n\n\n  var generate = false;\n\n  if (state.classes !== state.cacheClasses.lastJSS) {\n    state.cacheClasses.lastJSS = state.classes;\n    generate = true;\n  }\n\n  if (classes !== state.cacheClasses.lastProp) {\n    state.cacheClasses.lastProp = classes;\n    generate = true;\n  }\n\n  if (generate) {\n    state.cacheClasses.value = mergeClasses({\n      baseClasses: state.cacheClasses.lastJSS,\n      newClasses: classes,\n      Component: Component\n    });\n  }\n\n  return state.cacheClasses.value;\n}\n\nfunction attach(_ref2, props) {\n  var state = _ref2.state,\n      theme = _ref2.theme,\n      stylesOptions = _ref2.stylesOptions,\n      stylesCreator = _ref2.stylesCreator,\n      name = _ref2.name;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme);\n\n  if (!sheetManager) {\n    sheetManager = {\n      refs: 0,\n      staticSheet: null,\n      dynamicStyles: null\n    };\n    multiKeyStore.set(stylesOptions.sheetsManager, stylesCreator, theme, sheetManager);\n  }\n\n  var options = _extends({}, stylesCreator.options, stylesOptions, {\n    theme: theme,\n    flip: typeof stylesOptions.flip === 'boolean' ? stylesOptions.flip : theme.direction === 'rtl'\n  });\n\n  options.generateId = options.serverGenerateClassName || options.generateClassName;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    var staticSheet;\n\n    if (stylesOptions.sheetsCache) {\n      staticSheet = multiKeyStore.get(stylesOptions.sheetsCache, stylesCreator, theme);\n    }\n\n    var styles = stylesCreator.create(theme, name);\n\n    if (!staticSheet) {\n      staticSheet = stylesOptions.jss.createStyleSheet(styles, _extends({\n        link: false\n      }, options));\n      staticSheet.attach();\n\n      if (stylesOptions.sheetsCache) {\n        multiKeyStore.set(stylesOptions.sheetsCache, stylesCreator, theme, staticSheet);\n      }\n    }\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(staticSheet);\n    }\n\n    sheetManager.staticSheet = staticSheet;\n    sheetManager.dynamicStyles = getDynamicStyles(styles);\n  }\n\n  if (sheetManager.dynamicStyles) {\n    var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, _extends({\n      link: true\n    }, options));\n    dynamicSheet.update(props);\n    dynamicSheet.attach();\n    state.dynamicSheet = dynamicSheet;\n    state.classes = mergeClasses({\n      baseClasses: sheetManager.staticSheet.classes,\n      newClasses: dynamicSheet.classes\n    });\n\n    if (sheetsRegistry) {\n      sheetsRegistry.add(dynamicSheet);\n    }\n  } else {\n    state.classes = sheetManager.staticSheet.classes;\n  }\n\n  sheetManager.refs += 1;\n}\n\nfunction update(_ref3, props) {\n  var state = _ref3.state;\n\n  if (state.dynamicSheet) {\n    state.dynamicSheet.update(props);\n  }\n}\n\nfunction detach(_ref4) {\n  var state = _ref4.state,\n      theme = _ref4.theme,\n      stylesOptions = _ref4.stylesOptions,\n      stylesCreator = _ref4.stylesCreator;\n\n  if (stylesOptions.disableGeneration) {\n    return;\n  }\n\n  var sheetManager = multiKeyStore.get(stylesOptions.sheetsManager, stylesCreator, theme);\n  sheetManager.refs -= 1;\n  var sheetsRegistry = stylesOptions.sheetsRegistry;\n\n  if (sheetManager.refs === 0) {\n    multiKeyStore.delete(stylesOptions.sheetsManager, stylesCreator, theme);\n    stylesOptions.jss.removeStyleSheet(sheetManager.staticSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(sheetManager.staticSheet);\n    }\n  }\n\n  if (state.dynamicSheet) {\n    stylesOptions.jss.removeStyleSheet(state.dynamicSheet);\n\n    if (sheetsRegistry) {\n      sheetsRegistry.remove(state.dynamicSheet);\n    }\n  }\n}\n\nfunction useSynchronousEffect(func, values) {\n  var key = React.useRef([]);\n  var output; // Store \"generation\" key. Just returns a new object every time\n\n  var currentKey = React.useMemo(function () {\n    return {};\n  }, values); // eslint-disable-line react-hooks/exhaustive-deps\n  // \"the first render\", or \"memo dropped the value\"\n\n  if (key.current !== currentKey) {\n    key.current = currentKey;\n    output = func();\n  }\n\n  React.useEffect(function () {\n    return function () {\n      if (output) {\n        output();\n      }\n    };\n  }, [currentKey] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}\n\nexport default function makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var name = options.name,\n      classNamePrefixOption = options.classNamePrefix,\n      Component = options.Component,\n      _options$defaultTheme = options.defaultTheme,\n      defaultTheme = _options$defaultTheme === void 0 ? noopTheme : _options$defaultTheme,\n      stylesOptions2 = _objectWithoutProperties(options, [\"name\", \"classNamePrefix\", \"Component\", \"defaultTheme\"]);\n\n  var stylesCreator = getStylesCreator(stylesOrCreator);\n  var classNamePrefix = name || classNamePrefixOption || 'makeStyles';\n  stylesCreator.options = {\n    index: increment(),\n    name: name,\n    meta: classNamePrefix,\n    classNamePrefix: classNamePrefix\n  };\n\n  var useStyles = function useStyles() {\n    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var theme = useTheme() || defaultTheme;\n\n    var stylesOptions = _extends({}, React.useContext(StylesContext), stylesOptions2);\n\n    var instance = React.useRef();\n    var shouldUpdate = React.useRef();\n    useSynchronousEffect(function () {\n      var current = {\n        name: name,\n        state: {},\n        stylesCreator: stylesCreator,\n        stylesOptions: stylesOptions,\n        theme: theme\n      };\n      attach(current, props);\n      shouldUpdate.current = false;\n      instance.current = current;\n      return function () {\n        detach(current);\n      };\n    }, [theme, stylesCreator]);\n    React.useEffect(function () {\n      if (shouldUpdate.current) {\n        update(instance.current, props);\n      }\n\n      shouldUpdate.current = true;\n    });\n    var classes = getClasses(instance.current, props.classes, Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      // eslint-disable-next-line react-hooks/rules-of-hooks\n      React.useDebugValue(classes);\n    }\n\n    return classes;\n  };\n\n  return useStyles;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React from 'react';\nimport { easeInOut } from '../utils/curves';\nimport { largeDurationMs } from '../utils/durations';\nimport KeyframesMotion from './keyframes-motion';\nvar entranceMotions = {\n  bottom: 'translate3d(0, calc(5% + 4px), 0)',\n  left: 'translate3d(calc(-5% - 4px), 0, 0)',\n  right: 'translate3d(calc(5% + 4px), 0, 0)',\n  top: 'translate3d(0, calc(-5% - 4px), 0)'\n};\nvar exitMotions = {\n  bottom: 'translate3d(0, calc(-5% - 4px), 0)',\n  left: 'translate3d(calc(5% + 4px), 0, 0)',\n  right: 'translate3d(calc(-5% - 4px), 0, 0)',\n  top: 'translate3d(0, calc(5% + 4px), 0)'\n};\nexport var fadeInAnimation = function fadeInAnimation(movement) {\n  return {\n    from: _objectSpread({\n      opacity: 0\n    }, movement !== undefined && {\n      transform: entranceMotions[movement]\n    }),\n    '50%': {\n      opacity: 1\n    },\n    to: {\n      transform: movement !== undefined ? 'none' : undefined\n    }\n  };\n};\nexport var fadeOutAnimation = function fadeOutAnimation(movement) {\n  return {\n    from: {\n      opacity: 1,\n      transform: movement !== undefined ? 'translate3d(0, 0, 0)' : undefined\n    },\n    to: _objectSpread({\n      opacity: 0\n    }, movement !== undefined && {\n      transform: exitMotions[movement]\n    })\n  };\n};\n/**\n * Props for controlling the behaviour of the FadeIn animation\n */\n\nvar FadeIn = function FadeIn(_ref) {\n  var children = _ref.children,\n      _ref$duration = _ref.duration,\n      duration = _ref$duration === void 0 ? largeDurationMs : _ref$duration,\n      entranceSlideDirection = _ref.entranceDirection,\n      props = _objectWithoutProperties(_ref, [\"children\", \"duration\", \"entranceDirection\"]);\n\n  return /*#__PURE__*/React.createElement(KeyframesMotion, _extends({\n    duration: duration,\n    enteringAnimation: fadeInAnimation(entranceSlideDirection),\n    exitingAnimation: fadeOutAnimation(entranceSlideDirection),\n    animationTimingFunction: function animationTimingFunction() {\n      return easeInOut;\n    }\n  }, props), children);\n};\n\nexport default FadeIn;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { useCallback, useMemo, useState } from 'react';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport ButtonBase from './shared/button-base';\nimport { getCss } from './shared/css';\nimport getIsOnlySingleIcon from './shared/get-is-only-single-icon';\n\nfunction noop() {}\n\nvar isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\nvar ButtonWithMode = /*#__PURE__*/React.forwardRef(function ButtonWithMode(_ref, ref) {\n  var mode = _ref.mode,\n      _ref$onMouseDown = _ref.onMouseDown,\n      providedOnMouseDown = _ref$onMouseDown === void 0 ? noop : _ref$onMouseDown,\n      _ref$onMouseUp = _ref.onMouseUp,\n      providedOnMouseUp = _ref$onMouseUp === void 0 ? noop : _ref$onMouseUp,\n      rest = _objectWithoutProperties(_ref, [\"mode\", \"onMouseDown\", \"onMouseUp\"]);\n\n  var appearance = rest.appearance || 'default';\n  var spacing = rest.spacing || 'default';\n  var shouldFitContainer = Boolean(rest.shouldFitContainer);\n  var isSelected = Boolean(rest.isSelected);\n  var isOnlySingleIcon = getIsOnlySingleIcon(rest);\n\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      isActive = _useState2[0],\n      setIsActive = _useState2[1]; // Wrap onMouseDown / onMouseUp to manually trigger active state\n  //  in Firefox\n\n\n  var onMouseDown = useCallback(function (event) {\n    providedOnMouseDown(event);\n\n    if (isFirefox) {\n      setIsActive(true);\n    }\n  }, [providedOnMouseDown, setIsActive]);\n  var onMouseUp = useCallback(function (event) {\n    providedOnMouseUp(event);\n\n    if (isFirefox) {\n      setIsActive(false);\n    }\n  }, [providedOnMouseUp, setIsActive]);\n  var buttonCss = useMemo(function () {\n    return getCss({\n      appearance: appearance,\n      spacing: spacing,\n      mode: mode,\n      isSelected: isSelected,\n      shouldFitContainer: shouldFitContainer,\n      isOnlySingleIcon: isOnlySingleIcon\n    });\n  }, [appearance, spacing, mode, isSelected, shouldFitContainer, isOnlySingleIcon]);\n  return /*#__PURE__*/React.createElement(ButtonBase, _extends({}, rest, {\n    ref: ref,\n    buttonCss: buttonCss // Due to how click events are set, we need to set active styles\n    //  manually in Firefox and wrap onMouseDown/onMouseUp\n    ,\n    \"data-firefox-is-active\": isActive ? true : undefined,\n    onMouseDown: onMouseDown,\n    onMouseUp: onMouseUp\n  }));\n});\nvar Button = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Button(props, ref) {\n  return /*#__PURE__*/React.createElement(GlobalTheme.Consumer, null, function (_ref2) {\n    var mode = _ref2.mode;\n    return /*#__PURE__*/React.createElement(ButtonWithMode, _extends({}, props, {\n      ref: ref,\n      mode: mode\n    }));\n  });\n})); // Tools including enzyme rely on components having a display name\n\nButton.displayName = 'Button';\nexport default Button;","// If a generic is used here, props can be inferred never and passed up (even with defaults)\nexport function add(fn, addend) {\n  return function (props) {\n    return fn(props) + addend;\n  };\n}\nexport function subtract(fn, subtrahend) {\n  return function (props) {\n    return fn(props) - subtrahend;\n  };\n}\nexport function multiply(fn, factor) {\n  return function (props) {\n    return fn(props) * factor;\n  };\n}\nexport function divide(fn, divisor) {\n  return function (props) {\n    return fn(props) / divisor;\n  };\n}","export default (function (channel) {\n  return function (payload) {\n    return function (createAnalyticsEvent) {\n      var consumerEvent = createAnalyticsEvent(payload);\n      var clonedEvent = consumerEvent.clone();\n\n      if (clonedEvent) {\n        clonedEvent.fire(channel);\n      }\n\n      return consumerEvent;\n    };\n  };\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React, { forwardRef, useMemo } from 'react';\nimport AnalyticsContext from '../components/AnalyticsContext';\n\nvar withAnalyticsContext = function withAnalyticsContext(defaultData) {\n  return function (WrappedComponent) {\n    var WithAnalyticsContext = /*#__PURE__*/forwardRef(function (_ref, ref) {\n      var analyticsContext = _ref.analyticsContext,\n          rest = _objectWithoutProperties(_ref, [\"analyticsContext\"]);\n\n      var analyticsData = useMemo(function () {\n        return _objectSpread(_objectSpread({}, defaultData), analyticsContext);\n      }, [analyticsContext]);\n      return /*#__PURE__*/React.createElement(AnalyticsContext, {\n        data: analyticsData\n      }, /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, rest, {\n        ref: ref\n      })));\n    }); // @ts-ignore\n\n    WithAnalyticsContext.displayName = \"WithAnalyticsContext(\".concat( // @ts-ignore disneyName doesn't exist on type\n    WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsContext;\n  };\n};\n\nexport default withAnalyticsContext;","/** @jsx jsx */\nimport React from 'react';\nimport { jsx } from '@emotion/core';\nimport { gridSize } from '@atlaskit/theme/constants';\nexport var groupItemStyles = {\n  flex: '1 0 auto',\n  display: 'flex',\n\n  /* margins don't flip when the layout uses dir=\"rtl\", whereas pseudos do */\n  '& + &::before': {\n    content: \"''\",\n    display: 'inline-block',\n    width: \"\".concat(gridSize() / 2, \"px\")\n  }\n};\nexport default function ButtonGroup(_ref) {\n  var appearance = _ref.appearance,\n      children = _ref.children;\n  return jsx(\"div\", {\n    css: {\n      display: 'inline-flex'\n    }\n  }, React.Children.map(children, function (child, idx) {\n    if (!child) {\n      return null;\n    }\n\n    return jsx(\"div\", {\n      key: idx,\n      css: groupItemStyles\n    }, appearance ? /*#__PURE__*/React.cloneElement(child, {\n      appearance: appearance\n    }) : child);\n  }));\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport FieldBaseStateless from './FieldBaseStateless';\nvar ON_BLUR_KEY = 'onBlurKey';\nvar ON_CONTENT_BLUR_KEY = 'onContentBlurKey';\n\nfunction waitForRender(cb) {\n  // Execute the callback after any upcoming render calls in the execution queue\n  setTimeout(cb, 0);\n}\n\nvar FieldBase = /*#__PURE__*/function (_Component) {\n  _inherits(FieldBase, _Component);\n\n  var _super = _createSuper(FieldBase);\n\n  function FieldBase() {\n    var _this;\n\n    _classCallCheck(this, FieldBase);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      isFocused: _this.props.defaultIsFocused,\n      isDialogFocused: false,\n      shouldIgnoreNextDialogBlur: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"timers\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"onFocus\", function (e) {\n      _this.setState({\n        isFocused: true\n      });\n\n      _this.props.onFocus(e); // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBlur\", function (e) {\n      // Because the blur event fires before the focus event, we want to make sure that we don't\n      // render and close the dialog before we can check if the dialog is focused.\n      _this.reschedule(ON_BLUR_KEY, function () {\n        _this.setState({\n          isFocused: false\n        });\n\n        _this.props.onBlur(e);\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onContentFocus\", function () {\n      if (_this.state.isDialogFocused) {\n        // If we are tabbing between two elements in the warning dialog, we need to prevent the\n        // dialog from closing.\n        _this.setState({\n          shouldIgnoreNextDialogBlur: true\n        });\n      } else {\n        _this.setState({\n          isDialogFocused: true\n        });\n      } // Escape from a possible race-condition when blur and focus happen one by one\n      // (otherwise the dialog might be left closed)\n\n\n      _this.cancelSchedule(ON_CONTENT_BLUR_KEY);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onContentBlur\", function () {\n      waitForRender(function () {\n        if (_this.state.shouldIgnoreNextDialogBlur) {\n          // Ignore the blur event if we are still focused in the dialog.\n          _this.setState({\n            shouldIgnoreNextDialogBlur: false\n          });\n        } else {\n          _this.setState({\n            isDialogFocused: false\n          });\n        }\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(FieldBase, [{\n    key: \"cancelSchedule\",\n    value: function cancelSchedule(key) {\n      this.timers = this.timers || {};\n\n      if (this.timers[key]) {\n        clearTimeout(this.timers[key]);\n        delete this.timers[key];\n      }\n    }\n  }, {\n    key: \"reschedule\",\n    value: function reschedule(key, callback) {\n      var _this2 = this;\n\n      // Use reschedule (not just schedule) to avoid race conditions when multiple blur events\n      // happen one by one.\n      this.timers = this.timers || {};\n      this.cancelSchedule(key);\n      this.timers[key] = setTimeout(function () {\n        callback();\n\n        _this2.cancelSchedule(key);\n      }, 0);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.cancelSchedule(ON_BLUR_KEY);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          defaultIsFocused = _this$props.defaultIsFocused,\n          props = _objectWithoutProperties(_this$props, [\"defaultIsFocused\"]);\n\n      var _this$state = this.state,\n          isFocused = _this$state.isFocused,\n          isDialogFocused = _this$state.isDialogFocused;\n      return /*#__PURE__*/React.createElement(FieldBaseStateless, _extends({}, props, {\n        isDialogOpen: isFocused || isDialogFocused,\n        isFocused: isFocused,\n        onBlur: this.onBlur,\n        onFocus: this.onFocus,\n        onDialogFocus: this.onContentFocus,\n        onDialogBlur: this.onContentBlur\n      }));\n    }\n  }]);\n\n  return FieldBase;\n}(Component);\n\n_defineProperty(FieldBase, \"defaultProps\", {\n  defaultIsFocused: false,\n  onFocus: function onFocus() {},\n  onBlur: function onBlur() {}\n});\n\nexport { FieldBase as default };","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { makeStyles as makeStylesWithoutDefault } from '@material-ui/styles';\nimport defaultTheme from './defaultTheme';\n\nfunction makeStyles(stylesOrCreator) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  return makeStylesWithoutDefault(stylesOrCreator, _extends({\n    defaultTheme: defaultTheme\n  }, options));\n}\n\nexport default makeStyles;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport function isPlainObject(item) {\n  return item && _typeof(item) === 'object' && item.constructor === Object;\n}\nexport default function deepmerge(target, source) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n    clone: true\n  };\n  var output = options.clone ? _extends({}, target) : target;\n\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(function (key) {\n      // Avoid prototype pollution\n      if (key === '__proto__') {\n        return;\n      }\n\n      if (isPlainObject(source[key]) && key in target) {\n        output[key] = deepmerge(target[key], source[key], options);\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n\n  return output;\n}","import React from 'react';\nimport ThemeContext from './ThemeContext';\nexport default function useTheme() {\n  var theme = React.useContext(ThemeContext);\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useDebugValue(theme);\n  }\n\n  return theme;\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport StatelessMenu from './DropdownMenuStateless';\n\nvar DropdownMenu = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownMenu, _Component);\n\n  var _super = _createSuper(DropdownMenu);\n\n  function DropdownMenu() {\n    var _this;\n\n    _classCallCheck(this, DropdownMenu);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      isOpen: _this.props.defaultOpen,\n      items: _toConsumableArray(_this.props.items)\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"findActivatedGroup\", function (item) {\n      return _this.state.items.filter(function (group) {\n        return group.items.indexOf(item) > -1;\n      })[0];\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleItemActivation\", function (attrs) {\n      var activatedItem = attrs.item;\n\n      var activatedGroup = _this.findActivatedGroup(activatedItem);\n\n      var items = _toConsumableArray(_this.state.items);\n\n      switch (activatedItem.type) {\n        case 'checkbox':\n          activatedItem.isChecked = !activatedItem.isChecked;\n\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.setState({\n            items: items\n          });\n\n          break;\n\n        case 'radio':\n          activatedGroup.items.forEach(function (i) {\n            if (i === activatedItem) {\n              i.isChecked = true; // eslint-disable-line no-param-reassign\n            } else {\n              i.isChecked = false; // eslint-disable-line no-param-reassign\n            }\n          });\n\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.setState({\n            items: items\n          });\n\n          break;\n\n        case 'link':\n        default:\n          _this.props.onItemActivated({\n            item: activatedItem\n          });\n\n          _this.close();\n\n          break;\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleOpenChange\", function (attrs) {\n      var _this$props;\n\n      if (_this.state.isOpen === attrs.isOpen) {\n        return;\n      }\n\n      _this.setState({\n        isOpen: attrs.isOpen\n      });\n\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\n      (_this$props = _this.props).onOpenChange.apply(_this$props, [attrs].concat(args));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"close\", function () {\n      var _this$props2;\n\n      if (_this.state.isOpen === false) {\n        return;\n      }\n\n      _this.setState({\n        isOpen: false\n      });\n\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      (_this$props2 = _this.props).onOpenChange.apply(_this$props2, [{\n        isOpen: false\n      }].concat(args));\n    });\n\n    return _this;\n  }\n\n  _createClass(DropdownMenu, [{\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      if (nextProps.items !== this.state.items) {\n        this.setState({\n          items: _toConsumableArray(nextProps.items)\n        });\n      }\n\n      if (nextProps.isOpen !== this.props.isOpen) {\n        this.setState({\n          isOpen: nextProps.isOpen\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var isOpen = this.state.isOpen;\n      var _this$props3 = this.props,\n          appearance = _this$props3.appearance,\n          boundariesElement = _this$props3.boundariesElement,\n          children = _this$props3.children,\n          isLoading = _this$props3.isLoading,\n          items = _this$props3.items,\n          position = _this$props3.position,\n          isMenuFixed = _this$props3.isMenuFixed,\n          shouldAllowMultilineItems = _this$props3.shouldAllowMultilineItems,\n          shouldFitContainer = _this$props3.shouldFitContainer,\n          shouldFlip = _this$props3.shouldFlip,\n          testId = _this$props3.testId,\n          trigger = _this$props3.trigger,\n          triggerButtonProps = _this$props3.triggerButtonProps,\n          triggerType = _this$props3.triggerType,\n          onPositioned = _this$props3.onPositioned;\n      return /*#__PURE__*/React.createElement(StatelessMenu, {\n        appearance: appearance,\n        boundariesElement: boundariesElement,\n        isOpen: isOpen,\n        isLoading: isLoading,\n        items: items,\n        onItemActivated: this.handleItemActivation,\n        onOpenChange: this.handleOpenChange,\n        position: position,\n        isMenuFixed: isMenuFixed,\n        shouldAllowMultilineItems: shouldAllowMultilineItems,\n        shouldFitContainer: shouldFitContainer,\n        shouldFlip: shouldFlip,\n        trigger: trigger,\n        triggerButtonProps: triggerButtonProps,\n        triggerType: triggerType,\n        onPositioned: onPositioned,\n        testId: testId\n      }, children);\n    }\n  }]);\n\n  return DropdownMenu;\n}(Component);\n\n_defineProperty(DropdownMenu, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  defaultOpen: false,\n  isLoading: false,\n  isOpen: false,\n  items: [],\n  onItemActivated: function onItemActivated() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  triggerType: 'default',\n  onPositioned: function onPositioned() {}\n});\n\nexport { DropdownMenu as default };","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import { isHTMLElement } from \"./instanceOf.js\";\nvar round = Math.round;\nexport default function getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (isHTMLElement(element) && includeScale) {\n    // Fallback to 1 in case both values are `0`\n    scaleX = rect.width / element.offsetWidth || 1;\n    scaleY = rect.height / element.offsetHeight || 1;\n  }\n\n  return {\n    width: round(rect.width / scaleX),\n    height: round(rect.height / scaleY),\n    top: round(rect.top / scaleY),\n    right: round(rect.right / scaleX),\n    bottom: round(rect.bottom / scaleY),\n    left: round(rect.left / scaleX),\n    x: round(rect.left / scaleX),\n    y: round(rect.top / scaleY)\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = rect.width / element.offsetWidth || 1;\n  var scaleY = rect.height / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(options) {\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(round(x * dpr) / dpr) || 0,\n    y: round(round(y * dpr) / dpr) || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets;\n\n  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n      _ref3$x = _ref3.x,\n      x = _ref3$x === void 0 ? 0 : _ref3$x,\n      _ref3$y = _ref3.y,\n      y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top) {\n      sideY = bottom; // $FlowFixMe[prop-missing]\n\n      y -= offsetParent[heightProp] - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left) {\n      sideX = right; // $FlowFixMe[prop-missing]\n\n      x -= offsetParent[widthProp] - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n  var state = _ref4.state,\n      options = _ref4.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var referenceElement = state.elements.reference;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(referenceElement);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { max as mathMax, min as mathMin } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis || checkAltAxis) {\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = popperOffsets[mainAxis] + overflow[mainSide];\n    var max = popperOffsets[mainAxis] - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n    var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n    if (checkMainAxis) {\n      var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n      popperOffsets[mainAxis] = preventedOffset;\n      data[mainAxis] = preventedOffset - offset;\n    }\n\n    if (checkAltAxis) {\n      var _mainSide = mainAxis === 'x' ? top : left;\n\n      var _altSide = mainAxis === 'x' ? bottom : right;\n\n      var _offset = popperOffsets[altAxis];\n\n      var _min = _offset + overflow[_mainSide];\n\n      var _max = _offset - overflow[_altSide];\n\n      var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n      popperOffsets[altAxis] = _preventedOffset;\n      data[altAxis] = _preventedOffset - _offset;\n    }\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","import * as React from 'react';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var prevOptions = React.useRef(null);\n  var optionsWithDefaults = {\n    onFirstUpdate: options.onFirstUpdate,\n    placement: options.placement || 'bottom',\n    strategy: options.strategy || 'absolute',\n    modifiers: options.modifiers || EMPTY_MODIFIERS\n  };\n\n  var _React$useState = React.useState({\n    styles: {\n      popper: {\n        position: optionsWithDefaults.strategy,\n        left: '0',\n        top: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      }\n    },\n    attributes: {}\n  }),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var updateStateModifier = React.useMemo(function () {\n    return {\n      name: 'updateState',\n      enabled: true,\n      phase: 'write',\n      fn: function fn(_ref) {\n        var state = _ref.state;\n        var elements = Object.keys(state.elements);\n        setState({\n          styles: fromEntries(elements.map(function (element) {\n            return [element, state.styles[element] || {}];\n          })),\n          attributes: fromEntries(elements.map(function (element) {\n            return [element, state.attributes[element]];\n          }))\n        });\n      },\n      requires: ['computeStyles']\n    };\n  }, []);\n  var popperOptions = React.useMemo(function () {\n    var newOptions = {\n      onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n      placement: optionsWithDefaults.placement,\n      strategy: optionsWithDefaults.strategy,\n      modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n        name: 'applyStyles',\n        enabled: false\n      }])\n    };\n\n    if (isEqual(prevOptions.current, newOptions)) {\n      return prevOptions.current || newOptions;\n    } else {\n      prevOptions.current = newOptions;\n      return newOptions;\n    }\n  }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n  var popperInstanceRef = React.useRef();\n  useIsomorphicLayoutEffect(function () {\n    if (popperInstanceRef.current) {\n      popperInstanceRef.current.setOptions(popperOptions);\n    }\n  }, [popperOptions]);\n  useIsomorphicLayoutEffect(function () {\n    if (referenceElement == null || popperElement == null) {\n      return;\n    }\n\n    var createPopper = options.createPopper || defaultCreatePopper;\n    var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n    popperInstanceRef.current = popperInstance;\n    return function () {\n      popperInstance.destroy();\n      popperInstanceRef.current = null;\n    };\n  }, [referenceElement, popperElement, options.createPopper]);\n  return {\n    state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n    styles: state.styles,\n    attributes: state.attributes,\n    update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n    forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n  };\n};","import * as React from 'react';\nimport { ManagerReferenceNodeContext } from './Manager';\nimport { unwrapArray, setRef } from './utils';\nimport { usePopper } from './usePopper';\n\nvar NOOP = function NOOP() {\n  return void 0;\n};\n\nvar NOOP_PROMISE = function NOOP_PROMISE() {\n  return Promise.resolve(null);\n};\n\nvar EMPTY_MODIFIERS = [];\nexport function Popper(_ref) {\n  var _ref$placement = _ref.placement,\n      placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,\n      _ref$strategy = _ref.strategy,\n      strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,\n      _ref$modifiers = _ref.modifiers,\n      modifiers = _ref$modifiers === void 0 ? EMPTY_MODIFIERS : _ref$modifiers,\n      referenceElement = _ref.referenceElement,\n      onFirstUpdate = _ref.onFirstUpdate,\n      innerRef = _ref.innerRef,\n      children = _ref.children;\n  var referenceNode = React.useContext(ManagerReferenceNodeContext);\n\n  var _React$useState = React.useState(null),\n      popperElement = _React$useState[0],\n      setPopperElement = _React$useState[1];\n\n  var _React$useState2 = React.useState(null),\n      arrowElement = _React$useState2[0],\n      setArrowElement = _React$useState2[1];\n\n  React.useEffect(function () {\n    setRef(innerRef, popperElement);\n  }, [innerRef, popperElement]);\n  var options = React.useMemo(function () {\n    return {\n      placement: placement,\n      strategy: strategy,\n      onFirstUpdate: onFirstUpdate,\n      modifiers: [].concat(modifiers, [{\n        name: 'arrow',\n        enabled: arrowElement != null,\n        options: {\n          element: arrowElement\n        }\n      }])\n    };\n  }, [placement, strategy, onFirstUpdate, modifiers, arrowElement]);\n\n  var _usePopper = usePopper(referenceElement || referenceNode, popperElement, options),\n      state = _usePopper.state,\n      styles = _usePopper.styles,\n      forceUpdate = _usePopper.forceUpdate,\n      update = _usePopper.update;\n\n  var childrenProps = React.useMemo(function () {\n    return {\n      ref: setPopperElement,\n      style: styles.popper,\n      placement: state ? state.placement : placement,\n      hasPopperEscaped: state && state.modifiersData.hide ? state.modifiersData.hide.hasPopperEscaped : null,\n      isReferenceHidden: state && state.modifiersData.hide ? state.modifiersData.hide.isReferenceHidden : null,\n      arrowProps: {\n        style: styles.arrow,\n        ref: setArrowElement\n      },\n      forceUpdate: forceUpdate || NOOP,\n      update: update || NOOP_PROMISE\n    };\n  }, [setPopperElement, setArrowElement, placement, state, styles, update, forceUpdate]);\n  return unwrapArray(children)(childrenProps);\n}","import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport React, { useMemo } from 'react';\nimport { Popper as ReactPopper } from 'react-popper'; // Export types from PopperJS / React Popper\n\nvar constantModifiers = [{\n  name: 'flip',\n  options: {\n    flipVariations: false,\n    padding: 5,\n    boundary: 'clippingParents',\n    rootBoundary: 'viewport'\n  }\n}, {\n  name: 'preventOverflow',\n  options: {\n    padding: 5,\n    rootBoundary: 'document'\n  }\n}];\n\nfunction defaultChildrenFn() {\n  return null;\n}\n\nvar defaultOffset = [0, 8];\nexport function Popper(_ref) {\n  var _ref$children = _ref.children,\n      children = _ref$children === void 0 ? defaultChildrenFn : _ref$children,\n      _ref$offset = _ref.offset,\n      offset = _ref$offset === void 0 ? defaultOffset : _ref$offset,\n      _ref$placement = _ref.placement,\n      placement = _ref$placement === void 0 ? 'bottom-start' : _ref$placement,\n      _ref$referenceElement = _ref.referenceElement,\n      referenceElement = _ref$referenceElement === void 0 ? undefined : _ref$referenceElement,\n      modifiers = _ref.modifiers,\n      _ref$strategy = _ref.strategy,\n      strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy;\n\n  var _offset = _slicedToArray(offset, 2),\n      offsetX = _offset[0],\n      offsetY = _offset[1];\n\n  // Merge a new offset modifier only if new offset values passed in\n  var internalModifiers = useMemo(function () {\n    var offsetModifier = {\n      name: 'offset',\n      options: {\n        offset: [offsetX, offsetY]\n      }\n    };\n    return [].concat(constantModifiers, [offsetModifier]);\n  }, [offsetX, offsetY]); // Merge custom props and memoize\n\n  var mergedModifiers = useMemo(function () {\n    if (modifiers == null) {\n      return internalModifiers;\n    }\n\n    return [].concat(_toConsumableArray(internalModifiers), _toConsumableArray(modifiers));\n  }, [internalModifiers, modifiers]);\n  return /*#__PURE__*/React.createElement(ReactPopper, {\n    modifiers: mergedModifiers,\n    placement: placement,\n    strategy: strategy,\n    referenceElement: referenceElement\n  }, children);\n}","// from https://facebook.github.io/react/docs/higher-order-components.html\nvar getDisplayName = function getDisplayName(WrappedComponent) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n};\n\nexport default getDisplayName;","// There are cases where the context is not available, such as when a dropdown item is used\n// inside @atlaskit/navigation. For this reason we have this helper function which safely calls\n// the context functions if they are available.\nexport default (function (instance, contextKey) {\n  return function (fnToCall) {\n    var _instance$context$con;\n\n    if (!instance.context[contextKey]) {\n      return null;\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return (_instance$context$con = instance.context[contextKey])[fnToCall].apply(_instance$context$con, args);\n  };\n});","var prefix = function prefix(key) {\n  return \"@atlaskit-private-do-not-use/dropdown-menu:\".concat(key);\n};\n\nexport var focusManagerContext = prefix('focus-manager');\nexport var selectionCacheContext = prefix('selection-cache');\nexport var selectionManagerContext = prefix('selection-manager');\nexport var clickManagerContext = prefix('click-manager');","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\n// We currently need to keep the dropdown open if an item with `href` is clicked, to avoid the\n// analytics package to track the href value without the event target disappearing. Without this\n// requirement, we could just use a native click event all the way up to DropdownMenuStateless,\n// and could get rid of this HOC and DropdownItemClickManager.\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport getDisplayName from '../../util/getDisplayName';\nimport safeContextCall from '../../util/safeContextCall';\nimport { clickManagerContext } from '../../util/contextNamespace'; // HOC that typically wraps @atlaskit/item\n\nvar withItemClick = function withItemClick(WrappedItem) {\n  var _class, _temp;\n\n  return _temp = _class = /*#__PURE__*/function (_Component) {\n    _inherits(WithItemClick, _Component);\n\n    var _super = _createSuper(WithItemClick);\n\n    function WithItemClick() {\n      var _this;\n\n      _classCallCheck(this, WithItemClick);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _super.call.apply(_super, [this].concat(args));\n\n      _defineProperty(_assertThisInitialized(_this), \"callContextFn\", safeContextCall(_assertThisInitialized(_this), clickManagerContext));\n\n      _defineProperty(_assertThisInitialized(_this), \"shouldCloseAfterClick\", function () {\n        return !_this.props.isDisabled && !_this.props.href;\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"handleClick\", function (event) {\n        _this.props.onClick(event);\n\n        if (_this.shouldCloseAfterClick()) {\n          _this.callContextFn('itemClicked');\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"handleKeyDown\", function (event) {\n        if (_this.props.onKeyDown) {\n          _this.props.onKeyDown(event);\n        } else if (event.key === 'Space' || event.key === 'Enter') {\n          _this.handleClick(event);\n        }\n      });\n\n      return _this;\n    }\n\n    _createClass(WithItemClick, [{\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            children = _this$props.children,\n            otherProps = _objectWithoutProperties(_this$props, [\"children\"]);\n\n        return /*#__PURE__*/React.createElement(WrappedItem, _extends({}, otherProps, {\n          onClick: this.handleClick,\n          onKeyDown: this.handleKeyDown\n        }), children);\n      }\n    }]);\n\n    return WithItemClick;\n  }(Component), _defineProperty(_class, \"displayName\", \"WithItemClick(\".concat(getDisplayName(WrappedItem), \")\")), _defineProperty(_class, \"defaultProps\", {\n    onClick: function onClick() {}\n  }), _defineProperty(_class, \"contextTypes\", _defineProperty({}, clickManagerContext, PropTypes.object)), _temp;\n};\n\nexport default withItemClick;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport uuid from 'uuid';\nimport getDisplayName from '../../util/getDisplayName';\nimport safeContextCall from '../../util/safeContextCall';\nimport { focusManagerContext } from '../../util/contextNamespace'; // HOC that typically wraps @atlaskit/item\n\nvar withItemFocus = function withItemFocus(WrappedComponent) {\n  var _class, _temp;\n\n  return _temp = _class = /*#__PURE__*/function (_Component) {\n    _inherits(WithItemFocus, _Component);\n\n    var _super = _createSuper(WithItemFocus);\n\n    function WithItemFocus() {\n      var _this;\n\n      _classCallCheck(this, WithItemFocus);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _super.call.apply(_super, [this].concat(args));\n\n      _defineProperty(_assertThisInitialized(_this), \"contextId\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"callContextFn\", safeContextCall(_assertThisInitialized(_this), focusManagerContext));\n\n      _defineProperty(_assertThisInitialized(_this), \"isFocusable\", function () {\n        return !_this.props.isDisabled && !_this.props.isHidden;\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"handleFocus\", function () {\n        if (_this.isFocusable()) {\n          _this.callContextFn('itemFocused', _this.contextId);\n        }\n      });\n\n      return _this;\n    }\n\n    _createClass(WithItemFocus, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        if (!this.isFocusable()) {\n          return;\n        }\n\n        this.contextId = uuid();\n        this.callContextFn('registerItem', this.contextId, ReactDOM.findDOMNode(this) // eslint-disable-line react/no-find-dom-node\n        );\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate() {\n        if (!this.isFocusable()) {\n          return;\n        }\n\n        this.callContextFn('updateItem', this.contextId, ReactDOM.findDOMNode(this) // eslint-disable-line react/no-find-dom-node\n        );\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        if (this.isFocusable()) {\n          this.callContextFn('deregisterItem', this.contextId);\n        }\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            children = _this$props.children,\n            otherProps = _objectWithoutProperties(_this$props, [\"children\"]);\n\n        return /*#__PURE__*/React.createElement(WrappedComponent, _extends({\n          onFocus: this.handleFocus,\n          role: \"menuitem\"\n        }, otherProps), children);\n      }\n    }]);\n\n    return WithItemFocus;\n  }(Component), _defineProperty(_class, \"displayName\", \"WithItemFocus(\".concat(getDisplayName(WrappedComponent), \")\")), _defineProperty(_class, \"contextTypes\", _defineProperty({}, focusManagerContext, PropTypes.object)), _temp;\n};\n\nexport default withItemFocus;","import styled, { css } from 'styled-components';\nimport { N60A } from '@atlaskit/theme/colors';\nimport { getThemeStyle, themeNamespace } from '../util/theme';\n\nvar getItemState = function getItemState(stateName) {\n  return function (_ref) {\n    var theme = _ref.theme;\n    var stateStyles = getThemeStyle(theme[themeNamespace], stateName);\n    return css([\"\\n    background-color: \", \";\\n    color: \", \";\\n    fill: \", \";\\n    text-decoration: none;\\n\\n    &:focus {\\n      color: \", \";\\n    }\\n  \"], stateStyles.background, stateStyles.text, stateStyles.background, stateStyles.text);\n  };\n};\n\nvar getPadding = function getPadding(_ref2) {\n  var isCompact = _ref2.isCompact,\n      theme = _ref2.theme,\n      description = _ref2.description;\n  var paddingKey = isCompact ? 'compact' : 'default';\n\n  var _getThemeStyle = getThemeStyle(theme[themeNamespace], paddingKey, 'padding'),\n      _getThemeStyle$bottom = _getThemeStyle.bottom,\n      bottom = _getThemeStyle$bottom === void 0 ? 0 : _getThemeStyle$bottom,\n      _getThemeStyle$left = _getThemeStyle.left,\n      left = _getThemeStyle$left === void 0 ? 0 : _getThemeStyle$left,\n      _getThemeStyle$right = _getThemeStyle.right,\n      right = _getThemeStyle$right === void 0 ? 0 : _getThemeStyle$right,\n      _getThemeStyle$top = _getThemeStyle.top,\n      top = _getThemeStyle$top === void 0 ? 0 : _getThemeStyle$top;\n\n  var adjustedTop = typeof top === 'function' ? top() : top;\n  var adjustedBottom = typeof bottom === 'function' ? bottom() : bottom; // Subtract the 1px padding-bottom added to the content and description elements\n  // to maintain original height\n\n  adjustedTop = Math.max(description ? adjustedTop - 1 : adjustedTop, 0);\n  adjustedBottom = Math.max(adjustedBottom - 1, 0);\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], adjustedTop, right, adjustedBottom, left);\n};\n\nvar getHeightStyles = function getHeightStyles(_ref3) {\n  var isCompact = _ref3.isCompact,\n      theme = _ref3.theme;\n  var heightKey = isCompact ? 'compact' : 'default';\n  var height = getThemeStyle(theme[themeNamespace], heightKey, 'height');\n  return height ? css([\"\\n        height: \", \"px;\\n      \"], height) : '';\n};\n\nvar getWidthStyles = function getWidthStyles(_ref4) {\n  var isCompact = _ref4.isCompact,\n      theme = _ref4.theme;\n  var widthKey = isCompact ? 'compact' : 'default';\n  var width = getThemeStyle(theme[themeNamespace], widthKey, 'width');\n\n  if (!width) {\n    return '';\n  }\n\n  return typeof width === 'number' ? css([\"\\n        width: \", \"px;\\n      \"], width) : css([\"\\n        width: \", \";\\n      \"], width);\n}; // This function is responsible for drawing any focus styles for the element\n\n\nvar getInteractiveStyles = function getInteractiveStyles(_ref5) {\n  var theme = _ref5.theme,\n      isDisabled = _ref5.isDisabled,\n      isDragging = _ref5.isDragging,\n      isSelected = _ref5.isSelected;\n\n  if (isDragging) {\n    return css([\"\\n      \", \" box-shadow: 0 4px 8px -2px \", \",\\n        0 0 1px \", \";\\n    \"], getItemState('dragging'), N60A, N60A);\n  }\n\n  var standardFocus = css([\"\\n    &:focus {\\n      box-shadow: 0 0 0 2px\\n        \", \" inset;\\n      text-decoration: none;\\n    }\\n  \"], getThemeStyle(theme[themeNamespace], 'outline', 'focus'));\n\n  if (isDisabled) {\n    return css([\"\\n      cursor: not-allowed;\\n      \", \" \", \";\\n    \"], getItemState('disabled'), standardFocus);\n  }\n\n  if (isSelected) {\n    return css([\"\\n      \", \" &:hover {\\n        \", \";\\n      }\\n\\n      &:active {\\n        \", \";\\n      }\\n\\n      \", \";\\n    \"], getItemState('selected'), getItemState('hover'), getItemState('active'), standardFocus);\n  }\n\n  return css([\"\\n    &:hover {\\n      \", \";\\n    }\\n\\n    &:active {\\n      \", \";\\n    }\\n\\n    \", \";\\n  \"], getItemState('hover'), getItemState('active'), standardFocus);\n}; // This is the main item style. It is defined as a basic style variable so it can\n// later be applied to different component types (span / a / custom link component)\n\n\nexport var ItemBase = function ItemBase(_ref6) {\n  var theme = _ref6.theme;\n  return css([\"\\n  && {\\n    align-items: center;\\n    border-radius: \", \"px;\\n    box-sizing: border-box;\\n    cursor: pointer;\\n    display: \", \";\\n    flex: none;\\n    \", \" \", \" \", \" \", \" \", \" &:focus {\\n      /* focus shadow drawn by getInteractiveStyles */\\n\\n      outline: none;\\n      /* relative position prevents bgcolor of a hovered element from\\n      obfuscating focus ring of a focused sibling element */\\n      position: relative;\\n    }\\n  }\\n\"], getThemeStyle(theme[themeNamespace], 'borderRadius'), function (_ref7) {\n    var isHidden = _ref7.isHidden;\n    return isHidden ? 'none' : 'flex';\n  }, getItemState('default'), getPadding, getInteractiveStyles, getHeightStyles, getWidthStyles);\n}; // Given some optional link-related props, returns the relevant styled\n// component. For links, it styles the linkComponent if provided, otherwise\n// falling back to a styled <a> tag. If no href is present, a styled <span>\n// is returned. When we upgrade to styled-components@2.x we will be able to\n// simplify this by taking advantage of the withComponent() functionality.\n\nvar styledRootElement = function styledRootElement(_ref8) {\n  var href = _ref8.href,\n      linkComponent = _ref8.linkComponent;\n\n  if (linkComponent) {\n    return styled(linkComponent).withConfig({\n      displayName: \"Item\",\n      componentId: \"z6qfkt-0\"\n    })([\"\\n      \", \";\\n    \"], ItemBase);\n  }\n\n  if (href) {\n    return styled.a.withConfig({\n      displayName: \"Item\",\n      componentId: \"z6qfkt-1\"\n    })([\"\\n      \", \";\\n    \"], ItemBase);\n  }\n\n  return styled.span.withConfig({\n    displayName: \"Item\",\n    componentId: \"z6qfkt-2\"\n  })([\"\\n    \", \";\\n  \"], ItemBase);\n};\n\nexport default styledRootElement;","import styled, { css } from 'styled-components';\nimport { fontSize, fontSizeSmall } from '@atlaskit/theme/constants';\nimport { getThemeStyle, themeNamespace, compactSmallFontSize, compactLineHeight } from '../util/theme'; // Checkbox/Radio wrapper -- sits left of the children\n\nexport var InputWrapper = styled.span.withConfig({\n  displayName: \"ItemParts__InputWrapper\",\n  componentId: \"sc-14xek3m-0\"\n})([\"\\n  display: flex;\\n  margin: 0 2px;\\n\"]); // Elements injected before/after the children\n\nvar BeforeAfterBase = styled.span.withConfig({\n  displayName: \"ItemParts__BeforeAfterBase\",\n  componentId: \"sc-14xek3m-1\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n  flex-shrink: 0;\\n  /* Fix windows line-height issue */\\n  padding-bottom: 1px;\\n\"]);\n\nvar getBeforeSpacing = function getBeforeSpacing(_ref) {\n  var isCompact = _ref.isCompact,\n      theme = _ref.theme;\n  var spaceKey = isCompact ? 'compact' : 'default';\n  var space = getThemeStyle(theme[themeNamespace], spaceKey, 'beforeItemSpacing');\n  return css([\"\\n    margin-right: \", \"px;\\n  \"], space);\n};\n\nexport var Before = styled(BeforeAfterBase).withConfig({\n  displayName: \"ItemParts__Before\",\n  componentId: \"sc-14xek3m-2\"\n})([\"\\n  \", \";\\n\"], getBeforeSpacing);\n\nvar getAfterSpacing = function getAfterSpacing(_ref2) {\n  var isCompact = _ref2.isCompact,\n      theme = _ref2.theme;\n  var spaceKey = isCompact ? 'compact' : 'default';\n  var space = getThemeStyle(theme[themeNamespace], spaceKey, 'afterItemSpacing');\n  return css([\"\\n    margin-left: \", \"px;\\n  \"], space);\n};\n\nexport var After = styled(BeforeAfterBase).withConfig({\n  displayName: \"ItemParts__After\",\n  componentId: \"sc-14xek3m-3\"\n})([\"\\n  \", \";\\n\"], getAfterSpacing); // Alignment and layout for the children\n\nexport var ContentWrapper = styled.span.withConfig({\n  displayName: \"ItemParts__ContentWrapper\",\n  componentId: \"sc-14xek3m-4\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  flex-grow: 1;\\n  margin: 0;\\n  overflow: hidden;\\n\\n  &:first-child {\\n    margin: 0;\\n  }\\n\"]);\nexport var Content = styled.span.withConfig({\n  displayName: \"ItemParts__Content\",\n  componentId: \"sc-14xek3m-5\"\n})([\"\\n  display: block;\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: \", \";\\n  line-height: \", \";\\n  /* Fix windows line-height issue */\\n  padding-bottom: 1px;\\n\"], function (_ref3) {\n  var allowMultiline = _ref3.allowMultiline;\n  return allowMultiline ? 'normal' : 'nowrap';\n}, 16 / fontSize());\n\nvar getColorStyle = function getColorStyle(_ref4) {\n  var isDisabled = _ref4.isDisabled,\n      theme = _ref4.theme;\n\n  if (isDisabled) {\n    return css([\"\\n      color: \", \";\\n    \"], getThemeStyle(theme[themeNamespace], 'secondaryText', 'disabled'));\n  }\n\n  return css([\"\\n    color: \", \";\\n\\n    /* This detects hover on the grandparent. Saves us having to maintain isHovered\\n       state in the grandparent. */\\n    *:hover > * > & {\\n      color: \", \";\\n    }\\n\\n    *:active > * > & {\\n      color: \", \";\\n    }\\n  \"], getThemeStyle(theme[themeNamespace], 'secondaryText', 'default'), function () {\n    return getThemeStyle(theme[themeNamespace], 'secondaryText', 'hover');\n  }, function () {\n    return getThemeStyle(theme[themeNamespace], 'secondaryText', 'active');\n  });\n};\n\nvar getDescriptionFontStyles = function getDescriptionFontStyles(_ref5) {\n  var isCompact = _ref5.isCompact;\n  var descriptionFontSize = isCompact ? compactSmallFontSize : fontSizeSmall();\n  var lineHeight = isCompact ? compactLineHeight : 14 / descriptionFontSize;\n  return css([\"\\n    font-size: \", \"px;\\n    line-height: \", \";\\n    /* Fix windows line-height issue */\\n    padding-bottom: 1px;\\n  \"], descriptionFontSize, lineHeight);\n}; // Description is a block element below the children, like a subtitle\n\n\nexport var Description = styled.span.withConfig({\n  displayName: \"ItemParts__Description\",\n  componentId: \"sc-14xek3m-6\"\n})([\"\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  \", \" \", \";\\n\"], getColorStyle, getDescriptionFontStyles);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport styledRootElement from '../styled/Item';\nimport { Before, After, Content, ContentWrapper, Description } from '../styled/ItemParts';\n\nvar Item = /*#__PURE__*/function (_Component) {\n  _inherits(Item, _Component);\n\n  var _super = _createSuper(Item);\n\n  function Item(props) {\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    _this = _super.call(this, props); // The type of element rendered at the root of render() can vary based on the `href`\n    // and `linkComponent` props provided. We generate this component here to avoid re-\n    // generating the component inside render(). This is for performance reasons, and also\n    // allows us to avoid generating a new `ref` for the root element each render().\n\n    _defineProperty(_assertThisInitialized(_this), \"setRef\", function (ref) {\n      _this.ref = ref;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"href\", function () {\n      return _this.props.isDisabled ? null : _this.props.href;\n    });\n\n    _this.rootComponent = styledRootElement({\n      href: _this.href(),\n      linkComponent: props.linkComponent\n    });\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (this.ref && this.props.autoFocus) {\n        this.ref.focus();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          _onClick = _this$props.onClick,\n          _onKeyDown = _this$props.onKeyDown,\n          isCompact = _this$props.isCompact,\n          isDisabled = _this$props.isDisabled,\n          isDragging = _this$props.isDragging,\n          isHidden = _this$props.isHidden,\n          isSelected = _this$props.isSelected,\n          onMouseEnter = _this$props.onMouseEnter,\n          onMouseLeave = _this$props.onMouseLeave,\n          role = _this$props.role,\n          dnd = _this$props.dnd,\n          otherProps = _objectWithoutProperties(_this$props, [\"onClick\", \"onKeyDown\", \"isCompact\", \"isDisabled\", \"isDragging\", \"isHidden\", \"isSelected\", \"onMouseEnter\", \"onMouseLeave\", \"role\", \"dnd\"]);\n\n      var Root = this.rootComponent;\n      var dragHandleProps = dnd && dnd.dragHandleProps || null;\n      var patchedEventHandlers = {\n        onClick: function onClick(event) {\n          // rbd will use event.preventDefault() to block clicks that are used\n          // as a part of the drag and drop lifecycle.\n          if (event.defaultPrevented) {\n            return;\n          }\n\n          if (!isDisabled && _onClick) {\n            _onClick(event);\n          }\n        },\n        onMouseDown: function onMouseDown(event) {\n          // rbd 11.x support\n          if (dragHandleProps && dragHandleProps.onMouseDown) {\n            dragHandleProps.onMouseDown(event);\n          } // We want to prevent the item from getting focus when clicked\n\n\n          event.preventDefault();\n        },\n        onKeyDown: function onKeyDown(event) {\n          // swallowing keyboard events on the element while dragging\n          // rbd should already be doing this - but we are being really clear here\n          if (isDragging) {\n            return;\n          } // rbd 11.x support\n\n\n          if (dragHandleProps && dragHandleProps.onKeyDown) {\n            dragHandleProps.onKeyDown(event);\n          } // if default is prevented - do not fire other handlers\n          // this can happen if the event is used for drag and drop by rbd\n\n\n          if (event.defaultPrevented) {\n            return;\n          } // swallowing event if disabled\n\n\n          if (isDisabled) {\n            return;\n          }\n\n          if (!_onKeyDown) {\n            return;\n          }\n\n          _onKeyDown(event);\n        }\n      };\n\n      var patchedInnerRef = function patchedInnerRef(ref) {\n        _this2.setRef(ref); // give rbd the inner ref too\n\n\n        if (dnd && dnd.innerRef) {\n          dnd.innerRef(ref);\n        }\n      };\n\n      return /*#__PURE__*/React.createElement(Root, _extends({\n        \"aria-disabled\": isDisabled,\n        href: this.href(),\n        isCompact: isCompact,\n        isDisabled: isDisabled,\n        isDragging: isDragging,\n        isHidden: isHidden,\n        isSelected: isSelected,\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        role: role,\n        tabIndex: isDisabled || isHidden || this.props.href ? null : 0,\n        target: this.props.target,\n        title: this.props.title,\n        innerRef: patchedInnerRef\n      }, dnd && dnd.draggableProps, dragHandleProps, patchedEventHandlers, otherProps), !!this.props.elemBefore && /*#__PURE__*/React.createElement(Before, {\n        isCompact: isCompact\n      }, this.props.elemBefore), /*#__PURE__*/React.createElement(ContentWrapper, null, /*#__PURE__*/React.createElement(Content, {\n        allowMultiline: this.props.shouldAllowMultiline\n      }, this.props.children), !!this.props.description && /*#__PURE__*/React.createElement(Description, {\n        isCompact: this.props.isCompact,\n        isDisabled: this.props.isDisabled\n      }, this.props.description)), !!this.props.elemAfter && /*#__PURE__*/React.createElement(After, {\n        isCompact: isCompact\n      }, this.props.elemAfter));\n    }\n  }]);\n\n  return Item;\n}(Component);\n\n_defineProperty(Item, \"defaultProps\", {\n  autoFocus: false,\n  description: '',\n  isCompact: false,\n  isDisabled: false,\n  isHidden: false,\n  role: 'button',\n  shouldAllowMultiline: false\n});\n\nexport { Item as default };","import Item, { withItemClick, withItemFocus } from '@atlaskit/item';\n// We need to type this with the above type - currently this component is has \"any\" for its props.\nexport default withItemClick(withItemFocus(Item));","import { portalClassName, portalParentClassName, portalParentSelector, portalSelector } from '../constants';\n/**\n * Creates a new portal container element with provided z-index and class name 'atlaskit-portal',\n * it is not be attached to any DOM node at this stage.\n * @param {number | string} zIndex - the z-index value of the newly created portal container element\n * @return {number} - The newly created container element\n */\n\nexport var createContainer = function createContainer(zIndex) {\n  var container = document.createElement('div');\n  container.className = portalClassName;\n  container.style.zIndex = \"\".concat(zIndex);\n  return container;\n};\n/**\n * Returns document body element\n * @return {number} - The document body element\n */\n\nvar getBody = function getBody() {\n  return document.body;\n};\n/**\n * Returns portal parent container. If no container exists already then it creates a new container with class name 'atlaskit-portal-container'\n * @return {Element} - The portal parent container div element\n */\n\n\nvar getPortalParent = function getPortalParent() {\n  var parentElement = document.querySelector(portalParentSelector);\n\n  if (!parentElement) {\n    var parent = document.createElement('div');\n    parent.className = portalParentClassName; // we are setting display to flex because we want each portal to create a new stacking context\n    // See https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n\n    parent.style.display = 'flex';\n    getBody().appendChild(parent);\n    return parent;\n  }\n\n  return parentElement;\n};\n/**\n * Removes portal parent container from document body\n */\n\n\nvar removePortalParent = function removePortalParent() {\n  getBody().removeChild(getPortalParent());\n};\n/**\n * Removes portal container from portal parent container\n *  @param {HTMLDivElement | undefined} container - portal container to be removed from portal parent container\n */\n\n\nexport var removePortalContainer = function removePortalContainer(container) {\n  getPortalParent().removeChild(container);\n};\n/**\n * Appends portal container to portal parent container if it hasn't already been done\n *  @param {HTMLDivElement | undefined} container - portal container to be added to portal parent container\n */\n\nexport var appendPortalContainerIfNotAppended = function appendPortalContainerIfNotAppended(container) {\n  if (!container.parentElement) {\n    getPortalParent().appendChild(container);\n  }\n};\n/**\n * Removes portal parent container from document body if there are no more portals inside it\n */\n\nexport var removePortalParentContainerIfNoMorePortals = function removePortalParentContainerIfNoMorePortals() {\n  if (!document.querySelector(portalSelector)) {\n    removePortalParent();\n  }\n};","export var portalSelector = 'body > .atlaskit-portal-container > .atlaskit-portal';\nexport var portalParentClassName = 'atlaskit-portal-container';\nexport var portalParentSelector = 'body > .atlaskit-portal-container';\nexport var portalClassName = 'atlaskit-portal';","import { useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { appendPortalContainerIfNotAppended, createContainer, removePortalContainer, removePortalParentContainerIfNoMorePortals } from '../utils/portal-dom-utils';\nexport default function InternalPortal(props) {\n  var zIndex = props.zIndex,\n      children = props.children;\n  var container = useMemo(function () {\n    return createContainer(zIndex);\n  }, [zIndex]); // This is in the render method instead of useEffect so that\n  // the portal will be added to the DOM before the children render.\n  // For any further changes, ensure that the container does not have a\n  // parent besides the portal parent.\n\n  appendPortalContainerIfNotAppended(container);\n  useEffect(function () {\n    return function () {\n      removePortalContainer(container);\n      removePortalParentContainerIfNoMorePortals();\n    };\n  }, [container]);\n  return /*#__PURE__*/createPortal(children, container);\n}","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport { useEffect, useState } from 'react';\n\nvar useIsSubsequentRender = function useIsSubsequentRender() {\n  var _useState = useState(false),\n      _useState2 = _slicedToArray(_useState, 2),\n      isSubsequentRender = _useState2[0],\n      setIsSubsequentRender = _useState2[1];\n\n  useEffect(function () {\n    setIsSubsequentRender(true);\n  }, []);\n  return isSubsequentRender;\n};\n\nexport default useIsSubsequentRender;","var zIndexToName = {\n  100: 'card',\n  200: 'navigation',\n  300: 'dialog',\n  400: 'layer',\n  500: 'blanket',\n  510: 'modal',\n  600: 'flag',\n  700: 'spotlight',\n  800: 'tooltip'\n};\n/**\n * return layer name in Atlassian design system corresponding to given z-index\n * @param {number} zIndex - z-index value for which layer name is needed\n * @returns {LayerName | null} - The layer name for given z-index. If layer name is not found then null is returned\n */\n\nvar getLayerName = function getLayerName(zIndex) {\n  return zIndexToName.hasOwnProperty(zIndex) ? zIndexToName[zIndex] : null;\n};\n/**\n * Creates a PortalEvent object with given eventName, given zIndex and corresponding layer\n * @param {string} eventName - either of Mount or Unmount event name\n * @param {number} zIndex - z-index value which will be included in the event to be dispatched\n * @returns {PortalEvent} - The newly created PortalEvent object\n */\n\n\nvar getEvent = function getEvent(eventName, zIndex) {\n  var detail = {\n    layer: getLayerName(Number(zIndex)),\n    zIndex: zIndex\n  };\n  return new CustomEvent(eventName, {\n    detail: detail\n  });\n};\n/**\n * Dispatches a custom event on window with given eventName, given zIndex and corresponding layer\n * @param {string} eventName - either of Mount or Unmount event name\n * @param {number} zIndex - z-index value which will be included in the event to be dispatched\n */\n\n\nexport default function firePortalEvent(eventName, zIndex) {\n  var event = getEvent(eventName, zIndex);\n  window.dispatchEvent(event);\n}","import { useEffect } from 'react';\nimport { PORTAL_MOUNT_EVENT, PORTAL_UNMOUNT_EVENT } from '../../constants';\nimport firePortalEvent from '../utils/portal-custom-event';\n\nvar useFirePortalEvent = function useFirePortalEvent(zIndex) {\n  var zIndexNumber = Number(zIndex);\n  useEffect(function () {\n    firePortalEvent(PORTAL_MOUNT_EVENT, zIndexNumber);\n    return function () {\n      firePortalEvent(PORTAL_UNMOUNT_EVENT, zIndexNumber);\n    };\n  }, [zIndexNumber]);\n};\n\nexport default useFirePortalEvent;","export var PORTAL_MOUNT_EVENT = 'akPortalMount';\nexport var PORTAL_UNMOUNT_EVENT = 'akPortalUnmount';","import React from 'react';\nimport InternalPortal from './internal/components/internal-portal';\nimport useIsSubsequentRender from './internal/hooks/use-is-subsequent-render';\nimport useFirePortalEvent from './internal/hooks/use-portal-event';\nexport default function Portal(props) {\n  var _props$zIndex = props.zIndex,\n      zIndex = _props$zIndex === void 0 ? 0 : _props$zIndex,\n      children = props.children;\n  var isSubsequentRender = useIsSubsequentRender();\n  useFirePortalEvent(zIndex);\n  return isSubsequentRender ? /*#__PURE__*/React.createElement(InternalPortal, {\n    zIndex: zIndex\n  }, children) : null;\n}","import { B200, B400, B500, B75, DN0, DN400, N30, N500 } from '@atlaskit/theme/colors';\nvar navItemColorMap = {\n  light: {\n    labelColor: N500,\n    activeLabelColor: B500,\n    hoverLabelColor: B400,\n    selectedColor: B400\n  },\n  dark: {\n    labelColor: DN400,\n    activeLabelColor: B200,\n    hoverLabelColor: B75,\n    selectedColor: B75\n  }\n};\nexport var getNavItemColors = function getNavItemColors(mode) {\n  return navItemColorMap[mode];\n};\nvar navLineColorMap = {\n  light: {\n    lineColor: N30,\n    selectedColor: B400\n  },\n  dark: {\n    lineColor: DN0,\n    selectedColor: B75\n  }\n};\nexport var getNavLineColor = function getNavLineColor(mode) {\n  return navLineColorMap[mode];\n};","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject6() {\n  var data = _taggedTemplateLiteral([\"\\n    color: \", \";\\n    cursor: pointer;\\n    line-height: 1.8;\\n    margin: 0;\\n    padding: \", \"px \", \"px;\\n    position: relative;\\n    white-space: nowrap;\\n    overflow: hidden;\\n    text-overflow: ellipsis;\\n\\n    &:hover {\\n      color: \", \";\\n    }\\n    &:active,\\n    &:active::before {\\n      color: \", \";\\n    }\\n\\n    &:focus {\\n      border-radius: \", \"px;\\n      /*\\n        You can only focus on the selected tab\\n        so use the selected color\\n       */\\n      box-shadow: 0 0 0 2px \", \" inset;\\n      outline: none;\\n    }\\n\\n    /* If selected then don't use any of these styles */\\n    &&[data-selected] {\\n      color: \", \";\\n    }\\n  \"]);\n\n  _templateObject6 = function _templateObject6() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject5() {\n  var data = _taggedTemplateLiteral([\"\\n    background-color: \", \";\\n    border-radius: \", \";\\n    bottom: 0;\\n    content: '';\\n    height: \", \";\\n    left: \", \"px;\\n    margin: 0;\\n    position: absolute;\\n    right: \", \"px;\\n    width: inherit;\\n    &[data-selected] {\\n      background-color: \", \";\\n    }\\n  \"]);\n\n  _templateObject5 = function _templateObject5() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject4() {\n  var data = _taggedTemplateLiteral([\"\\n  display: flex;\\n  font-weight: 500;\\n  list-style-type: none;\\n  margin: 0;\\n  padding: 0;\\n\"]);\n\n  _templateObject4 = function _templateObject4() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n  position: relative;\\n\"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n  flex-grow: 1;\\n  min-height: 0%; /* See min-height note */\\n  padding-left: \", \"px;\\n  padding-right: \", \"px;\\n  display: none;\\n  &[data-selected] {\\n    display: flex;\\n  }\\n\"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  display: flex;\\n  flex-basis: 100%;\\n  flex-direction: column;\\n  flex-grow: 1;\\n  max-width: 100%;\\n  min-height: 0%; /* See min-height note */\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport { css } from '@emotion/core';\nimport { borderRadius as getBorderRadius, gridSize as getGridSize } from '@atlaskit/theme/constants';\nimport { getNavItemColors, getNavLineColor } from './colors';\nvar borderRadius = getBorderRadius();\nvar gridSize = getGridSize();\n/*\n  NOTE min-height attribute\n  FF http://stackoverflow.com/questions/28636832/firefox-overflow-y-not-working-with-nested-flexbox\n*/\n\nexport var tabStyles = css(_templateObject());\nexport var tabPaneStyles = css(_templateObject2(), gridSize, gridSize);\nexport var navWrapperStyles = css(_templateObject3());\nexport var navStyles = css(_templateObject4());\nvar underlineHeight = '2px';\nexport var getNavLineStyles = function getNavLineStyles(mode) {\n  var colors = getNavLineColor(mode);\n  return css(_templateObject5(), colors.lineColor, underlineHeight, underlineHeight, gridSize, gridSize, colors.selectedColor);\n};\nexport var getNavItemStyles = function getNavItemStyles(mode) {\n  var colors = getNavItemColors(mode);\n  return css(_templateObject6(), colors.labelColor, gridSize / 2, gridSize, colors.hoverLabelColor, colors.activeLabelColor, borderRadius, colors.selectedColor, colors.selectedColor);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport { Component } from 'react';\nimport { jsx } from '@emotion/core';\nimport { tabPaneStyles } from '../internal/styles';\n\nvar TabContent = /*#__PURE__*/function (_Component) {\n  _inherits(TabContent, _Component);\n\n  var _super = _createSuper(TabContent);\n\n  function TabContent() {\n    _classCallCheck(this, TabContent);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TabContent, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          data = _this$props.data,\n          elementProps = _this$props.elementProps,\n          isSelected = _this$props.isSelected;\n      return jsx(\"div\", _extends({\n        css: tabPaneStyles\n      }, elementProps, {\n        \"data-selected\": isSelected ? 'true' : undefined\n      }), data.content);\n    }\n  }]);\n\n  return TabContent;\n}(Component);\n\n_defineProperty(TabContent, \"defaultProps\", {\n  data: {},\n  elementProps: {},\n  isSelected: false\n});\n\nexport { TabContent as default };","/** @jsx jsx */\nimport { useMemo } from 'react';\nimport { jsx } from '@emotion/core';\nimport { getNavLineStyles } from '../internal/styles';\n\nvar NavLine = function NavLine(_ref) {\n  var status = _ref.status,\n      mode = _ref.mode;\n  return jsx(\"span\", {\n    css: useMemo(function () {\n      return getNavLineStyles(mode);\n    }, [mode]),\n    \"data-selected\": status === 'selected' ? true : undefined\n  });\n};\n\nexport default NavLine;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport { Component } from 'react';\nimport { jsx } from '@emotion/core';\nimport { getNavItemStyles } from '../internal/styles';\nimport NavLine from './NavLine';\n\nvar noop = function noop() {};\n\nvar TabItem = /*#__PURE__*/function (_Component) {\n  _inherits(TabItem, _Component);\n\n  var _super = _createSuper(TabItem);\n\n  function TabItem() {\n    _classCallCheck(this, TabItem);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(TabItem, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          data = _this$props.data,\n          elementProps = _this$props.elementProps,\n          innerRef = _this$props.innerRef,\n          isSelected = _this$props.isSelected,\n          mode = _this$props.mode;\n      return jsx(\"div\", _extends({\n        css: getNavItemStyles(mode)\n      }, elementProps, {\n        ref: innerRef,\n        \"data-selected\": isSelected ? true : undefined\n      }), data.label, isSelected && jsx(NavLine, {\n        status: \"selected\",\n        mode: mode\n      }));\n    }\n  }]);\n\n  return TabItem;\n}(Component);\n\n_defineProperty(TabItem, \"defaultProps\", {\n  data: {},\n  elementProps: {},\n  innerRef: noop,\n  isSelected: false,\n  mode: 'light'\n});\n\nexport { TabItem as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport { Component } from 'react';\nimport { jsx } from '@emotion/core';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { navStyles, navWrapperStyles } from '../internal/styles';\nimport NavLine from './NavLine';\n\nvar TabsNavigation = /*#__PURE__*/function (_Component) {\n  _inherits(TabsNavigation, _Component);\n\n  var _super = _createSuper(TabsNavigation);\n\n  function TabsNavigation() {\n    var _this;\n\n    _classCallCheck(this, TabsNavigation);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"elementRefs\", []);\n\n    _defineProperty(_assertThisInitialized(_this), \"tabKeyDownHandler\", function (e) {\n      if (!['ArrowRight', 'ArrowLeft'].includes(e.key)) {\n        return;\n      }\n\n      var _this$props = _this.props,\n          selected = _this$props.selected,\n          tabs = _this$props.tabs;\n      var modifier = e.key === 'ArrowRight' ? 1 : -1;\n      var newselectedIndex = tabs.indexOf(selected) + modifier;\n\n      if (newselectedIndex < 0 || newselectedIndex >= tabs.length) {\n        return;\n      }\n\n      _this.onSelect(tabs[newselectedIndex], newselectedIndex);\n\n      _this.elementRefs[newselectedIndex].focus();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSelect\", function (selected, selectedIndex) {\n      _this.props.onSelect(selected, selectedIndex);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"tabMouseDownHandler\", function (e) {\n      return e.preventDefault();\n    });\n\n    return _this;\n  }\n\n  _createClass(TabsNavigation, [{\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(newProps) {\n      if (newProps.tabs !== this.props.tabs) {\n        this.elementRefs = [];\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          selected = _this$props2.selected,\n          Item = _this$props2.component,\n          tabs = _this$props2.tabs;\n      return jsx(GlobalTheme.Consumer, null, function (_ref) {\n        var mode = _ref.mode;\n        return jsx(\"div\", {\n          css: navWrapperStyles\n        }, jsx(NavLine, {\n          status: \"normal\",\n          mode: mode\n        }), jsx(\"div\", {\n          role: \"tablist\",\n          css: navStyles\n        }, tabs.map(function (tab, index) {\n          var isSelected = tab === selected;\n          var elementProps = {\n            'aria-posinset': index + 1,\n            'aria-selected': isSelected,\n            'aria-setsize': tabs.length,\n            'data-testid': tab.testId,\n            onClick: function onClick() {\n              return _this2.onSelect(tab, index);\n            },\n            onKeyDown: _this2.tabKeyDownHandler,\n            onMouseDown: _this2.tabMouseDownHandler,\n            role: 'tab',\n            tabIndex: isSelected ? 0 : -1\n          };\n\n          var innerRef = function innerRef(ref) {\n            _this2.elementRefs[index] = ref;\n          };\n\n          var itemProps = {\n            elementProps: elementProps,\n            innerRef: innerRef,\n            data: tab,\n            isSelected: isSelected,\n            mode: mode\n          };\n          return jsx(Item, _extends({\n            key: index\n          }, itemProps));\n        })));\n      });\n    }\n  }]);\n\n  return TabsNavigation;\n}(Component);\n\nexport { TabsNavigation as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/** @jsx jsx */\nimport { Component } from 'react';\nimport { jsx } from '@emotion/core';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport { tabStyles } from '../internal/styles';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport DefaultTabContent from './TabContent';\nimport DefaultTabItem from './TabItem';\nimport TabsNavigation from './TabsNavigation';\n\nvar defaultIsSelectedTestNumber = function defaultIsSelectedTestNumber(selectedIndex, _tab, tabIndex) {\n  return selectedIndex === tabIndex;\n};\n\nvar defaultIsSelectedTestObject = function defaultIsSelectedTestObject(selected, tab) {\n  return selected === tab;\n};\n\nvar defaultComponents = {\n  Content: DefaultTabContent,\n  Item: DefaultTabItem\n};\n\nvar Tabs = /*#__PURE__*/function (_Component) {\n  _inherits(Tabs, _Component);\n\n  var _super = _createSuper(Tabs);\n\n  function Tabs(props) {\n    var _this;\n\n    _classCallCheck(this, Tabs);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"resolveSelected\", function (selected, newProps) {\n      var _ref = newProps || _this.props,\n          tabs = _ref.tabs,\n          isSelectedTest = _ref.isSelectedTest;\n\n      var testFunction = function () {\n        if (isSelectedTest) {\n          return isSelectedTest;\n        }\n\n        if (typeof selected === 'number') {\n          return defaultIsSelectedTestNumber;\n        }\n\n        return defaultIsSelectedTestObject;\n      }();\n\n      return tabs.find(function (tab, tabIndex) {\n        return testFunction(selected, tab, tabIndex);\n      }) || tabs[0];\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSelect\", function (newselected, newSelectedIndex) {\n      var _this$props = _this.props,\n          onSelect = _this$props.onSelect,\n          selected = _this$props.selected;\n\n      if (typeof onSelect === 'function') {\n        onSelect(newselected, newSelectedIndex);\n      }\n\n      if (typeof selected === 'undefined') {\n        _this.setState({\n          selected: newselected\n        });\n      }\n    });\n\n    var initiallyselected = _this.props.selected || _this.props.defaultSelected || _this.props.tabs[0];\n\n    var _selected = _this.resolveSelected(initiallyselected);\n\n    _this.state = {\n      selected: _selected\n    };\n    return _this;\n  }\n\n  _createClass(Tabs, [{\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(newProps) {\n      if (typeof newProps.selected !== 'undefined' && newProps.selected !== this.state.selected) {\n        var selected = this.resolveSelected(newProps.selected, newProps);\n        this.setState({\n          selected: selected\n        });\n      } else if (newProps.tabs !== this.props.tabs) {\n        var updatedselected = this.resolveSelected(this.state.selected, newProps);\n        this.setState({\n          selected: updatedselected\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          components = _this$props2.components,\n          tabs = _this$props2.tabs,\n          testId = _this$props2.testId,\n          isContentPersisted = _this$props2.isContentPersisted;\n      var selected = this.state.selected;\n\n      var _defaultComponents$co = _objectSpread(_objectSpread({}, defaultComponents), components),\n          Content = _defaultComponents$co.Content,\n          Item = _defaultComponents$co.Item;\n\n      var contents = function contents() {\n        return tabs.map(function (tab, index) {\n          var isSelected = tab === selected;\n          var contentProps = {\n            data: tab,\n            elementProps: {\n              role: 'tabpanel'\n            },\n            isSelected: isSelected\n          };\n          return jsx(Content, _extends({\n            key: index\n          }, contentProps));\n        });\n      };\n\n      var contentProps = {\n        data: selected,\n        elementProps: {\n          role: 'tabpanel'\n        },\n        isSelected: true\n      };\n      return jsx(\"div\", {\n        \"data-testid\": testId,\n        css: tabStyles\n      }, jsx(TabsNavigation, {\n        component: Item,\n        onSelect: this.onSelect,\n        selected: selected,\n        tabs: tabs\n      }), isContentPersisted ? contents() : jsx(Content, contentProps));\n    }\n  }]);\n\n  return Tabs;\n}(Component);\n\n_defineProperty(Tabs, \"defaultProps\", {\n  components: {},\n  isContentPersisted: false\n});\n\nexport { Tabs as TabsWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'tabs',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onSelect: createAndFireEventOnAtlaskit({\n    action: 'clicked',\n    actionSubject: 'tab',\n    attributes: {\n      componentName: 'tabs',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Tabs));","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useCallback } from 'react';\nimport { useAnalyticsEvents } from './useAnalyticsEvents';\nimport { useTrackedRef } from './useTrackedRef';\n// WARNING: This hook will only function correctly for leaf node components - as in\n// no children inside the component will require analytics themselves.\n// Ignoring this warning will mean the analytics context of child components will not\n// include the context of this component, .e.g, lost data.\n// If you are going to have child components that require analytics use withAnalytics\n// or AnalyticsContext component instead.\nexport function usePlatformLeafSyntheticEventHandler(_ref) {\n  var fn = _ref.fn,\n      action = _ref.action,\n      componentName = _ref.componentName,\n      packageName = _ref.packageName,\n      packageVersion = _ref.packageVersion,\n      analyticsData = _ref.analyticsData;\n\n  var _useAnalyticsEvents = useAnalyticsEvents(),\n      createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent; // We put analyticsData and fn in a ref so that we don't need to break\n  // memoization.\n  // Generally these could be defined by consumers inline\n  // and so we do this to avoid breaking memoization of useCallback\n\n\n  var dataRef = useTrackedRef(analyticsData);\n  var fnRef = useTrackedRef(fn);\n  var handler = useCallback(function () {\n    var analyticsEvent = createAnalyticsEvent({\n      action: action,\n      actionSubject: componentName,\n      attributes: {\n        componentName: componentName,\n        packageName: packageName,\n        packageVersion: packageVersion\n      }\n    }); // To avoid wrapping this component in AnalyticsContext we manually\n    // push the parent context's meta data into the context.\n    // Note: this new 'context'\n\n    var context = _objectSpread({\n      componentName: componentName,\n      packageName: packageName,\n      packageVersion: packageVersion\n    }, dataRef.current);\n\n    analyticsEvent.context.push(context); // fire an event on the atlaskit channel\n\n    var clone = analyticsEvent.clone();\n\n    if (clone) {\n      clone.fire('atlaskit');\n    }\n\n    fnRef.current(analyticsEvent);\n  }, [// These are strings and won't change\n  action, componentName, packageName, packageVersion, // This function is memoized in the context\n  createAnalyticsEvent, // these are a stable ref because of the useTrackedRef hook\n  dataRef, fnRef]);\n  return handler;\n}","var delayId = null;\nexport function clearScheduled() {\n  if (delayId != null) {\n    window.clearTimeout(delayId);\n    delayId = null;\n  }\n}\nexport function scheduleTimeout(fn, delay) {\n  clearScheduled();\n  delayId = window.setTimeout(function () {\n    delayId = null;\n    fn();\n  }, delay);\n}","import { clearScheduled, scheduleTimeout } from './shared-schedule'; // This file is a singleton for managing tooltips\n\nvar active = null;\nexport function show(entry) {\n  var phase = 'waiting-to-show';\n\n  function isActive() {\n    return Boolean(active && active.entry === entry);\n  }\n\n  function cleanup() {\n    if (isActive()) {\n      clearScheduled();\n      active = null;\n    }\n  }\n\n  function done() {\n    if (isActive()) {\n      entry.done();\n    }\n\n    phase = 'done';\n    cleanup();\n  }\n\n  function immediatelyHideAndDone() {\n    if (isActive()) {\n      entry.hide({\n        isImmediate: true\n      });\n    }\n\n    done();\n  }\n\n  function keep() {\n    if (!isActive()) {\n      return;\n    } // aborting a wait to hide\n\n\n    if (phase === 'waiting-to-hide') {\n      phase = 'shown';\n      clearScheduled();\n      return;\n    } // aborting hide animation\n\n\n    if (phase === 'hide-animating') {\n      phase = 'shown';\n      clearScheduled();\n      entry.show({\n        isImmediate: false\n      });\n      return;\n    }\n  }\n\n  function requestHide(_ref) {\n    var isImmediate = _ref.isImmediate;\n\n    if (!isActive()) {\n      return;\n    } // If we were not showing yet anyway; finish straight away\n\n\n    if (phase === 'waiting-to-show') {\n      immediatelyHideAndDone();\n      return;\n    } // already waiting to hide\n\n\n    if (phase === 'waiting-to-hide') {\n      return;\n    }\n\n    if (isImmediate) {\n      immediatelyHideAndDone();\n      return;\n    }\n\n    phase = 'waiting-to-hide';\n    scheduleTimeout(function () {\n      phase = 'hide-animating';\n      entry.hide({\n        isImmediate: false\n      });\n    }, entry.delay);\n  }\n\n  function finishHideAnimation() {\n    if (isActive() && phase === 'hide-animating') {\n      done();\n    }\n  }\n\n  function isVisible() {\n    return phase === 'shown' || phase === 'waiting-to-hide' || phase === 'hide-animating';\n  }\n\n  function getInitialMouse() {\n    if (entry.source.type === 'mouse') {\n      return entry.source.mouse;\n    }\n\n    return null;\n  }\n\n  function start() {\n    var showImmediately = Boolean(active && active.isVisible()); // If there was an active tooltip; we tell it to remove itself at once!\n\n    if (active) {\n      clearScheduled();\n      active.entry.hide({\n        isImmediate: true\n      });\n      active.entry.done();\n      active = null;\n    } // this tooltip is now the active tooltip\n\n\n    active = {\n      entry: entry,\n      isVisible: isVisible\n    };\n\n    function show() {\n      phase = 'shown';\n      entry.show({\n        isImmediate: showImmediately\n      });\n    }\n\n    if (showImmediately) {\n      show();\n      return;\n    }\n\n    phase = 'waiting-to-show';\n    scheduleTimeout(show, entry.delay);\n  } // let's get started!\n\n\n  start();\n  var result = {\n    keep: keep,\n    abort: cleanup,\n    isActive: isActive,\n    requestHide: requestHide,\n    finishHideAnimation: finishHideAnimation,\n    getInitialMouse: getInitialMouse\n  };\n  return result;\n}","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  z-index: \", \";\\n  pointer-events: none;\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport { forwardRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { layers } from '@atlaskit/theme/constants';\nvar primitiveCss = css(_templateObject(), layers.tooltip());\nvar TooltipPrimitive = /*#__PURE__*/forwardRef(function TooltipPrimitive(_ref, ref) {\n  var style = _ref.style,\n      className = _ref.className,\n      children = _ref.children,\n      placement = _ref.placement,\n      testId = _ref.testId;\n  return jsx(\"div\", {\n    role: \"tooltip\",\n    ref: ref,\n    style: style,\n    className: className,\n    css: primitiveCss,\n    \"data-placement\": placement,\n    \"data-testid\": testId\n  }, children);\n});\nTooltipPrimitive.displayName = 'TooltipPrimitive';\nexport default TooltipPrimitive;","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n                background-color: \", \";\\n                color: \", \";\\n              \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n  max-width: 420px;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n\"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  border-radius: \", \"px;\\n  box-sizing: border-box;\\n  font-size: 12px;\\n  left: 0;\\n  line-height: 1.3;\\n  max-width: 240px;\\n  padding: 2px 6px;\\n  top: 0;\\n  word-wrap: break-word;\\n  overflow-wrap: break-word;\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport { forwardRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { DN0, DN600, N0, N800 } from '@atlaskit/theme/colors';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { borderRadius } from '@atlaskit/theme/constants';\nimport TooltipPrimitive from './TooltipPrimitive';\nvar baseCss = css(_templateObject(), borderRadius());\nvar truncateCss = css(_templateObject2());\nvar TooltipContainer = /*#__PURE__*/forwardRef(function TooltipContainer(_ref, ref) {\n  var style = _ref.style,\n      className = _ref.className,\n      children = _ref.children,\n      truncate = _ref.truncate,\n      placement = _ref.placement,\n      testId = _ref.testId;\n  return jsx(GlobalTheme.Consumer, null, function (_ref2) {\n    var mode = _ref2.mode;\n    return jsx(TooltipPrimitive, {\n      ref: ref,\n      style: style,\n      className: className,\n      placement: placement,\n      testId: testId,\n      css: [baseCss, truncate ? truncateCss : null, css(_templateObject3(), mode === 'light' ? N800 : DN0, mode === 'light' ? N0 : DN600)]\n    }, children);\n  });\n});\nTooltipContainer.displayName = 'TooltipContainer';\nexport default TooltipContainer;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/** @jsx jsx */\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { jsx } from '@emotion/core';\nimport { bind } from 'bind-event-listener';\nimport { usePlatformLeafSyntheticEventHandler } from '@atlaskit/analytics-next';\nimport { ExitingPersistence, FadeIn } from '@atlaskit/motion';\nimport { Popper } from '@atlaskit/popper';\nimport Portal from '@atlaskit/portal';\nimport { layers } from '@atlaskit/theme/constants';\nimport { show } from './internal/tooltip-manager';\nimport TooltipContainer from './TooltipContainer';\nimport { getMousePosition } from './utilities';\nimport { name as packageName, version as packageVersion } from './version.json';\nvar tooltipZIndex = layers.tooltip();\nvar analyticsAttributes = {\n  componentName: 'tooltip',\n  packageName: packageName,\n  packageVersion: packageVersion\n};\n\nfunction noop() {}\n\nfunction Tooltip(_ref) {\n  var children = _ref.children,\n      _ref$position = _ref.position,\n      position = _ref$position === void 0 ? 'bottom' : _ref$position,\n      _ref$mousePosition = _ref.mousePosition,\n      mousePosition = _ref$mousePosition === void 0 ? 'bottom' : _ref$mousePosition,\n      content = _ref.content,\n      _ref$truncate = _ref.truncate,\n      truncate = _ref$truncate === void 0 ? false : _ref$truncate,\n      _ref$component = _ref.component,\n      Container = _ref$component === void 0 ? TooltipContainer : _ref$component,\n      _ref$tag = _ref.tag,\n      TargetContainer = _ref$tag === void 0 ? 'div' : _ref$tag,\n      testId = _ref.testId,\n      _ref$delay = _ref.delay,\n      delay = _ref$delay === void 0 ? 300 : _ref$delay,\n      _ref$onShow = _ref.onShow,\n      onShow = _ref$onShow === void 0 ? noop : _ref$onShow,\n      _ref$onHide = _ref.onHide,\n      onHide = _ref$onHide === void 0 ? noop : _ref$onHide,\n      _ref$hideTooltipOnCli = _ref.hideTooltipOnClick,\n      hideTooltipOnClick = _ref$hideTooltipOnCli === void 0 ? false : _ref$hideTooltipOnCli,\n      _ref$hideTooltipOnMou = _ref.hideTooltipOnMouseDown,\n      hideTooltipOnMouseDown = _ref$hideTooltipOnMou === void 0 ? false : _ref$hideTooltipOnMou,\n      analyticsContext = _ref.analyticsContext,\n      _ref$strategy = _ref.strategy,\n      strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy;\n  var tooltipPosition = position === 'mouse' ? mousePosition : position;\n  var onShowHandler = usePlatformLeafSyntheticEventHandler(_objectSpread({\n    fn: onShow,\n    action: 'displayed',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var onHideHandler = usePlatformLeafSyntheticEventHandler(_objectSpread({\n    fn: onHide,\n    action: 'hidden',\n    analyticsData: analyticsContext\n  }, analyticsAttributes));\n  var apiRef = useRef(null);\n\n  var _useState = useState('hide'),\n      _useState2 = _slicedToArray(_useState, 2),\n      state = _useState2[0],\n      setState = _useState2[1];\n\n  var targetRef = useRef(null);\n  var containerRef = useRef(null);\n  var setRef = useCallback(function (node) {\n    if (!node || node.firstChild === null) {\n      return;\n    } // @ts-ignore - React Ref typing is too strict for this use case\n\n\n    containerRef.current = node; // @ts-ignore - React Ref typing is too strict for this use case\n\n    targetRef.current = node.firstChild;\n  }, []); // Putting a few things into refs so that we don't have to break memoization\n\n  var lastState = useRef(state);\n  var lastDelay = useRef(delay);\n  var lastHandlers = useRef({\n    onShowHandler: onShowHandler,\n    onHideHandler: onHideHandler\n  });\n  var hasCalledShowHandler = useRef(false);\n  useEffect(function () {\n    lastState.current = state;\n    lastDelay.current = delay;\n    lastHandlers.current = {\n      onShowHandler: onShowHandler,\n      onHideHandler: onHideHandler\n    };\n  }, [delay, onHideHandler, onShowHandler, state]);\n  var start = useCallback(function (api) {\n    // @ts-ignore\n    apiRef.current = api;\n    hasCalledShowHandler.current = false;\n  }, []);\n  var done = useCallback(function () {\n    if (!apiRef.current) {\n      return;\n    } // Only call onHideHandler if we have called onShowHandler\n\n\n    if (hasCalledShowHandler.current) {\n      lastHandlers.current.onHideHandler();\n    } // @ts-ignore\n\n\n    apiRef.current = null; // @ts-ignore\n\n    hasCalledShowHandler.current = false; // just in case\n\n    setState('hide');\n  }, []);\n  var abort = useCallback(function () {\n    if (!apiRef.current) {\n      return;\n    }\n\n    apiRef.current.abort(); // Only call onHideHandler if we have called onShowHandler\n\n    if (hasCalledShowHandler.current) {\n      lastHandlers.current.onHideHandler();\n    } // @ts-ignore\n\n\n    apiRef.current = null;\n  }, []);\n  useEffect(function mount() {\n    return function unmount() {\n      if (apiRef.current) {\n        abort();\n      }\n    };\n  }, [abort]);\n  var showTooltip = useCallback(function (source) {\n    if (apiRef.current && !apiRef.current.isActive()) {\n      abort();\n    } // Tell the tooltip to keep showing\n\n\n    if (apiRef.current && apiRef.current.isActive()) {\n      apiRef.current.keep();\n      return;\n    }\n\n    var entry = {\n      source: source,\n      delay: lastDelay.current,\n      show: function show(_ref2) {\n        var isImmediate = _ref2.isImmediate;\n\n        // Call the onShow handler if it hasn't been called yet\n        if (!hasCalledShowHandler.current) {\n          hasCalledShowHandler.current = true;\n          lastHandlers.current.onShowHandler();\n        }\n\n        setState(isImmediate ? 'show-immediate' : 'show-fade-in');\n      },\n      hide: function hide(_ref3) {\n        var isImmediate = _ref3.isImmediate;\n        setState(function (current) {\n          if (current !== 'hide') {\n            return isImmediate ? 'hide' : 'fade-out';\n          }\n\n          return current;\n        });\n      },\n      done: done\n    };\n    var api = show(entry);\n    start(api);\n  }, [abort, done, start]);\n  useEffect(function () {\n    if (state === 'hide') {\n      return noop;\n    }\n\n    var unbind = bind(window, {\n      type: 'scroll',\n      listener: function listener() {\n        if (apiRef.current) {\n          apiRef.current.requestHide({\n            isImmediate: true\n          });\n        }\n      },\n      options: {\n        capture: true,\n        passive: true,\n        once: true\n      }\n    });\n    return unbind;\n  }, [state]);\n  var onMouseDown = useCallback(function () {\n    if (hideTooltipOnMouseDown && apiRef.current) {\n      apiRef.current.requestHide({\n        isImmediate: true\n      });\n    }\n  }, [hideTooltipOnMouseDown]);\n  var onClick = useCallback(function () {\n    if (hideTooltipOnClick && apiRef.current) {\n      apiRef.current.requestHide({\n        isImmediate: true\n      });\n    }\n  }, [hideTooltipOnClick]); // Ideally we would be using onMouseEnter here, but\n  // because we are binding the event to the target parent\n  // we need to listen for the mouseover of all sub elements\n  // This means when moving along a tooltip we are quickly toggling\n  // between api.requestHide and api.keep. This it not ideal\n\n  var onMouseOver = useCallback(function (event) {\n    // Ignoring events from the container ref\n    if (event.target === containerRef.current) {\n      return;\n    } // Using prevent default as a signal that parent tooltips\n\n\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    event.preventDefault();\n    var source = position === 'mouse' ? {\n      type: 'mouse',\n      // TODO: ideally not recalculating this object each time\n      mouse: getMousePosition({\n        left: event.clientX,\n        top: event.clientY\n      })\n    } : {\n      type: 'keyboard'\n    };\n    showTooltip(source);\n  }, [position, showTooltip]); // Ideally we would be using onMouseEnter here, but\n  // because we are binding the event to the target parent\n  // we need to listen for the mouseout of all sub elements\n  // This means when moving along a tooltip we are quickly toggling\n  // between api.requestHide and api.keep. This it not ideal\n\n  var onMouseOut = useCallback(function (event) {\n    // Ignoring events from the container ref\n    if (event.target === containerRef.current) {\n      return;\n    } // Using prevent default as a signal that parent tooltips\n\n\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    event.preventDefault();\n\n    if (apiRef.current) {\n      apiRef.current.requestHide({\n        isImmediate: false\n      });\n    }\n  }, []);\n  var onFocus = useCallback(function () {\n    showTooltip({\n      type: 'keyboard'\n    });\n  }, [showTooltip]);\n  var onBlur = useCallback(function () {\n    if (apiRef.current) {\n      apiRef.current.requestHide({\n        isImmediate: false\n      });\n    }\n  }, []);\n  var onAnimationFinished = useCallback(function (transition) {\n    // Using lastState here because motion is not picking up the latest value\n    if (transition === 'exiting' && lastState.current === 'fade-out' && apiRef.current) {\n      // @ts-ignore: refs are writeable\n      apiRef.current.finishHideAnimation();\n    }\n  }, []); // Doing a cast because typescript is struggling to narrow the type\n\n  var CastTargetContainer = TargetContainer;\n  var shouldRenderTooltipContainer = state !== 'hide' && Boolean(content);\n  var shouldRenderTooltipChildren = state === 'show-immediate' || state === 'show-fade-in';\n\n  var getReferentElement = function getReferentElement() {\n    // Use the initial mouse position if appropriate, or the target element\n    var api = apiRef.current;\n    var initialMouse = api ? api.getInitialMouse() : null;\n\n    if (position === 'mouse' && initialMouse) {\n      return initialMouse;\n    }\n\n    return targetRef.current || undefined;\n  };\n\n  return jsx(React.Fragment, null, jsx(CastTargetContainer, {\n    onMouseOver: onMouseOver,\n    onMouseOut: onMouseOut,\n    onClick: onClick,\n    onMouseDown: onMouseDown,\n    onFocus: onFocus,\n    onBlur: onBlur,\n    ref: setRef,\n    \"data-testid\": testId ? \"\".concat(testId, \"--container\") : undefined\n  }, children), shouldRenderTooltipContainer ? jsx(Portal, {\n    zIndex: tooltipZIndex\n  }, jsx(Popper, {\n    placement: tooltipPosition,\n    referenceElement: getReferentElement(),\n    strategy: strategy\n  }, function (_ref4) {\n    var ref = _ref4.ref,\n        style = _ref4.style;\n    return jsx(ExitingPersistence, {\n      appear: true\n    }, shouldRenderTooltipChildren && jsx(FadeIn, {\n      onFinish: onAnimationFinished,\n      duration: state === 'show-immediate' ? 0 : undefined\n    }, function (_ref5) {\n      var className = _ref5.className;\n      return jsx(Container, {\n        ref: ref,\n        className: \"Tooltip \".concat(className),\n        style: style,\n        truncate: truncate,\n        placement: tooltipPosition,\n        testId: testId\n      }, content);\n    }));\n  })) : null);\n}\n\nTooltip.displayName = 'Tooltip';\nexport default Tooltip;","export function getMousePosition(mouseCoordinates) {\n  var safeMouse = mouseCoordinates || {\n    top: 0,\n    left: 0\n  };\n\n  var getBoundingClientRect = function getBoundingClientRect() {\n    return {\n      top: safeMouse.top,\n      left: safeMouse.left,\n      bottom: safeMouse.top,\n      right: safeMouse.left,\n      width: 0,\n      height: 0\n    };\n  };\n\n  return {\n    getBoundingClientRect: getBoundingClientRect,\n    clientWidth: 0,\n    clientHeight: 0\n  };\n}","import React from 'react';\nimport styled from 'styled-components';\nimport ScrollLock from 'react-scrolllock';\nvar Blanket = styled.div.withConfig({\n  displayName: \"ScrollBlock__Blanket\",\n  componentId: \"sc-1xiww8k-0\"\n})([\"\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: transparent;\\n\"]);\nexport default function ScrollBlock() {\n  return /*#__PURE__*/React.createElement(Blanket, null, /*#__PURE__*/React.createElement(ScrollLock, null));\n}","var positionMap = {\n  'top left': {\n    position: 'top-start',\n    animation: 'top'\n  },\n  'top center': {\n    position: 'top',\n    animation: 'top'\n  },\n  'top right': {\n    position: 'top-end',\n    animation: 'top'\n  },\n  'right top': {\n    position: 'right-start',\n    animation: 'right'\n  },\n  'right middle': {\n    position: 'right',\n    animation: 'right'\n  },\n  'right bottom': {\n    position: 'right-end',\n    animation: 'right'\n  },\n  'bottom left': {\n    position: 'bottom-start',\n    animation: 'bottom'\n  },\n  'bottom center': {\n    position: 'bottom',\n    animation: 'bottom'\n  },\n  'bottom right': {\n    position: 'bottom-end',\n    animation: 'bottom'\n  },\n  'left top': {\n    position: 'left-start',\n    animation: 'left'\n  },\n  'left middle': {\n    position: 'left',\n    animation: 'left'\n  },\n  'left bottom': {\n    position: 'left-end',\n    animation: 'left'\n  }\n};\nexport var POSITION_ATTRIBUTE_ENUM = {\n  values: ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom left', 'bottom center', 'bottom right', 'left top', 'left middle', 'left bottom'],\n  default: 'right middle'\n};\n\nfunction positionToPopper(position) {\n  return position && positionMap[position] ? positionMap[position].position : null;\n}\n/* Convert the autoFlip property into the array format that Popper expects.\n * The first item must not include the edge-position variation, or Popper will not understand it.\n */\n\n\nexport function getFlipBehavior(props) {\n  return props.position && Array.isArray(props.autoFlip) ? [props.position.split(' ')[0]].concat(props.autoFlip) : null;\n}\nexport function positionPropToPopperPosition(position) {\n  return positionToPopper(position) || positionMap[POSITION_ATTRIBUTE_ENUM.default].position;\n}","import styled from 'styled-components';\nexport default styled.div.withConfig({\n  displayName: \"styledContentContainer\",\n  componentId: \"p0j3f7-0\"\n})([\"\\n  [data-role='droplistContent'] {\\n    \", \";\\n  }\\n\"], function (_ref) {\n  var maxHeight = _ref.maxHeight;\n  return maxHeight ? \"max-height: \".concat(maxHeight, \"px\") : '';\n});","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport rafSchedule from 'raf-schd';\nimport Popper from 'popper.js'; // eslint-disable-line import/extensions\n\nimport ScrollBlock from './internal/ScrollBlock';\nimport { getFlipBehavior, positionPropToPopperPosition } from './internal/helpers';\nimport ContentContainer from '../styledContentContainer'; // We create a dummy target when making the menu fixed so that we can force popper.js to use fixed positioning\n// without affecting child layout of the actual target since children of fixed position elements can't use percentage\n// heights/widths.\n\nvar FixedTarget = styled.div.withConfig({\n  displayName: \"Layer__FixedTarget\",\n  componentId: \"qunuuz-0\"\n})([\"\\n  \", \";\\n\"], function (_ref) {\n  var fixedOffset = _ref.fixedOffset,\n      targetRef = _ref.targetRef;\n\n  if (fixedOffset && targetRef) {\n    var actualTarget = targetRef.firstChild;\n    var rect = actualTarget.getBoundingClientRect();\n    return \"\\n        position: fixed;\\n        top: \".concat(fixedOffset.top, \"px;\\n        left: \").concat(fixedOffset.left, \"px;\\n        height: \").concat(rect.height, \"px;\\n        width: \").concat(rect.width, \"px;\\n        z-index: -1;\\n      \");\n  }\n\n  return 'display: none;';\n});\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('@atlaskit/layer has been deprecated. It is an internal component and should not be used directly.');\n}\n\nvar Layer = /*#__PURE__*/function (_Component) {\n  _inherits(Layer, _Component);\n\n  var _super = _createSuper(Layer);\n\n  // working with extract-react-types\n  function Layer(props) {\n    var _this;\n\n    _classCallCheck(this, Layer);\n\n    _this = _super.call(this, props);\n\n    _defineProperty(_assertThisInitialized(_this), \"popper\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"targetRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"contentRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"fixedRef\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"extractStyles\", function (state) {\n      if (state) {\n        var popperHeight = state.offsets.popper.height;\n        var left = Math.round(state.offsets.popper.left); // The offset position is sometimes an object and sometimes just a string...\n\n        var cssPosition = _typeof(state.offsets.popper.position) === 'object' ? state.offsets.popper.position.position : state.offsets.popper.position;\n\n        var top = _this.fixPositionTopUnderflow(state.offsets.popper.top, cssPosition);\n\n        var originalHeight = _this.state.originalHeight || popperHeight;\n\n        var maxHeight = _this.calculateMaxHeight(originalHeight, popperHeight, top, cssPosition);\n\n        _this.setState({\n          // position: fixed or absolute\n          cssPosition: cssPosition,\n          hasExtractedStyles: true,\n          transform: \"translate3d(\".concat(left, \"px, \").concat(top, \"px, 0px)\"),\n          // state.flipped is either true or undefined\n          flipped: !!state.flipped,\n          actualPosition: state.position,\n          originalPosition: state.originalPosition,\n          originalHeight: originalHeight,\n          maxHeight: maxHeight\n        });\n      }\n    });\n\n    _this.state = {\n      hasExtractedStyles: false,\n      position: null,\n      transform: null,\n      flipped: false,\n      actualPosition: null,\n      // We set these default offsets to prevent a flash of popper content in the wrong position\n      // which can cause incorrect height calculations. Popper will calculate these values\n      offsets: {\n        popper: {\n          left: -9999,\n          top: -9999\n        }\n      },\n      originalPosition: null,\n      // fix Safari parent width: https://product-fabric.atlassian.net/browse/ED-1784\n      cssPosition: 'absolute',\n      originalHeight: null,\n      maxHeight: null,\n      fixedOffset: null\n    };\n    _this.extractStyles = rafSchedule(_this.extractStyles.bind(_assertThisInitialized(_this)));\n    return _this;\n  }\n\n  _createClass(Layer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.applyPopper(this.props);\n      this.calculateFixedOffset(this.props);\n    }\n  }, {\n    key: \"UNSAFE_componentWillReceiveProps\",\n    value: function UNSAFE_componentWillReceiveProps(nextProps) {\n      this.applyPopper(nextProps);\n      this.calculateFixedOffset(nextProps);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      var _this$props = this.props,\n          onFlippedChange = _this$props.onFlippedChange,\n          onPositioned = _this$props.onPositioned;\n      var _this$state = this.state,\n          flipped = _this$state.flipped,\n          actualPosition = _this$state.actualPosition,\n          originalPosition = _this$state.originalPosition,\n          hasExtractedStyles = _this$state.hasExtractedStyles;\n\n      if (prevState.flipped !== flipped && onFlippedChange) {\n        onFlippedChange({\n          flipped: flipped,\n          actualPosition: actualPosition,\n          originalPosition: originalPosition\n        });\n      } // This flag is set the first time the position is calculated from Popper and applied to the content\n\n\n      if (!prevState.hasExtractedStyles && hasExtractedStyles && onPositioned) {\n        onPositioned();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.extractStyles.cancel();\n\n      if (this.popper) {\n        this.popper.destroy();\n      }\n    }\n    /* Calculate the max height of the popper if it's height is greater than the viewport to prevent\n     * the bottom of the popper not being viewable.\n     * Only works if the popper uses viewport as the boundary and has a fixed position ancestor.\n     */\n\n  }, {\n    key: \"calculateMaxHeight\",\n    value: function calculateMaxHeight(originalHeight, currentHeight, positionTop, cssPosition) {\n      var DocumentElementClientHeight = 0;\n\n      if (document.documentElement) {\n        DocumentElementClientHeight = document.documentElement.clientHeight;\n      }\n\n      if (cssPosition !== 'fixed' || this.props.boundariesElement !== 'viewport') {\n        return null;\n      }\n\n      var viewportHeight = Math.max(DocumentElementClientHeight, window.innerHeight || 0);\n      return viewportHeight < originalHeight && currentHeight + positionTop >= viewportHeight - 50 ? // allow some spacing either side of viewport height\n      viewportHeight - 12 : null;\n    }\n    /* Popper may return either a fixed or absolute position which would be applied to the\n     * content style. In order to overcome clipping issues for overflow containing blocks when\n     * the position is absolute, we create a fixed position wrapper.\n     */\n\n  }, {\n    key: \"calculateFixedOffset\",\n    value: function calculateFixedOffset(props) {\n      var isAlwaysFixed = props.isAlwaysFixed;\n\n      if (isAlwaysFixed && this.targetRef) {\n        var actualTarget = this.targetRef.firstChild;\n        this.setState({\n          fixedOffset: {\n            top: actualTarget.getBoundingClientRect().top,\n            left: actualTarget.getBoundingClientRect().left\n          }\n        });\n      } else if (!isAlwaysFixed && this.state.fixedOffset !== null) {\n        this.setState({\n          fixedOffset: null\n        });\n      }\n    }\n    /* Clamp fixed position to the window for fixed position poppers that flow off the top of the\n     * window.\n     * A fixed position popper is a popper who has an ancestor with position: fixed.\n     *\n     * It is too difficult to fix this for non-fixed position poppers without re-implementing popper's\n     * offset functionality or fixing the issue upstream.\n     */\n    // eslint-disable-next-line class-methods-use-this\n\n  }, {\n    key: \"fixPositionTopUnderflow\",\n    value: function fixPositionTopUnderflow(popperTop, cssPosition) {\n      return popperTop >= 0 || cssPosition !== 'fixed' ? Math.round(popperTop) : 0;\n    }\n  }, {\n    key: \"applyPopper\",\n    value: function applyPopper(props) {\n      if (!this.fixedRef || !this.targetRef || !this.contentRef) {\n        return;\n      }\n\n      if (this.popper) {\n        this.popper.destroy();\n      } // \"new Popper(...)\" operation is very expensive when called on virtual DOM.\n      // This condition reduces the number of calls so we can run our tests faster\n      // (time was reduced from 100s to 13s).\n\n\n      if (!props.content) {\n        return;\n      } // we wrap our target in a div so that we can safely get a reference to it, but we pass the\n      // actual target to popper\n\n\n      var actualTarget = props.isAlwaysFixed ? this.fixedRef : this.targetRef.firstChild;\n      var popperOpts = {\n        placement: positionPropToPopperPosition(props.position),\n        onCreate: this.extractStyles,\n        onUpdate: this.extractStyles,\n        modifiers: {\n          applyStyle: {\n            enabled: false\n          },\n          hide: {\n            enabled: false\n          },\n          offset: {\n            enabled: true,\n            offset: this.props.offset\n          },\n          flip: {\n            enabled: !!this.props.autoFlip,\n            flipVariations: true,\n            boundariesElement: this.props.boundariesElement,\n            padding: 0 // leave 0 pixels between popper and the boundariesElement\n\n          },\n          preventOverflow: {\n            enabled: !!this.props.autoFlip,\n            escapeWithReference: !(this.props.boundariesElement === 'scrollParent')\n          }\n        },\n        positionFixed: props.isAlwaysFixed\n      };\n      var flipBehavior = getFlipBehavior(props);\n\n      if (flipBehavior) {\n        popperOpts.modifiers.flip.behavior = flipBehavior;\n      }\n\n      this.popper = new Popper(actualTarget, this.contentRef, popperOpts);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          zIndex = _this$props2.zIndex,\n          lockScroll = _this$props2.lockScroll;\n      var _this$state2 = this.state,\n          cssPosition = _this$state2.cssPosition,\n          transform = _this$state2.transform,\n          hasExtractedStyles = _this$state2.hasExtractedStyles,\n          maxHeight = _this$state2.maxHeight,\n          fixedOffset = _this$state2.fixedOffset;\n      var opacity = hasExtractedStyles ? {} : {\n        opacity: 0\n      };\n      return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"div\", {\n        ref: function ref(_ref2) {\n          _this2.targetRef = _ref2;\n        }\n      }, this.props.children), /*#__PURE__*/React.createElement(FixedTarget, {\n        targetRef: this.targetRef,\n        fixedOffset: fixedOffset\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        style: {\n          height: '100%',\n          width: '100%'\n        },\n        ref: function ref(_ref3) {\n          _this2.fixedRef = _ref3;\n        }\n      })), lockScroll && /*#__PURE__*/React.createElement(ScrollBlock, null), /*#__PURE__*/React.createElement(ContentContainer, {\n        maxHeight: maxHeight\n      }, /*#__PURE__*/React.createElement(\"div\", {\n        ref: function ref(_ref4) {\n          _this2.contentRef = _ref4;\n        },\n        style: _objectSpread({\n          top: 0,\n          left: 0,\n          position: cssPosition,\n          transform: transform,\n          zIndex: zIndex\n        }, opacity)\n      }, this.props.content)));\n    }\n  }]);\n\n  return Layer;\n}(Component);\n\n_defineProperty(Layer, \"defaultProps\", {\n  autoFlip: true,\n  boundariesElement: 'viewport',\n  children: null,\n  content: null,\n  offset: '0, 0',\n  onFlippedChange: function onFlippedChange() {},\n  position: 'right middle',\n  zIndex: 400,\n  lockScroll: false,\n  isAlwaysFixed: false,\n  onPositioned: function onPositioned() {}\n});\n\nexport { Layer as default };","import styled, { css } from 'styled-components';\nimport { backgroundOnLayer, N50A, N60A } from '@atlaskit/theme/colors';\nimport { borderRadius, gridSize } from '@atlaskit/theme/constants';\nimport { divide, multiply } from '@atlaskit/theme/math';\n/* When dropdown contains more than 9 elements (droplist items, droplist groups),\n * it should have scroll and cut off half of the 10th item to indicate that there are more\n * items then are seen. This was previously calculated by mapping over children, but with\n * the current composed API it is simpler to just assume 9 items. */\n\nvar getMaxHeight = function getMaxHeight(_ref) {\n  var isTall = _ref.isTall,\n      maxHeight = _ref.maxHeight;\n  if (maxHeight) return \"\".concat(maxHeight, \"px\");\n  var heightWithoutPadding = 17;\n  var verticalPadding = gridSize();\n  var height = heightWithoutPadding + verticalPadding * 2;\n  var defaultMaxHeight = 9.5 * height + verticalPadding / 2;\n  return isTall ? '90vh' : \"\".concat(defaultMaxHeight, \"px\");\n};\n\nexport default styled.div.withConfig({\n  displayName: \"Droplist\",\n  componentId: \"sc-1z05y4v-0\"\n})([\"\\n  display: inline-flex;\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    display: block;\\n    flex: 1 1 auto;\\n  \";\n});\nvar backgroundColor = backgroundOnLayer;\nvar boxShadow = css([\"\\n  box-shadow: 0 \", \"px \", \"px -\", \"px\\n      \", \",\\n    0 0 1px \", \";\\n\"], divide(gridSize, 2), gridSize, divide(gridSize, 4), N50A, N60A);\nexport var Content = styled.div.withConfig({\n  displayName: \"Droplist__Content\",\n  componentId: \"sc-1z05y4v-1\"\n})([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  \", \";\\n  box-sizing: border-box;\\n  overflow: auto;\\n  padding: \", \"px 0;\\n  max-height: \", \";\\n\"], backgroundColor, borderRadius, boxShadow, divide(gridSize, 2), getMaxHeight);\nexport var SpinnerContainer = styled.div.withConfig({\n  displayName: \"Droplist__SpinnerContainer\",\n  componentId: \"sc-1z05y4v-2\"\n})([\"\\n  display: flex;\\n  justify-content: center;\\n  min-width: \", \"px;\\n  padding: \", \"px;\\n\"], multiply(gridSize, 20), multiply(gridSize, 2.5));\nexport var Trigger = styled.div.withConfig({\n  displayName: \"Droplist__Trigger\",\n  componentId: \"sc-1z05y4v-3\"\n})([\"\\n  display: inline-flex;\\n  transition-duration: 0.2s;\\n  transition: box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\\n\\n  \", \";\\n\"], function (props) {\n  return props.fit && \"\\n    box-sizing: border-box;\\n    display: block;\\n  \";\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { itemThemeNamespace } from '@atlaskit/item';\nimport * as colors from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { multiply } from '@atlaskit/theme/math';\nvar dropdownPadding = {\n  bottom: gridSize,\n  left: multiply(gridSize, 1.5),\n  right: multiply(gridSize, 1.5),\n  top: gridSize\n};\nvar droplistItemTheme = {\n  padding: {\n    default: dropdownPadding,\n    compact: dropdownPadding\n  },\n  borderRadius: function borderRadius() {\n    return 0;\n  },\n  default: {\n    background: themed({\n      light: colors.N0,\n      dark: colors.DN50\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  hover: {\n    background: themed({\n      light: colors.N20,\n      dark: colors.DN70\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  active: {\n    background: themed({\n      light: colors.B75,\n      dark: colors.B75\n    }),\n    text: themed({\n      light: colors.N800,\n      dark: colors.B400\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  selected: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N800,\n      dark: colors.DN600\n    }),\n    secondaryText: themed({\n      light: colors.N200,\n      dark: colors.DN300\n    })\n  },\n  disabled: {\n    background: 'transparent',\n    text: themed({\n      light: colors.N70,\n      dark: colors.DN80\n    }),\n    secondaryText: themed({\n      light: colors.N50,\n      dark: colors.DN70\n    })\n  },\n  focus: {\n    outline: themed({\n      light: colors.B100,\n      dark: colors.B75\n    })\n  }\n};\nexport default _defineProperty({}, itemThemeNamespace, droplistItemTheme);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { ThemeProvider } from 'styled-components';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport Layer from '@atlaskit/layer';\nimport Spinner from '@atlaskit/spinner';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport Wrapper, { Content, SpinnerContainer, Trigger } from '../styled/Droplist';\nimport itemTheme from '../theme/item-theme';\nvar packageName = \"@atlaskit/droplist\";\nvar packageVersion = \"11.0.8\";\nvar halfFocusRing = 1;\nvar dropOffset = \"0, \".concat(gridSize(), \"px\");\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('@atlaskit/droplist has been deprecated. It is an internal component and should not be used directly.');\n}\n\nvar Droplist = /*#__PURE__*/function (_Component) {\n  _inherits(Droplist, _Component);\n\n  var _super = _createSuper(Droplist);\n\n  function Droplist() {\n    var _this;\n\n    _classCallCheck(this, Droplist);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidMount\", function () {\n      _this.setContentWidth(); // We use a captured event here to avoid a radio or checkbox dropdown item firing its\n      // click event first, which would cause a re-render of the element and prevent Droplist\n      // from detecting the actual source of this original click event.\n\n\n      document.addEventListener('click', _this.handleClickOutside, true);\n      document.addEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidUpdate\", function () {\n      if (_this.props.isOpen) {\n        _this.setContentWidth();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentWillUnmount\", function () {\n      document.removeEventListener('click', _this.handleClickOutside, true);\n      document.removeEventListener('keydown', _this.handleEsc);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"setContentWidth\", function () {\n      var _assertThisInitialize = _assertThisInitialized(_this),\n          dropContentRef = _assertThisInitialize.dropContentRef,\n          triggerRef = _assertThisInitialize.triggerRef;\n\n      var shouldFitContainer = _this.props.shouldFitContainer; // We need to manually set the content width to match the trigger width\n      // if props.shouldFitContainer is true\n\n      if (shouldFitContainer && dropContentRef && triggerRef) {\n        dropContentRef.style.width = \"\".concat(triggerRef.offsetWidth - halfFocusRing * 2, \"px\");\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleEsc\", function (event) {\n      if ((event.key === 'Escape' || event.key === 'Esc') && _this.props.isOpen) {\n        _this.close(event);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickOutside\", function (event) {\n      if (_this.props.isOpen) {\n        if (event.target instanceof Node) {\n          // Rather than check for the target within the entire Droplist, we specify the trigger/content.\n          // This aids with future effort in scroll-locking Droplist when isMenuFixed is enabled; the scroll\n          // blanket which stretches to the viewport should not stop 'close' from being triggered.\n          var withinTrigger = _this.triggerRef && _this.triggerRef.contains(event.target);\n\n          var withinContent = _this.dropContentRef && _this.dropContentRef.contains(event.target);\n\n          if (!withinTrigger && !withinContent) {\n            _this.close(event);\n          }\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"close\", function (event) {\n      if (_this.props.onOpenChange) {\n        _this.props.onOpenChange({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleContentRef\", function (ref) {\n      _this.dropContentRef = ref; // If the dropdown has just been opened, we focus on the containing element so the\n      // user can tab to the first dropdown item. We will only receive this ref if isOpen\n      // is true or null, so no need to check for truthiness here.\n\n      if (ref) {\n        ref.focus();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleTriggerRef\", function (ref) {\n      _this.triggerRef = ref;\n    });\n\n    return _this;\n  }\n\n  _createClass(Droplist, [{\n    key: \"getChildContext\",\n    value: function getChildContext() {\n      return {\n        shouldAllowMultilineItems: this.props.shouldAllowMultilineItems\n      };\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          boundariesElement = _this$props.boundariesElement,\n          children = _this$props.children,\n          isLoading = _this$props.isLoading,\n          isOpen = _this$props.isOpen,\n          maxHeight = _this$props.maxHeight,\n          onClick = _this$props.onClick,\n          onKeyDown = _this$props.onKeyDown,\n          position = _this$props.position,\n          isMenuFixed = _this$props.isMenuFixed,\n          shouldFitContainer = _this$props.shouldFitContainer,\n          shouldFlip = _this$props.shouldFlip,\n          trigger = _this$props.trigger,\n          onPositioned = _this$props.onPositioned,\n          testId = _this$props.testId;\n      var layerContent = isOpen ? /*#__PURE__*/React.createElement(Content, {\n        \"data-role\": \"droplistContent\",\n        \"data-testid\": testId && \"\".concat(testId, \"--content\"),\n        isTall: appearance === 'tall',\n        innerRef: this.handleContentRef,\n        maxHeight: maxHeight\n      }, isLoading ? /*#__PURE__*/React.createElement(SpinnerContainer, null, /*#__PURE__*/React.createElement(Spinner, {\n        size: \"small\"\n      })) : /*#__PURE__*/React.createElement(ThemeProvider, {\n        theme: itemTheme\n      }, /*#__PURE__*/React.createElement(\"div\", null, children))) : null;\n      return /*#__PURE__*/React.createElement(Wrapper, {\n        fit: shouldFitContainer,\n        onClick: onClick,\n        onKeyDown: onKeyDown\n      }, /*#__PURE__*/React.createElement(Layer, {\n        autoFlip: shouldFlip,\n        boundariesElement: boundariesElement,\n        content: layerContent,\n        offset: dropOffset,\n        position: position,\n        isAlwaysFixed: isOpen && isMenuFixed,\n        onPositioned: onPositioned\n      }, /*#__PURE__*/React.createElement(Trigger, {\n        fit: shouldFitContainer,\n        innerRef: this.handleTriggerRef\n      }, trigger)));\n    }\n  }]);\n\n  return Droplist;\n}(Component);\n\n_defineProperty(Droplist, \"defaultProps\", {\n  appearance: 'default',\n  boundariesElement: 'viewport',\n  children: null,\n  isLoading: false,\n  isOpen: false,\n  onClick: function onClick() {},\n  onKeyDown: function onKeyDown() {},\n  onOpenChange: function onOpenChange() {},\n  position: 'bottom left',\n  isMenuFixed: false,\n  shouldAllowMultilineItems: false,\n  shouldFitContainer: false,\n  shouldFlip: true,\n  trigger: null,\n  onPositioned: function onPositioned() {}\n});\n\n_defineProperty(Droplist, \"childContextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Droplist as DroplistWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplist',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onOpenChange: createAndFireEventOnAtlaskit({\n    action: 'toggled',\n    actionSubject: 'droplist',\n    attributes: {\n      componentName: 'droplist',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Droplist));","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n      & + svg {\\n        --local-background: \", \";\\n        --local-background-hover: \", \";\\n        --local-background-active: \", \";\\n        --local-background-checked: \", \";\\n        --local-background-checked-hover: \", \";\\n        --local-background-disabled: \", \";\\n\\n        --local-tick-rest: transparent;\\n        --local-tick-checked: \", \";\\n        --local-tick-disabled: \", \";\\n        --local-tick-active: \", \";\\n\\n        --local-border: \", \";\\n        --local-border-disabled: \", \";\\n        --local-border-checked: \", \";\\n        --local-border-active: \", \";\\n        --local-border-invalid: \", \";\\n        --local-border-focus: \", \";\\n        --local-border-hover: \", \";\\n        --local-border-checked-hover: \", \";\\n        --local-border-checked-invalid: \", \";\\n      }\\n    \"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  /* Make the input invisible */\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  margin: 0;\\n\\n  /*\\n    Change the variables --checkbox-background-color, --checkbox-border-color\\n    and --checkbox-tick-color according to user interactions.\\n    All other variables are constant.\\n    All styles from the input target the sibling svg.\\n  */\\n  & + svg {\\n    --checkbox-background-color: var(--local-background);\\n    --checkbox-border-color: var(--local-border);\\n    --checkbox-tick-color: var(--local-tick-rest);\\n    /* Color changes the background color */\\n    color: var(--checkbox-background-color);\\n    /* Fill changes the tick color */\\n    fill: var(--checkbox-tick-color);\\n    transition: color 0.2s ease-in-out, fill 0.2s ease-in-out;\\n    flex-shrink: 0;\\n    /* If the label is multiple lines, don't center the checkbox */\\n    align-self: flex-start;\\n  }\\n  & + svg rect:first-of-type {\\n    /* Stroke changes the color of the border */\\n    stroke: var(--checkbox-border-color);\\n    stroke-width: 2px;\\n    transition: stroke 0.2s ease-in-out;\\n  }\\n\\n  /* Styles are listed in order of increasing specificity  */\\n\\n  /*\\n    Compiled will order the pseudo classes by LVFHA\\n    As the background colour changes on hover, it is okay for the\\n    border focus colour to take precedence over hover.\\n    && is used to make the focus styles more specific than the hover\\n    styles\\n   */\\n  &&:focus + svg,\\n  &&:checked:focus + svg {\\n    --checkbox-border-color: var(--local-border-focus);\\n  }\\n\\n  &:hover + svg {\\n    --checkbox-background-color: var(--local-background-hover);\\n    --checkbox-border-color: var(--local-border-hover);\\n  }\\n  &:checked:hover + svg {\\n    --checkbox-background-color: var(--local-background-checked-hover);\\n    --checkbox-border-color: var(--local-border-checked-hover);\\n  }\\n\\n  &:checked + svg {\\n    --checkbox-background-color: var(--local-background-checked);\\n    --checkbox-border-color: var(--local-border-checked);\\n    --checkbox-tick-color: var(--local-tick-checked);\\n  }\\n\\n  &[data-invalid] + svg {\\n    --checkbox-border-color: var(--local-border-invalid);\\n  }\\n  &:checked[data-invalid] + svg {\\n    --checkbox-border-color: var(--local-border-checked-invalid);\\n  }\\n\\n  &:active + svg {\\n    --checkbox-background-color: var(--local-background-active);\\n    --checkbox-border-color: var(--local-border-active);\\n  }\\n  &:checked:active + svg {\\n    --checkbox-tick-color: var(--local-tick-active);\\n    --checkbox-background-color: var(--local-background-active);\\n    --checkbox-border-color: var(--local-border-active);\\n  }\\n\\n  &:disabled + svg,\\n  &:disabled:hover + svg,\\n  &:disabled:focus + svg,\\n  &:disabled:active + svg,\\n  &:disabled[data-invalid] + svg {\\n    --checkbox-background-color: var(--local-background-disabled);\\n    --checkbox-border-color: var(--local-border-disabled);\\n    pointer-events: none;\\n    cursor: not-allowed;\\n  }\\n\\n  &:disabled:checked + svg {\\n    --checkbox-tick-color: var(--local-tick-disabled);\\n  }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport { css } from '@emotion/core';\nimport { B100, B200, B300, B400, B50, B75, DN10, DN200, DN30, DN80, DN90, N10, N20, N30, N40, N70, R300 } from '@atlaskit/theme/colors';\nvar checkboxStyles = css(_templateObject());\nvar checkboxThemeColors = {\n  light: {\n    borderColor: {\n      rest: N40,\n      disabled: N20,\n      checked: B400,\n      active: B50,\n      invalid: R300,\n      invalidAndChecked: R300,\n      focused: B100,\n      hovered: N40,\n      hoveredAndChecked: B300\n    },\n    boxColor: {\n      rest: N10,\n      disabled: N20,\n      active: B50,\n      hoveredAndChecked: B300,\n      hovered: N30,\n      checked: B400\n    },\n    tickColor: {\n      disabledAndChecked: N70,\n      activeAndChecked: B400,\n      checked: N10\n    }\n  },\n  dark: {\n    borderColor: {\n      rest: DN80,\n      disabled: DN10,\n      checked: B400,\n      active: B200,\n      invalid: R300,\n      invalidAndChecked: R300,\n      focused: B75,\n      hovered: DN200,\n      hoveredAndChecked: B75\n    },\n    boxColor: {\n      rest: DN10,\n      disabled: DN10,\n      active: B200,\n      hoveredAndChecked: B75,\n      hovered: DN30,\n      checked: B400\n    },\n    tickColor: {\n      disabledAndChecked: DN90,\n      activeAndChecked: DN10,\n      checked: DN10\n    }\n  }\n};\n\nvar getCheckboxStyles = function getCheckboxStyles(mode) {\n  var checkboxColors = checkboxThemeColors[mode];\n  var boxColor = checkboxColors.boxColor;\n  var tickColor = checkboxColors.tickColor;\n  var borderColor = checkboxColors.borderColor;\n  return [css(_templateObject2(), boxColor.rest, boxColor.hovered, boxColor.active, boxColor.checked, boxColor.hoveredAndChecked, boxColor.disabled, tickColor.checked, tickColor.disabledAndChecked, tickColor.activeAndChecked, borderColor.rest, borderColor.disabled, borderColor.checked, borderColor.active, borderColor.invalid, borderColor.focused, borderColor.hovered, borderColor.hoveredAndChecked, borderColor.invalidAndChecked), checkboxStyles];\n};\n\nexport default getCheckboxStyles;","/** @jsx jsx */\nimport { useMemo } from 'react';\nimport { jsx } from '@emotion/core';\nimport { N80, N900 } from '@atlaskit/theme/colors';\nimport { fontFamily as getFontFamily } from '@atlaskit/theme/constants';\nvar fontFamily = getFontFamily();\nexport var labelCSS = function labelCSS() {\n  return {\n    fontFamily: fontFamily,\n    alignItems: 'center',\n    display: 'flex',\n    color: N900,\n    cursor: 'default',\n    '&[data-disabled]': {\n      color: N80,\n      cursor: 'not-allowed'\n    }\n  };\n};\nexport default function Label(_ref) {\n  var children = _ref.children,\n      isDisabled = _ref.isDisabled,\n      testId = _ref.testId;\n  var styles = useMemo(function () {\n    return labelCSS();\n  }, []);\n  return jsx(\"label\", {\n    css: styles,\n    \"data-testid\": testId,\n    \"data-disabled\": isDisabled || undefined\n  }, children);\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { gridSize } from '@atlaskit/theme/constants';\nvar padding = gridSize() * 0.5;\nexport var labelTextCSS = {\n  paddingRight: padding,\n  paddingLeft: padding\n};\nexport default function LabelText(_ref) {\n  var children = _ref.children;\n  return jsx(\"span\", {\n    css: labelTextCSS\n  }, children);\n}","import _extends from \"@babel/runtime/helpers/extends\";\n\n/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { R500 } from '@atlaskit/theme/colors';\nimport { gridSize } from '@atlaskit/theme/constants';\nvar paddingLeft = \"\".concat(gridSize() * 0.25, \"px\");\nexport default function RequiredIndicator(props) {\n  return jsx(\"span\", _extends({\n    css: {\n      color: R500,\n      paddingLeft: paddingLeft\n    }\n  }, props), \"*\");\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\n/**  @jsx jsx */\nimport { forwardRef, memo, useCallback, useMemo, useState } from 'react';\nimport { jsx } from '@emotion/core';\nimport { usePlatformLeafEventHandler } from '@atlaskit/analytics-next/usePlatformLeafEventHandler';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { getCheckboxStyles, Label, LabelText, RequiredIndicator } from './internal';\nimport { name as packageName, version as packageVersion } from './version.json';\nvar sizes = {\n  small: '16',\n  medium: '24',\n  large: '32',\n  xlarge: '48'\n}; // An svg is used so we don't pull in styled-components as well as\n// a wrapping span. This approach is more performant.\n\nvar CheckboxIcon = /*#__PURE__*/memo(function (_ref) {\n  var size = _ref.size,\n      isIndeterminate = _ref.isIndeterminate;\n  return jsx(\"svg\", {\n    width: sizes[size],\n    height: sizes[size],\n    viewBox: \"0 0 24 24\"\n  }, jsx(\"g\", {\n    fillRule: \"evenodd\"\n  }, jsx(\"rect\", {\n    fill: \"currentColor\",\n    x: \"6\",\n    y: \"6\",\n    width: \"12\",\n    height: \"12\",\n    rx: \"2\"\n  }), isIndeterminate ? jsx(\"rect\", {\n    fill: \"inherit\",\n    x: \"8\",\n    y: \"11\",\n    width: \"8\",\n    height: \"2\",\n    rx: \"1\"\n  }) : jsx(\"path\", {\n    d: \"M9.707 11.293a1 1 0 1 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 1 0-1.414-1.414L11 12.586l-1.293-1.293z\",\n    fill: \"inherit\"\n  })));\n});\nvar CheckboxWithMode = /*#__PURE__*/forwardRef(function Checkbox(props, ref) {\n  var isCheckedProp = props.isChecked,\n      _props$isDisabled = props.isDisabled,\n      isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled,\n      _props$isInvalid = props.isInvalid,\n      isInvalid = _props$isInvalid === void 0 ? false : _props$isInvalid,\n      _props$defaultChecked = props.defaultChecked,\n      defaultChecked = _props$defaultChecked === void 0 ? false : _props$defaultChecked,\n      _props$isIndeterminat = props.isIndeterminate,\n      isIndeterminate = _props$isIndeterminat === void 0 ? false : _props$isIndeterminat,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      onChangeProps = props.onChange,\n      analyticsContext = props.analyticsContext,\n      label = props.label,\n      mode = props.mode,\n      name = props.name,\n      value = props.value,\n      isRequired = props.isRequired,\n      testId = props.testId,\n      rest = _objectWithoutProperties(props, [\"isChecked\", \"isDisabled\", \"isInvalid\", \"defaultChecked\", \"isIndeterminate\", \"size\", \"onChange\", \"analyticsContext\", \"label\", \"mode\", \"name\", \"value\", \"isRequired\", \"testId\"]);\n\n  var _useState = useState(isCheckedProp !== undefined ? isCheckedProp : defaultChecked),\n      _useState2 = _slicedToArray(_useState, 2),\n      isCheckedState = _useState2[0],\n      setIsCheckedState = _useState2[1];\n\n  var onChange = useCallback(function (e, analyticsEvent) {\n    setIsCheckedState(e.target.checked);\n\n    if (onChangeProps) {\n      onChangeProps(e, analyticsEvent);\n    }\n  }, [onChangeProps]);\n  var onChangeAnalytics = usePlatformLeafEventHandler({\n    fn: onChange,\n    action: 'changed',\n    analyticsData: analyticsContext,\n    componentName: 'checkbox',\n    packageName: packageName,\n    packageVersion: packageVersion\n  }); // Use isChecked from the state if it is controlled\n\n  var isChecked = isCheckedProp === undefined ? isCheckedState : isCheckedProp; // The styles are being generated for the input but are being\n  // applied to the svg with a sibling selector so we have access\n  // to the pseudo-classes of the input\n\n  var styles = useMemo(function () {\n    return getCheckboxStyles(mode);\n  }, [mode]);\n  return jsx(Label, {\n    isDisabled: isDisabled,\n    testId: testId && \"\".concat(testId, \"--checkbox-label\")\n  }, jsx(\"input\", _extends({}, rest, {\n    type: \"checkbox\",\n    ref: ref,\n    disabled: isDisabled,\n    checked: isChecked,\n    value: value,\n    name: name,\n    required: isRequired,\n    css: styles,\n    onChange: onChangeAnalytics,\n    \"aria-checked\": isIndeterminate ? 'mixed' : isChecked,\n    \"data-testid\": testId && \"\".concat(testId, \"--hidden-checkbox\"),\n    \"data-invalid\": isInvalid ? 'true' : undefined\n  })), jsx(CheckboxIcon, {\n    size: size,\n    isIndeterminate: isIndeterminate\n  }), jsx(LabelText, null, label, isRequired && jsx(RequiredIndicator, {\n    \"aria-hidden\": \"true\"\n  })));\n});\nexport var Checkbox = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function Checkbox(props, ref) {\n  return jsx(GlobalTheme.Consumer, null, function (_ref2) {\n    var mode = _ref2.mode;\n    return jsx(CheckboxWithMode, _extends({}, props, {\n      ref: ref,\n      mode: mode\n    }));\n  });\n}));\nCheckbox.displayName = 'Checkbox';\nexport default Checkbox;","import styled, { css } from 'styled-components';\nimport * as colors from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { fontSize, gridSize } from '@atlaskit/theme/constants';\nimport { divide, multiply } from '@atlaskit/theme/math';\nvar activeBackgroundColor = themed({\n  light: colors.B75,\n  dark: colors.DN30\n});\nvar hoverBackgroundColor = themed({\n  light: colors.N20,\n  dark: colors.DN60\n});\nvar selectedBackgroundColor = themed({\n  light: colors.N0,\n  dark: colors.DN30\n});\nvar activePrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN300\n});\nvar defaultPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.DN600\n});\nvar disabledPrimaryTextColor = themed({\n  light: colors.N70,\n  dark: colors.DN70\n});\nvar primaryPrimaryTextColor = themed({\n  light: colors.B400,\n  dark: colors.B400\n});\nvar selectedPrimaryTextColor = themed({\n  light: colors.N800,\n  dark: colors.N800\n});\nvar focusedStyles = css([\"\\n  box-shadow: 0 0 0 2px \", \"\\n    inset;\\n  outline: none;\\n  outline-offset: 0;\\n  position: relative; /* prevents bgcolor of a hovered element from obfuscating focus ring of a focused sibling element */\\n\"], themed({\n  light: colors.B100,\n  dark: colors.B75\n}));\nvar activeStyles = css([\"\\n  &,\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n  }\\n\"], selectedBackgroundColor, selectedPrimaryTextColor);\nvar primaryStyles = css([\"\\n  color: \", \";\\n\"], primaryPrimaryTextColor);\n\nvar sharedStyles = function sharedStyles(props) {\n  return css([\"\\n  align-items: center;\\n  box-sizing: border-box;\\n  color: \", \";\\n  cursor: \", \";\\n  display: \", \";\\n  flex-wrap: nowrap;\\n  font-size: \", \"px;\\n  font-weight: normal;\\n  padding: 0 \", \"px;\\n  text-decoration: none;\\n\\n  &:hover {\\n    background-color: \", \";\\n    color: \", \";\\n    text-decoration: none;\\n\\n    \", \";\\n  }\\n  &:active {\\n    background-color: \", \";\\n    color: \", \";\\n\\n    \", \";\\n  }\\n  &:focus {\\n    \", \";\\n  }\\n\\n  \", \" \", \" \", \";\\n\"], props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isDisabled ? 'not-allowed' : 'pointer', props.isHidden ? 'none' : 'flex', fontSize, multiply(gridSize, 1.5), !props.isDisabled && hoverBackgroundColor, props.isDisabled ? disabledPrimaryTextColor : defaultPrimaryTextColor, props.isPrimary && primaryStyles, !props.isDisabled && activeBackgroundColor, !props.isDisabled && activePrimaryTextColor, props.isPrimary && primaryStyles, focusedStyles, props.isFocused && focusedStyles, props.isActive && activeStyles, props.isPrimary && primaryStyles);\n};\n\nexport var Anchor = styled.a.withConfig({\n  displayName: \"Item__Anchor\",\n  componentId: \"aiqnor-0\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n});\nexport var Span = styled.span.withConfig({\n  displayName: \"Item__Span\",\n  componentId: \"aiqnor-1\"\n})([\"\\n  \", \";\\n\"], function (props) {\n  return sharedStyles(props);\n}); // Checkbox/Radio wrapper -- sits left of the children\n\nexport var InputWrapper = styled.span.withConfig({\n  displayName: \"Item__InputWrapper\",\n  componentId: \"aiqnor-2\"\n})([\"\\n  display: flex;\\n  margin: 0 2px;\\n\"]); // Elements injected before/after the children\n\nexport var Before = styled.span.withConfig({\n  displayName: \"Item__Before\",\n  componentId: \"aiqnor-3\"\n})([\"\\n  display: flex;\\n\"]);\nexport var After = styled.span.withConfig({\n  displayName: \"Item__After\",\n  componentId: \"aiqnor-4\"\n})([\"\\n  align-items: center;\\n  display: flex;\\n\"]); // Alignment and layout for the children\n\nexport var ContentWrapper = styled.span.withConfig({\n  displayName: \"Item__ContentWrapper\",\n  componentId: \"aiqnor-5\"\n})([\"\\n  display: flex;\\n  flex-direction: column;\\n  margin: 0 \", \"px;\\n  padding: \", \"px 0;\\n  overflow: hidden;\\n\\n  &:first-child {\\n    margin: 0;\\n  }\\n\"], gridSize, gridSize);\nexport var Content = styled.span.withConfig({\n  displayName: \"Item__Content\",\n  componentId: \"aiqnor-6\"\n})([\"\\n  flex: 1 1 auto;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n  \", \";\\n\"], function (props) {\n  return props.allowMultiline && css([\"\\n      white-space: normal;\\n    \"]);\n}); // Description is a block element below the children, like a subtitle\n\nexport var Description = styled.span.withConfig({\n  displayName: \"Item__Description\",\n  componentId: \"aiqnor-7\"\n})([\"\\n  color: \", \";\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  line-height: 16 / 12;\\n  margin-top: \", \"px;\\n\"], colors.subtleText, divide(gridSize, 2)); // NOTE: Exposed as a named export for this package\n\nexport var SecondaryText = styled.span.withConfig({\n  displayName: \"Item__SecondaryText\",\n  componentId: \"aiqnor-8\"\n})([\"\\n  color: \", \";\\n\"], colors.subtleText);","import * as colors from '@atlaskit/theme/colors';\nexport function getInputBackground(_ref) {\n  var isChecked = _ref.isChecked,\n      isDisabled = _ref.isDisabled,\n      isHovered = _ref.isHovered,\n      isPressed = _ref.isPressed;\n  var background = colors.N40;\n  if (isHovered) background = colors.N50;\n  if (isPressed) background = colors.B200;\n  if (isChecked) background = colors.B400;\n  if (isDisabled) background = colors.N20;\n  if (isChecked && isDisabled) background = colors.N600;\n  return background;\n}\nexport function getInputFill(appearanceProps) {\n  return appearanceProps.isChecked ? colors.N0 : 'transparent';\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport { Anchor, Span } from '../styled/Item';\nexport var supportsVoiceOver = function supportsVoiceOver() {\n  return /Mac OS X/.test(navigator.userAgent);\n};\nexport var getAriaRoles = function getAriaRoles() {\n  return {\n    checkbox: supportsVoiceOver() ? 'checkbox' : 'menuitemcheckbox',\n    link: 'menuitem',\n    option: 'option',\n    radio: supportsVoiceOver() ? 'radio' : 'menuitemradio'\n  };\n};\nexport var baseTypes = {\n  default: 'link',\n  values: ['link', 'radio', 'checkbox', 'option']\n};\n\nvar Element = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Element, _PureComponent);\n\n  var _super = _createSuper(Element);\n\n  function Element() {\n    var _this;\n\n    _classCallCheck(this, Element);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"handleMouseDown\", function (e) {\n      e.preventDefault();\n\n      _this.props.handleMouseDown();\n    });\n\n    return _this;\n  }\n\n  _createClass(Element, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var isActive = props.isActive,\n          isChecked = props.isChecked,\n          isDisabled = props.isDisabled,\n          isFocused = props.isFocused,\n          isHidden = props.isHidden,\n          isSelected = props.isSelected,\n          isPrimary = props.isPrimary;\n      var type = this.props.type || '';\n      var appearanceProps = {\n        isActive: isActive,\n        isChecked: isChecked,\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        isHidden: isHidden,\n        isSelected: isSelected,\n        isPrimary: isPrimary\n      };\n      var ariaProps = {\n        'aria-checked': !!isChecked,\n        'aria-disabled': !!isDisabled,\n        'aria-hidden': !!isHidden,\n        'aria-selected': !!isSelected\n      };\n      var ariaRoles = getAriaRoles();\n      var commonProps = {\n        'data-role': 'droplistItem',\n        onClick: props.handleClick,\n        onKeyPress: props.handleKeyPress,\n        onMouseDown: this.handleMouseDown,\n        onMouseOut: props.handleMouseOut,\n        onMouseOver: props.handleMouseOver,\n        onMouseUp: props.handleMouseUp,\n        role: ariaRoles[type],\n        title: props.title,\n        tabIndex: props.type === 'option' ? null : 0\n      };\n      var testingProps = process.env.NODE_ENV === 'test' ? {\n        'data-test-active': isActive,\n        'data-test-checked': isChecked,\n        'data-test-disabled': isDisabled,\n        'data-test-hidden': isHidden,\n        'data-test-selected': isSelected\n      } : {};\n\n      var consolidatedProps = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, appearanceProps), ariaProps), commonProps), testingProps);\n\n      if (props.href && !isDisabled) {\n        return /*#__PURE__*/React.createElement(Anchor, _extends({\n          href: props.href,\n          target: props.target\n        }, consolidatedProps), props.children);\n      }\n\n      return /*#__PURE__*/React.createElement(Span, consolidatedProps, props.children);\n    }\n  }]);\n\n  return Element;\n}(PureComponent);\n\nexport { Element as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport Checkbox from '@atlaskit/icon/glyph/checkbox';\nimport Radio from '@atlaskit/icon/glyph/radio';\nimport Tooltip from '@atlaskit/tooltip';\nimport { After, Before, Content, ContentWrapper, Description, InputWrapper } from '../styled/Item';\nimport { getInputBackground, getInputFill } from '../utils';\nimport Element from './Element';\nvar packageName = \"@atlaskit/droplist\";\nvar packageVersion = \"11.0.8\";\nvar inputTypes = {\n  checkbox: Checkbox,\n  radio: Radio\n};\n\nvar Item = /*#__PURE__*/function (_PureComponent) {\n  _inherits(Item, _PureComponent);\n\n  var _super = _createSuper(Item);\n\n  function Item() {\n    var _this;\n\n    _classCallCheck(this, Item);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      isHovered: false,\n      isPressed: false\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidMount\", function () {\n      return document.addEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentWillUnmount\", function () {\n      return document.removeEventListener('mouseup', _this.handleMouseUp);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"guardedActivate\", function (event) {\n      var _this$props = _this.props,\n          isDisabled = _this$props.isDisabled,\n          onActivate = _this$props.onActivate;\n      if (!isDisabled && onActivate) onActivate({\n        item: _assertThisInitialized(_this),\n        event: event\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClick\", function (event) {\n      return _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleKeyPress\", function (event) {\n      var keyIsValid = ['Enter', ' '].indexOf(event.key) > -1;\n      if (keyIsValid) _this.guardedActivate(event);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleMouseDown\", function () {\n      return _this.setState({\n        isPressed: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleMouseUp\", function () {\n      return _this.setState({\n        isPressed: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleMouseOut\", function () {\n      return _this.setState({\n        isHovered: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleMouseOver\", function () {\n      return _this.setState({\n        isHovered: true\n      });\n    });\n\n    return _this;\n  }\n\n  _createClass(Item, [{\n    key: \"render\",\n    value: function render() {\n      var props = this.props;\n      var _this$state = this.state,\n          isHovered = _this$state.isHovered,\n          isPressed = _this$state.isPressed;\n      var type = props.type || '';\n      var hasInput = ['checkbox', 'radio'].indexOf(type) > -1;\n      var Input = inputTypes[type];\n      var appearanceProps = {\n        isActive: props.type === 'link' && props.isActive || props.type === 'option' && props.isSelected,\n        isChecked: ['checkbox', 'radio'].indexOf(type) > -1 && props.isChecked,\n        isDisabled: props.isDisabled,\n        isFocused: props.isFocused,\n        isHidden: props.isHidden,\n        isHovered: isHovered,\n        isPressed: isPressed,\n        isSelected: type === 'option' && props.isSelected,\n        isPrimary: props.appearance === 'primary'\n      };\n      var element = /*#__PURE__*/React.createElement(Element, _extends({}, appearanceProps, {\n        handleClick: this.handleClick,\n        handleKeyPress: this.handleKeyPress,\n        handleMouseOut: this.handleMouseOut,\n        handleMouseOver: this.handleMouseOver,\n        handleMouseUp: this.handleMouseUp,\n        handleMouseDown: this.handleMouseDown,\n        href: props.href,\n        target: props.target,\n        title: props.title,\n        type: props.type\n      }), hasInput && /*#__PURE__*/React.createElement(InputWrapper, appearanceProps, /*#__PURE__*/React.createElement(Input, {\n        label: \"\",\n        primaryColor: getInputBackground(appearanceProps),\n        secondaryColor: getInputFill(appearanceProps),\n        size: \"medium\"\n      })), !!props.elemBefore && /*#__PURE__*/React.createElement(Before, null, props.elemBefore), /*#__PURE__*/React.createElement(ContentWrapper, null, /*#__PURE__*/React.createElement(Content, {\n        allowMultiline: this.context.shouldAllowMultilineItems\n      }, props.children), !!props.description && /*#__PURE__*/React.createElement(Description, null, props.description)), !!props.elemAfter && /*#__PURE__*/React.createElement(After, null, props.elemAfter));\n      return /*#__PURE__*/React.createElement(\"span\", {\n        role: \"presentation\"\n      }, props.tooltipDescription ? /*#__PURE__*/React.createElement(Tooltip, {\n        content: props.tooltipDescription,\n        position: props.tooltipPosition\n      }, element) : element);\n    }\n  }]);\n\n  return Item;\n}(PureComponent);\n\n_defineProperty(Item, \"defaultProps\", {\n  appearance: 'default',\n  children: null,\n  description: '',\n  elemAfter: null,\n  elemBefore: null,\n  href: null,\n  isActive: false,\n  isChecked: false,\n  isDisabled: false,\n  isFocused: false,\n  isHidden: false,\n  isSelected: false,\n  itemContext: 'menu',\n  onActivate: function onActivate() {},\n  target: null,\n  title: null,\n  tooltipDescription: null,\n  tooltipPosition: 'right',\n  type: 'link'\n});\n\n_defineProperty(Item, \"contextTypes\", {\n  shouldAllowMultilineItems: PropTypes.bool\n});\n\nexport { Item as DroplistItemWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'droplistItem',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onActivate: createAndFireEventOnAtlaskit({\n    action: 'selected',\n    actionSubject: 'droplistItem',\n    attributes: {\n      componentName: 'droplistItem',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(Item));","import * as React from 'react';\nimport warning from 'warning';\nimport { ManagerReferenceNodeSetterContext } from './Manager';\nimport { safeInvoke, unwrapArray, setRef } from './utils';\nexport function Reference(_ref) {\n  var children = _ref.children,\n      innerRef = _ref.innerRef;\n  var setReferenceNode = React.useContext(ManagerReferenceNodeSetterContext);\n  var refHandler = React.useCallback(function (node) {\n    setRef(innerRef, node);\n    safeInvoke(setReferenceNode, node);\n  }, [innerRef, setReferenceNode]); // ran on unmount\n\n  React.useEffect(function () {\n    return function () {\n      return setRef(innerRef, null);\n    };\n  });\n  React.useEffect(function () {\n    warning(Boolean(setReferenceNode), '`Reference` should not be used outside of a `Manager` component.');\n  }, [setReferenceNode]);\n  return unwrapArray(children)({\n    ref: refHandler\n  });\n}","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  background: \", \";\\n  border-radius: \", \"px;\\n  box-sizing: content-box; /* do not set this to border-box or it will break the overflow handling */\\n  color: \", \";\\n  max-height: \", \"px;\\n  max-width: \", \"px;\\n  padding: \", \"px \", \"px;\\n  z-index: \", \";\\n\\n  \", \";\\n\\n  &:focus {\\n    outline: none;\\n  }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\nimport styled from 'styled-components';\nimport { DN50, DN600, N0, N900 } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { borderRadius, gridSize, layers } from '@atlaskit/theme/constants';\nimport { e200 } from '@atlaskit/theme/elevation';\nimport { multiply } from '@atlaskit/theme/math';\nvar backgroundColor = themed({\n  light: N0,\n  dark: DN50\n});\nvar textColor = themed({\n  light: N900,\n  dark: DN600\n}); // eslint-disable-next-line import/prefer-default-export\n\nexport var Container = styled.div(_templateObject(), backgroundColor, borderRadius, textColor, multiply(gridSize, 56), multiply(gridSize, 56), multiply(gridSize, 2), multiply(gridSize, 3), layers.dialog, e200);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport NodeResolver from 'react-node-resolver';\nimport { createAndFireEvent, withAnalyticsContext, withAnalyticsEvents } from '@atlaskit/analytics-next';\nimport { Manager, Popper, Reference } from '@atlaskit/popper';\nimport { name as packageName, version as packageVersion } from '../version.json';\nimport { Container } from './styled';\n\nvar InlineDialog = /*#__PURE__*/function (_Component) {\n  _inherits(InlineDialog, _Component);\n\n  var _super = _createSuper(InlineDialog);\n\n  function InlineDialog() {\n    var _this;\n\n    _classCallCheck(this, InlineDialog);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickOutside\", function (event) {\n      var _this$props = _this.props,\n          isOpen = _this$props.isOpen,\n          onClose = _this$props.onClose;\n\n      if (event.defaultPrevented) {\n        return;\n      }\n\n      var container = _this.containerRef;\n      var trigger = _this.triggerRef;\n      var target = event.target; // exit if we click outside but on the trigger — it can handle the clicks itself\n\n      if (trigger && trigger.contains(target)) {\n        return;\n      } // call onClose if the click originated from outside the dialog\n\n\n      if (isOpen && container && !container.contains(target)) {\n        onClose && onClose({\n          isOpen: false,\n          event: event\n        });\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(InlineDialog, [{\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (typeof window === 'undefined') {\n        return;\n      }\n\n      if (!prevProps.isOpen && this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      } else if (prevProps.isOpen && !this.props.isOpen) {\n        window.removeEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (typeof window === 'undefined') {\n        return;\n      }\n\n      if (this.props.isOpen) {\n        window.addEventListener('click', this.handleClickOutside, true);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (typeof window === 'undefined') {\n        return;\n      }\n\n      window.removeEventListener('click', this.handleClickOutside, true);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          placement = _this$props2.placement,\n          isOpen = _this$props2.isOpen,\n          content = _this$props2.content,\n          onContentBlur = _this$props2.onContentBlur,\n          onContentFocus = _this$props2.onContentFocus,\n          onContentClick = _this$props2.onContentClick,\n          testId = _this$props2.testId;\n      var popper = isOpen ? /*#__PURE__*/React.createElement(Popper, {\n        placement: placement\n      }, function (_ref) {\n        var ref = _ref.ref,\n            style = _ref.style;\n        return /*#__PURE__*/React.createElement(Container, {\n          onBlur: onContentBlur,\n          onFocus: onContentFocus,\n          onClick: onContentClick,\n          innerRef: function innerRef(node) {\n            _this2.containerRef = node;\n\n            if (typeof ref === 'function') {\n              ref(node);\n            } else {\n              ref.current = node;\n            }\n          },\n          style: style,\n          \"data-testid\": testId\n        }, content);\n      }) : null;\n      return /*#__PURE__*/React.createElement(Manager, null, /*#__PURE__*/React.createElement(Reference, null, function (_ref2) {\n        var ref = _ref2.ref;\n        return /*#__PURE__*/React.createElement(NodeResolver, {\n          innerRef: function innerRef(node) {\n            _this2.triggerRef = node;\n\n            if (typeof ref === 'function') {\n              ref(node);\n            } else {\n              ref.current = node;\n            }\n          }\n        }, children);\n      }), popper);\n    }\n  }]);\n\n  return InlineDialog;\n}(Component);\n\n_defineProperty(InlineDialog, \"defaultProps\", {\n  isOpen: false,\n  onContentBlur: function onContentBlur() {},\n  onContentClick: function onContentClick() {},\n  onContentFocus: function onContentFocus() {},\n  onClose: function onClose() {},\n  placement: 'bottom-start'\n});\n\nexport { InlineDialog as InlineDialogWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'inlineDialog',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onClose: createAndFireEventOnAtlaskit({\n    action: 'closed',\n    actionSubject: 'inlineDialog',\n    attributes: {\n      componentName: 'inlineDialog',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(InlineDialog));","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React from 'react';\nimport Spinner from '@atlaskit/spinner';\n\nfunction getSpinnerAppearance(_ref) {\n  var appearance = _ref.appearance,\n      isDisabled = _ref.isDisabled,\n      isSelected = _ref.isSelected;\n\n  if (isDisabled) {\n    return 'inherit';\n  }\n\n  if (isSelected) {\n    return 'invert';\n  }\n\n  if (appearance === 'primary' || appearance === 'danger') {\n    return 'invert';\n  }\n\n  return 'inherit';\n}\n\nexport default function LoadingSpinner(_ref2) {\n  var _ref2$spacing = _ref2.spacing,\n      spacing = _ref2$spacing === void 0 ? 'default' : _ref2$spacing,\n      rest = _objectWithoutProperties(_ref2, [\"spacing\"]);\n\n  var size = spacing === 'default' ? 'medium' : 'small';\n  return /*#__PURE__*/React.createElement(Spinner, {\n    size: size,\n    appearance: getSpinnerAppearance(rest)\n  });\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { createTheme } from '@atlaskit/theme/components';\nimport { getCss } from '../shared/css';\nvar stateToSelectorMap = {\n  focus: '&:focus',\n  focusSelected: '&:focus',\n  hover: '&:hover',\n  active: '&:active',\n  disabled: '&[disabled]'\n}; // Mapping the new clean css back to the legacy theme format.\n// The legacy theme format has all styles at the top level (no nested selectors)\n// and uses `getSpecifiers()` to apply the style to all psudeo states\n\nexport function getCustomCss(_ref) {\n  var _ref$appearance = _ref.appearance,\n      appearance = _ref$appearance === void 0 ? 'default' : _ref$appearance,\n      _ref$spacing = _ref.spacing,\n      spacing = _ref$spacing === void 0 ? 'default' : _ref$spacing,\n      _ref$mode = _ref.mode,\n      mode = _ref$mode === void 0 ? 'light' : _ref$mode,\n      _ref$isSelected = _ref.isSelected,\n      isSelected = _ref$isSelected === void 0 ? false : _ref$isSelected,\n      _ref$shouldFitContain = _ref.shouldFitContainer,\n      shouldFitContainer = _ref$shouldFitContain === void 0 ? false : _ref$shouldFitContain,\n      _ref$iconIsOnlyChild = _ref.iconIsOnlyChild,\n      iconIsOnlyChild = _ref$iconIsOnlyChild === void 0 ? false : _ref$iconIsOnlyChild,\n      _ref$isLoading = _ref.isLoading,\n      isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,\n      state = _ref.state;\n  var result = getCss({\n    appearance: appearance,\n    spacing: spacing,\n    mode: mode,\n    isSelected: isSelected,\n    shouldFitContainer: shouldFitContainer,\n    isOnlySingleIcon: iconIsOnlyChild\n  }); // we need to disable the default browser focus styles always\n  // this is because we are not expressing that we can have two pesduo states at a time\n\n  result.outline = 'none'; // Pulling relevant styles up to the top level\n\n  var selector = stateToSelectorMap[state];\n\n  if (selector) {\n    result = _objectSpread(_objectSpread({}, result), result[selector]);\n  }\n\n  if (isLoading) {\n    result = _objectSpread(_objectSpread({}, result), result['&[data-has-overlay=\"true\"]']);\n  } // Delete all selectors and just keep root styles\n\n\n  Object.keys(result).forEach(function (key) {\n    // want to keep this one\n    if (key === '&::-moz-focus-inner') {\n      return;\n    } // Not using .startsWith for ie11\n\n\n    if (key.indexOf('&') === 0) {\n      delete result[key];\n    }\n  });\n  return result;\n} // This styling approach works by generating a 'style' and applying with maximum specificity\n// To do this we are overwriting all psuedo selectors\n\nexport function getSpecifiers(styles) {\n  return {\n    '&, &:hover, &:active, &:focus, &:visited, &:disabled, &[disabled]': styles\n  };\n}\nexport function defaultThemeFn(current, values) {\n  return current(values);\n}\nvar Theme = createTheme(function (themeProps) {\n  return {\n    buttonStyles: getCustomCss(themeProps),\n    // No styles being applied directly to spinner by default\n    // Keeping this for legacy compat. We could remove it, but given\n    // that we are changing theme soon there is no point\n    spinnerStyles: {}\n  };\n});\nexport default Theme;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React, { useCallback, useState } from 'react';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport ButtonBase from '../shared/button-base';\nimport getIsOnlySingleIcon from '../shared/get-is-only-single-icon';\nimport LoadingSpinner from '../shared/loading-spinner';\nimport Theme, { defaultThemeFn, getSpecifiers } from './theme';\n\nfunction getInteractionState(_ref) {\n  var _ref$isDisabled = _ref.isDisabled,\n      isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,\n      _ref$isActive = _ref.isActive,\n      isActive = _ref$isActive === void 0 ? false : _ref$isActive,\n      _ref$isFocus = _ref.isFocus,\n      isFocus = _ref$isFocus === void 0 ? false : _ref$isFocus,\n      _ref$isHover = _ref.isHover,\n      isHover = _ref$isHover === void 0 ? false : _ref$isHover,\n      _ref$isSelected = _ref.isSelected,\n      isSelected = _ref$isSelected === void 0 ? false : _ref$isSelected,\n      _ref$isLoading = _ref.isLoading,\n      isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading;\n\n  if (isDisabled) {\n    return 'disabled';\n  }\n\n  if (isSelected && isFocus) {\n    return 'focusSelected';\n  }\n\n  if (isSelected) {\n    return 'selected';\n  } // not allowing active or focus style changes while loading\n\n\n  if (!isLoading && isActive) {\n    return 'active';\n  }\n\n  if (!isLoading && isHover) {\n    return 'hover';\n  }\n\n  if (isFocus) {\n    return 'focus';\n  }\n\n  return 'default';\n}\n\nvar initial = {\n  isHover: false,\n  isActive: false,\n  isFocus: false\n};\nvar CustomThemeButton = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function CustomThemeButton(_ref2, ref) {\n  var _ref2$appearance = _ref2.appearance,\n      appearance = _ref2$appearance === void 0 ? 'default' : _ref2$appearance,\n      _ref2$autoFocus = _ref2.autoFocus,\n      autoFocus = _ref2$autoFocus === void 0 ? false : _ref2$autoFocus,\n      _ref2$isDisabled = _ref2.isDisabled,\n      isDisabled = _ref2$isDisabled === void 0 ? false : _ref2$isDisabled,\n      _ref2$isSelected = _ref2.isSelected,\n      isSelected = _ref2$isSelected === void 0 ? false : _ref2$isSelected,\n      _ref2$shouldFitContai = _ref2.shouldFitContainer,\n      shouldFitContainer = _ref2$shouldFitContai === void 0 ? false : _ref2$shouldFitContai,\n      _ref2$spacing = _ref2.spacing,\n      spacing = _ref2$spacing === void 0 ? 'default' : _ref2$spacing,\n      _ref2$isLoading = _ref2.isLoading,\n      isLoading = _ref2$isLoading === void 0 ? false : _ref2$isLoading,\n      providedOnMouseEnter = _ref2.onMouseEnter,\n      providedOnMouseLeave = _ref2.onMouseLeave,\n      providedOnMouseDown = _ref2.onMouseDown,\n      providedOnMouseUp = _ref2.onMouseUp,\n      providedOnFocus = _ref2.onFocus,\n      providedOnBlur = _ref2.onBlur,\n      _ref2$theme = _ref2.theme,\n      theme = _ref2$theme === void 0 ? defaultThemeFn : _ref2$theme,\n      rest = _objectWithoutProperties(_ref2, [\"appearance\", \"autoFocus\", \"isDisabled\", \"isSelected\", \"shouldFitContainer\", \"spacing\", \"isLoading\", \"onMouseEnter\", \"onMouseLeave\", \"onMouseDown\", \"onMouseUp\", \"onFocus\", \"onBlur\", \"theme\"]);\n\n  // TODO is there a nicer way to do this?\n  // Add default props back into object for spreading\n  var restProps = _objectSpread({\n    appearance: appearance,\n    autoFocus: autoFocus,\n    isDisabled: isDisabled,\n    isSelected: isSelected,\n    shouldFitContainer: shouldFitContainer,\n    spacing: spacing\n  }, rest);\n\n  var _useState = useState(initial),\n      _useState2 = _slicedToArray(_useState, 2),\n      state = _useState2[0],\n      setState = _useState2[1];\n\n  var onMouseEnter = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isHover: true\n      });\n    });\n\n    if (providedOnMouseEnter) {\n      providedOnMouseEnter(event);\n    }\n  }, [providedOnMouseEnter]);\n  var onMouseLeave = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isHover: false,\n        isActive: false\n      });\n    });\n\n    if (providedOnMouseLeave) {\n      providedOnMouseLeave(event);\n    }\n  }, [providedOnMouseLeave]);\n  var onMouseDown = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isActive: true\n      });\n    });\n\n    if (providedOnMouseDown) {\n      providedOnMouseDown(event);\n    }\n  }, [providedOnMouseDown]);\n  var onMouseUp = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isActive: false\n      });\n    });\n\n    if (providedOnMouseUp) {\n      providedOnMouseUp(event);\n    }\n  }, [providedOnMouseUp]);\n  var onFocus = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isFocus: true\n      });\n    });\n\n    if (providedOnFocus) {\n      providedOnFocus(event);\n    }\n  }, [providedOnFocus]);\n  var onBlur = useCallback(function (event) {\n    setState(function (current) {\n      return _objectSpread(_objectSpread({}, current), {}, {\n        isFocus: false\n      });\n    });\n\n    if (providedOnBlur) {\n      providedOnBlur(event);\n    }\n  }, [providedOnBlur]);\n  return /*#__PURE__*/React.createElement(Theme.Provider, {\n    value: theme\n  }, /*#__PURE__*/React.createElement(GlobalTheme.Consumer, null, function (_ref3) {\n    var mode = _ref3.mode;\n    return /*#__PURE__*/React.createElement(Theme.Consumer, _extends({\n      mode: mode,\n      state: getInteractionState(_objectSpread(_objectSpread({}, state), {}, {\n        isLoading: isLoading,\n        isSelected: restProps.isSelected,\n        isDisabled: restProps.isDisabled\n      })),\n      iconIsOnlyChild: getIsOnlySingleIcon(restProps),\n      isLoading: isLoading\n    }, restProps), function (_ref4) {\n      var buttonStyles = _ref4.buttonStyles;\n      return /*#__PURE__*/React.createElement(ButtonBase, _extends({}, restProps, {\n        ref: ref,\n        overlay: isLoading ? /*#__PURE__*/React.createElement(LoadingSpinner, restProps) : null,\n        onMouseEnter: onMouseEnter,\n        onMouseLeave: onMouseLeave,\n        onMouseDown: onMouseDown,\n        onMouseUp: onMouseUp,\n        onFocus: onFocus,\n        onBlur: onBlur,\n        buttonCss: getSpecifiers(buttonStyles)\n      }));\n    });\n  }));\n})); // Tools including enzyme rely on components having a display name\n\nCustomThemeButton.displayName = 'CustomThemeButton';\nexport default CustomThemeButton;","import styled, { css } from 'styled-components';\nimport { fontSizeSmall } from '@atlaskit/theme/constants';\nimport { getThemeStyle, gridSize, themeNamespace } from '../util/theme';\n\nvar getPadding = function getPadding(_ref) {\n  var isCompact = _ref.isCompact,\n      theme = _ref.theme;\n  var paddingType = isCompact ? 'compact' : 'default';\n\n  var _getThemeStyle = getThemeStyle(theme[themeNamespace], paddingType, 'padding'),\n      _getThemeStyle$bottom = _getThemeStyle.bottom,\n      bottom = _getThemeStyle$bottom === void 0 ? 0 : _getThemeStyle$bottom,\n      _getThemeStyle$left = _getThemeStyle.left,\n      left = _getThemeStyle$left === void 0 ? 0 : _getThemeStyle$left,\n      _getThemeStyle$right = _getThemeStyle.right,\n      right = _getThemeStyle$right === void 0 ? 0 : _getThemeStyle$right,\n      _getThemeStyle$top = _getThemeStyle.top,\n      top = _getThemeStyle$top === void 0 ? 0 : _getThemeStyle$top;\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n}; // eslint-disable-next-line import/prefer-default-export\n\n\nvar GroupTitle = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitle\",\n  componentId: \"ofbfv9-0\"\n})([\"\\n  align-items: center;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 1 auto;\\n  \", \";\\n\"], function (_ref2) {\n  var theme = _ref2.theme;\n  return getThemeStyle(theme[themeNamespace], 'secondaryText', 'default');\n}, getPadding);\nGroupTitle.displayName = 'ItemGroupTitle';\nvar GroupTitleAfter = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitleAfter\",\n  componentId: \"ofbfv9-1\"\n})([\"\\n  flex: 0 0 auto;\\n  margin-right: -\", \"px;\\n\"], gridSize / 2);\nGroupTitleAfter.displayName = 'ItemGroupTitleAfter';\nvar GroupTitleText = styled.div.withConfig({\n  displayName: \"ItemGroup__GroupTitleText\",\n  componentId: \"ofbfv9-2\"\n})([\"\\n  flex: 1 1 auto;\\n  font-size: \", \"px;\\n  line-height: 1;\\n  text-transform: uppercase;\\n  /* Required for children to truncate */\\n  min-width: 0;\\n\"], fontSizeSmall);\nGroupTitleText.displayName = 'ItemGroupTitleText';\nexport { GroupTitle, GroupTitleAfter, GroupTitleText };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport textContent from 'react-addons-text-content';\nimport { GroupTitle, GroupTitleText, GroupTitleAfter } from '../styled/ItemGroup';\n\nvar ItemGroup = /*#__PURE__*/function (_Component) {\n  _inherits(ItemGroup, _Component);\n\n  var _super = _createSuper(ItemGroup);\n\n  function ItemGroup() {\n    _classCallCheck(this, ItemGroup);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(ItemGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this = this;\n\n      var _this$props = this.props,\n          children = _this$props.children,\n          elemAfter = _this$props.elemAfter,\n          isCompact = _this$props.isCompact,\n          title = _this$props.title,\n          label = _this$props.label,\n          innerRef = _this$props.innerRef,\n          role = _this$props.role;\n\n      var ariaLabel = function () {\n        if (label) {\n          return textContent(label);\n        }\n\n        if (title) {\n          return textContent(title);\n        }\n\n        return '';\n      }();\n\n      return /*#__PURE__*/React.createElement(\"div\", {\n        \"aria-label\": ariaLabel,\n        role: role,\n        ref: innerRef\n      }, title ? /*#__PURE__*/React.createElement(GroupTitle, {\n        \"aria-hidden\": \"true\",\n        isCompact: isCompact\n      }, /*#__PURE__*/React.createElement(GroupTitleText, null, title), elemAfter ? /*#__PURE__*/React.createElement(GroupTitleAfter, {\n        innerRef: function innerRef(r) {\n          _this.headingAfterElement = r;\n        }\n      }, elemAfter) : null) : null, children);\n    }\n  }]);\n\n  return ItemGroup;\n}(Component);\n\n_defineProperty(ItemGroup, \"defaultProps\", {\n  role: 'group'\n});\n\nexport { ItemGroup as default };","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nimport React, { Component } from 'react';\nimport { ItemGroup } from '@atlaskit/item';\n\nvar DropdownItemGroup = /*#__PURE__*/function (_Component) {\n  _inherits(DropdownItemGroup, _Component);\n\n  var _super = _createSuper(DropdownItemGroup);\n\n  function DropdownItemGroup() {\n    _classCallCheck(this, DropdownItemGroup);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(DropdownItemGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          children = _this$props.children,\n          elemAfter = _this$props.elemAfter,\n          title = _this$props.title;\n      return /*#__PURE__*/React.createElement(ItemGroup, {\n        elemAfter: elemAfter,\n        title: title,\n        role: \"menu\"\n      }, children);\n    }\n  }]);\n\n  return DropdownItemGroup;\n}(Component);\n\nexport { DropdownItemGroup as default };","export var presetSizes = {\n  xsmall: 8,\n  small: 16,\n  medium: 24,\n  large: 48,\n  xlarge: 96\n};","import _taggedTemplateLiteral from \"@babel/runtime/helpers/taggedTemplateLiteral\";\n\nfunction _templateObject4() {\n  var data = _taggedTemplateLiteral([\"\\n                  fill: none;\\n                  stroke: \", \";\\n                  stroke-width: 1.5;\\n                  stroke-linecap: round;\\n                  stroke-dasharray: 60;\\n                  stroke-dashoffset: inherit;\\n                  transform-origin: center;\\n                  animation: \", \" 0.86s infinite;\\n                  animation-delay: \", \"ms;\\n                  animation-timing-function: cubic-bezier(0.4, 0.15, 0.6, 0.85);\\n                \"]);\n\n  _templateObject4 = function _templateObject4() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject3() {\n  var data = _taggedTemplateLiteral([\"\\n                /* align better inline with text */\\n                vertical-align: middle;\\n                /* We are going to animate this in */\\n                opacity: 0;\\n\\n                animation: \", \" 1s ease-in-out;\\n                /* When the animation completes, stay at the last frame of the animation */\\n                animation-fill-mode: forwards;\\n                animation-delay: \", \"ms;\\n              \"]);\n\n  _templateObject3 = function _templateObject3() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject2() {\n  var data = _taggedTemplateLiteral([\"\\n  from {\\n    transform: rotate(50deg);\\n    opacity: 0;\\n    stroke-dashoffset: 60;\\n  }\\n  to {\\n    transform: rotate(230deg);\\n    opacity: 1;\\n    stroke-dashoffset: 50;\\n  }\\n\"]);\n\n  _templateObject2 = function _templateObject2() {\n    return data;\n  };\n\n  return data;\n}\n\nfunction _templateObject() {\n  var data = _taggedTemplateLiteral([\"\\n  to { transform: rotate(360deg); }\\n\"]);\n\n  _templateObject = function _templateObject() {\n    return data;\n  };\n\n  return data;\n}\n\n/** @jsx jsx */\nimport React from 'react';\nimport { css, jsx, keyframes } from '@emotion/core';\nimport { DN500, DN900, N0, N500 } from '@atlaskit/theme/colors';\nimport GlobalTheme from '@atlaskit/theme/components';\nimport { presetSizes } from './constants';\nvar rotate = keyframes(_templateObject()); // There are three parts to the load in animation:\n// 1. Fade in\n// 2. Accelerated spin\n// 3. Stretch the spinner line\n\nvar loadIn = keyframes(_templateObject2());\n\nfunction getStrokeColor(_ref) {\n  var mode = _ref.mode,\n      appearance = _ref.appearance;\n\n  if (mode === 'light') {\n    return appearance === 'inherit' ? N500 : N0;\n  } // Dark mode: colours provided by Jake Miller\n\n\n  return appearance === 'inherit' ? DN900 : DN500;\n}\n\nexport default /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(function Spinner(_ref2, ref) {\n  var testId = _ref2.testId,\n      _ref2$appearance = _ref2.appearance,\n      appearance = _ref2$appearance === void 0 ? 'inherit' : _ref2$appearance,\n      _ref2$delay = _ref2.delay,\n      delay = _ref2$delay === void 0 ? 0 : _ref2$delay,\n      _ref2$size = _ref2.size,\n      providedSize = _ref2$size === void 0 ? 'medium' : _ref2$size;\n  var size = typeof providedSize === 'number' ? providedSize : presetSizes[providedSize];\n  return jsx(GlobalTheme.Consumer, null, function (tokens) {\n    var strokeColor = getStrokeColor({\n      mode: tokens.mode,\n      appearance: appearance\n    }); // The Spinner animation uses a combination of two\n    // css animations on two separate elements.\n\n    return jsx(\"svg\", {\n      focusable: \"false\",\n      height: size,\n      width: size,\n      viewBox: \"0 0 16 16\",\n      xmlns: \"http://www.w3.org/2000/svg\",\n      \"data-testid\": testId,\n      ref: ref,\n      css: css(_templateObject3(), loadIn, delay)\n    }, jsx(\"circle\", {\n      cx: \"8\",\n      cy: \"8\",\n      r: \"7\",\n      css: css(_templateObject4(), strokeColor, rotate, delay)\n    }));\n  });\n}));","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/typeof\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useMemo, useRef } from 'react';\nimport { useAnalyticsEvents } from './useAnalyticsEvents';\nexport function usePatchedProps() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var wrappedComponentProps = arguments.length > 1 ? arguments[1] : undefined;\n\n  var _useAnalyticsEvents = useAnalyticsEvents(),\n      createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;\n\n  var handlerCache = useRef({});\n  var patchedProps = useMemo(function () {\n    var cache = handlerCache.current; // Clean up no longer used handlers in cache\n\n    Object.keys(cache).filter(function (key) {\n      return !(key in createEventMap);\n    }).forEach(function (key) {\n      return delete cache[key];\n    });\n    return Object.keys(createEventMap).reduce(function (p, k) {\n      var eventCreator = createEventMap[k];\n\n      if (!['object', 'function'].includes(_typeof(eventCreator))) {\n        return p;\n      }\n\n      var propValue = wrappedComponentProps[k];\n\n      if (k in cache && cache[k].eventCreator === eventCreator && cache[k].propValue === propValue) {\n        return _objectSpread(_objectSpread({}, p), {}, _defineProperty({}, k, cache[k].wrappedCallback));\n      }\n\n      var wrappedCallback = function wrappedCallback() {\n        var analyticsEvent = typeof eventCreator === 'function' ? eventCreator(createAnalyticsEvent, wrappedComponentProps) : createAnalyticsEvent(eventCreator);\n\n        if (propValue && typeof propValue === 'function') {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          propValue.apply(void 0, args.concat([analyticsEvent]));\n        }\n      };\n\n      cache[k] = {\n        eventCreator: eventCreator,\n        wrappedCallback: wrappedCallback,\n        propValue: propValue\n      };\n      return _objectSpread(_objectSpread({}, p), {}, _defineProperty({}, k, wrappedCallback));\n    }, {});\n  }, [createEventMap, wrappedComponentProps, createAnalyticsEvent, handlerCache]);\n  return {\n    patchedEventProps: patchedProps\n  };\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport React, { forwardRef } from 'react';\nimport { useAnalyticsEvents } from '../hooks/useAnalyticsEvents';\nimport { usePatchedProps } from '../hooks/usePatchedProps';\n\nvar withAnalyticsEvents = function withAnalyticsEvents() {\n  var createEventMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  return function (WrappedComponent) {\n    var WithAnalyticsEvents = /*#__PURE__*/forwardRef(function (props, ref) {\n      var _usePatchedProps = usePatchedProps(createEventMap, props),\n          patchedEventProps = _usePatchedProps.patchedEventProps;\n\n      var _useAnalyticsEvents = useAnalyticsEvents(),\n          createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;\n\n      return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, patchedEventProps, {\n        createAnalyticsEvent: createAnalyticsEvent,\n        ref: ref\n      }));\n    }); // @ts-ignore\n\n    WithAnalyticsEvents.displayName = \"WithAnalyticsEvents(\".concat( // @ts-ignore disneyName doesn't exist on type\n    WrappedComponent.displayName || WrappedComponent.name, \")\");\n    return WithAnalyticsEvents;\n  };\n};\n\nexport default withAnalyticsEvents;","import styled, { css } from 'styled-components';\nimport { themed } from '@atlaskit/theme/components';\nimport { codeFontFamily, fontSize } from '@atlaskit/theme/constants';\nimport { N70, DN90, N100 } from '@atlaskit/theme/colors';\n\nvar getPlaceholderColor = function getPlaceholderColor(_ref) {\n  var disabled = _ref.disabled;\n\n  if (disabled) {\n    return themed({\n      light: N70,\n      dark: DN90\n    });\n  }\n\n  return themed({\n    light: N100,\n    dark: DN90\n  });\n}; // can't group these placeholder styles into one block because browsers drop\n// entire style blocks when any single selector fails to parse\n\n\nvar getPlaceholderStyle = function getPlaceholderStyle() {\n  return css([\"\\n  &::-webkit-input-placeholder {\\n    /* WebKit, Blink, Edge */\\n    color: \", \";\\n  }\\n  &::-moz-placeholder {\\n    /* Mozilla Firefox 19+ */\\n    color: \", \";\\n    opacity: 1;\\n  }\\n  &::-ms-input-placeholder {\\n    /* Microsoft Edge */\\n    color: \", \";\\n  }\\n  &:-ms-input-placeholder {\\n    /* Internet Explorer 10-11 */\\n    color: \", \";\\n  }\\n\"], getPlaceholderColor, getPlaceholderColor, getPlaceholderColor, getPlaceholderColor);\n}; // Safari puts on some difficult to remove styles, mainly for disabled inputs\n// but we want full control so need to override them in all cases\n\n\nvar overrideSafariDisabledStyles = \"\\n  -webkit-text-fill-color: unset;\\n  -webkit-opacity: 1;\\n\";\nvar InputElement = styled.input.withConfig({\n  displayName: \"Input__InputElement\",\n  componentId: \"sc-1o6bj35-0\"\n})([\"\\n  background: transparent;\\n  border: 0;\\n  box-sizing: border-box;\\n  color: inherit;\\n  cursor: inherit;\\n  font-family: \", \";\\n  font-size: \", \"px;\\n  min-width: 0;\\n  outline: none;\\n  width: 100%;\\n\\n  [disabled] {\\n    \", \";\\n  }\\n\\n  &::-ms-clear {\\n    display: none;\\n  }\\n\\n  &:invalid {\\n    box-shadow: none;\\n  }\\n  \", \";\\n\"], function (p) {\n  return p.isMonospaced ? codeFontFamily() : 'inherit';\n}, fontSize, overrideSafariDisabledStyles, getPlaceholderStyle);\nexport default InputElement;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport styled from 'styled-components';\nimport { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';\nimport Base, { Label } from '@atlaskit/field-base';\nimport { name as packageName, version as packageVersion } from './version.json';\nimport Input from './styled/Input';\nvar Wrapper = styled.div.withConfig({\n  displayName: \"FieldTextStateless__Wrapper\",\n  componentId: \"ynbdsh-0\"\n})([\"\\n  flex: 1 1 100%;\\n\"]);\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('@atlaskit/field-text has been deprecated. Please use the @atlaskit/textfield package instead.');\n}\n\nvar FieldTextStateless = /*#__PURE__*/function (_Component) {\n  _inherits(FieldTextStateless, _Component);\n\n  var _super = _createSuper(FieldTextStateless);\n\n  function FieldTextStateless() {\n    var _this;\n\n    _classCallCheck(this, FieldTextStateless);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"input\", void 0);\n\n    _defineProperty(_assertThisInitialized(_this), \"setInputRef\", function (input) {\n      _this.input = input;\n\n      _this.props.innerRef(input);\n    });\n\n    return _this;\n  }\n\n  _createClass(FieldTextStateless, [{\n    key: \"focus\",\n    value: function focus() {\n      if (this.input) {\n        this.input.focus();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return /*#__PURE__*/React.createElement(Wrapper, null, !this.props.isLabelHidden && /*#__PURE__*/React.createElement(Label, {\n        htmlFor: this.props.id,\n        isDisabled: this.props.disabled,\n        isLabelHidden: this.props.isLabelHidden,\n        isRequired: this.props.required,\n        label: this.props.label || ''\n      }), /*#__PURE__*/React.createElement(Base, {\n        invalidMessage: this.props.invalidMessage,\n        isCompact: this.props.compact,\n        isDisabled: this.props.disabled,\n        isFitContainerWidthEnabled: this.props.shouldFitContainer,\n        isInvalid: this.props.isInvalid,\n        isReadOnly: this.props.isReadOnly,\n        isRequired: this.props.required,\n        isValidationHidden: this.props.isValidationHidden\n      }, /*#__PURE__*/React.createElement(Input, {\n        autoComplete: this.props.autoComplete,\n        autoFocus: this.props.autoFocus,\n        disabled: this.props.disabled,\n        form: this.props.form,\n        id: this.props.id,\n        innerRef: this.setInputRef,\n        isMonospaced: this.props.isMonospaced,\n        maxLength: this.props.maxLength,\n        min: this.props.min,\n        max: this.props.max,\n        name: this.props.name,\n        onBlur: this.props.onBlur,\n        onChange: this.props.onChange,\n        onFocus: this.props.onFocus,\n        onKeyDown: this.props.onKeyDown,\n        onKeyPress: this.props.onKeyPress,\n        onKeyUp: this.props.onKeyUp,\n        pattern: this.props.pattern,\n        placeholder: this.props.placeholder,\n        readOnly: this.props.isReadOnly,\n        required: this.props.required,\n        spellCheck: this.props.isSpellCheckEnabled,\n        type: this.props.type,\n        value: this.props.value\n      })));\n    }\n  }]);\n\n  return FieldTextStateless;\n}(Component);\n\n_defineProperty(FieldTextStateless, \"defaultProps\", {\n  compact: false,\n  disabled: false,\n  isInvalid: false,\n  isReadOnly: false,\n  isSpellCheckEnabled: true,\n  onChange: function onChange() {},\n  required: false,\n  type: 'text',\n  isValidationHidden: false,\n  innerRef: function innerRef() {}\n});\n\nexport { FieldTextStateless as FieldTextStatelessWithoutAnalytics };\nvar createAndFireEventOnAtlaskit = createAndFireEvent('atlaskit');\nexport default withAnalyticsContext({\n  componentName: 'fieldText',\n  packageName: packageName,\n  packageVersion: packageVersion\n})(withAnalyticsEvents({\n  onBlur: createAndFireEventOnAtlaskit({\n    action: 'blurred',\n    actionSubject: 'textField',\n    attributes: {\n      componentName: 'fieldText',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  }),\n  onFocus: createAndFireEventOnAtlaskit({\n    action: 'focused',\n    actionSubject: 'textField',\n    attributes: {\n      componentName: 'fieldText',\n      packageName: packageName,\n      packageVersion: packageVersion\n    }\n  })\n})(FieldTextStateless));","import styled, { css } from 'styled-components';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { N200, DN90, N60, DN300, red } from '@atlaskit/theme/colors';\nvar spacing = gridSize();\nvar fontSize = 12;\nvar innerHeight = spacing * 2; // 16px\n\nvar lineHeight = innerHeight / fontSize;\n\nvar getPadding = function getPadding(_ref) {\n  var firstChild = _ref.firstChild,\n      inlineEdit = _ref.inlineEdit;\n  var right = 0;\n  var bottom = spacing / 2;\n  var left = 0;\n  var top = spacing * 2.5;\n\n  if (inlineEdit) {\n    bottom = 0;\n    left = spacing;\n    top = spacing;\n  }\n\n  if (firstChild) {\n    top = spacing / 2;\n  }\n\n  return css([\"\\n    padding: \", \"px \", \"px \", \"px \", \"px;\\n  \"], top, right, bottom, left);\n};\n\nexport var LabelWrapper = styled.label.withConfig({\n  displayName: \"Label__LabelWrapper\",\n  componentId: \"sc-17towfw-0\"\n})([\"\\n  display: block;\\n\"]);\nvar getColor = themed({\n  light: N200,\n  dark: DN90\n});\nvar getDisabledColor = themed({\n  light: N60,\n  dark: DN300\n});\nexport var LabelInner = styled.div.withConfig({\n  displayName: \"Label__LabelInner\",\n  componentId: \"sc-17towfw-1\"\n})([\"\\n  color: \", \";\\n  font-size: \", \"px;\\n  font-weight: 600;\\n  line-height: \", \";\\n  \", \";\\n\\n  \", \";\\n\"], function (props) {\n  return props.isDisabled ? getDisabledColor(props) : getColor(props);\n}, fontSize, lineHeight, getPadding, function (p) {\n  return p.isHidden && 'display: none;';\n});\nexport var RequiredIndicator = styled.span.withConfig({\n  displayName: \"Label__RequiredIndicator\",\n  componentId: \"sc-17towfw-2\"\n})([\"\\n  color: \", \";\\n  padding-left: 2px;\\n\"], red);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport { LabelWrapper, RequiredIndicator, LabelInner } from '../styled/Label';\n\nif (process.env.NODE_ENV !== 'production' && !process.env.CI) {\n  // eslint-disable-next-line no-console\n  console.warn('The @atlaskit/field-base package has been deprecated. Please use the Form/Textfield/Textarea/etc packages instead.');\n}\n\nvar Label = /*#__PURE__*/function (_Component) {\n  _inherits(Label, _Component);\n\n  var _super = _createSuper(Label);\n\n  function Label() {\n    _classCallCheck(this, Label);\n\n    return _super.apply(this, arguments);\n  }\n\n  _createClass(Label, [{\n    key: \"render\",\n    value:\n    /* eslint-disable jsx-a11y/no-static-element-interactions */\n    function render() {\n      var _this$props = this.props,\n          appearance = _this$props.appearance,\n          children = _this$props.children,\n          htmlFor = _this$props.htmlFor,\n          isFirstChild = _this$props.isFirstChild,\n          isLabelHidden = _this$props.isLabelHidden,\n          isDisabled = _this$props.isDisabled,\n          isRequired = _this$props.isRequired,\n          label = _this$props.label,\n          onClick = _this$props.onClick;\n      /* eslint-disable jsx-a11y/click-events-have-key-events */\n\n      return /*#__PURE__*/React.createElement(LabelWrapper, {\n        htmlFor: htmlFor\n      }, /*#__PURE__*/React.createElement(LabelInner, {\n        isHidden: isLabelHidden,\n        inlineEdit: appearance === 'inline-edit',\n        firstChild: isFirstChild,\n        isDisabled: isDisabled\n      }, /*#__PURE__*/React.createElement(\"span\", {\n        onClick: onClick\n      }, label), isRequired ? /*#__PURE__*/React.createElement(RequiredIndicator, {\n        role: \"presentation\"\n      }, \"*\") : null), children);\n    }\n  }]);\n\n  return Label;\n}(Component);\n\n_defineProperty(Label, \"defaultProps\", {\n  appearance: 'default'\n});\n\nexport { Label as default };","import styled from 'styled-components';\nimport { DN300, N300 } from '@atlaskit/theme/colors';\nimport { themed } from '@atlaskit/theme/components';\nimport { gridSize } from '@atlaskit/theme/constants';\nimport { multiply } from '@atlaskit/theme/math';\nexport default styled.div.withConfig({\n  displayName: \"Group\",\n  componentId: \"sc-1q26u8b-0\"\n})([\"\\n  box-sizing: border-box;\\n  display: block;\\n  margin-top: \", \"px;\\n\\n  &:first-child {\\n    margin-top: 0;\\n  }\\n\"], gridSize);\nexport var Heading = styled.div.withConfig({\n  displayName: \"Group__Heading\",\n  componentId: \"sc-1q26u8b-1\"\n})([\"\\n  align-items: baseline;\\n  color: \", \";\\n  display: flex;\\n  flex: 1 1 auto;\\n  font-weight: normal;\\n  font-size: 14px;\\n  line-height: 1;\\n  margin: 0;\\n  padding: \", \"px \", \"px;\\n\"], themed({\n  light: N300,\n  dark: DN300\n}), gridSize, multiply(gridSize, 1.5));\nexport var HeadingAfter = styled.div.withConfig({\n  displayName: \"Group__HeadingAfter\",\n  componentId: \"sc-1q26u8b-2\"\n})([\"\\n  flex: 0 0 auto;\\n\"]);\nexport var HeadingText = styled.div.withConfig({\n  displayName: \"Group__HeadingText\",\n  componentId: \"sc-1q26u8b-3\"\n})([\"\\n  flex: 1 1 auto;\\n  font-size: 12px;\\n  text-transform: uppercase;\\n\"]);","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\n/* eslint-disable react/prop-types */\nimport React, { PureComponent } from 'react';\nimport Group, { Heading, HeadingAfter, HeadingText } from '../styled/Group';\n\nvar DroplistGroup = /*#__PURE__*/function (_PureComponent) {\n  _inherits(DroplistGroup, _PureComponent);\n\n  var _super = _createSuper(DroplistGroup);\n\n  function DroplistGroup() {\n    var _this;\n\n    _classCallCheck(this, DroplistGroup);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      ariaLabel: _this.props.heading\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidMount\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"componentDidUpdate\", function () {\n      if (_this.props.heading || _this.props.elemAfter) {\n        // eslint-disable-next-line react/no-did-update-set-state\n        _this.setState({\n          ariaLabel: _this.getAriaLabel()\n        });\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getAriaLabel\", function () {\n      var _this$props = _this.props,\n          elemAfter = _this$props.elemAfter,\n          heading = _this$props.heading;\n      var afterText = elemAfter && typeof elemAfter === 'string' ? elemAfter : _this.headingElement && _this.headingElement.textContent;\n      return \"\".concat(heading || '', \" \").concat(afterText || '');\n    });\n\n    return _this;\n  }\n\n  _createClass(DroplistGroup, [{\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          children = _this$props2.children,\n          elemAfter = _this$props2.elemAfter,\n          heading = _this$props2.heading;\n      var ariaLabel = this.state.ariaLabel;\n      return /*#__PURE__*/React.createElement(Group, {\n        \"aria-label\": ariaLabel,\n        role: \"group\"\n      }, heading ? /*#__PURE__*/React.createElement(Heading, {\n        \"aria-hidden\": \"true\",\n        \"data-role\": \"droplistGroupHeading\"\n      }, /*#__PURE__*/React.createElement(HeadingText, null, heading), elemAfter ? /*#__PURE__*/React.createElement(HeadingAfter, {\n        innerRef: function innerRef(r) {\n          _this2.headingElement = r;\n        }\n      }, elemAfter) : null) : null, children);\n    }\n  }]);\n\n  return DroplistGroup;\n}(PureComponent);\n\nDroplistGroup.displayName = 'Group';\nexport default DroplistGroup;","import { createTheme } from '../utils/createTheme';\n\n// Create default global light theme\nvar _createTheme = createTheme(function () {\n  return {\n    mode: 'light'\n  };\n}),\n    Provider = _createTheme.Provider,\n    Consumer = _createTheme.Consumer,\n    useTheme = _createTheme.useTheme;\n\nexport var useGlobalTheme = function useGlobalTheme() {\n  return useTheme();\n};\nexport default {\n  Provider: Provider,\n  Consumer: Consumer\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport React, { createContext, useContext, useCallback } from 'react';\n\n/**\n * createTheme is used to create a set of Providers and Consumers for theming components.\n * - Takes a default theme function; this theme function gets a set of props, and returns tokens\n *  based on those props. An example of this default theme function is one that produces the standard\n *  appearance of the component\n * - Returns three things - a Provider that allow for additional themes to be applied, a Consumer\n *  that can get the current theme and fetch it, and a custom hook - useTheme which provides an alternate (although functionally the same) API\n *  to the Consumer.\n **/\nexport function createTheme(defaultGetTokens) {\n  var emptyThemeFn = function emptyThemeFn(getTokens, props) {\n    return getTokens(props);\n  };\n  /**\n   * Internally, Theme uses React Context, with internal providers and consumers.\n   * The React Context passes only a function that gets props, and turns them into tokens. This\n   * function gets mixed as more Providers with their own themes are added. This mixed function\n   * is ultimately picked up by Consumers, which implement a context consumer internally to fetch\n   * the theme.\n   **/\n\n\n  var ThemeContext = /*#__PURE__*/createContext(defaultGetTokens);\n\n  function useTheme(themeProps) {\n    var theme = useContext(ThemeContext);\n    var themeFn = theme || emptyThemeFn;\n    var tokens = themeFn(themeProps);\n    return tokens;\n  } // The Theme Consumer takes a function as its child - this function takes tokens, and the\n  // return value is generally a set of nodes with the tokens applied appropriately.\n\n\n  function Consumer(props) {\n    var children = props.children,\n        themeProps = _objectWithoutProperties(props, [\"children\"]); // @ts-ignore See issue for more info: https://github.com/Microsoft/TypeScript/issues/10727\n    // Argument of type 'Pick<ThemeProps & { children: (tokens: ThemeTokens) => ReactNode; }, Exclude<keyof ThemeProps, \"children\">>' is not assignable to parameter of type 'ThemeProps'.ts(2345)\n\n\n    var tokens = useTheme(themeProps); // We add a fragment to ensure we don't break people upgrading.\n    // Previously they may have been able to pass in undefined without things blowing up.\n\n    return /*#__PURE__*/React.createElement(React.Fragment, null, children(tokens));\n  }\n  /**\n   * The Theme Provider takes regular nodes as its children, but also takes a *theme function*\n   * - The theme function takes a set of props, as well as a function (getTokens) that can turn props into tokens.\n   * - The getTokens function isn't called immediately - instead the props are passed\n   *    through a mix of parent theming functions\n   * Children of this provider will receive this mixed theme\n   */\n\n\n  function Provider(props) {\n    var themeFn = useContext(ThemeContext);\n    var valueFn = props.value || emptyThemeFn;\n    var mixedFn = useCallback(function (themeProps) {\n      return valueFn(themeFn, themeProps);\n    }, [themeFn, valueFn]);\n    return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n      value: mixedFn\n    }, props.children);\n  }\n\n  return {\n    Consumer: Consumer,\n    Provider: Provider,\n    useTheme: useTheme\n  };\n}"],"sourceRoot":""}